( Test des differentes interfaces simulees. Version 0.10 du 21 Octobre 2012. Ecrit par jpb.forth . ) TELECHARGEMENT ( Ajustage du temps reel: ----------------------- ) DECIMAL 0 VARIABLE AJUSTAGE TACHE: T_AJUSTE_TEMPS_REEL AJUSTAGE DUP >R @ DUP 0= 1 AND 51+ 68681_CTL ! 1+ 5 MOD R> ! ; ( Test des DISCRETS: ------------------ ) DECIMAL 0 VARIABLE CHENILLE 0 CHENILLE 2! TACHE: T_DISCRETS CHENILLE DUP >R @ 2* 65535 AND DUP 0= - DUP R> ! DUP SORT_PORT_A COM SORT_PORT_B ; ( Test du BARRE GRAPHE: --------------------- ) DECIMAL 0 VARIABLE BG TACHE: T_BG BG DUP >R @ ?DUP IF 1- ELSE 31 THEN DUP R> ! DUP 16 > IF >R 31 R> - THEN BARRE_GRAPHE ; ( Test des AFFICHEURS: -------------------- ) DECIMAL 0 VARIABLE AFFICHAGE_CLAVIER 0 VARIABLE COMPTEUR " --------" STRING S_CLAVIER " -1- JOUR DAY -2- HEURE HOUR -3- REMISE_A_ZERO RESET -6- FIN END " STRING S_MENU TACHE: T_AFFICHEUR AFFICHAGE_CLAVIER @ ?DUP IF 1- AFFICHAGE_CLAVIER ! S_CLAVIER 1+ AFFICHEUR ELSE COMPTEUR DUP >R @ >R S_MENU COUNT SWAP R@ + AFFICHEUR 8- R> 1+ SWAP OVER < IF DUP XOR THEN R> ! THEN ; ( Test des VOYANTS du clavier: ---------------------------- ) DECIMAL 0 VARIABLE VOYANTS TACHE: T_VOYANTS VOYANTS DUP >R @ 7 AND SORT_CLAVIER 1 R> +! ; ( Test des MOTEURs: ----------------- Simulation d'un moteur de 120 pas soient 3 degres par pas ) DECIMAL 0 VARIABLE CHOIX 0 VARIABLE HEURE 0 VARIABLE MINUTE 0 VARIABLE SECONDE 0 VARIABLE CENTIEME TACHE: T_MOTEUR CHOIX @ 0< IF T_MOTEUR T_RETIRE 0 DUP MOTEUR DUP MOTEUR_G DUP MOTEUR_I TEMPS 2@ BEGIN TEMPS 2@ OVER - 1000 > UNTIL DROP COM DUP MOTEUR DUP MOTEUR_G MOTEUR_I ELSE CENTIEME DUP >R @ 30+ 120 MOD DUP 60 MOD 0= IF SECONDE DUP >R @ 1+ 120 MOD DUP 60 MOD 0= IF MINUTE DUP >R @ 1+ 120 MOD DUP 24 MOD 0= IF HEURE DUP >R @ 1+ 120 MOD DUP R> ! CHOIX @ IF DROP ELSE MOTEUR THEN THEN DUP R> ! CHOIX @ IF MOTEUR ELSE MOTEUR_G THEN THEN DUP R> ! CHOIX @ IF MOTEUR_G ELSE MOTEUR_I THEN THEN DUP R> ! CHOIX @ IF MOTEUR_I ELSE DROP THEN THEN ; ( Test du CLAVIER: ---------------- ) DECIMAL ( Bits[31..4]: 111111111111 si touche activee, 000000000000 sinon Bits[3,2]: ligne Bits[1,0]: colonne ) 0 VARIABLE ADR_OFF : CLAVIER ?DUP IF DUP 49 = IF 0 CHOIX ! HEURE @ MOTEUR MINUTE @ MOTEUR_G SECONDE @ MOTEUR_I THEN DUP 50 = IF 1 CHOIX ! MINUTE @ MOTEUR SECONDE @ MOTEUR_G CENTIEME @ MOTEUR_I THEN DUP 51 = IF 0 DUP HEURE ! DUP MINUTE ! DUP SECONDE ! DUP CENTIEME ! DUP MOTEUR DUP MOTEUR_G MOTEUR_I THEN DUP 54 = IF ADR_OFF 2@ EXECUTE THEN 16 /MOD 48+ DUP 57 > 7 AND + S_CLAVIER 4+ C! 48+ DUP 57 > 7 AND + S_CLAVIER 5+ C! 4 AFFICHAGE_CLAVIER ! THEN ; FIND CLAVIER CONSTANT PRGM_CLAVIER : TESTSIMU_ON 200 T_AJUSTE_TEMPS_REEL 65535 OVER T_AJOUTE T_PERIODE 350 T_DISCRETS 40000 OVER T_AJOUTE T_PERIODE 0 DUP CHOIX ! DUP HEURE ! DUP MINUTE ! DUP SECONDE ! DUP CENTIEME ! DUP MOTEUR DUP MOTEUR_G MOTEUR_I 250 T_MOTEUR 40000 OVER T_AJOUTE T_PERIODE 200 T_AFFICHEUR 60000 OVER T_AJOUTE T_PERIODE 1000 T_VOYANTS 40000 OVER T_AJOUTE T_PERIODE 50 T_BG 40000 OVER T_AJOUTE T_PERIODE PRGM_CLAVIER SYNC_CLAVIER ; : TESTSIMU_OFF T_BG T_RETIRE 0 BG ! -1 BARRE_GRAPHE T_AJUSTE_TEMPS_REEL T_RETIRE 51 68681_CTL ! -1 CHOIX ! T_VOYANTS T_RETIRE 0 VOYANTS ! -1 SORT_CLAVIER 0 DUP SYNC_CLAVIER AFFICHAGE_CLAVIER ! T_DISCRETS T_RETIRE -1 DUP SORT_PORT_A SORT_PORT_B 0 CHENILLE 2! T_AFFICHEUR T_RETIRE 0 COMPTEUR ! S_MENU 1+ AFFICHEUR ; FIND TESTSIMU_OFF ADR_OFF 2! ( FIN )