ABCelectronique : portail d'information dans le domaine de l'électronique

Merci de ne pas poster des messages en relation avec le piratage.


    Forums de Abcelectronique > Software / Péri-informatique
  » programme mikropascal
Identifiant Se souvenir de moi ?
Mot de passe
Répondre     Nouvelle discussion
programme mikropascal

 

aigle666
aigle666 ☆☆☆☆☆☆☆ 18/06/2017, 20h20 #1  
bonjour a tous , j'ai un petit problème avec mon programme qui est écrit en mikropascal , j'utilise un 16f84a et le débordement du TMR0 et RB0/int , a chaque debordement du TMR0 j'increment une variable cmpt_TMR0 et a chaque fois que RB0/int reçois une impultion j'increment une autre variable cmpt_RB0
puis je compare les deux variable et si cmpt_TMR0 > cmpt_RB0 j'active les RA0 et RA1 , mais qu'on je fais la simulation mon programme bug il m'active a chaque foie les pin RA0 et RA1 RA2 RA3 voici le programme et quelqu'un pourrais voir
Code:
program TMR0 ; var cmpt_RB0 : byte ; cmpt_TMR0 : byte ; val_TMR0 : byte; bIntRB0 : boolean ; bIntT0 : boolean ; procedure Interrupt ; begin // interruption liée a l'etat logique de RB0 ? if INTCON.INTF = 1 then begin INTCON.INTF := 0 ; // remise a zéro du bit d'état de l'interruption RB0/INT bIntRB0 := true ; end; // interruption liée au TMR0 ? if INTCON.T0IF = 1 then begin INTCON.T0IF := 0 ; // remise a zéro du bit d'état de l'interruption Timer0 bIntT0 := true ; // en garde ce bit pour l'éxploiter plus tard end; end; begin TRISA := %00000000 ; //toutes les ligne du port A en sortie TRISB := %11111111 ; //toutes les ligne du port B en entrée OPTION_REG := %01000000 ; INTCON.INTF := 0 ; // mise a zéro du bit d'indication (flag) INTF INTCON.INTE := 1 ; // activation de l'interruption RB0/INT INTCON.GIE := 1 ; // activation des générale des interruptions INTCON.T0IE := 1 ; // activation de l'interruptions TMR0 INTCON.T0IF := 0 ; // mise a zéro du bit d'indication (flag) T0IF TMR0 := 0 ; while true do // interruption détectée pour le Timer0, on fait maintenan ce qu'il faut if bIntRB0 = true then begin PORTA.2 := 1 ; // allumage de la LED cablée sur RA2 Delay_ms(10000); // temps d'extinction de la LED PORTA.2 := 0 ; // extinction de la LED RA2 bIntRB0 := false ; // effacement de la variable INTCON.T0IF := 0 ; // remise a zéro du (flag) T0IF TMR0 := $00; //remise a zéro du TMR0 cmpt_RB0 := $00 ; // remise a zéro de cmpt_RB0 cmpt_RB0 := cmpt_RB0+1 ; // on incrémente le compteur de RB0 end else nop ; if bIntT0 = true then begin PORTA.3 := 1 ; // allumage ou extinction de la LED cablée sur sur RA3 Delay_ms(10000); // temps d'extinction de la LED PORTA.3 := 0 ; // extinction de la LED bIntT0 := false ; // effacement de la variable bintT0 INTCON.T0IF := 0 ; // remise a zéro du (flag) T0IF TMR0 := $00 ; // remise a zéro du TMR0 cmpt_TMR0 := cmpt_TMR0+1 ; // on incrémente le compteur end else nop ; if INTCON.T0IF =1 then begin INTCON.T0IE := 0 ; // on interdit les interruption TMR0 INTCON.T0IF := 0 ; // remise a zéro du (flag) T0IF du TMR0 TMR0 := val_TMR0 ; // on lit la valeur du TMR0 et on l'affect a val_TMR0 end else nop ; if cmpt_TMR0 > cmpt_RB0 then begin PORTA.0 := 1 ; // activation broche RA0 Delay_ms(10000); // temps d'extinction de la LED PORTA.0 := 0 ; // désactivation de RA0 PORTA.1 := 1 ; // activation broche RA1 Delay_ms(10000) ; // temps d'extinction de la LED PORTA.1 := 0 ; // désactivation de RA1 end else nop ; end.

Dernière modification par Fas54 18/06/2017 à 22h36.
pierrelec
pierrelec ★★★★★☆☆ 19/06/2017, 12h54 #2  
Bonjour, ton code présente quelques anomalies mais avant d'aller plus loin, peux tu expliquer ce que tu cherches à faire, car j'ai du mal à comprendre.
Comment est configuré le prescaller du timer 0 ?
maî
maî ★★★★★☆☆ 19/06/2017, 14h21 #3  
bonjour

Pourquoi ta description qui est tres bien ne correspond pas a ton code

Par exemple incrémenter les variables: cmpt_RB0 et cmpt_TMR0 en dehors de l'int.
Tout comme ton test n'est pas au bon endroit c'est lui qui doit te faire aller sur PORTA2 ou PORTA3

manque un peu d'organisation cela

A+
__________________
le souffle du vent passe ...........
Répondre