© 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