Archiv verlassen und diese Seite im Standarddesign anzeigen : Com Problem
Goldenflash
13.09.2006, 18:01
Hallo,
Ich hab mir mit Bascom 'nen Code zum senden vom AVR an den PC geschrieben und das funktioniert auch! Sieh im übrigen so aus:
$regfile = "4433def.dat"
$crystal = 4000000
$baud = 9600
Do
Print "Hello, world!";
Waitms 300
Loop
End
In meinem Code der etwas vom PC empfängt steckt aber irgendwo der Wurm :( zumindest empfängt der PC keine Antwort.
$regfile = "4433def.dat"
$crystal = 4000000
$baud = 9600
Dim i As Byte
Do
If USR.RXC = 1 Then
i = UDR
Select Case i
Case "H"
Print "HALLO"
Case "h"
Print "hallo"
Case Else
Print "Error!"
End Select
End If
Loop
End
Was mache ich falsch?
Is glaub ich nur was kleines.
Danke schonmal
USR.RXC = 1 ... kann man so machen,
ich würd aber eher auf Interrupt dann gehen
also
on urxc Empfangsroutine
enable urxc
enable interrupts
do
loop
end
Empfangsroutine:
i = UDR
Select Case i
Case 104:
Print "HALLO"
Case 72:
Print "hallo"
Case Else
Print "Error!"
End Select
return
end
das mit den "h" und "H" möcht mir auch nicht recht gefallen, weil dein I nämlich ein Byte ist und "h" ein String von der länge eines Bytes. Ich glaub das mag Bascom so nicht haben ... versucht mal mit den ASCII-Codes
h = 104
H = 72
Goldenflash
13.09.2006, 23:01
Hm irgendwie will die ganze Sach noch nicht so ganz :(
Im Wiki hab ich folgenden Code gefunden:
Dim Outpt(24) As Byte At Anywhere Overlay
Dim Outpnt As Byte
Dim Stuff As Byte ' das Zeichen, daß ein stuffing Byte da war
Dim Messg As Byte ' das Zeichen, daß eine Message gestartet wurde
receive_one_char:
if ischarwaiting() = 1 then
Temp = Inkey()
If Stuff = 0 And Temp = "A" Then
Stuff = 1
Else
If Stuff = 1 And Temp <> "A" Then
Stuff = 0 ' Message starten
Messg = 1
Outpnt = 1
Outpt(outpnt) = Temp ' Erstes Zeichen speichern
Incr Outpnt
Else
If Messg = 1 Then
Outpt(outpnt) = Temp ' weiter Zeichen
Incr Outpnt ' speichern
End If
End If
Stuff = 0
End If
End if
Leider versteh ich ihn nicht so ganz, naja eigentlich versteh ich NULL :D.
Gibt es auch eine Möglichkeit einen kompletten String auszulesen?
danke schonmal
hmmm ... ganze Strings .... ja klar, über INPUT
aber ... die Kiste hängt dann in der Programmzeile fest
bis die Eingabe auch wirklich beendet ist.
Das ist nicht gerade eleganter PRogrammierstil, aber es funktioniert.
eleganter gehts über den sog. Ringspeicher und Interrupts.
dim empfangstring as string * 20 ' für z.B. 20 Zeichen zu empfangen
dim empfangbytes(20) as byte at empfangstring overlay
dim zaehler as byte
zaehler=1
dim flag as byte
flag=0
on urxc zeichenempfang:
enable urxc
enable interrupts
do ' Hauptprogrammschleife
if flag=1 then
' Hier kommt dann die Stringverarbeitung rein.
endif
loop
zeichenempfang:
empfangbytes(zaehler)=udr
if empfangbytes(zaehler) = 13 then ' Bei Enter Taste Verarbeitung starten
flag=1
endif
incr zaehler
return
end
Diese Methode hat den Vorteil, das ausserhalb des Zeichenempfangs der Controller noch andere Geschichten machen kann und Programmspeicher wird auch geschont damit.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.