Kampi
02.12.2012, 11:20
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:
'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
Das Empfangen usw. klappt auch soweit ganz gut. Nur bei der Select-Case Abfrage macht das Programm nicht das was es soll.
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:
http://img850.imageshack.us/img850/403/hexterminal.png (http://imageshack.us/photo/my-images/850/hexterminal.png/)
Weiß da jemand Rat?
Danke schon mal und einen schönen ersten Advent.
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:
'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
Das Empfangen usw. klappt auch soweit ganz gut. Nur bei der Select-Case Abfrage macht das Programm nicht das was es soll.
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:
http://img850.imageshack.us/img850/403/hexterminal.png (http://imageshack.us/photo/my-images/850/hexterminal.png/)
Weiß da jemand Rat?
Danke schon mal und einen schönen ersten Advent.