« Utiliser les PIC 16F et 18F/Exercices/Interruption timer0 en langage C » : différence entre les versions

m
Pour la période de l'interruption, on part de la fréquence quartz divisée par 4 soit : 1 MHz qu'il faut diviser par 10 000 pour avoir une période d'overflow de 10 ms. Le timer gère une division par 256 qu'on peut ramener à 250 en l'initialisant à 6 mais il nous reste à réaliser une division par 40 qui n'est pas une puissance de 2. On va prendre une division par 64 et 10000 / 64 = 156,25 donc notre timer0 sera initialisé à 256-156 = 100.
<source lang="c">
//****** Mikro C ********
nb++;
unsigned char nb;
// gérer le problème des unités
main(void) {
if ((nb &0x0F) > 9) then nb+=6;
TRISB = 0xFC; // 6 entrees, 2 sorties pour B
// gérer le problème des dizaines
TRISC = 0x00; // 8 sorties pour B
if ((((nb &0xF0) > 0x90) nb = 0;
OPTION = 0x05; // prescaler 64, entree sur quartz
INTCON = 0xA0; // autorise l'interruption timer
TMR0 = 100 ;
nb=0;
while(1) {
// boucle principale compte en BCD
nb++;
// gérer le problème des unités
if ((nb &0x0F) > 9) then nb+=6;
// gérer le problème des dizaines
if ((((nb &0xF0) > 0x90) nb = 0;
Delay_ms(1000);
}
}
</source>
4°)
<source lang="c">
void interrupt(void) {
TMR0 = 100;
}
</source>
 
}}
 
10 144

modifications