:ISP: 2-stufiger Zähler 0 bis 99 mit Anzeige und synchronen BCD-Zählern
DECLARATIONS "******** Ein- und Ausgänge ****************************************
taktein PIN 11; "Takteingang Y0
ctrZbit3..ctrZbit0 NODE ISTYPE'BUFFER,REG'; "Zähler Zehner Ausgänge
ctrEbit3..ctrEbit0 NODE ISTYPE'BUFFER,REG'; "Zähler Einer Ausgänge
ctrZ = [ctrZbit3..ctrZbit0]; "Zusammenfassung der
ctrE = [ctrEbit3..ctrEbit0]; "Zählerausgänge
a2,b2,c2,d2,e2,f2,g2 PIN 38,37,40,41,42,43,44 ISTYPE'BUFFER,COM'; "Anzeige 2
a1,b1,c1,d1,e1,f1,g1 PIN 4,3,6,7,8,9,10 ISTYPE'BUFFER,COM'; "Anzeige 1
"************* Funktionstabelle Anzeige 2 (Einer) ********************************
TRUTH_TABLE (ctrE -> [a2,b2,c2,d2,e2,f2,g2]) "Ausgänge Zähler = Eing. Codeumsetzer
0 -> [1 ,1 ,1 ,1 ,1 ,1 ,0 ]; "LEDs high-aktiv!
1 -> [0 ,1 ,1 ,0 ,0 ,0 ,0 ]; " a
2 -> [1 ,1 ,0 ,1 ,1 ,0 ,1 ]; " ---
3 -> [1 ,1 ,1 ,1 ,0 ,0 ,1 ]; " f | g | b
4 -> [0 ,1 ,1 ,0 ,0 ,1 ,1 ]; " ---
5 -> [1 ,0 ,1 ,1 ,0 ,1 ,1 ]; " e | d | c
6 -> [1 ,0 ,1 ,1 ,1 ,1 ,1 ]; " ---
7 -> [1 ,1 ,1 ,0 ,0 ,0 ,0 ];
8 -> [1 ,1 ,1, 1, 1, 1, 1 ];
9 -> [1 ,1 ,1 ,1 ,0 ,1 ,1 ];
"************* Funktionstabelle Anzeige 1 (Zehner) *******************************
TRUTH_TABLE (ctrZ -> [a1,b1,c1,d1,e1,f1,g1])
0 -> [1 ,1 ,1 ,1 ,1 ,1 ,0 ];
1 -> [0 ,1 ,1 ,0 ,0 ,0 ,0 ];
2 -> [1 ,1 ,0 ,1 ,1 ,0 ,1 ];
3 -> [1 ,1 ,1 ,1 ,0 ,0 ,1 ];
4 -> [0 ,1 ,1 ,0 ,0 ,1 ,1 ];
5 -> [1 ,0 ,1 ,1 ,0 ,1 ,1 ];
6 -> [1 ,0 ,1 ,1 ,1 ,1 ,1 ];
7 -> [1 ,1 ,1 ,0 ,0 ,0 ,0 ];
8 -> [1 ,1 ,1, 1, 1, 1, 1 ];
9 -> [1 ,1 ,1 ,1 ,0 ,1 ,1 ];
EQUATIONS "************* Gleichungen *********************************************
"2-stelliger Zähler: Einerstelle E = ctrE, Zehnerstelle Z = ctrZ
when (ctrE.q == 9) "wenn -> dann
then { ctrE.d = 0; "E=9 -> E=0
when (ctrZ.q == 9)
then ctrZ.d = 0; "E=9, Z=9 -> Z=0
else ctrZ.d = ctrZ.q +1; "E=9, Z<>9 -> Z weiterzählen
}
else { ctrE.d = ctrE.q + 1; "E<>9 -> E weiterzählen
ctrZ.d = ctrZ.q; "E<>9 -> Z unverändert
}
ctrZ.clk = taktein; "gleicher Takt für beide Stellen -> synchroner Zähler
ctrE.clk = taktein; "Übertrag Einer -> Zehner entsteht durch Bedingungen oben
TEST_VECTORS "*********** Simulation *********************************************
( [taktein] -> a1); "Eingang -> Ausgang
@repeat 101 {[.c. ] -> .x.;} "101 Takte