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
Alex schrieb: > Die Frage: kann empfangenes ASCII-Zeichen in der Interrupt-Routine in > dezimale Zahl umgewandelt werden, bevor nächstes Zeichen ankommt? Das kommt auf die Baudrate und auf die Leistungsfähigkeit des Prozessors drauf an. Außerdem wird es nicht bei der Umwandlung bleiben, da mit dem erzeugten String sicher irgendetwas passieren muß. Sonst könnte man sich die Umwandlung sparen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.