PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : <CR><LF> und die RS232



lanic
13.01.2006, 19:09
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



$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

repi64
13.01.2006, 20:52
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

lanic
13.01.2006, 21:03
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!

lanic
14.01.2006, 12:30
hey klapt jetzt alles danke nochmal diese erfolgserlebnisse sind einfach spitze!

hir nochmal der 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

lanic
06.03.2006, 19:53
ich habe doch noch ein problem!

ich bekomme einen string gesentet nachfolgend <CR><LF>

hier mein 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

repi64
12.03.2006, 13:00
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.