Sida 6 av 6

Postat: 8 december 2006, 11:26:34
av Nisse
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

Postat: 8 december 2006, 11:59:54
av Nisse
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