Tittade lite på att lägga upp dig1, dig2 och dig3 i ram istället. Men det verkar bli lite stökigt.
Därimot så läser jag programmet några gånger och inser att de tre inte behöver sparas. Jag använder enbart de tre registren internt i rutinen bcd:. Alltså kan jag lika gärna ersätta dom med temp.
mvh
Nisse
Flytande medelvärde i avr
Och såhär blev resultatet:
Kod: Markera allt
;--------------------------
; waits for tx ready
;--------------------------
ready_tx:
push temp
ready_tx1:
lds temp, UCSR0A
sbrs temp, UDRE0
rjmp ready_tx1
pop temp
ret
;--------------------------
; Hex to ascii and out rs232
;--------------------------
;input: hex = 8 bit value 0 ... 255
;output via rs232
bcd:
ldi temp, -1 + '0'
_bcd1:
inc temp
subi hex, 100
brcc _bcd1
cpi temp, '0'
brne _bcd3
ldi temp, ' '
_bcd3:
rcall ready_tx
sts UDR0, temp
ldi temp, 10 + '0'
_bcd2:
dec temp
subi hex, -10
brcs _bcd2
cpi temp, '0'
brne _bcd4
ldi temp, ' '
_bcd4:
rcall ready_tx
sts UDR0, temp
sbci hex, -'0'
mov temp, hex
rcall ready_tx
sts UDR0, temp
ret