-
<CR><LF> und die RS232
Hallo!
ich habe ein problem! ich bekomme von einen controler über die RS232 ein code der sich aus einer 12 stelligen HEX zahl zusammensetzt und hinter der die befehle <CR><LF> sind diesen code möchte ich mit einem µc empfangen und weiterverarbeiten
zum testen habe ich folgendes geschrieben
Code:
$regfile = "2313def.dat"
$crystal = 3686400
$baud = 9600
Ddrd = &B1011110
Portd = &B0100001
Dim A As String * 12
Q:
Input A
If A = "î0FA17F62AD0" Then
Cls
Lcd "Richtig"
Wait 1
Goto Q
Else
Cls
Lcd "Falsch"
Wait 1
Goto Q
End If
End
nun das problem sobalt der code gesentet wirt bekomme ich die meldung im LCD Richtig sende ich den code nocheinmal dann kommt die meldung falsch
sende ich aber erst einen falschen code bekomme ich die meldung falsch.
das muß also was mit diesen <CR><LF> befelen zu tun haben denn wenn ich diese signale vom PC aus sende geht das einwandfrei!
hat jemand eine ide wie mann die befehle aners verarbeiten kann?
würde mcih freuen!
gruß lanic
-
Hi,
der Input Befehl wird ja CR terminiert. Deshalb geht das ja auch beim ersten mal. Bei dem nächsten Durchlauf ist ja noch dein LF im Buffer und klebt am Anfang deines Strings.
Kannst ja mit ISCHARWAITING schauen ob was im Buffer ist und dann mit INKEY rausfragen (ggf. mit FOR NEXT falls es mehr als ein Byte ist).
Vielleicht kennt jemand eine Möglichkeit wie mann den Buffer einfach Cleart, unabhängig davon ob was im Buffer ist oder nicht.
P.S. da versuche ich jetzt schon zum 3. mal die Antwort zu schicken.
Hab die leider erst vor dem 2. Sendeversuch in der Zwischenablage gesichert :x
-
sowas habe ich mir fast gedacht! =P~ das ding hängt also am anfang meines Strings!
danke dir jetzt versuch ich mich morgen mal mit den neuen befelen die du mir geschrieben hast!
währe natürlich echt gut wenn mir jemant eine befehl sagen könnte wo mit mann den pufer löscht!
-
hey klapt jetzt alles danke nochmal diese erfolgserlebnisse sind einfach spitze!
hir nochmal der code
Code:
$regfile = "2313def.dat" 'AT90S2313
$crystal = 3686400
$baud = 9600 'Quarz: 3.6864 MHz
Ddrd = &B1011110 'Ausgang konfigurieren
Portd = &B0100001
Dim A As String * 12
Dim C As Byte
Cls
Cursor Off Noblink
Q:
C = Inkey()
If C = 0 Then
Goto B
Else
Goto Q
End If
B:
Input A
If A = "Œ8401D16B625" Then
Cls
Lcd "Richtig"
Wait 1
Goto Q
Else
Cls
Lcd "Falsch"
Wait 1
Goto Q
End If
End
ich lese jetzt den speicher einfach aus solange er lehr ist und erst dann gehts weiter.
wenn noch jemand ne ide hat wie es einfacher geht bin ich dankbar.
gruß Lanic
-
ich habe doch noch ein problem!
ich bekomme einen string gesentet nachfolgend <CR><LF>
hier mein code:
Code:
$regfile = "2313def.dat"
$crystal = 3686400
$baud = 9600
Ddrd = &B0011100
Dim A As String * 12
Dim B As Byte
Do
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Neu:
B = Inkey()
If B = 0 Then
Goto Gut
Else
Goto Neu
End If
Gut:
Input A
If A = "Œ0104f054FA9" Then
Portd.3 = 0
Portd.2 = 0
Waitms 500
Else
If A = "Œ01f3B986CB9" Then
Portd.4 = 0
Portd.2 = 0
Waitms 500
End If
End If
Loop
mein problem ist wenn ich die netzspannung trenne und wider einschalte geht nichts resete ich die den chip einmal läuft alles wie geschmiert ich kann mir das nicht erklären.
kann mir jemand sagen wo mein gedanklen fehler ist?
danke Nico
-
Das hört sich nach einem Reset Problem an. Wie hast du den Reset beschaltet? Der 2313 läuft ja noch mit 1,8V. Solange deine Netzteilelkos nicht leer sind, läuft der µC noch.
Kannst ja einen Hardware Reset mit R, C und Diode beschalten oder aber die Brown Out Detection per Fusebit aktivieren und den BODLevel für die verwendete Spannung einstellen.