Bonjour,
Celas faisait un petit temps que je n'avais pas programmer.
J'ai récemment voulus m'y remettre en étudiant les algorigramme pour mieux comprendre chacun de mes programme.
Je suis tombé sur un problème,je n'arrive plus a faire fonctionné le TMR0 de mon PIC.
J'ai commencé par voir si il fonctionnais avec un programme très basique,et il fonctionne.
Je vais vous partager mon programme qui est simple qui permet de faire clignoter une simple LED sans devoir utilisé la fonction delay car celas engendre que le PIC ne peut plus rien faire d'autre quand il exécute celle-ci.
Voici le cahier des charge :
-PIC utilisé un 16F628A
-Clignotement d'une LED
-Utilisation de l'interruption TMR0 pour créer le délais. (125ms entre chaque état de la LED)
-Utilisation de l'oscillateur interne a 4MHz.
Ici je n'utilise que la variable "compteur" pour tester si elle incrémente bien.Code:#define led PORTA.B1 // masque pour le bit 1 unsigned int compteur; // variable pour stocker debordement TMR0 void interrupt() // routine interruption { if (INTCON.T0IF == 1) // si débordement TMR0 a lieu,alors { INTCON.T0IF = 0; // init du flag a 0 compteur++; // incrémentation de la variable } } void main() // routine principale { PORTA = 0; // init 0V TRISA = 0; // init full sortie PCON = 0b00001000; // init OSC interne 4MHz INTCON = 0b10100000; // interrupt autorisé,TMR0 activé CMCON = 7; // désactivation comparateur PORTA compteur = 0; // init variable a 0 while(1) { if (compteur == 490) // 490 vaut 125ms { led = 1; } if (compteur == 980) // 980 vaut 250ms { led = 0; compteur = 0; // init variable a 0 } } }
Vous remarquer sans doute que j'ai bien initialisé le PIC pour avoir son OSC interne a 4MHZ,j'ai bien initialisé les entrée/sortie et leur niveau logique,j'ai également désactivé les comparateur du PORTA,autorisé les interruptions et activé l'interruption TMR0.
Avant de poster je me suis cassé la tête pour trouver l'erreur et comparer avec d'autre code a moi qui fonctionne et tous est correcte pour la routine d'interruption,j'ai vérifier les moindre détails comme les points virgule,les double = dans un IF ect...
J'ai également vérifier les paramètre de mon projet.J'ai bien choisi le bon pic et la fréquence a la quelle j'allais l'utilisé,j'ai désactivé le MCLR car je n'en avais pas besoin ici et j'ai précisé que j'allais aussi utilisé l'oscillateur interne du PIC.
Qu'en pensez-vous??
Cordialement.
-----