Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Timeout für INPUT an der Seriellen Schnittstelle Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 17.10.2024 19:19)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' 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

Bisherige Antworten: