( Pilote des entrees sorties analogiques pour dsPIC30F. Version 0.10 du 15 Decembre 2013. Ecrit par jpb.forth . ) TELECHARGEMENT DECIMAL ( 054 CONSTANT RCOUNT 132 CONSTANT IFS0 140 CONSTANT IEC0 152 CONSTANT IPC2 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 640 CONSTANT ADC1BUF0 642 CONSTANT ADC1BUF1 644 CONSTANT ADC1BUF2 646 CONSTANT ADC1BUF3 648 CONSTANT ADC1BUF4 650 CONSTANT ADC1BUF5 652 CONSTANT ADC1BUF6 654 CONSTANT ADC1BUF7 656 CONSTANT ADC1BUF8 658 CONSTANT ADC1BUF9 660 CONSTANT ADC1BUFA 662 CONSTANT ADC1BUFB 664 CONSTANT ADC1BUFC 666 CONSTANT ADC1BUFD 668 CONSTANT ADC1BUFE 670 CONSTANT ADC1BUFF 672 CONSTANT ADC1CON1 674 CONSTANT ADC1CON2 676 CONSTANT ADC1CON3 678 CONSTANT ADC1CHS 680 CONSTANT ADC1PCFG 682 CONSTANT ADC1CSS ) HERE 4 2+ 4+ ALLOT CONSTANT TABLE_OCX ( @OCa @OCb @OCc @OCd PRGH PRGL san1 san2 san3 san4 ) PRGHERE 0 42 PRG! ( Interruption ADC1 ) ] 54 ( RCOUNT ) DUP >R @ R> ( Sauvegarde de RCOUNT ) 132 ( IFSO ) DUP >R @ -2049 AND R> ! ( Effacement de l'interruption ) 674 ( ADC1CON2 ) @ 128 AND IF 640 ( ADC1BUF0 ) ELSE 656 ( 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 680 ( ADC1PCFG ) ! DUP 682 ( ADC1CSS ) ! 1022 BEGIN OVER WHILE >R 2/ R> 4+ REPEAT 674 ( 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> + 676 ( ADC1CON3 ) ! DROP [ 32768 128+ 64+ 32+ 4+ LITERAL ] 672 ( ADC1CON1 ) ! R@ 10+ ! R> 8+ ! 152 ( IPC2 ) DUP >R @ -28673 AND 24576 OR R> ! 140 ( IEC0 ) DUP >R @ 2048 OR R> ! ; ( FIN )