Systèmes embarqués - Minuterie / Compteur

UNE timerest un type d'horloge spécialisé utilisé pour mesurer les intervalles de temps. Une minuterie qui compte à partir de zéro pour mesurer le temps écoulé est souvent appeléestopwatch. Il s'agit d'un appareil qui compte à rebours à partir d'un intervalle de temps spécifié et utilisé pour générer un délai, par exemple, un sablier est une minuterie.

UNE counterest un appareil qui stocke (et parfois affiche) le nombre de fois qu'un événement ou un processus particulier s'est produit, par rapport à un signal d'horloge. Il est utilisé pour compter les événements se produisant en dehors du microcontrôleur. En électronique, les compteurs peuvent être implémentés assez facilement à l'aide de circuits de type registre tels qu'une bascule.

Différence entre une minuterie et un compteur

Les points qui différencient une minuterie d'un compteur sont les suivants -

Minuteur Compteur
Le registre incrémenté à chaque cycle de la machine. Le registre est incrémenté en considérant une transition de 1 à 0 au niveau de sa correspondant à une broche d'entrée externe (T0, T1).
Le taux de comptage maximum est de 1/12 de la fréquence de l'oscillateur. Le taux de comptage maximum est de 1/24 de la fréquence de l'oscillateur.
Une minuterie utilise la fréquence de l'horloge interne et génère un retard. Un compteur utilise un signal externe pour compter les impulsions.

Minuteries de 8051 et leurs registres associés

Le 8051 a deux minuteries, la minuterie 0 et la minuterie 1. Elles peuvent être utilisées comme minuteries ou comme compteurs d'événements. La minuterie 0 et la minuterie 1 ont une largeur de 16 bits. Étant donné que le 8051 suit une architecture 8 bits, chaque 16 bits est accédé sous la forme de deux registres séparés d'octet bas et d'octet haut.

Registre de la minuterie 0

Le registre 16 bits de la minuterie 0 est accessible en octet bas et haut. Le registre d'octet de poids faible est appelé TL0 (Timer 0 octet de poids faible) et le registre d'octet de poids fort est appelé TH0 (Timer de 0 octet de poids fort). Ces registres sont accessibles comme n'importe quel autre registre. Par exemple, l'instructionMOV TL0, #4H déplace la valeur dans l'octet de poids faible de la minuterie n ° 0.

Registre de la minuterie 1

Le registre 16 bits de la minuterie 1 est accessible en octet bas et haut. Le registre d'octet de poids faible est appelé TL1 (octet de poids faible du minuteur 1) et le registre d'octet de poids fort est appelé TH1 (octet de poids fort de la minuterie 1). Ces registres sont accessibles comme n'importe quel autre registre. Par exemple, l'instructionMOV TL1, #4H déplace la valeur dans l'octet de poids faible de la minuterie 1.

Registre TMOD (mode minuterie)

La minuterie 0 et la minuterie 1 utilisent le même registre pour régler les divers modes de fonctionnement de la minuterie. Il s'agit d'un registre à 8 bits dans lequel les 4 bits inférieurs sont mis de côté pour le temporisateur 0 et les quatre bits supérieurs pour les temporisateurs. Dans chaque cas, les 2 bits inférieurs sont utilisés pour régler le mode de minuterie à l'avance et les 2 bits supérieurs sont utilisés pour spécifier l'emplacement.

Gate - Lorsqu'il est réglé, le temporisateur ne fonctionne que lorsque INT (0,1) est élevé.

C/T - Bit de sélection du compteur / minuterie.

M1 - Mode bit 1.

M0 - Bit de mode 0.

PORTE

Chaque minuterie a un moyen de démarrer et d'arrêter. Certains temporisateurs le font par logiciel, certains par matériel, et certains ont à la fois des contrôles logiciels et matériels. Les minuteries 8051 ont à la fois des commandes logicielles et matérielles. Le démarrage et l'arrêt d'une minuterie sont contrôlés par un logiciel à l'aide de l'instructionSETB TR1 et CLR TR1 pour la minuterie 1, et SETB TR0 et CLR TR0 pour la minuterie 0.

L'instruction SETB est utilisée pour la démarrer et elle est arrêtée par l'instruction CLR. Ces instructions démarrent et arrêtent les minuteries tant que GATE = 0 dans le registre TMOD. Les minuteries peuvent être démarrées et arrêtées par une source externe en faisant GATE = 1 dans le registre TMOD.

C / T (HORLOGE / MINUTERIE)

Ce bit du registre TMOD est utilisé pour décider si un temporisateur est utilisé comme delay generator ou un event manager. Si C / T = 0, il est utilisé comme temporisateur pour la génération du retard de temporisation. La source d'horloge pour créer le retard temporel est la fréquence du cristal du 8051. Si C / T = 0, la fréquence du cristal attachée au 8051 décide également de la vitesse à laquelle le minuteur 8051 tourne à un intervalle régulier.

La fréquence de la minuterie est toujours 1 / 12ème de la fréquence du cristal attaché au 8051. Bien que divers systèmes basés sur 8051 aient une fréquence XTAL de 10 MHz à 40 MHz, nous travaillons normalement avec la fréquence XTAL de 11,0592 MHz. C'est parce que la vitesse de transmission pour la communication série du 8051.XTAL = 11.0592 permet au système 8051 de communiquer avec le PC sans erreur.

