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 : Tout sélectionner
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.