help with converting numbers to letters in 8051 assembly

Discussion in '8051/8951' started by Greital, Mar 26, 2016.

Tags:
1. GreitalNew Member

Joined:
Mar 8, 2016
Messages:
10
Likes:
0
hi,
I'm trying to complete my project in assembly 8051 , and thanks to all of you I completed the 1st phase
now I'm stuck in the 2nd phase

I should convert a number to its letters --->> for example if I put R3 = #31 it should print thirty one

I know I had to make an arrays:
1. single digit (one to nine)
2. double digit (eleven to nineteen)
3. tens digit (ten , twenty, thirty, ..........., ninety)

since the range from 1 - 99

and I know this function involve with division , but I don't know how to begin with it and check for each state

I need an explanation for the procedures ---> so please don't think I came here just to have the code

if the code is provided it will help alot, but if not it's ok since I need to understand it

Joined:
Mar 28, 2011
Messages:
9,310
Likes:
914
Location:
Rochdale UK
Hi Greital! I try to help but you don't seem to give feedback!! You didn't respond to my last help... There are exmples in my article list... R3 = #31 will only print ascii '1' if you are in hex radix otherwise use R3 = #31h or R3 = #0x31..

As for printing ascii representation of numbers.. Take 0~999:

out (number / 100) + 0x30
out (number%100)/10 + 0x30
out (number % 10)

% = modulus.... When dividing AB.. A holds the Number and B holds the modulus!!

3. GreitalNew Member

Joined:
Mar 8, 2016
Messages:
10
Likes:
0
alot of things I need to do at the same time --->>> I hope you can accept my apology

I know I should divide and A holds the number an B the remain (module)
but what is the next step , how I can pick a specific string from the ROM of the specific number I put in R3 for example

please any help is appreciable and forgive me for what happen last time

4. DaveNew Member

Joined:
Jan 12, 1997
Messages:
-
Likes:
0

Joined:
Mar 28, 2011
Messages:
9,310
Likes:
914
Location:
Rochdale UK

So what do you need to do... The last thread was a prime number sort!!

If you want to print a number from 0~99 its very easy on the 8051..

R3 holds a number.. R2 and R1 reserved for 10 and unit

move R3 into A
move 10 into B
then DIV AB

Add 0x30 to A and store in R2
Move B int A and add 0x30 then store in R1.

Code (asm):

\$MOD51
ORG  0
JMP  START

START:
MOV R1,#0     ; clear result
MOV R2,#0     ;
MOV R3,#56     ; Pick a number
MOV A,R3
MOV B,#10
DIV AB       ; Split count
ADD A,#0x30     ; ASCII -> R1
MOV R1,A
MOV A,B
ADD a,#0x30     ; ASCII -> R2
MOV R2,A

DONE:   JMP DONE

END

• Thanks x 1
6. GreitalNew Member

Joined:
Mar 8, 2016
Messages:
10
Likes:
0
in this phase I have to show a number stored in R3 for example as letters
for example if I put R3=#31 ---> it should print thirty one in the LCD -->> I don't know how to generate the letters out of the numbers that's my problem

in your code, which part is involved getting the letters from the ROM for the number provided ??

7. vananNew Member

Joined:
Jun 14, 2016
Messages:
8
Likes:
0
Location:
Chennai
Hi,
In the code results are stored in R1 (tens) and R2,(units) all are in ASCII format it is not numerical i.e., R1 holds #35 and R2 holds #36 ( it is not 5 tens and 6 units) in the ASCII table 0 to 9 equals to 30 to 39 in the ASCII format. Now if you already made LDC initialization, it is very easy to show content of R1,R2 LCD like this

MOV LCD_data_port,R1 ; tens first
MOV LCD_data_port,R2 ; the units first
the above data transfer only as data not as command