Bonjour à tous.
Je suis en train de programmer un pic16f877 afin de réaliser un comparateur à deux seuils mais je ne comprend absolument pas pourquoi, lors de l'interruption, le programme ne reprend pas ou il c'est arrêté.
Je programme sous MPLAB avec pic-lite puis je programme le pic avec icprog en low voltage (j'ai repris le schéma de Lothar) .
voila mon code
Code:unsigned char compteur=0; unsigned char MesureAN0=0; unsigned char MesureAN1=0; unsigned char MesureAN2=0; static int TempoAD=20; static int i=0; unsigned char GetAN0 (void) { ADCON0=0x81; for (i=0;i<TempoAD;i++){} ADGO=1; //Lancement de la conversion A/D while(ADGO){} //attente de la conversion return (ADRESH); } unsigned char GetAN1 (void) { ADCON0=0x89; for (i=0;i<TempoAD;i++){} ADGO=1; //Lancement de la conversion A/D while(ADGO){} //attente de la conversion return (ADRESH); } unsigned char GetAN2 (void) { ADCON0=0x91; for (i=0;i<TempoAD;i++){} ADGO=1; //Lancement de la conversion A/D while(ADGO){} //attente de la conversion return (ADRESH); } /*Gestion de interruptions*/ interrupt GestionInterruption(void) { if (T0IF==1) { MesureAN0=GetAN0(); MesureAN1=GetAN1(); MesureAN2=GetAN2(); if (MesureAN0>MesureAN1) RA3=0; if (MesureAN0<MesureAN2) RA3=1; } TMR0=0x00; T0IF=0; } void main (void) { /************initialisation du pic************/ //PortA TRISA=0x07; ADCON1=0x02; RA3=0; //Timer0 OPTION=0x87; TMR0=0x00; //interruptions INTCON=0xA0; while (1) {} }
A la fin de l'interruption la fonction main et est totalement exécuter (enfin je pense) car RA3 repasse à zéro.
J'ai aussi essayé de faire clignoter une diode(programme le plus simple possible) mais le même problème est apparue. J'ai pas trouvé la source du problème que ce soit sur le net ou sur les cours de BIGONOFF.
Merci de votre aide.
-----