M1 / M2

M1 M2 Mode
0 0 Mode minuterie 13 bits.
0 1 Mode minuterie 16 bits.
1 0 Mode de rechargement automatique 8 bits.
1 1 Mode renversé.

Différents modes de minuteries

Mode 0 (mode minuterie 13 bits)

La minuterie 1 et la minuterie 0 en mode 0 fonctionnent comme des compteurs à 8 bits (avec un prédécaleur à division par 32). Le registre de minuterie est configuré comme un registre de 13 bits composé des 8 bits de TH1 et des 5 bits inférieurs de TL1. Les 3 bits supérieurs de TL1 sont indéterminés et doivent être ignorés. La définition de l'indicateur d'exécution (TR1) n'efface pas le registre. L'indicateur d'interruption de temporisation TF1 est mis à 1 lorsque le compte passe de tous les 1 à tous les 0. Le fonctionnement en mode 0 est le même pour la minuterie 0 que pour la minuterie 1.

Mode 1 (mode minuterie 16 bits)

Le mode de minuterie "1" est une minuterie de 16 bits et est un mode couramment utilisé. Il fonctionne de la même manière que le mode 13 bits sauf que tous les 16 bits sont utilisés. TLx est incrémenté de 0 à un maximum de 255. Une fois que la valeur 255 est atteinte, TLx se réinitialise à 0, puis THx est incrémenté de 1. Comme il s'agit d'un temporisateur complet de 16 bits, le temporisateur peut contenir jusqu'à 65536 valeurs distinctes et il débordera de nouveau à 0 après 65 536 cycles machine.

Mode 2 (rechargement automatique 8 bits)

Les deux registres de minuterie sont configurés comme des compteurs 8 bits (TL1 et TL0) avec rechargement automatique. Le débordement de TL1 (TL0) définit TF1 (TF0) et recharge également TL1 (TL0) avec le contenu de Th1 (TH0), qui est prédéfini par le logiciel. Le rechargement laisse TH1 (TH0) inchangé.

L'avantage du mode de rechargement automatique est que vous pouvez faire en sorte que la minuterie contienne toujours une valeur comprise entre 200 et 255. Si vous utilisez le mode 0 ou 1, vous devrez vérifier le code pour voir le débordement et, dans ce cas, remettre la minuterie à 200. Dans ce cas, de précieuses instructions vérifient la valeur et / ou se rechargent. En mode 2, le microcontrôleur s'en charge. Une fois que vous avez configuré une minuterie en mode 2, vous n'avez pas à vous soucier de vérifier si la minuterie a débordé, ni à vous soucier de la réinitialisation de la valeur car le matériel du microcontrôleur fera tout pour vous. Le mode de rechargement automatique est utilisé pour établir une vitesse de transmission commune.

Mode 3 (mode minuterie fractionnée)

Le mode de minuterie "3" est appelé split-timer mode. Lorsque le temporisateur 0 est placé en mode 3, il devient deux temporisateurs 8 bits séparés. La minuterie 0 est TL0 et la minuterie 1 est TH0. Les deux temporisateurs comptent de 0 à 255 et en cas de dépassement, remis à 0. Tous les bits qui sont du temporisateur 1 seront désormais liés à TH0.

Lorsque le temporisateur 0 est en mode fractionné, le véritable temporisateur 1 (c'est-à-dire TH1 et TL1) peut être réglé dans les modes 0, 1 ou 2, mais il ne peut pas être démarré / arrêté car les bits qui le font sont maintenant liés à TH0. La minuterie réelle 1 sera incrémentée à chaque cycle de la machine.

Initialisation d'un minuteur

Décidez du mode de minuterie. Considérez une minuterie 16 bits qui fonctionne en continu et qui est indépendante de toutes les broches externes.

Initialisez le TMOD SFR. Utilisez les 4 bits les plus bas de TMOD et considérez Timer 0. Conservez les deux bits, GATE 0 et C / T 0, à 0, car nous voulons que le timer soit indépendant des broches externes. Le mode 16 bits étant le mode minuterie 1, effacez T0M1 et réglez T0M0. En effet, le seul bit à activer est le bit 0 de TMOD. Exécutez maintenant l'instruction suivante -

MOV TMOD,#01h

Maintenant, la minuterie 0 est en mode de minuterie 16 bits, mais la minuterie ne fonctionne pas. Pour démarrer la minuterie en mode exécution, définissez le bit TR0 en exécutant l'instruction suivante -

SETB TR0

Maintenant, la minuterie 0 commencera immédiatement à compter, étant incrémentée une fois à chaque cycle de la machine.

Lire une minuterie

Un temporisateur 16 bits peut être lu de deux manières. Soit vous lisez la valeur réelle de la minuterie sous la forme d'un nombre de 16 bits, soit vous détectez quand la minuterie a dépassé.

Détection du dépassement de la minuterie

Lorsqu'un temporisateur déborde de sa valeur la plus élevée à 0, le microcontrôleur définit automatiquement le bit TFx dans le registre TCON. Ainsi, au lieu de vérifier la valeur exacte de la minuterie, le bit TFx peut être vérifié. Si TF0 est défini, alors le temporisateur 0 a débordé; si TF1 est activé, alors le temporisateur 1 a débordé.