Hier Beitrag "8 Bit binär zu ASCII"
hat Peter Danegger seine wirklich extrem kurze Routine vorgestellt.
Nun, ich brauchte sie bis über 255 hinaus bis max. 999
Ich hätte ja auch BIN2BCD nehmen können und dann in ASCII wandeln
können.
Aber peda's Routine ist so Spitze, dass ich sie als Basis genommen habe
und damit Respekt ausdrücken möchte.
1 | ;********fast 8bit_in_ASCII *** max 999dez ****************
|
2 | ;input: wo_lo,wo_hi = 16 bit Wert,
|
3 | ;output: ASCII-digits wie von peda
|
4 | ;RX6= Hunderter
|
5 | ;RX5= Zehner
|
6 | ;RX4= Einer
|
7 | .def wo_hi = r29
|
8 | .def wo_lo = r28
|
9 | .equ _100 = 0x0064
|
10 |
|
11 | byte_asc:
|
12 | ldi RX6, -1 + '0' ;gleich in ASCII , -1 wegen 1.inc RX6
|
13 | _bcd1: inc RX6
|
14 | subi wo_lo, low(_100) ;subi 100, in 16 bit
|
15 | sbci wo_hi, high(_100)
|
16 | brcc _bcd1 ;so die Hunderter stimmen
|
17 | ;Rest ist minus, darum müssen die Zehner
|
18 | ldi RX5, 10 + '0' ;von 10 runtergezählt werden, bis Rest
|
19 | _bcd2: dec RX5 ;wieder pos. wird, was die Einer sind
|
20 | subi wo_lo, -10 ;also addiere 10 auf, wo_hi ist schon NULL
|
21 | brcs _bcd2
|
22 | sbci wo_lo, -'0' ;Einer nach ASCII wandeln
|
23 | mov RX4,wo_lo ;und nach RX4 bringen
|
24 | ret
|
Bei Nutzung von fertigen Routinen wäre die Vorbereitung länger als der
Code oberhalb.
LG Rudi