![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Dietmar, hallo Forum, das Programm eignet sich auch gut, um den in OCBASIC enthaltenen Kompatibilitätsmodus für die C-Control I zu demonstrieren. Bekanntlich unterstützt der Open-Control/BASIC Kompiler weiterhin auch die C-Control I. Wenn man nämlich die Kompilerdirektive option ccbasic zu Beginn des Quelltextes schreibt, erzeugt der OCBASIC-Kompiler fuer die C-Control 1.1 optimierten Bytekode. Dabei ist noch zu beachten, dass bestimmte interne Variablen und BASIC-Befehle auf der 1.1 nicht unterstützt werden - u.a. sind dies ADD,SUB,DBNZ,PrintHex=ON/OFF,PrintSpc=ON/OFF. Das ist jedoch nicht weiter problematisch, wenn man bei der Portierung daran denkt, neben option ccbasic diese BASIC-Befehle entsprechend zu umschreiben. Beispielsweise anzsekunden=anzsekunden -1 wo vorher SUB anzsekunden,1 stand. das |_ Team Nachfolgend ein kurzes Video, welches den Zustandsautomaten auf der 1.1er in Aktion zeigt. Im Video ist eine Challenge versteckt: Die verwendete C-Control 1.1 verfügt nämlich über eine Besonderheit über die noch nichts im Forum berichtet wurde... WER LÖST DIE CHALLENGE UND FINDET ES HERAUS? ;-) Tipp: Gemeint ist nicht die Firmware-Erweiterung 'Lbit'. ...und der Open-Control/BASIC-Quelltext für die C-Control I: ' =========================================================================== ' Demoprogramm: Einfacher Countdown mittels Zustandsautomat ' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 29. August 2020 ' =========================================================================== ' Portiert auf C-Control I am 30. August von "das |_ Team" '+++... ' --- Definitionen ---------------------------------------------------------- option ccbasic '+++ Fuer C-Control 1.1 optimierten Bytekode erzeugen DIM bitarray BYTE DIM signalsekunde BIT[1] OF bitarray 'Signal DIM zustand BYTE 'Variablen DIM temp BYTE DIM sekundealt BYTE DIM anzsekunden INT DEFINE zuscountdown 1 'Zustände des Zustandsautomaten DEFINE zusalarm 2 ' --- Hauptprogramm --------------------------------------------------------- PRINT " Countdown auf der C-Control 1.1" anzsekunden=2*60+30 'Zeit: 2 Minuten und 30 Sekunden showrestzeit init ' Schleife des Hauptprogramms WHILE NOT rxd '+++ Komfortzusatz: Countdown mit beliebiger Taste beenden --> Hostmodus uhrabfrage zustandsautomat WEND END ' --- Subroutinen und Funktionen -------------------------------------------- ' Verschiedene Initialisierungen PROCEDURE init signalsekunde=OFF zustand=zuscountdown RETURN END PROCEDURE ' Uhr abfragen und Signal signalsekunde erzeugen PROCEDURE uhrabfrage temp=SECOND IF temp<>sekundealt THEN 'Uhr wurde weitergezählt? sekundealt=temp signalsekunde=ON END IF RETURN END PROCEDURE ' Zustandsautomat PROCEDURE zustandsautomat IF zustand=zuscountdown THEN 'Zustand "Count Down" IF signalsekunde THEN signalsekunde=OFF anzsekunden=anzsekunden -1 '(+++ Equivalent fuer "SUB anzsekunden,1", weil ADD und SUB (Bytekode:'068') auf C-Control 1.1 noch nicht unterstuetzt ist. showrestzeit END IF IF anzsekunden=0 THEN zustand=zusalarm END IF ELSEIF zustand=zusalarm THEN 'Zustand "Alarm" IF signalsekunde THEN signalsekunde=OFF PRINT "ALARM!" BEEP 710,5,0 END IF END IF RETURN END PROCEDURE ' Die "anzsekunden" in Minuten im Format 00:00 anzeigen PROCEDURE showrestzeit PUT (((anzsekunden/60)/10)+ASC("0")) PUT (((anzsekunden/60) MOD 10)+ASC("0")) PUT ASC(":") PUT (((anzsekunden MOD 60)/10)+ASC("0")) PUT (((anzsekunden MOD 60) MOD 10)+ASC("0")) PUT 13 RETURN END PROCEDURE ' --- Programmende --------------------------------------------------------- Passender Link: Open-Source Firmware-Erweiterung für C-Control 1.1 Meine Homepage: http://visit.ghn-sensorik.de/L-Team/Distribution/beta/ |
Antwort schreiben |