L'essentiel d'Assembleur

Gérer plusieurs interruptions

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Dans un second temps, servez-vous du timer 0 comme fonction de debounce sur 10ms. Ainsi, vous aller traiter deux interruptions l'une à la suite de l'autre.
06:52

Transcription

Dans cette vidéo donc je vais vous montrer comment gérer donc plusieurs sources d'interruption, au sein de votre même programme. Alors, pour cela nous utiliserons deux interruptions différentes. Celle que nous avons déjà vu sur INTE et puis celle sur le timer0. Alors pour cela, nous allons utiliser le timer0 comme système anti-rebond. Donc le debounce moyen étant d'environ 10 millisecondes. On va s'arranger donc pour faire ce calcul. Et puis, nous utiliserons aussi une petite macro pour voir un peu comment ça fonctionne. Alors, pour le calcul au niveau du timer0, on est toujours à 4 MHz. Donc une instruction dure une microseconde. Et puis, à partir de là nous ne changeons pas grand-chose à notre configuration, hormis le fait que nous passons sur un mode de comptage sur 64. Donc ce qui va nous amener sur ces bits-là, à 101. Puis nous allons avoir la configuration donc de l'interruption elle-même donc avec GIE qui doit être mis à 1 ainsi que timer0. Et pour le calcul et bien, puisque nous sommes à un comptage de 64 événements pour 256 microsecondes, cela nous fait 16.384. Donc nous, vu qu'on veut 10.000 microsecondes, donc 10 millisecondes, il nous faut encore 6.384 microsecondes. Alors, nous avons préchargé notre valeur avec 6.384 divisé par 64. Parce que nous avons toujours notre prescaler qui est à 64. Donc ce qui nous fait 99,75 et on va arrondir tout cela à 100, on n’est pas à quelques microsecondes près. Donc le détail de la procédure d'interruption va être ceci, on va mettre en place une interruption de 10 millisecondes à partir du lancement du programme. En entrant dans l'interruption du timer0 pour la première fois, on désactive l'interruption sur le timer0, et on active l'interruption sur INT. Donc, il s'est passé 10 millisecondes depuis le début du lancement. On attend un appui sur le front descendant, sur le BP raccordé à INT. Lorsque l'interruption sur INT apparaît, on traite le changement d'état de la LED et on désactive donc l'interruption sur INT. On réactive l'interruption de timer0 quand l'on précharge à 100. Le timer compte, créé une interruption, 10 millisecondes plus tard. Et on réactive INT. Et on recommence ceci à l'infini. Alors, bon ça paraît un petit peu compliqué, mais regardons tout de suite au niveau de notre programme. Donc, dans la zone de la déclaration en fait de la macro, j'ai décidé d’effectuer ce petit chargement. Sachant que bien évidemment au début j'ai changé le préchargement du timer0 à 100. J’ai laissé ma LED sur le port 0. Et puis voilà, alors une macro est faite normalement pour être utilisée plusieurs fois. Ici elle ne le sera qu'une seule fois. Mais c'est juste pour vous montrer en fait qu’on peut l'utiliser. Alors, je passe sur l'interruption tout d'abord j'explique donc le programme principal. J'ai fait un « copier-coller » intégral donc du datasheet. Et puis j'ai mis des flèches à côté donc, des bits qui vont être configurés. Et qui nous amène en fait à ce résultat-là. Donc, sachant qu'ici nous n'utilisons pas cette source d'interruption, donc celle-ci ne nous concerne pas non plus. Et celle-ci nous allons la mettre à 0 par défaut. Tout le reste nous concerne. Alors pour OPTION_REG j'ai fait de même. Donc toujours les petites flèches. Et puis le principe reste exactement le même que le programme précédent. Donc, à partir de là je n'ai strictement rien changé. Mon préchargement de mon timer0 j'ai fait appel à Macro_Timer0 qu'on a vu juste en haut. Et puis là cette fois-ci, le programme principal il ne fait rien. Alors, regardons un petit peu cette fois-ci nos sources d'interruption comment elles vont se superposer. Alors, celle qui va commencer en premier ça va être le timer0. Donc, j'effectue la même routine que précédemment. Et après je passe à call interruption_Timer0. Et là j'écris mon code qui correspond donc, à l'interruption sur timer0. Et on avait dit que l'on faisait quoi ? Et bien qu'on venait mettre en service en fait, INT. C'est ce que je fais ici. Alors on aurait pu juste mettre bit setf INTCON et INTE. Ça revenait strictement à la même chose. Mais c'est pour vous dire qu’on peut passer aussi sur deux mots. Alors, une fois que ceci est fait, on revient ici, et justement on efface le flag d'interruption qui est lié donc au timer0. Puis après, nous sortons de notre interruption. Voilà. Alors, surtout le flag effacé, j'insiste. Et puis maintenant que nous avons INT qui est cette fois-ci validé, dès que nous allons rentrer pour la deuxième fois en fait dans notre interruption liée à un changement d'état de INT, donc, cette partie-là va être validée. Et par contre je vais passer sur ce call, qui est ici. Et donc, le call interruption_INT, je vais le chercher là. Je fais quoi ? Et bien, je fais le changement d'état de ma LED, comme à l'accoutumée, et cette fois-ci je viens mettre donc mon flag hors service, surtout. Et en plus, je viens remettre en fait en service mon interruption donc sur le timer0. Alors, voyons un peu ce que cela peut nous donner sur Proteus. Donc là j'appuie sur « Play ». Et puis, voilà, donc là, évidemment 10 millisecondes ça passe extrêmement vite. On ne voit pas la différence. Mais justement vous pouvez modifier certains paramètres, notamment au niveau de votre microcontrôleur. Si vous regardez en fait ici, vous prenez donc passage de Low à High et puis vous pouvez lui mettre un Delay. Alors, ici par exemple de 1 seconde, OK. Et là on recommence. Et puis vous voyez que cette fois-ci, quand je remonte, ah, il se passe un certain temps. En effet, ça correspond en fait à un debounce simulé si on veut, en fait.

L'essentiel d'Assembleur

Plongez-vous dans le langage bas niveau, nommé Assembleur. Abordez les notions de jeu d'instructions, de pipeline, de registres, de mode d’adressage, de compteur de programme, etc.

4h52 (57 vidéos)
Aucun commentaire n´est disponible actuellement
Logiciel :
Spécial abonnés
Date de parution :26 sept. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !