Flytande medelvärde i avr

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Inlägg 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
Användarvisningsbild
Nisse
Inlägg: 908
Blev medlem: 9 juli 2006, 23:25:46
Ort: Kumla

Inlägg 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 
Skriv svar