So, ich hab jetzt noch mal einige Änderungen vorgenommen:
Code:
$regfile = "M8def.dat" '.dat-file ATmega8'
$crystal = 8000000 'Taktfrequenz 8MHz'
$hwstack = 350 'Größe Hardwarestack'
$swstack = 350 'Größe Softwarestack'
$framesize = 200 'Größe Frame'
''$lib "i2c_twi.lbx" ' Für Hardware TWI
$baud = 19200 'Baudrate UART
Declare Sub Serial0charmatch()
Declare Sub Verarbeiten()
Declare Sub Setzen()
''Config Scl = Portc.5 'SCL-Pin
''Config Sda = Portc.4 'SDA-Pin
''Config Twi = 400000 'Clockspeed für SCL
''Twcr = &B00000100 'TWI einschalten
''Const Pcf_write = &H39 'Adresse jeelabs LuxPlug
''Const Pcf_read = &H40
''I2cinit 'SCL und SDA initialisieren
Config Serialin = Buffered , Size = 4 , Bytematch = 37 '37=%
Enable Interrupts
Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Portb.0 = Output 'Kontroll-LED
Config Portd.7 = Output '1. schaltbare LED
Config Portd.6 = Output '2. schaltbare LED
Dim I As Byte 'Splitting der Hauptschleife
Dim Incoming_data As String * 4 'UART Buffer
Dim Port As String * 2 'Portnummer (String)
Dim Wert As String * 2 'Wert -> Port (String)
Dim B_port As Byte 'Portnummer (Wert)
Dim B_wert As Byte 'Wert -> Port (Wert)
'Dim Flag12 As Bit 'Zustand Pin 12
'Dim Flag13 As Bit 'Zustand Pin 13
B_port = 50
B_wert = 49
Cls
Cursor On Blink
Lcd "USB-IO_plus"
Waitms 150
Locate 2 , 1
Lcd "."
Waitms 150
Locate 2 , 2
Lcd "."
Waitms 150
Locate 2 , 3
Lcd "."
Waitms 150
Locate 2 , 4
Lcd "initialisiert"
Do
Toggle Portb.0 'Blinkende LED zur Kontrolle des Programmdurchlaufes
For I = 0 To 200
Waitms 1
Next I
Setzen
'Print "Port " ; B_port ; " Wert " ; B_wert 'Ausgabe zu Debuggingzwecken
Loop
End 'end program
Sub Serial0charmatch()
Input Incoming_data Noecho ' Daten aus Buffer auslesen
Verarbeiten
Clear Serialin ' Buffer leeren
End Sub
Sub Verarbeiten()
Port = Left(incoming_data , 2) 'Byte 1 und 2 extrahieren
Wert = Mid(incoming_data , 3 , 2) 'Byte 3 und 4 extrahieren
B_port = Val(port) 'String zu Wert konvertieren
B_wert = Val(wert)
End Sub
Sub Setzen()
Select Case B_port 'zu setzenden Pin auswählen
Case 50 : If B_wert = 49 Then
Portd.6 = 1
Gosub Print_on
Elseif B_wert = 50 Then
Portd.6 = 0
Gosub Print_off
End If
Case 51 : If B_wert = 49 Then
Portd.7 = 1
Gosub Print_on
Elseif B_wert = 50 Then
Portd.7 = 0
Gosub Print_off
End If
Case Else : !nop
End Select
End Sub
Print_on:
Print "Pin set high"
B_port = 0
B_wert = 0
Return
Print_off:
Print "Pin set low"
B_port = 0
B_wert = 0
Return
Mir scheint es so, als ob mein Programm nicht auf das ASCII Zeichen % also Dezimal 37 reagiert, obwohl ich das so festgelegt habe. Und das komische an der Sache ist, dass es auch schon mal funktioniert hat!
Und trotz meinem Noecho kommt immer mal wieder das, was ich sende zurück. Habs heut mehrmals kompiliert und auf den µC gebrannt. Ein mal kam nichts zurück, sonst kam immer das gesendete zurück, obwohl ich diesbezüglich gar nichts am Code geändert hab. Ich bin echt langsam ratlos.
Wär toll, wenn sich hier mal jemand die Zeit nehmen könnte und kurz über meinen Code schauen und mir nen Tipp geben wo ich was ändern muss...
Lesezeichen