mám tu další oříšek, mám tu převod 16bit binárního čísla přímo na ASCII. Principu rozumím, ale nevímm jak se zbavit těch nepotřebných nul před hodnotou. Když tam mám např číslo, jehož převod je 300 (dec), tak mi to vyzobrazí 00300. Určitě existuje nějaká finta, jak to vyrušit, dokud budou první výsledky v REG "nulové".
Kód: Vybrat vše
d5ascii:
ldi reg, $2F ;Init ASCII conversion ('0'-1)
loop10k:
inc reg ;count up 10k "counts"
subi ZL, $10
sbci ZH, $27
brcc loop10k ;IF >=10000 THEN subtract again
subi ZL, $F0 ;subtract -10000 (add 10000)
sbci ZH, $D8
rcall senddata ;send 10k ASCII char
d4ascii:
ldi reg, $2F ;Init ASCII conversion ('0'-1)
loop1k:
inc reg ;count up 1k "counts"
subi ZL, $E8
sbci ZH, $03
brcc loop1k ;IF >=1000 THEN subtract again
subi ZL, $18 ;subtract -1000 (add 1000)
sbci ZH, $FC
rcall senddata
d3ascii:
ldi reg, $2F ;Init ASCII conversion ('0'-1)
loop100:
inc reg ;count up 100 "counts"
subi ZL, $64
sbci ZH, $00
brcc loop100 ;IF >=100 THEN subtract again
subi ZL, $9C ;subtract -100 (add 100)
sbci ZH, $FF
rcall senddata
;(ZH==0) so ignore ZH from here
d2ascii:
ldi reg, $2F ;Init ASCII conversion ('0'-1)
loop10:
inc reg ;count up 10 "counts"
subi ZL, $0A
brcc loop10 ;IF >=10 THEN subtract again
subi ZL, $F6 ;subtract -10 (add 10)
rcall senddata
mov reg, ZL
d1ascii:
subi reg, $D0 ;convert 1's digit to ASCII
rcall senddata
ldi reg, ' '
rcall senddata ;send out a space
ret