Bonjour à tous,
Je suis débutant en programmation des pic. je voulais faire un programme avec interruption mes ça marche pas !!!!
y a t il un expert qui peut m'indiquer ou est le probleme?
test isis.png
test C.png
-----
Bonjour à tous,
Je suis débutant en programmation des pic. je voulais faire un programme avec interruption mes ça marche pas !!!!
y a t il un expert qui peut m'indiquer ou est le probleme?
test isis.png
test C.png
Merci de faire l'immense effort de lire les règles du forum info: Les pics, c'est en électronique!
http://forums.futura-sciences.com/pr...ves-forum.html
Il y a plusieurs problèmes:
- Ton PORTB est en sorti.
- Tu test le flag avec un "==0" au lieu d'un "==1", + pas de remise à 0 de celui-ci
- Pour configurer une entrée en entrée digital, il faut configurer le registre ANSEL et pas ADCON0/1
- Il faut mettre une pull-up sur MCLR sauf si elle est configurée en entrée numérique.
Il faudrait que tu revienne aux bases, regarde les cours de BIGONOFF tout est bien expliqué dedans.
Merci bien Kevin8z je vais corriger les fautes dont tu as indiqué
Kevin j'ai changé la comparaison du bit flag RBIF et j'ai configurer le port B en entrée et ca marche bien...
Sauf que je dois t'informer que le registre ANSEL n'existe pas sur le 16F877 et pour configurer les port en digital il faut faire avec ADCON0/1.
Merci pour ton aide
C'est sympa d'avoir un retour.
Je te confirme que le registre ANSEL existe bien sur le PIC16f887, et que celui-ci doit être configuré.
Le lien de la doc : http://ww1.microchip.com/downloads/e...Doc/41291F.pdf A regarder page 42
Bonsoir,
oui sans doute sur le PIC16F887, mais HCM7 parle du PIC16F877.
Mes amis je veux poser une question : quand il entre dans l'interruption mon programme ne veut s'en sortir ;il fait comme dans une boucle . j'ai mis le flag RBIF à 0 mais même problème. d’après ce que j'ai lu il faut lire aussi le port d'entrée d'interruption ,comment le faire!??
Montre ton code, ce sera plus simple
kevin c juste un simple code pour maîtriser les interruptions:
void interrupt(){ // interruption de test allume la 2 eme lampe
if (INTCON.RBIF==1){
PORTA.B1=1;
delay_ms(200);
PORTA.B2=1;
delay_ms(200);
PORTA.B3=1;
delay_ms(200);
PORTA.B5=1;
delay_ms(200);
PORTB=0xFF;
INTCON.RBIF==0;
}
}
void main() {
INTCON=0b10001000;
TRISB=0xFF;
PORTB=0x00;
TRISA=0x00;
PORTA=0x00;
delay_ms(500);
PORTA.B0=1;
delay_ms(200);
PORTA.B0=0;
while(1){};
}
Bonjour/Bonsoir,
Je te conseille de réviser un peu les bases du langage C, pour affecter une valeur à une variable il suffit de mettre un seul '=' , pour comparer on met '=='.
INTCON.RBIF=0; // flag ã zero
J'ajoute aussi que tu essai de modifier le PORTB dans ton interruption alors que tu l'utilise en entrée.
Merci pour votre aide precieuse