( 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 2048 CONSTANT IFS0 2080 CONSTANT IEC0 258 CONSTANT PR1 260 CONSTANT T1CON 270 CONSTANT PR3 274 CONSTANT T3CON 3584 CONSTANT TRISA 3586 CONSTANT PORTA 3588 CONSTANT LATA 3590 CONSTANT ODCA 3600 CONSTANT TRISB 3602 CONSTANT PORTB 3604 CONSTANT LATB 3606 CONSTANT ODCB 3616 CONSTANT TRISC 3618 CONSTANT PORTC 3620 CONSTANT LATC 3622 CONSTANT ODCC 3632 CONSTANT TRISD 3634 CONSTANT PORTD 3636 CONSTANT LATD 3638 CONSTANT ODCD 3648 CONSTANT TRISE 3650 CONSTANT PORTE 3652 CONSTANT LATE 3654 CONSTANT ODCE 3664 CONSTANT TRISF 3666 CONSTANT PORTF 3668 CONSTANT LATF 3670 CONSTANT ODCF 3680 CONSTANT TRISG 3682 CONSTANT PORTG 3684 CONSTANT LATG 3686 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 ) 2048 ( 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* 4* 3586+ ( PORTA ) @ OVER R@ + 2+ @ OVER XOR 4 PICK 4* 4* 3584+ ( 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 --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 0 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_A ( n --> - ) 3590 @ OR 3588 ! ; : SYNC_PORT_B ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 1 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_B ( n --> - ) 3606 @ OR 3604 ! ; : SYNC_PORT_C ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 2 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_C ( n --> - ) 3622 @ OR 3620 ! ; : SYNC_PORT_D ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 3 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_D ( n --> - ) 3638 @ OR 3636 ! ; : SYNC_PORT_E ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 4 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_E ( n --> - ) 3654 @ OR 3652 ! ; : SYNC_PORT_F ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 5 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_F ( n --> - ) 3670 @ OR 3668 ! ; : SYNC_PORT_G ( adrh_prg,adrb_prg,msq --> - ) 2080 ( IEC0 ) DUP >R @ -257 AND R@ ! ( Inhibition interruption TIMER3 ) [ 6 2* DUP 4* 2* 3584+ ( 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 ) 2048 ( IFS0 ) DUP >R @ -257 AND R> ! ( Effacement de l'interruption ) ; : SORT_PORT_G ( n --> - ) 3686 @ OR 3684 ! ; ( FIN )