( Pilote des entrees sorties analogiques pour PIC24EP et dsPIC24EP. Version 0.10 du 15 Decembre 2013. Ecrit par jpb.forth . ) TELECHARGEMENT DECIMAL ( 0054 CONSTANT RCOUNT 0256 CONSTANT TMR1 0258 CONSTANT PR1 0260 CONSTANT T1CON 0262 CONSTANT TMR2 0264 CONSTANT TMR3HLD 0266 CONSTANT TMR3 0268 CONSTANT PR2 0270 CONSTANT PR3 0272 CONSTANT T2CON 0274 CONSTANT T3CON 0768 CONSTANT ADC1BUF0 0770 CONSTANT ADC1BUF1 0772 CONSTANT ADC1BUF2 0774 CONSTANT ADC1BUF3 0776 CONSTANT ADC1BUF4 0778 CONSTANT ADC1BUF5 0780 CONSTANT ADC1BUF6 0782 CONSTANT ADC1BUF7 0784 CONSTANT ADC1BUF8 0786 CONSTANT ADC1BUF9 0788 CONSTANT ADC1BUFA 0790 CONSTANT ADC1BUFB 0792 CONSTANT ADC1BUFC 0794 CONSTANT ADC1BUFD 0796 CONSTANT ADC1BUFE 0798 CONSTANT ADC1BUFF 0800 CONSTANT ADC1CON1 0802 CONSTANT ADC1CON2 0804 CONSTANT ADC1CON3 0808 CONSTANT ADC1CHS 0812 CONSTANT ADC1PCFG 0816 CONSTANT ADC1CSS 2048 CONSTANT IFS0 2080 CONSTANT IEC0 2118 CONSTANT IPC3 2304 CONSTANT OC1CON1 2306 CONSTANT OC1CON2 2308 CONSTANT OC1RS 2310 CONSTANT OC1R 2312 CONSTANT OC1TMR 2314 CONSTANT OC2CON1 2316 CONSTANT OC2CON2 2318 CONSTANT OC2RS 2320 CONSTANT OC2R 2322 CONSTANT OC2TMR 2324 CONSTANT OC3CON1 2326 CONSTANT OC3CON2 2328 CONSTANT OC3RS 2330 CONSTANT OC3R 2332 CONSTANT OC3TMR 2334 CONSTANT OC4CON1 2336 CONSTANT OC4CON2 2338 CONSTANT OC4RS 2340 CONSTANT OC4R 2342 CONSTANT OC4TMR ) HERE 4 2+ 4+ ALLOT CONSTANT TABLE_OCX ( @OCa @OCb @OCc @OCd PRGH PRGL san1 san2 san3 san4 ) PRGHERE 0 46 PRG! ( Interruption ADC1 ) ] 54 ( RCOUNT ) DUP >R @ R> ( Sauvegarde de RCOUNT ) 2048 ( IFSO ) DUP >R @ -8193 AND R> ! ( Effacement de l'interruption ) 802 ( ADC1CON2 ) @ 128 AND IF 768 ( ADC1BUF0 ) ELSE 784 ( ADC1BUF8 ) THEN TABLE_OCX DUP 12+ @ OVER @ ?DUP IF ! 2+ DUP 12+ @ OVER @ ?DUP IF ! 2+ DUP 12+ @ OVER @ ?DUP IF ! 2+ DUP 12+ @ OVER @ ?DUP IF ! ELSE DROP THEN 2+ ELSE DROP 4+ THEN ELSE DROP 6+ THEN ELSE DROP 8+ THEN DUP >R 4+ R@ @ R> 2+ @ OVER OVER OR IF EXECUTE ( Appel de l'instruction d'interruption ) ELSE DROP DROP DROP DROP THEN ! ( Recuperation de RCOUNT ) [ HEX 06 4000 ( RETFIE ) PRG, DECIMAL : SYNC_ANALOGIQUE ( adr_prg,p_ech(/fsys),msq_anx,r_pwm(/fsys),msq_ocx --> - ) TABLE_OCX DUP >R 20 0 FILL 15 AND DUP IF 2304 ( 0C1CON1 ) R@ 4 0 DO 3 PICK 1 AND IF OVER 4+ OVER ! 2+ [ 7 10 LSH 7+ LITERAL ] 3 PICK ! 12 3 PICK 2+ ! ( OCX sur Fp et synchronise par Timer2 ) THEN >R >R 2/ R> 10+ R> LOOP DROP DROP OVER 1- 268 ( PR2 ) ! 32768 272 ( T2CON ) ! ( frequence Timer2 = fsys/r_pwm Hz ) THEN DROP DROP 255 AND DUP 0= - DUP 812 ( ADC1PCFG ) ! DUP 816 ( ADC1CSS ) ! 1022 BEGIN OVER WHILE >R 2/ R> 4+ REPEAT 802 ( ADC1CON2 ) ! DROP 258 ( PR1 ) @ 1+ 1000 U*/MOD SWAP 499 > - 260 ( T1CON ) @ 48 AND CASE 16 OF 4 ENDOF 32 OF 7 ENDOF 48 OF 9 ENDOF 1 ENDCASE LSH DUP 43 DUP BEGIN ( p_ech,reste,coef_reste,coef ) 4 PICK OVER U/MOD 255 > IF DROP >R >R DUP XOR R> R> ELSE 4 PICK OVER > IF >R >R DROP DROP R> R> SWAP DUP ELSE DROP THEN THEN 1- 3 PICK 0= OVER 13 < OR UNTIL DROP DUP 12- 8 LSH >R SWAP DROP U/MOD 255 MIN 1- R> + 804 ( ADC1CON3 ) ! DROP [ 32768 128+ 64+ 32+ 4+ LITERAL ] 800 ( ADC1CON1 ) ! R@ 10+ ! R> 8+ ! 2118 ( IPC3 ) DUP >R @ -241 AND 96 OR R> ! 2080 ( IEC0 ) DUP >R @ 8192 OR R> ! ; ( FIN )