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.
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 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
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.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





Zitieren

Lesezeichen