USAR Zeichenempfang und gleichzeitige Umwandlung

Gast #2774077
Lesenswert?

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
Gast #2774088
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren