Luckily with the 8051 instructions we have the MUL AB and the DIV AB commands
If you place 255 into the A register and 100 in the B register
After the DIV AB command A will contain 55 and B will contain 2
save them in R0 & R1 then load A and B with 55 and 10 DIV AB again and save
Code:
clr A
MOV R0, A
MOV R1, A ; clear reg's'
mov A, #0FFh ; 255
mov B, #64h ; 100
DIV AB
mov R0, A ; store A in R0 ( 2)
mov A, B ; get remainder (55)
mov B, #0AH
DIV AB ; / 10
mov R2, A ; save tens elsewhere ( 5)
mov A, B ; get units
mov R1,A ; save in R1
mov A, R2 ; retreive tens
RR A
RR A
RR A
RR A ; shift into high byte
orl A, R1 ; or with units
mov R1, A ; store in R1
Thanks so much for the code.
After posting this, I did google bcd to binary.
Luckily I found a hint too so I just worked backwards.
Actually, it is just a part of our homework's program requirement.
We were tasked to output the decimal equivalent of the 8-bit binary in three seven segment displays.
Included is an ENABLE bit that when it goes from logic 1 to 0, the numbers on the seven segment displays are updated.
question:
I used P0.2, P0.1, and P0.0 as the output for each SSD.
I used P0.3 for the enable bit. (input)
Will it be a problem?
You'll need more than 3 pins to control the SSD; 3 pins (assuming a decoder IC is used) will allow for values from 0..7, but not 8 & 9. A 4th pin will allow the full range for each digit.
You'll need more than 3 pins to control the SSD; 3 pins (assuming a decoder IC is used) will allow for values from 0..7, but not 8 & 9. A 4th pin will allow the full range for each digit.
Sorry I did not make it clear.
P0.2, P0.1, P0.0 controls the common pins of the SSD which in this case are all common anode.
8-bits of P2 is used to control the segments of the SSD including the dot.
I used P0.3 as the enable bit.
My question:
Is it okay to use the same port as input and output?