Dans cette partie du tutoriel que nous allons parler des interruptions de travail utilisant le compteur par exemple. Interruptions améliorent l’utilisation de microcontrôleurs de manière énorme. Interruptions rendre vos programmes réagissent au matériel des microcontrôleurs, qui peut être une réaction du circuit à l’extérieur du microcontrôleur.
En termes de base, une interruption est exactement ce qu’il est indiqué comme. Elle interrompt un flux normal du programme en cours d’exécution pour exécuter une autre tâche (autre bloc de code que vous programmer). Supposons, par exemple votre programme fait normal LED clignotant et vous le voulez pour réagir à un capteur PIR (relié à une tige d’interruption) et va à un bloc de code spécial à faire un bip d’un vibreur relié à la broche un autre. Si vous dites que le microcontrôleur pour ce faire, elle s’arrête le programme mort et allez dans le code qui appartient à l’interruption (faire un bip). Après que interruption code est exécuté, le programme arrêté reprend précisément là où il était arrêté. Dans certains exemples, interruptions serait une alternative aux bureaux de vote, ce qui exigerait des cycles du programme. Dire que votre programme est de vouloir seulement un bip quand quelqu'un passe devant les capteurs PIR. Votre programme pourrait garder stable que la broche pour voir si il y a une concentration élevée de reprises au sein de la boucle sans fin (while (1)). Ou bien, supprimez tout le code de programme du scrutin afin de tester le code confidentiel d’une concentration élevée et permettre l’interruption de procéder automatiquement au code bip lorsque le microcontrôleur détecte la lecture élevée.
Quels types d’interruptions sont disponibles pour le Microcontrôleur AVR ? Interruptions peuvent être établies pour des événements tels que le nombre d’un compteur, une épingle changeant recevoir communication série État (de faible à élevé, ou vice versa) des informations, ou de l’analogique au numérique après avoir établi une conversion. Voici une liste de vecteurs d’interruption que vous pouvez utiliser. Autres tutoriels feront usage de bon nombre de ces vecteurs.
Nous allons utiliser le timer/compteur à titre d’exemple. Nous vous indiquerons le timer/compteur un nombre qui le TCNT1 (le compteur) devront correspondre. Le nombre de match ira dans un registre dénommé OCR1A (sortie comparer s’inscrire). Le « 1 » représente le compteur spécifique nous utilisons qui est la version 16 bits. Nous avons deux OCRs, le A et le B. On va utiliser A pour cet exemple. Mais nous ne savons pas si le compteur se remettra à zéro lorsque le match est fait ? Nous voulons certainement repartira ensuite le TCNT1 pour revenir à zéro si le décompte et nous obtenons un autre match à notre nombre prévu, mais cela n’est pas fait dans le code, comme nous l’avons fait la dernière fois (n’oubliez pas du TCNT1 = 0;). Cette fois, nous voulons activer un autre interrupteur dans le registre de contrôle TCCR1B appelé WGM12 (forme d’onde Mode génération de minuterie 1). Le #2 dans cet aiguillage représente juste quel WGM c’est, car il y a quelques. Nous aussi utilisera le CS10 et CS11 à nouveau pour définir le prescaling à 64 comme dans l’intro de minuteries vidéo.
Alors le temporisateur/compteur aurez besoin de savoir que nous avons l’intention d’utiliser la fonction d’interruption. Ceci est fait par le biais de la TIMSK (Timer/compteur Interrupt Mask Register). Il suffit d’actionner un interrupteur dans ce registre : le OCIE1A (sortie comparer A Match interrompre activer) commutateur. Une fois la numéro mis en la OCR1A est compensée par le compteur, le programme sera interrompu pour activer/désactiver la LED. Pour une interruption se produise, il faudra activer les interruptions globales « sei() », puis nous aurons besoin permettre l’interruption du timer/compteur, et enfin la routine de service d’interruption (ISR) devront être créées. La routine d’interruption du service est juste comme les fonctions qui ont été faites dans l’exemple de jeu de bouton. La routine d’interruption du service est juste un bloc de code en dehors de la routine principale et commence par ISR avec le vecteur dans la parenthèse "(vecteur)", permise par le bloc de code accolades "{Code}". Pour le timer/compteur (version 16-bit) et le fait que nous utilisons la version A de l’OCR1, le nom de vecteur est : TIMER1_COMPA_vect. La routine serait donc : ISR(TIMER1_COMPA_vect) {code à exécuter}. Nous avons utilisé un certain nombre dans l’intro de la vidéo de minuteries qui représentait une seconde : 15625, donc nous allons utiliser celui-ci pour le OCR1A. Mais le nombre devrait envisager d’indexation à partir de 0, donc nous aurons besoin d’utiliser le numéro 15624 plutôt.