; } ?>
:ISP: Reaktionstester mit Anzeige© Bubbers


MODULE reakt
"Reaktionstester mit 2-stelliger Anzeige und synchronen BCD-Zhlern'
DECLARATIONS "******** Ein- und Ausgnge *****************************************
taktein PIN 11; "Takteingang Y0
ctrZbit3..ctrZbit0 NODE ISTYPE'BUFFER,REG'; "Zhler Zehner Ausgnge
ctrEbit3..ctrEbit0 NODE ISTYPE'BUFFER,REG'; "Zhler Einer Ausgnge
ctrZ = [ctrZbit3..ctrZbit0]; "Zusammenfassung der
ctrE = [ctrEbit3..ctrEbit0]; "Zhlerausgnge
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
start,stop NODE ISTYPE'BUFFER,COM'; "Start-Stop-Flipflop-Ausgnge
starttaster,stoptaster PIN 16,18; "Taster f¸r Start und Stop
reset PIN 21; "R¸cksetz-Schalter
"************* Funktionstabelle Anzeige 2 (Einer) ********************************
TRUTH_TABLE (ctrE -> [a2,b2,c2,d2,e2,f2,g2]) "Ausgnge Zhler = 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
start = !(stoptaster # stop); "Flipflop f¸r Start und Stop
stop = !(start # starttaster);
"2-stelliger Zhler: Einerstelle E = ctrE, Zehnerstelle Z = ctrZ
when reset
then {ctrZ.d = 0; ctrE.d = 0;} "Beide Stellen r¸cksetzen
else when start "Zhle bei Start-Flipflop=1
then {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 weiterzhlen
}
else { ctrE.d = ctrE.q + 1; "E<>9 -> E weiterzhlen
ctrZ.d = ctrZ.q; "E<>9 -> Z unverndert
}
}
else {ctrE.d = ctrE.q; "Stehenbleiben!! Start=0.
ctrZ.d = ctrZ.q
}
ctrZ.clk = taktein; "gleicher Takt f¸r beide Stellen -> synchroner Zhler
ctrE.clk = taktein; "&Mac220;bertrag Einer -> Zehner entsteht durch Bedingungen oben
TEST_VECTORS ([starttaster,stoptaster,reset,taktein] -> ctrZ);
[0 ,1 ,0 ,0 ] -> .x.; "Start-FF r¸cksetzen
[0 ,0 ,0 ,.c. ] -> .x.; "Grundzustand
[1 ,0 ,0 ,.c. ] -> .x.; "Start-Taster dr¸cken
@repeat 10 {[0 ,0 ,0 ,.c. ] -> .x.;} "Start-Taster loslassen
@repeat 2 {[0 ,1 ,0 ,.c. ] -> .x.;} "Stop-Taster dr¸cken
@repeat 2 {[0 ,0 ,1 ,.c. ] -> .x.;} "R¸cksetzen
END

