( Test des differentes interfaces simulees. Version 2.00 du 23 Septembre 2012. Ecrit par jpb.forth . ) TELECHARGEMENT ( Test des DISCRETS: ------------------ ) DECIMAL HERE 8 2/ ALLOT CONSTANT TMP_CAN_RX HERE 8 2/ ALLOT CONSTANT TMP_CAN_TX 0 VARIABLE CHENILLE TACHE: T_VOYANT CHENILLE DUP >R @ 2* 65535 AND DUP 0= - DUP R> ! DUP >R 16 LSH R> COM 65535 AND + TMP_CAN_TX DUP >R 2! R> 4 CW_NUMERO CW@ 7 AND 8 LSH 2+ 1 CAN_A_TX DROP ; ( Test du BARRE GRAPHE: --------------------- ) DECIMAL 0 VARIABLE CHOIX 0 VARIABLE BG 0 VARIABLE CONNEXION_CAN 256 VARIABLE POINTEUR_S 0 VARIABLE POINTEUR_C TACHE: T_BG CHOIX @ 0< IF T_BG T_RETIRE 0 BG ! -1 BARRE_GRAPHE ELSE CONNEXION_CAN @ ?DUP IF 1- CONNEXION_CAN ! ELSE 0 POINTEUR_C ! 256 POINTEUR_S ! THEN BG DUP >R @ ?DUP IF 1- ELSE 31 THEN DUP R> ! DUP 16 > IF >R 31 R> - THEN TMP_CAN_TX DUP >R C! R> 1 CW_NUMERO CW@ 7 AND 8 LSH 7+ 1 CAN_A_TX DROP THEN ; ( 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 -4- PASSE_BAS LOW_PASS -5- PASSE_HAUT HIGH_PASS -6- PASSE_BANDE BAND_PASS -7- COUPE_BANDE BAND_STOP -8- PASSE_TOUT ALL_PASS -9- FIN END " STRING S_MENU " RELIER_LES_BUS_CAN_A_ET_B CONNECT_THE_CAN_BUSES_A_AND_B RELIER_LES_BUS_CAN_A_ET_B CONNECT_THE_CAN_BUSES_A_AND_B RELIER_LES_BUS_CAN_A_ET_B CONNECT_THE_CAN_BUSES_A_AND_B " STRING S_CAN_A_B TACHE: T_AFFICHEUR AFFICHAGE_CLAVIER @ ?DUP IF 1- AFFICHAGE_CLAVIER ! S_CLAVIER 1+ AFFICHEUR ELSE COMPTEUR DUP >R @ >R CONNEXION_CAN @ IF S_MENU ELSE S_CAN_A_B THEN COUNT SWAP R@ + AFFICHEUR 8- R> 1+ SWAP OVER < IF DUP XOR THEN R> ! THEN ; ( Test du CLAVIER": ----------------- ) DECIMAL : CLAVIER ?DUP IF TMP_CAN_TX DUP >R C! R> 1 CW_NUMERO CW@ 7 AND 8 LSH 8+ 1 CAN_B_TX DROP THEN ; FIND CLAVIER CONSTANT PRGM_CLAVIER ( Test des MATRICES DE DELs: -------------------------- ) DECIMAL " 00" STRING S_COMPTEUR TACHE: T_MATRICE S_COMPTEUR 1+ DUP >R TMP_CAN_TX DUP >R 2 CMOVE R> 2 CW_NUMERO CW@ 7 AND 8 LSH 20+ 1 CAN_A_TX DROP R@ 1+ C@ 1+ DUP 57 > IF DROP 48 R@ C@ 1+ DUP 57 > IF DROP DUP THEN R@ C! THEN R> 1+ C! ; ( Test des MOTEURs: ----------------- Simulation d'un moteur de 120 pas soient 3 degres par pas ) DECIMAL 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 TMP_CAN_TX DUP >R 6 0 FILL CENTIEME DUP >R @ 30+ 120 MOD DUP R> ! DUP 60 MOD 0= IF SECONDE DUP >R @ 1+ 120 MOD DUP R> ! DUP 60 MOD 0= IF MINUTE DUP >R @ 1+ 120 MOD DUP R> ! DUP 24 MOD 0= IF HEURE DUP >R @ 1+ 120 MOD DUP R> ! 32768+ CHOIX @ IF DROP ELSE R@ ! THEN THEN 32768+ CHOIX @ IF R@ ! ELSE R@ 2+ ! THEN THEN 32768+ CHOIX @ IF R@ 2+ ! ELSE R@ 4+ ! THEN THEN 32768+ CHOIX @ IF R@ 4+ ! ELSE DROP THEN R> 6 CW_NUMERO CW@ 7 AND 8 LSH 6+ 1 CAN_A_TX DROP THEN ; ( Test de l'ANALOGIQUE": ---------------------- Copie du signal d'entree toutes les 10 millisecondes ) DECIMAL ( Registre en lecture/ecriture avec valeur comprise entre -128 et +127 ) HERE 8 2/ ALLOT CONSTANT ENTREE HERE 512 2/ ALLOT CONSTANT SORTIE 0 VARIABLE POINTEUR_E 0 VARIABLE ADR_OFF 0 VARIABLE Z1 0 VARIABLE Z2 1 VARIABLE TYPE_FILTRE : PASSE_BAS ( x --> y ) Z1 DUP >R @ DUP 4/ 4/ - + DUP R> ! 4/ 4/ ; : PASSE_HAUT ( x --> y ) Z2 DUP >R @ OVER OVER DUP 4/ 4/ - + R> ! 4/ 4/ - ; : FILTRAGE ( x --> y ) POINTEUR_E DUP >R @ DUP >R ENTREE + C! SORTIE POINTEUR_C DUP >R @ DUP >R + C@ 0 SORTIE R@ + C! R> 1+ 511 AND R> ! R> 1+ DUP 7 > IF DUP XOR ENTREE TMP_CAN_TX TYPE_FILTRE @ CASE 1 OF 8 0 DO OVER I + C@ PASSE_BAS OVER I + C! LOOP ENDOF 2 OF 8 0 DO OVER I + C@ PASSE_HAUT OVER I + C! LOOP ENDOF 3 OF 8 0 DO OVER I + C@ PASSE_BAS PASSE_HAUT OVER I + C! LOOP ENDOF 4 OF 8 0 DO OVER I + C@ DUP PASSE_BAS PASSE_HAUT - OVER I + C! LOOP ENDOF 6 OF ADR_OFF 2@ EXECUTE ENDOF OVER OVER 8 CMOVE ENDCASE 8 CW_NUMERO CW@ 7 AND 8 LSH 5+ 1 CAN_B_TX DROP DROP THEN R> ! ; FIND FILTRAGE CONSTANT PRGM_FILTRAGE TACHE: T_CAN_REC TMP_CAN_RX 2 0 DO BEGIN DUP I IF CAN_B_RX ELSE CAN_A_RX THEN ?DUP IF 1 = IF 255 AND CASE 2 OF OVER @ SORT_PORT_A OVER 2+ @ SORT_PORT_B ENDOF 5 OF OVER SORTIE POINTEUR_S DUP >R @ POINTEUR_C @ OVER - ABS 128 < IF DUP 256- 511 AND POINTEUR_C ! THEN DUP >R + 8 CMOVE R> 8+ 511 AND R> ! ENDOF 6 OF OVER @ DUP 0< IF DUP 255 AND MOTEUR THEN DROP OVER 2+ @ DUP 0< IF DUP 255 AND MOTEUR_G THEN DROP OVER 4+ @ DUP 0< IF DUP 255 AND MOTEUR_I THEN DROP ENDOF 7 OF OVER C@ BARRE_GRAPHE 4 CONNEXION_CAN ! ENDOF 8 OF OVER C@ DUP 16 /MOD 48+ DUP 57 > 7 AND + S_CLAVIER 4+ C! 48+ DUP 57 > 7 AND + S_CLAVIER 5+ C! 48- DUP 0> IF DUP 3 > OVER 10 < AND IF 3- TYPE_FILTRE ! ELSE CASE 1 OF 0 CHOIX ! HEURE @ MOTEUR MINUTE @ MOTEUR_G SECONDE @ MOTEUR_I ENDOF 2 OF 1 CHOIX ! MINUTE @ MOTEUR SECONDE @ MOTEUR_G CENTIEME @ MOTEUR_I ENDOF 3 OF 0 DUP HEURE ! DUP MINUTE ! DUP SECONDE ! DUP CENTIEME ! DUP MOTEUR DUP MOTEUR_G MOTEUR_I ENDOF ENDCASE THEN ELSE DROP THEN 4 AFFICHAGE_CLAVIER ! ENDOF 20 OF OVER MATRICE ENDOF ENDCASE ELSE DROP THEN DUP XOR ELSE DROP DROP -1 THEN UNTIL LOOP DROP CONNEXION_CAN @ 0= IF POINTEUR_S @ 128+ 248 AND POINTEUR_C ! THEN 9 T_CAN_REC T_ACTIVE ; : TESTSIMU_ON 3 2 2 1 8000000 CAN_A_INIT 3 2 2 1 8000000 CAN_B_INIT CW_NUMERO CW@ 7 AND 8 LSH -32 1 1 CAN_A_FILTRE DROP CW_NUMERO CW@ 7 AND 8 LSH -32 1 1 CAN_B_FILTRE DROP 1 T_CAN_REC 50000 OVER T_AJOUTE T_ACTIVE 250 T_VOYANT 40000 OVER T_AJOUTE T_PERIODE 200 T_AFFICHEUR 40000 OVER T_AJOUTE T_PERIODE PRGM_CLAVIER SYNC_CLAVIER 500 T_MATRICE 40000 OVER T_AJOUTE T_PERIODE 0 DUP CHOIX ! DUP HEURE ! DUP MINUTE ! DUP SECONDE ! DUP CENTIEME ! DUP MOTEUR DUP MOTEUR_G MOTEUR_I 50 T_BG 40000 OVER T_AJOUTE T_PERIODE 250 T_MOTEUR 40000 OVER T_AJOUTE T_PERIODE PRGM_FILTRAGE 640 SYNC_ANALOGIQUE ; : TESTSIMU_OFF T_CAN_REC T_RETIRE 0 DUP DUP 1 CAN_A_FILTRE DROP 0 DUP DUP 1 CAN_B_FILTRE DROP T_VOYANT T_RETIRE 65535 DUP SORT_PORT_A SORT_PORT_B 0 CHENILLE ! 0 DUP SYNC_CLAVIER AFFICHAGE_CLAVIER ! T_AFFICHEUR T_RETIRE 0 COMPTEUR ! S_MENU 1+ AFFICHEUR T_MATRICE T_RETIRE 0 DUP S_COMPTEUR 1+ DUP >R C! R@ 1+ C! R@ MATRICE 48 DUP R@ C! R> 1+ C! -1 CHOIX ! 0 DUP SYNC_ANALOGIQUE 1 TYPE_FILTRE ! ; FIND TESTSIMU_OFF ADR_OFF 2! TESTSIMU_ON ( FIN )