Gast
#2774077
Eine Frage, es geht um USAR Zeichenempfang und gleichzeitige Umwandlung
vom empfangenen ASCII-Zeichen in dezimale Zahl. Wenn ein Zeichen
empfangen wurde, dann liegt es im UDR, es wird Interrupt ausgelöst. Die
Frage: kann empfangenes ASCII-Zeichen in der Interrupt-Routine in
dezimale Zahl umgewandelt werden, bevor nächstes Zeichen ankommt?
//--- Interrupt-Routine-----------
int_rxc1:
push temp1
push temp2
push temp3
in temp2, UDR ; empfangenes Byte lesen,
subi temp,'0' ; Umwandlung in Dezimal
ldi temp1,100; Multiplikator
//---16Bit*8bit temp3-Highwert temp2.Lowwert;
temp1-Multiplikator;Ergebnis in temp4(low),5,6
rcall mul_16x8
pop temp3
pop temp2 ; temp wiederherstellen
pop temp1
reti ; Interrupt beenden
;16Bit*8bit temp3-Highwert temp2.Lowwert; temp1-Multiplikator;Ergebnis
in temp4,5,6
mul_16x8:
clr temp4
clr temp5
clr temp6
mul temp2,temp1 ; Multipliziere LSB
mov temp4,R0 ; kopiere Ergebnis in Ergebnisregister (Byte 1 des
Ergebnisses)
mov temp5,R1 ;Byte 2 des Ergebnisses
mul temp3,temp1 ; Multiplizere MSB
mov temp6,R1 ; Kopiere MSB des Ergebnisses zum Ergebnis-Byte 3
add temp5,R0 ; Addiere LSB des Ergebnisses zum Ergebnis-Byte 2
brcc NoInc ; Wenn Carry nicht gesetzt, springe
inc temp6 ; erhoehe Ergebnis-Byte 3
NoInc:
ret