Keksdose
02.08.2005, 12:39
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):
'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... 8-[
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):
'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... 8-[