Étape 6: Dépassement de capacité gestionnaire
Nous allons donc supposer que le registre de la minuterie/counter0 a juste débordé. Nous savons maintenant que le programme reçoit un signal d’interruption et exécute le 0 x 0020 qui indique le compteur de programme, PC pour accéder à l’étiquette « overflow_handler » ce qui suit est le code que nous a écrit après cette étiquette :
overflow_handler: inc overflows cpi overflows, 61 brne PC+2 clr overflows reti
La première chose qu’il fait est incrémenter la variable « débordements » (qui est notre nom pour registre de travail polyvalent R17) puis il « compare » le contenu des débordements portant le numéro 61. La façon dont les œuvres d’IPC instruction sont qu’il soustrait simplement les deux nombres et si le résultat est zéro il définit l’indicateur de Z dans le registre SREG (je vous ai dit nous verrait ce registre tout le temps). Si les deux nombres sont égaux alors le drapeau Z sera un 1, si les deux nombres ne sont pas égaux, alors il sera un 0.
La ligne suivante dit « brne PC + 2 », qui signifie « branche si différent ». Essentiellement, il vérifie le drapeau Z SREG et si elle n’est pas un (c.-à-d. les deux nombres ne sont pas égales, si elles étaient égales, le voyant zero est défini) le PC bifurque vers PC + 2, ce qui signifie il saute de la ligne suivante et va droit au « reti » qui renvoie de l’interruption mettre tout ce qu’il était dans le code lorsque l’interruption est arrivé. Si l’instruction brne trouvé un 1 dans le zéro bit indicateur il n'aurait pas créer de branche et au lieu de cela, elle continuerait juste à la ligne suivante qui serait clr débordements initialiser à 0.
Ce qui est le résultat net de tout cela ?
Nous voyons bien que chaque fois qu’il y a un débordement du timer ce gestionnaire augmente la valeur de « débordements » par l’un. Si la variable « déborde » est comptant le nombre de débordements lorsqu’ils se produisent. Chaque fois que le nombre atteint 61 nous on remis à zéro.
Maintenant pourquoi dans le monde nous ferait cela ?
Nous allons voir. Rappelons que notre vitesse d’horloge pour nos CPU est 16MHz et nous « prescaled » à l’aide de TCCR0B, afin que la minuterie atteint seulement à un taux de 15625 impulsions par seconde droit ? Et chaque fois que la minuterie atteint un nombre de 255 qu'elle déborde. Ce qui signifie qu'il déborde de 15625/256 = 61.04 fois par seconde. Nous sommes suivi de celui des débordements avec notre variable « débordements » et on compare ce chiffre à 61. Donc, nous voyons que « déborde » égalera 61 une fois par seconde ! Donc notre gestionnaire se remettra « déborde » à zéro une fois par seconde. Donc si nous devions simplement surveiller les « débordements » variables et prenez note de chaque fois qu’il remet à zéro que nous aurait compter seconde par seconde en temps réel.
Maintenant nous avons « traitées » les interruptions de débordement du timer. Assurez-vous que vous comprenez comment ce travaux et puis passer à l’étape suivante, où nous faisons utilisent ce fait.