INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' Demoprogramm: Timeout für INPUT an der Seriellen Schnittstelle ' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 17. Oktober 2024 ' =========================================================================== ' Dieses Beispielprogramm demonstriert, wie Daten von der Seriellen Schnitt- ' stelle per INPUT gelesen werden können. Werden für eine genau definierte ' Zeit keine Daten empfangen, tritt ein Timeout auf und das Lesen wird ' abgebrochen. Wenn das Bit namens timeout gesetzt ist, trat ein Timeout auf. ' --- Definitionen ---------------------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi DIM bitarray BYTE 'ein Bitarray DIM debug BIT[1] OF bitarray 'ist HIGH, wenn Debugging aktiv DIM timeout BIT[2] OF bitarray 'ist HIGH, wenn Timeout auftrat DIM negativ BIT[3] OF bitarray 'ist HIGH, wenn Zahl negativ DIM ende WORD 'für überlauftolerante Timerabfrage DIM databyte BYTE 'BYTE von der Seriellen Schnittstelle DIM wert WORD 'Der eingelesene Wert im Hauptprogramm DIM a,b,c BYTE 'temporäre Variablen DIM w WORD 'temporäre Variable ' --- Hauptprogramm --------------------------------------------------------- PrintSpc=ON 'Bei PRINT dezimale Zahlen mit führendem Leerzeichen ausgeben End2Host=ON 'Bei Programmende (siehe END) gleich in den Host-Modus wechseln ?"Timeout für INPUT an der Seriellen Schnittstelle" REPEAT ?"Bitte Zahl eingeben. Ende mit '123': "; wert=INPUTmitTimeout IF timeout THEN ?"Timeout!" ELSE ?"Empfangen wurde der Wert"wert"." END IF UNTIL wert=123 ?:?"Programmende." END 'Zurück in den Hostmodus. Neustart mit RETURN-Taste. ' --- Subroutinen und Funktionen -------------------------------------------- ' Timeout für GET an der Seriellen Schnittstelle ' Timeout trat auf wenn das zurückgelieferte BYTE gleich Null ist. FUNCTION GETmitTimeout databyte=0 ende=TIMER+250 '5 Sekunden Timeout WHILE ende-TIMER>0 AND NOT RXD ' PAUSE 1 'bei Bedarf Strom sparen WEND IF RXD THEN GET databyte RETURN databyte END FUNCTION ' Timeout für INPUT an der Seriellen Schnittstelle ' Timeout trat auf wenn das BIT timeout gesetzt ist. FUNCTION INPUTmitTimeout w=0 'Defaultwert timeout=OFF negativ=OFF WHILE TRUE a=GETmitTimeout 'BYTE mit Timeout holen IF a=0 THEN timeout=ON GOTO ImT_exit ELSE IF a=ASC("-") THEN 'Vorzeichen negativ=ON ELSE IF a<ASC("0") THEN 'z.B. RETURN, TAB oder SPACE GOTO ImT_exit ELSE IF a>ASC("9") THEN 'hier könnte man Fehler auswerten ELSE a=a-ASC("0") 'eine Ziffer übernehmen w=w*10+a END IF WEND #ImT_exit IF negativ THEN 'Zahl ggf. negieren w=-w END IF RETURN w END FUNCTION ' --- Programmende --------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |