Hallo,
ich möchte mit einem AT90S2313 mit 4Mhz mit serieller verbindung zu meinem ATMega32 text empfangen und entweder als befehl auswerten oder auf ein LCD schreiben. Hier erst mal der komplette quelltext (wegen vollständigkeit):
Code:'Roboter LCD Modul Version 0.9 Beta" 'Hardware: AT90S2313 $regfile = "2313DEF.dat" 'Quarz definieren $crystal = 4000000 $baud = 4800 Config Serialin = Buffered , Size = 20 Enable Interrupts Declare Sub Lcdwrite(byval Zeichen As Byte) Declare Sub Mainloop() Config Pind.5 = Output Config Pinb.4 = Output Config Pinb.3 = Output Config Pinb.2 = Output Config Pinb.1 = Output Config Pinb.0 = Output Config Pind.6 = Output Config Pind.4 = Output 'Portb.3 = 0 'Read / Write pin Portd.5 = 1 'Beleuchtung einschalten 'Display Variablen Dim Serinput As Integer Dim Leng As Integer Dim Sertext As String * 20 Dim Code As String * 2 'LCD konfigurieren 'Config Lcdmode = Port Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.0 , Db6 = Portd.6 , Db7 = Portd.4 , E = Portb.2 , Rs = Portb.4 Config Lcd = 20 * 4 'LCD initialisieren Initlcd Call Lcdwrite(&B00101100) Waitms 5 Call Lcdwrite(&B00001001) Waitms 5 Call Lcdwrite(&B00101000) Waitms 5 Call Lcdwrite(&B00000110) Waitms 5 Call Lcdwrite(&B00001100) Waitms 5 'Bootscreen Cursor Blink Locate 1 , 1 Lcd " LCD Driver V0.9" Locate 2 , 1 Lcd " 01.08.2005" Locate 3 , 1 Lcd "********************" Locate 4 , 1 Lcd " Loading Driver..." Wait 4 Cls Locate 1 , 1 'Hauptprogramm Sub Mainloop() While Ischarwaiting() = 1 'Bytes empfangen Serinput = Inkey() Sertext = String(1 , Serinput) Code = String(1 , Serinput) Wend 'Steuerbefehle auswerten If Code = "*1" Then Locate 1 , 1 Sertext = "" End If If Code = "*2" Then Locate 2 , 1 Sertext = "" End If If Code = "*3" Then Locate 3 , 1 Sertext = "" End If If Code = "*4" Then Locate 4 , 1 Sertext = "" End If If Code = "*5" Then Portd.5 = 0 Sertext = "" End If If Code = "*6" Then Portd.5 = 1 Sertext = "" End If Code = "" 'Text auf LCD schreiben If Len(sertext) > 0 Then Lcd Sertext Sertext = "" End If 'Auf Input warten Do If Ischarwaiting() = 1 Then Call Mainloop() Loop End Sub 'Schreibt die Initialisierungs - Bits zum LCD Sub Lcdwrite(byval Zeichen As Byte) ' Höherwertiges Nibble setzen If Zeichen.4 = 1 Then Portb.1 = 1 Else Portb.1 = 0 If Zeichen.5 = 1 Then Portb.0 = 1 Else Portb.0 = 0 If Zeichen.6 = 1 Then Portd.6 = 1 Else Portd.6 = 0 If Zeichen.7 = 1 Then Portd.4 = 1 Else Portd.4 = 0 ' Höherwertiges Nibble übertragen Portb.2 = 1 Waitms 1 Portb.2 = 0 Waitms 1 ' Niederwertiges Nibble setzen If Zeichen.0 = 1 Then Portb.1 = 1 Else Portb.1 = 0 If Zeichen.1 = 1 Then Portb.0 = 1 Else Portb.0 = 0 If Zeichen.2 = 1 Then Portd.6 = 1 Else Portd.6 = 0 If Zeichen.3 = 1 Then Portd.4 = 1 Else Portd.4 = 0 ' Niederwertiges Nibble übertragen Portb.2 = 1 Waitms 1 Portb.2 = 0 Waitms 1 End Sub
Das problem was ich habe ist das wahrscheinlich die mainloop mehrmals komplett durchläuft und nicht nur einmal weil die zeichen nicht schnell genug ankommen das nur die while wend schleife die zeichen ausm buffer holt.
So wie ich das jetzt geschrieben hab sollte es doch normalerweise funzen !? Aber die befehle werden trotzdem auf das display geschrieben und nicht ausgewertet ! Also kein sprung in die nächste zeile usw.
Kann mir irgendjemand helfen ? Bin am verzweifeln...![]()







Zitieren

Lesezeichen