Hier nochmal in "zerhackstückselt" und mit Einrückungen
Immerhin sind mir noch sinnvolle Änderungen eingefallen (der Code ist nicht richtig kompatibel zu den Routinen oben).
Hier zum Senden. In der Hauptschleife, die jetzt die ganze Zeit das gleiche sendet, fügst du dann ein, was auch immer du dir als Anwendung überlegt hast.
Code:
$regfile = "2313def.dat" 'AT90S2313 natürlich muss hier die Definitionsdatei für deinen AVR hin
$crystal = 8000000 'Und hier deine Taktfrequenz
'Konstanten
Const Startbyte = 00000001
Const Stopbyte = 00000011
'Variablen
Dim Zaehl As Byte : Dim Temp As Byte
Dim Zusenden As Byte
Ports sind willkürlich gewählt
Ddrb.1 = 1 'PortB.1 auf Ausgang
Do
Zusenden = 54 'Sendet erstmal einfach jede Sekunde 54
Gosub Senden
Waitms 760 'Wartet den Rest der Sekunde, den das Senden nicht gedauert hat
Loop
Senden:
Temp = Zusenden 'Zu sendendes Byte sichern, da die Variable Zusenden mehrfach benutzt wird
Zusenden = Startbyte
Gosub Bytesenden
Zusenden = Temp
Gosub Bytesenden
Zusenden = Stopbyte
Gosub Bytesenden
Return
Bytesenden:
For Zaehl = 0 To 7
Portb.1 = Zusenden.zaehl
Waitms 10
Next
return
End
Und hier zum Empfangen (in der Hauptschleife kannst du wieder die gewünschte Auswertung einfügen.)
Code:
$regfile = "2313def.dat" 'AT90S2313 natürlich muss hier die Definitionsdatei für deinen AVR hin
$crystal = 8000000 'Und hier deine Taktfrequenz
'Konstanten
Const Stopbyte = 00000011
'Variablen
Dim Fehler As Bit
Dim Zaehl2 As Byte : Dim Temp As Byte 'Nur zum Zaehlen im Interrupt - nicht woanders benutzen, da es plötzlich auf 7 wechseln könnte. Temp ändert sich auch(höchstwahrscheinlich) bei jedem Interrupt
Dim Gelesen As Byte
Enable Int0
Config Int0 = Falling
On Int0 Onint0 Nosave
Enable Interrupts
Ddrd.2 = 0 'PortD.2 auf Eingang - Der Port sollte zu dem Interrupt gehören, über den empfangen wird
Do
If Gelesen = 4 Then Portb.5 = 1 Else Portb.5 = 0 'Hier kannst du den empfangenen Wert auswerten
Loop
Onint0: 'löst das erste mal aus, wenn das Startbyte vorbei ist(dafür würde auch ein Bit genügen. Ist schlecht für die Fehlerkorrektur...)
Waitms 5 'jetzt sind wir in der Mitte des ersten Datenbits...
Gosub Bytelesen 'und lesen die anderen
Temp = Gelesen 'Hier sind wir in der Mitte des ersten Bit des Stopbytes...
Gosub Bytelesen ' ...und lesen es
If Gelesen <> Stopbyte Then Fehler = 1 Else Fehler = 0 'Für ein Minimun an Fehlererkennung kannst du in Fehler abfragen, ob das Stopbyte korrekt empfangen wurde
Gelesen = Temp 'In Gelesen steht jetzt der empfangene Wert
Waitms 5
Return
Bytelesen:
For Zaehl2 = 0 To 7
Gelesen.zaehl2 = Portd.2
Waitms 10
Next
Return
End
PS: Deine Antwort kam so schnell, dass ich mir kaum vorstellen kann, dass du wirklich den ganzen Code durchgegangen bist und in der Hilfe alles nachgeschlagen hast, was nicht klar war.
Lesezeichen