MC__UPUp mode: Timer counts up to TBxCL0
Ainsi, votre minuterie TBxR sera remise à 0 quand il atteint TBxCL0 qui semble être la valeur TB0CCR0.
Il ne peut jamais atteindre la valeur de 32768.
Vous pouvez changer TB0CCR0 avec TB0CCR1, de sorte que votre période sera de 1 seconde.
Et pour obtenir votre interruption 1ms, vous devez incrémenter votre TB0CCR1 à chaque fois.
INTERRUPT ISR_1MS()
{
TB0CCR1 = (TB0CCR1 + 32) & 0x7FFF;
}
Mais normalement, vous n'avez pas besoin d'un second temporisateur pour un second intervalle.
Vous pouvez simplement compter 1000 fois votre intervalle de 1ms.
INTERRUPT ISR_1MS()
{
ms_count++;
if (ms_count >= 1000)
{
ms_count=0;
// Do your second stuff
}
}
Et si vous avez besoin de plus et de différentes intervales, vous pouvez changer pour un autre modèle.
À l'heure de l'horloge système et contrôlez uniquement cette heure.
volatile unsigned int absolute_time=0;
INTERRUPT ISR_1MS()
{
absolute_time++;
}
unsigned int systime_now(void)
{
unsigned int result;
di();
result = absolute_time;
ei();
return result;
}
uint8_t systime_reached(unsigned int timeAt)
{
uint8_t result;
result = (systime_now() - timeAt) < 0x1000;
return result;
}
Nous vous remercions de votre réponse – Harikrishnan