bonjour à tous,
je programme en basic (proton IDE) et j'ai besoin d'utiliser une interruption sur le timer0.
le principe de mon programme est simple : une diode verte est toujours allumée et à chaque débordement de ce timer0 la diode verte s'éteint et une autre diode rouge s'allume pendant 2s, et ainsi de suite...... le problème c'est qu'il reste toujours dans le programme principal c'est à dire que la diode verte est toujours allumée et que la diode rouge ne s'allume jamais !!!
d'après mes calculs (Corrigez moi si je me trompe):Code:Set_Defaults PROTON_10 Device 16f77 CONFIG HS_OSC ,CP_OFF,BODEN_OFF ,PWRTE_OFF,WDT_OFF on_interrupt goto red dim v as word dim i as byte i =0 intcon.7 = 0 ' GIE = 0 INTCON.5 = 0 ' TMR0IE = 0 *** Enables the TMR0 interrupt goto debut red: i = i+1 if i == 100 then portc.2 = 1 portc.3 = 0 delayms 2000 i = 0 else intcon.2 = 0 ' TMR0IF = 0 Clear Flag tmr0 = 0 ' Reset TIMER0 end if CONTEXT RESTORE debut: option_reg.5 = 0 option_reg.4 = 0 option_reg.3 = 0 ' Prescaler is assigned to the Timer0 module option_reg.2 = 1 ' prescaler 1 : 256 option_reg.1 = 1 ' option_reg.0 = 1 ' trisc.2 = 0 trisc.3 = 0 portc.2 = 0 portc.3 = 0 TMR0=0 ' Reset TIMER0 intcon.7 = 1 ' GIE = 1 INTCON.5 = 1 ' TMR0IE = 1 *** Enables the TMR0 interrupt boucle: inc tmr0 portc.3 = 1 portc.2 = 0 goto boucle
horloge= 10 Mhz
le timer est connecté sur l'horloge interne => sa fréquence=2500Khz
j'ai utilisé le prescaler 1:256
Donc,
le timer0 déborde à chaque 20 ms :
2500Khz / (256*256) = 38,14 Hz
1 / 38.14 = 20 ms
la variable "i" sert de compteur : pour que la diode rouge s'allume chaque environ 2s le timer0 doit déborder 100 fois.
Merci d'avance pour votre aide !
-----