MezData-Logo

Abstimmanzeige mit Berechnung (!) und Logik

 

MODULE Abstimm2
"Abstimmungsanzeige
"Die Anzahl der Ja-Stimmen (1) von 4 Teilnehmern (a,b,c,d) wird ermittelt
"und als Dualzahl und als Leuchtband (Balkenanzeige) dargestellt.

DECLARATIONS "********* Ein- und Ausgänge ********************************

  a,b,c,d PIN 25,26,27,28;                    "4 Teilnehmer (DIP-Schalter)
  d2..d0  PIN 3,4,5       ISTYPE'BUFFER,COM'; "obere 3 LEDs für Dualzahl
  l4..l1  PIN 7,8,9,10    ISTYPE'BUFFER,COM'; "untere 4 LEDs für Leuchtband

 "********************* SET Deklarationen *********************************
  abstimmer  = [d,c,b,a];             "Zusammenfassung der Teilnehmer
  dualzahl   = [d2..d0];              "Anzeige einer Dualzahl
  leuchtband = [l4..l1];              "Anzeige als Leuchtband

  Zahla      = [0,0,a];               "Für die spätere Addition notwendig
  Zahlb      = [0,0,b];               "Aus 1-Bit-Zahlen werden 3-Bit-Zahlen
  Zahlc      = [0,0,c];
  Zahld      = [0,0,d];

EQUATIONS "************ Verknüpfungen *************************************
  dualzahl = Zahla + Zahlb + Zahlc + Zahld; "Anzahl Ja-Stimmen ermitteln

  "Bei Additionen müssen alle Beteiligten die gleiche Anzahl von Bits haben
  "bei dualzahl = a + b + c wird nur eine 1-Bit-Addition ausgeführt,
  " d.h. nur d0 erhält ein richtiges Ergebnis, d2 und d3 nicht!

  when (dualzahl>0) then l1 = 1;            "Anzahl der Ja-Stimmen als
  when (dualzahl>1) then l2 = 1;            "Leuchtband anzeigen
  when (dualzahl>2) then l3 = 1;
  when (dualzahl>3) then l4 = 1;

  " alternativ möglich:
  "  l1 = (dualzahl>0);
  "  l2 = (dualzahl>1);
  "  l3 = (dualzahl>2);
  "  l4 = (dualzahl>3);

TEST_VECTORS "************* Simulation ************************************

  (abstimmer -> leuchtband);      "Eingänge -> Ausgänge

  0 -> .x.;                       "Anfangswert
  @const i = 0;                   "Angangswert der Zählvariablen
  @repeat 16                      "alle 16 Möglichkeiten testen
        { i -> .x.;
          @const i = i+1;         "Zählvariable um 1 erhöhen
        }
END