Étape 7: délai
Maintenant que nous avons vu que notre routine d’interruption gestionnaire « overflow_handler » du débordement de minuterie fixera la variable « débordements » à zéro une fois chacun deuxième que nous pouvons utiliser ce fait pour concevoir une sous-routine « retard ».
Examinez le code suivant sous notre retard : étiquette
delay: clr overflows sec_count: cpi overflows,30 brne sec_count ret
Nous allons appeler cette sous-routine chaque fois que nous avons besoin d’un retard dans notre programme. La façon dont il fonctionne, c’est que tout d’abord, il définit la variable « déborde » à zéro. Puis il entre dans une zone intitulée « sec_count » et débordements compare avec 30, si elles ne sont pas égal il branches vers le label sec_count et compare encore et encore, etc. jusqu'à ce qu’ils sont enfin égaux (n’oubliez pas que tout le temps cela se passe sur notre gestionnaire d’interruption timer continue à incrémenter les variables débordements et donc elle change chaque fois que nous allons ici. Lorsque débordements enfin est égal à 30, il sort de la boucle et retourne à chaque fois que nous avons appelé délai : de. Le résultat net est un retard de 1/2 seconde
Exercice 2: changer la routine overflow_handler à ce qui suit :
overflow_handler: inc overflows reti
puis exécutez le programme. Quelque chose est différent ? Pourquoi ou pourquoi pas ?