( Pilote des ports A,B,C,D,E,F et G de l'emulateur MICROCHIP. Version 1,00 du 26 Avril 2015. Ecrit par jpb.forth . ) TELECHARGEMENT DECIMAL ( 054 CONSTANT RCOUNT 132 CONSTANT IFS0 148 CONSTANT IEC0 258 CONSTANT PR1 260 CONSTANT T1CON 270 CONSTANT PR3 274 CONSTANT T3CON 704 CONSTANT TRISA 706 CONSTANT PORTA 708 CONSTANT LATA 710 CONSTANT ODCA 712 CONSTANT TRISB 714 CONSTANT PORTB 716 CONSTANT LATB 718 CONSTANT ODCB 720 CONSTANT TRISC 722 CONSTANT PORTC 724 CONSTANT LATC 726 CONSTANT ODCC 728 CONSTANT TRISD 730 CONSTANT PORTD 732 CONSTANT LATD 734 CONSTANT ODCD 736 CONSTANT TRISE 738 CONSTANT PORTE 740 CONSTANT LATE 742 CONSTANT ODCE 744 CONSTANT TRISF 746 CONSTANT PORTF 748 CONSTANT LATF 750 CONSTANT ODCF 752 CONSTANT TRISG 754 CONSTANT PORTG 756 CONSTANT LATG 758 CONSTANT ODCG ) HERE 1 3 7 * + ALLOT CONSTANT TABLE_PORTS ( INDEX qui varie de 0 a 20 pour 20 ms MEM PRGH PRGL x 7 pour ports A,B,C,D,E,F et G ) PRGHERE 0 36 PRG! ( Interruption T3 ) ] 54 ( RCOUNT ) DUP >R @ R> ( Sauvegarde de RCOUNT ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) TABLE_PORTS DUP >R @ DUP 7 U< IF DUP DUP 2* + 2* DUP R@ + 4+ DUP >R @ R> 2+ @ OR IF OVER 4* 2* 706+ ( PORTA ) @ OVER R@ + 2+ @ OVER XOR 4 PICK 4* 2* 704+ ( TRISA ) @ AND IF OVER R@ + 2+ >R DUP R@ ! R@ 4+ @ R> 2+ @ EXECUTE ELSE DROP THEN THEN DROP THEN 1+ DUP 20 U< AND R> ! ! ( Recuperation de RCOUNT ) [ HEX 06 4000 ( RETFIE ) PRG, DECIMAL : SYNC_PORT_A ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 0 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_A ( n --> - ) 710 @ OR 708 ! ; : SYNC_PORT_B ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 1 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_B ( n --> - ) 718 @ OR 716 ! ; : SYNC_PORT_C ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 2 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_C ( n --> - ) 726 @ OR 724 ! ; : SYNC_PORT_D ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 3 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_D ( n --> - ) 734 @ OR 732 ! ; : SYNC_PORT_E ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 4 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_E ( n --> - ) 742 @ OR 740 ! ; : SYNC_PORT_F ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 5 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_F ( n --> - ) 750 @ OR 748 ! ; : SYNC_PORT_G ( adrh_prg,adrb_prg,msq --> - ) 148 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 6 2* DUP 4* 704+ ( TRISA ) LITERAL DUP 2* + TABLE_PORTS 2+ + LITERAL ] >R >R DUP R@ ! DUP R@ 4+ ! R> 2+ @ XOR R@ ! R@ 2+ ! R> 4+ ! 258 ( PR1 ) @ 270 ( PR3 ) ! 260 ( T1CON ) @ 274 ( T3CON ) ! 256 R> +! ( Activation interruption TIMER3 ) 132 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_G ( n --> - ) 758 @ OR 756 ! ; ( FIN )