Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


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 

 Re: Demoprogramm: Countdown mittels Zustandsautomat Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von das |_ Team, Homepage - 30.08.2020 20:49)
 Als Antwort auf Demoprogramm: Countdown mittels Zustandsautomat von Dietmar - 30.08.2020 15:56
das |_ Team nutzt:  CC1-Unit V1.1, CC1-M-Unit V1.1, CC1-Station V1.1, Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
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

Bisherige Antworten:

Re: Demoprogramm: Countdown mittels Zustandsautomat (von Dietmar - 30.08.2020 21:23)
    Re: Demoprogramm: Countdown mittels Zustandsautomat (von Joachim - 31.08.2020 17:59)
        Definitionsdatei (von Dietmar - 31.08.2020 19:00)