Was sendest Du denn vom Terminal aus? 0 oder 1 werden ja
nicht als Hex 00 bzw Hex 01 gesendet sondern als ASCII und
darauf sollte Case dann auch prüfen.
Gruß Richard
Hallo Jungs, ich brauch mal wieder eure Hilfe...
Und zwar möchte ich mit einem Terminalprogramm, über RS-232 ein Bit im Controller setzten bzw. rücksetzen.
Hier erstmal der Code:
Wie gesagt, zuerst wird das Byte deklariert und auch gleich gesetzt (hatte es auch schon mit dem SET Befehl im Bascom versucht).Code:$regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 $hwstack = 32 $framesize = 32 $swstack = 32 Dim Stehen As Byte Stehen.0 = 0 Do Dim A As Integer , B As Integer A = 0 B = 0 A = Ischarwaiting() If A = 1 Then B = Inkey() Print "Inkey: " ; B Select Case B Case 48 : Stehen.0 = 0 Case 49 : Stehen.0 = 1 End Select End If If Stehen.0 = 1 Then Call ... 'Sub welches dann gestartet werden soll End If Loop
Je nachdem, welcher CHAR nun im Puffer des UART abgelegt wird, sollte nun die Routine gestartet werden oder nicht.
Wie es auch nicht anders zu erwarten ist, Funktioniert der Code so nicht und meine Erfahrungen in der Richtung sind eher Dünn gesät. Ich vermute, das irgendwas in der Kommunikation zwischen PC und UART nicht passt. Terminal Programm läuft und auch das Flaschen mittels Bootloader geht, PRINT Befehle kommen auch an.
Deshalb meine Frage an euch, wie man es zum Laufen bringen könnte, bzw. was falsch ist.
Danke für eure Hilfe!
Was sendest Du denn vom Terminal aus? 0 oder 1 werden ja
nicht als Hex 00 bzw Hex 01 gesendet sondern als ASCII und
darauf sollte Case dann auch prüfen.
Gruß Richard
Richtig, sende 0 und 1. Was als ASCII 48 bzw. 49 kommt, doch auch wenn CASE darauf überprüft geht´s nicht.
Die Variable A (Ischarwaiting) wird nicht 1.
Danke für den Versuch...
serial in buffered wird klemmen, weil das rxc-interrupt genutz wird
und daher auch das rxc-flag resettet wird, daher kein ischarwaiting
Vor den Erfolg haben die Götter den Schweiß gesetzt
Ich lese Daten vom PC immer mit dem Inkey Befehl ein, daher würde ich das ischrwaiting durch Inkey ersetzen das hat bei mir immer hingehauen.
A= Inkey ()
If A = 49 Then....
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Danke vitis und der Rest...
Hab SERIALIN auskommentiert und die CASE Abfrage auf die ASCII Werte 48 (0) bzw. 49 (1) geändert und es funktioniert.
Wird kein Puffer benötigt, wenn man nur ein Zeichen ausliest?
MfG Befedo und ein frohes Fest euch allen!
hi
könntest du den funktionierenden code posten?
MFG
Dominik
P.S.: Ein frohes Fest euch allen
nein, der Buffer wird für ein Zeichen nicht benötigt, weil
der AVR einen Buffer von einem Zeichen schon
harwaremäßig dabei hat, nämlich das UDR-Register.
Da passt genau ein Byte rein.
Vor den Erfolg haben die Götter den Schweiß gesetzt
@Dominik009
Hab den Code im ersten Beitrag editiert, das ist der der läuft.
Wie gesagt, das Byte heist STEHEN und die CASE Anweisung überprüft ob 0 oder 1 (ASCII 48 bzw. 49) als INKEY empfangen wurde.
MfG Befedo
Lesezeichen