Ja, vom Computer aus funktioniert es genau wie es soll!
- - - Aktualisiert - - -
Soooooooooooooooooooooooooooooooooo erstmal geschafft!!!
für alle: wenn man UART über Interrups also config serialin / config serialout nutzen will, dann muss man sich offenbar doch um den Puffer kümmern!
Zumindest um serialin!
Es ist notwendig diesen zu leeren!
Warum Bascom das nicht selber macht, weiß ich nicht, dafür reicht mein Verständnis nicht.
Ob es sich bei serialout als notwenidig erweisen wird, weiß ich noch nicht. Bisher geht es ohne.
Das clear serialin, an der richtigen Stellen, nämlich nicht in der ISR, hat dafür gesorgt, dass es jetzt geht.
Meine Lösung für eine einfache Kommunikation zwischen zwei Microcontrollern oder einem und einem Computer:
Code:
$regfile = "m8adef.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000
$baud = 4800
Declare Sub Serial0charmatch()
Config Serialin = Buffered , Size = 30 , Bytematch = 13
Config Serialout = Buffered , Size = 30
Enable Interrupts
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
Db7 = Portd.7 , E = Portd.3 , Rs = Portb.6
Config Lcd = 16 * 1a
Dim Empfangenedaten As Long
Dim Umrechnen As Long
Dim Datenempfangen As Long
Cls
Lcd "start"
Empfangenedaten = 10
Datenempfangen = 0
'als Start der KOmmunikation muss ein Chip die ersten Daten schicken, etwas Wartezeit, um sicher zustellen, das beide Chips laufen
Waitms 1000 ' beim zweiten chip auskommentieren
Print Empfangenedaten ' beim zweiten chip auskommentieren
Do
If Datenempfangen = 1 Then 'nur wenn Daten empfangen wurden, wird etwas damit getan
Waitms 1000
Cls
Lcd Empfangenedaten 'die Daten werden unverändert auf einem LCD ausgegeben
Umrechnen = Empfangenedaten + 1
Print Umrechnen ' die veränderten Daten werden zurückgeschickt
Lcd Umrechnen
Datenempfangen = 0
Clear Serialin 'der empfangspuffer muss geleert werden
End If
Loop
End
Sub Serial0charmatch()
Local Incoming_data As Long
Input Incoming_data Noecho
Empfangenedaten = Incoming_data
Datenempfangen = 1 'hinweis: es wurden daten empfangen, tue etwas
End Sub
End
Dieser Code tut nichts anderes als eine jeweils um 1 erhöhte Zahl zwischen zwei Chips hin und her zu schicken.
danke für all eure Hilfe!
Wenn ich nichts übersehen habe, war es das erstmal
Vielleicht hilft dies ja dem einen oder anderen.
edit: soviel zu "ich mach heute noch sport.. muss nur kurz das problemchen lösen"
Crypi
Lesezeichen