Napisałem program sterujący wyświetlaczem LCD. O ile nie problemem jest wyświetlać znaki w kodzie ascii o tyle trudniej jest wyświetlić zawartość zmiennej/rejestru procesora na wyświetlaczu.
Dlatego postanowiłem zająć sie tym zagadnieniem i napisałem coś takiego (wrzucam same procedury ponieważ cały program jest zbyt długi). Procedura wyslij_zmienna jest wywoływana z pętli w której zawartość rejestru data jest zwiększana o 1. I wszystko działa ok ale liczby 19,39,49,59 wyswietlane są jako jakieś śmieci. Czy ktoś może mi pomóc w moim problemie?
Kod: Zaznacz cały
wyslij_znak:
sbi PORTC, RS
rcall strobe
cbi PORTC, RS
ret
wyslij_cyfre:
add data, const
rcall wyslij_znak
sub data, const
ret
dzielenie_10:
mov r21, data
mov r22, r21
lsr r22
lsr r22
mov r23, r21
lsr r23
lsr r23
lsr r23
lsr r23
mov r24, r21
lsr r24
lsr r24
lsr r24
lsr r24
lsr r24
lsr r24
mov r25, r21
lsr r25
lsr r25
lsr r25
lsr r25
lsr r25
lsr r25
lsr r25
lsr r25
sub r21, r22
add r21, r23
sub r21, r24
add r21, r25
lsr r21
lsr r21
lsr r21
ret
wyslij_zmienna:
rcall dzielenie_10
mov r23, data
mov data, r21
rcall wyslij_cyfre
ldi r22, 10
mul data, r22
sub r23, r0
mov data, r23
rcall wyslij_cyfre
ret