bonjour tt le monde,
voila,j'ai fait un pti programme pour étudier le CAN du pic16f876. un potar
est connecté sur AN0 et la valeur numérique(10 bits) est affichée sur le port B et C. je déclenche la conversion grâce a l'interruption du timer0.
Le problème c'est que la valeur affichée sur les PORT de sortie n'est pas fixe,
ca baguotte un peu. voici le code. Qu'aie-je oublie de paramètrer pour que ce phénomène se produise?
;***************************** ****************************** ******************
; essai du C.A.N du pic16f876 *
; entrée analogique (0-5V) sur AN0 et sortie 10 bits PORTC(rc0 a rc7),PORTB(rb6,rb7) *
; echantillonage ous les 2048us *
; *
;***************************** ****************************** ******************
LIST p=16F876 ; Définition de processeur
#include <p16F876.inc> ; fichier include
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC
BANK0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
BANK1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
BANK2 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
BANK3 macro
bsf STATUS,RP0
bsf STATUS,RP1
endm
org 0x00
call init
loop goto loop
;/////////////////////////////Routine d'interruption///////////////////////////
org 0x04
bcf INTCON,2 ;remise a 0 flag IRQ tmr0
BANK0
bsf ADCON0,2 ;déclenche conversion
attente btfsc ADCON0,2
goto attente ;test fin de conversion A/D
movf ADRESH,0
movwf PORTC
BANK1
movf ADRESL,0
BANK0
movwf PORTB
retfie
;/////////////////////////Routine d'initialisation////////////////////////////////////
init BANK1
movlw 0x82
movwf OPTION_REG ;pull ups PORTB désactivé + timer0 prescaler 1/8--> tmr0 > tmr0 + 1 tous les 8us
clrf TRISC ;portc en sortie
clrf TRISB ;portb en sortie
bsf TRISA,0 ;porta en entrée/AN0 ENTREE ANALOGIQUE
clrf ADCON1 ;left justified + vref(0-5v)
BANK0
movlw 0x41
movwf ADCON0 ;activation CAN + 8tosc-->Tacq
movlw 0xA0
movwf INTCON ;activation IRQ timer0
clrf PORTA
clrf PORTB
clrf PORTC
return
end
-----