Un petit topo sur timer(rien sur les INT)
Les Timers (ICI 16F) sont des
COMPTEURS qui sont
INCRÉMENTES au même rythme que le pointeur instruction(cycle machine) une instruction NOP = le pointeur instruction suivant "+1" en 1 cycles ,le timer une incrémentation, un GOTO 3 cycles ,3 incrémentations du timer , et comme la fréquence du pointeur instruction (Fcy) et de : Fosc/4 (fréquence de votre quartz par exemple 4Mhz/4 ) la Fcy est donc de 1Mhz ou 1000000 Fcy ou 1µs
Tres bien nous avons donc notre compteur qui augmente, tout seul au rythme de 1µs, voir +. Un compteur part de la valeur zéro pour aller à ... et bien suivant le type du timer, vous avez :
le timer0 -> 8bits de 0 -> 255 -> 0 etc...
le timer1 -> 16bits de 0 -> 65535 -> 0 etc..
le timer2 -> 8bits de 0 -> 255 > 0 etc...
On part sur le Timer0, le 2 est spécial,et le 1 un peu trop gros. Bien oui au plus simple.
Alors donc notre compteur(0), tourne au rythme de nos instructions quand il arrive au passage de 255(0XFF) à 0 une int est déclenché, après on gère cette int suivant les besoins.
Notre timer0 déclenche tout les 256 Fcy une INT ou 256 µs à 4Mhz .OUI mais la c'est pas beaucoup 256 µs, exact alors comme faire , on sait faire des compteurs, mais aussi des diviseurs, les plus simples, sont des multiples du plus simple, le diviseur par 2 (deux fronts(Montant ou descendant) pour changer la sortie). Ces diviseurs, on peut les mettre, avant compteur (pre diviseur ) après compteur (post diviseur) donc on à pour le trimer0:
Un pré de 2,4,8,16,32,64,256 ,voir registre OPTION_REG pour sa sélection.
On peut charger et recharger le timer0, son registre est en lecture/écriture, un exemple simple,(sans diviseur):
si on charge et recharge le compteur d'une valeur 56, il reste 200 Fcy avant int donc une int toute les 200 µs. Il faut seulement, suivant nos besoins ,charger régulièrement le timer0, d'une valeur donc la formule est :
TMR0=((256)-(((Fosc/4000000 )*temps désire)/diviseur)
exemple je veux 1mS soit 1000µs
avec diviseur 4
TMR0=(256-(((4000000/400000)*10000)/4)
TMR0=.256-((.......(.1.)...........…...*.10000)/4)
TMR0=256 -250
TMR0 =6.
6 est la valeur à charger et recharger dans le registre TRM0.
une int toute les: de 6 à 256=250 * 4 du diviseur =1000µs.
ATTENTION a ne passer les 256 dans le calcul de (((Fosc/4000000 )*temps désire)/diviseur) et 256-257=-1 marche pas donc jouer avec le diviseur et la aussi il y à une limite .
A+
PS comme dab un peu trop long

si question comme dab pas de problème et bien sur je revendique le droit a l'erreur, cela aussi comme dab
heu 3 dab j'ai gagné
