( Pilote des entrees sorties analogiques pour PIC24F et PIC24HJ. Version 0.10 du 15 Decembre 2013. Ecrit par jpb.forth . ) TELECHARGEMENT DECIMAL ( 054 CONSTANT RCOUNT 132 CONSTANT IFS0 148 CONSTANT IEC0 170 CONSTANT IPC3 256 CONSTANT TMR1 258 CONSTANT PR1 260 CONSTANT T1CON 262 CONSTANT TMR2 268 CONSTANT PR2 272 CONSTANT T2CON 384 CONSTANT OC1RS 386 CONSTANT OC1R 388 CONSTANT OC1CON 390 CONSTANT OC2RS 392 CONSTANT OC2R 394 CONSTANT OC2CON 396 CONSTANT OC3RS 398 CONSTANT OC3R 400 CONSTANT OC3CON 402 CONSTANT OC4RS 404 CONSTANT OC4R 406 CONSTANT OC4CON 768 CONSTANT ADC1BUF0 770 CONSTANT ADC1BUF1 772 CONSTANT ADC1BUF2 774 CONSTANT ADC1BUF3 776 CONSTANT ADC1BUF4 778 CONSTANT ADC1BUF5 780 CONSTANT ADC1BUF6 782 CONSTANT ADC1BUF7 784 CONSTANT ADC1BUF8 786 CONSTANT ADC1BUF9 788 CONSTANT ADC1BUFA 790 CONSTANT ADC1BUFB 792 CONSTANT ADC1BUFC 794 CONSTANT ADC1BUFD 796 CONSTANT ADC1BUFE 798 CONSTANT ADC1BUFF 800 CONSTANT ADC1CON1 802 CONSTANT ADC1CON2 804 CONSTANT ADC1CON3 808 CONSTANT ADC1CHS 812 CONSTANT ADC1PCFG 816 CONSTANT ADC1CSS ) 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 ) 132 ( 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 ( prgh,prgb,p_ech(us),msq_anx,r_pwm(/fsys),msq_ocx --> - ) TABLE_OCX DUP >R 20 0 FILL 15 AND DUP IF 388 ( 0C1CON1 ) R@ 4 0 DO 3 PICK 1 AND IF OVER 4- OVER ! 2+ 7 3 PICK ! ( OCX sur Timer2 ) THEN >R >R 2/ R> 6+ 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 COM 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+ ! 170 ( IPC3 ) DUP >R @ -241 AND 96 OR R> ! 148 ( IEC0 ) DUP >R @ 8192 OR R> ! ; ( FIN )