+ Post New Thread
Results 1 to 9 of 9

31st January 2005, 17:42 #1
 Join Date
 Nov 2004
 Posts
 451
 Helped
 24 / 24
 Points
 4,355
 Level
 15
32bit div 32bit for 8051
Hi friends,
please, help me for a math problem, i need to calculate:
(55299539) / ((a*100 + b)*61375 +c)
where a = 0 to 8
b= 0 to 100
c = 0 to 61375
using 89c51 assembly progrmming. what algorithm should i use?
can anyone please provide me a code?
thank you.

31st January 2005, 17:42

31st January 2005, 22:00 #2
bit math
http://www.8052.com/codelib.phtml
Has some very nice code snippits. In your case I'd examine this library a bit closer:
http://www.8052.com/codelib/math8051.asm
It has 8, 16 and 32 bit subtraction, multiplication, and division (signed and unsigned). Has good comments, should be worthwile...
Happy coding!

1st February 2005, 07:23 #3
 Join Date
 Aug 2004
 Posts
 107
 Helped
 3 / 3
 Points
 2,627
 Level
 11
rpm 60 pulses per revolution 8052
Hi
It's very simple.
Copy your function into new project in C compiler as Keil, IAR...
Unassembly for code.

1st February 2005, 10:54 #4
 Join Date
 Oct 2004
 Location
 West Coast
 Posts
 7,942
 Helped
 2318 / 2318
 Points
 74,061
 Level
 66
89c51 basic registers
As all numbers in your eqasion are decimal and the microcontroller will perform calculations on HEX numbers you will have to convert these numbers from decimal to HEX.
With numbers up to 255d there is no problem ( a and b).
With big costance such as 55299539 you can use windows calculator and convert them to HEX:
55299539 d = 03h 4Bh 0CDh 0D3h
61375 d = 0EFh 0BFh
But for c you will need DEC to HEX converter subroutine. Try to find it somewhere, if not I did it some time before and you can have it..
Having these numbers converted try to find 40bit/24bit division, but first you will have to calculate the value in brackets using 32bit MUL and SUM subroutines..
Little bit long but not impossible..

1st February 2005, 10:54

1st February 2005, 15:44 #5
 Join Date
 Nov 2004
 Posts
 451
 Helped
 24 / 24
 Points
 4,355
 Level
 15
32 bit math routine for 8051
Thanks a lot for replying.
"Ianp" i think i need routines for 32bit division also. actually i want to design a rpm meter (tachometer) ranging from 1 rpm to 10000 rpm. i'm planning to use 11.0592mhz xtal, and a disc mounted on motor shaft having one hole with IR encoderdecoder . for this if i run counter between two succesive pulses i obtain maximum readibilty of 843.4 rpm, any speed slower than this will make the counter overflow. so for 1 rpm i plan to make cascading with two more registers (R1, R0 one upto 100 and other upto 8 ) , which increments after each overflow then second register increments. so,
60 * 1000000 * 1000
 = rpm
[(R0*100 + R1) * 61444 + Counter0] * 1085
AM I GOING THE RIGHT WAY, Please Help ME.
Thanking You in Anticipation.

2nd February 2005, 03:01 #6
 Join Date
 Oct 2004
 Location
 West Coast
 Posts
 7,942
 Helped
 2318 / 2318
 Points
 74,061
 Level
 66
math functions for 89c51
For motor RPM you don't need very complicated calculatons..
First you need 60sec time base and I don't want to repeat this issue once more; you will find it in this forum under "1 second Interrupt from 8051?" (search "1s AND 8051")
Once you have the 1s time base multiply it by 60 for 1min. For 1rpm you will need at least 1m time base..
And now just count pulses from the motor shaft..
The count of pulses over 1m is the RPM.
You will need 2 registers to obtain the 10000 mark..
So the mathematical operations involved are:
SUM to calculate Time Base
SUM to count pulses.

2nd February 2005, 04:01 #7
 Join Date
 Sep 2004
 Posts
 661
 Helped
 74 / 74
 Points
 21,612
 Level
 35
calculation of timer for 89c51
An option (more expensive):
Pulse from encoder > frequency to voltage (IC, e.g.VFC320 from TI/BurrBrown) > ADC > 8051

2nd February 2005, 18:18 #8
 Join Date
 Nov 2004
 Posts
 451
 Helped
 24 / 24
 Points
 4,355
 Level
 15
bit revolution calculation
Thanks a lot for replying. "Ianp" i think the method you told is no doubt very correct, but i think the refreshing rate would be 1 minute which would be to slow. right? and the error could increase upto 1 rpm !!!

2nd February 2005, 18:18

3rd February 2005, 01:48 #9
 Join Date
 Oct 2004
 Location
 West Coast
 Posts
 7,942
 Helped
 2318 / 2318
 Points
 74,061
 Level
 66
code 89c51 calculator
You can do it every 0.1s, 1s etc. and mulitply result by 600, 60 ....
Insread o having only 1 hole in your encoder you can have 2,3,4,.. holes and this will give you several pulses per revolution.
Oftheshelf rotary encoders have 100, 200, .. , 1000+ ppr so the error is reduced to acceptable minimum..
+ Post New Thread
Please login