Hey,
ich stehe gerade mal wieder total auf dem Schlauch. Ich arbeite zur Zeit an der UART Empfangsroutine für meinen CAN-Knoten. Der Spaß soll über Interrupt laufen, damit das Hauptprogramm nicht gestört wird.
Der Einfachheit halber habe ich ein einzelnes Testprogramm geschrieben (und weil es viel zu lange dauert das CAN Programm dauernd neu zu flashen.....).
Das Testprogramm sieht so aus:
Das Empfangen usw. klappt auch soweit ganz gut. Nur bei der Select-Case Abfrage macht das Programm nicht das was es soll.Code:'Mikrocontroller $regfile = "m32def.dat" $crystal = 16000000 'Stacks $hwstack = 250 $swstack = 250 $framesize = 500 'UART konfigurieren $baud = 9600 Dim Zeichen As Byte Dim Eingabe As String * 50 Dim Eingabe_overlay(50) As Byte At Eingabe Overlay Dim Buffer_laenge As Byte Declare Sub Auswertung 'Interrupts einstellen Enable Interrupts 'Interrupts aktivieren ' 'Sprungmarke für INT0 On Urxc Uart_recieved Enable Urxc Enable Int0 Do Loop End Sub Auswertung Local Laenge As Byte Local Count As Byte Laenge = Len(eingabe) Print Eingabe; Select Case Eingabe Case "?" : Print "Fragezeichen" Case Else : Print "Falsch" End Select For Count = 0 To Laenge Eingabe_overlay(count) = 0 Next End Sub Uart_recieved: Zeichen = Udr If Zeichen = 13 Then Eingabe = Eingabe + Chr(13) Incr Buffer_laenge Auswertung Elseif Zeichen > 13 Then Eingabe = Eingabe + Chr(zeichen) Incr Buffer_laenge If Buffer_laenge > 49 Then Auswertung End If End If Return
Ich sende via Hexterminal ein 3F(?) und ein 0D(CR) und es wird mir auch mir durch den Print-Befehl auch zurück gegeben.
Allerdings gibt das Hexterminal auch 46 61 6C 73 63 68 0D 0A aus, was laut ASCII-Tabelle ein "Falsch" + CR + LF ist.
Aber wieso wird mir kein "Fragezeichen" zurück gegeben wenn ich ein 3F und 0D sende?
Hier ist nochmal der Screenshot vom Terminal:
Bild hier
Weiß da jemand Rat?
Danke schon mal und einen schönen ersten Advent.







Zitieren

Lesezeichen