L'interfaçage des LED est la première chose que l'on essaierait de faire en se familiarisant avec n'importe quel microcontrôleur. Donc, dans ce tutoriel, nous allons interfacer une LED avec le microcontrôleur 8051, et écrirons un programme C pour faire clignoter la LED. Nous avons utilisé un microcontrôleur AT89S52 très populaire, de la famille 8051, par ATMEL.
Avant d'entrer dans les détails, nous devrions avoir une brève idée du microcontrôleur AT89S52. Il s'agit d'un microcontrôleur à 40 broches et de 4 ports (P0, P1, P2, P3), chaque port a 8 broches. On peut considérer chaque port comme un registre 8 bits, du point de vue logiciel. Chaque broche ayant une ligne d'entrée / sortie, signifie que chaque broche peut être utilisée aussi bien pour l'entrée que pour la sortie, c'est-à-dire pour lire les données d'un périphérique comme un capteur ou pour fournir sa sortie à un périphérique de sortie. Certaines broches ont la fonctionnalité Double, qui a été mentionnée entre parenthèses dans le diagramme des broches ci-dessous. Double fonctionnellement comme pour les interruptions, les compteurs, les minuteries, etc.
AT89S52 a deux types de mémoire, la première est la RAM qui a 256 octets de mémoire et la seconde est EEPROM (mémoire en lecture seule effaçable électroniquement et programmable) qui a 8k octets de mémoire. La RAM est utilisée pour stocker les données pendant l'exécution d'un programme et l'EEPROM utilisée pour stocker le programme lui-même. EEPROM est la mémoire flash dans laquelle nous avons utilisé pour graver le programme.
Schéma de circuit et explication
Nous utilisons la broche 1 du port 1 pour connecter la LED. Dans la programmation C intégrée, nous pouvons accéder au PIN 1 du port 1 en utilisant P1_0. Nous avons connecté un oscillateur à cristal de fréquence 11,0592 MHz aux broches 19 et 18, c'est-à-dire XTAL1 et XTAL2. L'oscillateur à cristal est utilisé pour générer des impulsions d'horloge, et l'impulsion d'horloge est utilisée pour fournir la moyenne pour le calcul de la synchronisation, qui est obligatoire pour synchroniser tous les événements. Ce type de cristaux est utilisé dans presque tous les équipements numériques modernes comme les ordinateurs, les montres, etc. Le cristal le plus couramment utilisé est le quartz. C'est un circuit oscillateur résonnant et des condensateurs sont utilisés pour faire osciller le cristal, nous avons donc connecté ici des condensateurs de 22pf. Vous pouvez lire sur les «circuits résonnants» pour en savoir plus.
Le schéma de circuit pour l'interfaçage des LED avec le microcontrôleur 8051 89S52 est illustré dans la figure ci-dessus. La broche 31 (EA) est connectée à Vcc, qui est une broche basse active. Cela devrait être connecté à Vcc lorsque nous n'utilisons aucune mémoire externe. La broche 30 (ALE) et la broche 29 (PSEN) sont utilisées pour connecter le microcontrôleur à la mémoire externe et la broche 31 indique au microcontrôleur d'utiliser la mémoire externe, lorsqu'il est connecté à la terre. Nous n'utilisons aucune mémoire externe, nous avons donc connecté Pin31 à Vcc.
La broche 9 (RST) est le code PIN de réinitialisation, utilisé pour réinitialiser le microcontrôleur et le programme recommence depuis le début. Il réinitialise le microcontrôleur lorsqu'il est connecté à HIGH. Nous avons utilisé un circuit de réinitialisation standard, une résistance de 10 kohms et un condensateur 1 uF pour connecter la broche RST.
Maintenant, la partie intéressante ici est que nous connectons la LED à l'envers, c'est-à-dire une jambe négative avec le PIN du microcontrôleur, car le microcontrôleur ne fournit pas assez de puissance pour allumer une LED, donc ici la LED fonctionne sur la logique négative comme quand, la broche P1_0 est 1 alors la LED sera réglée sur OFF et lorsque la sortie de la broche est à 0, la LED sera allumée. Lorsque la sortie PIN est à 0, elle se comporte comme la masse et la LED s'allume.
Explication du code
L'en-tête REGX52.h a été inclus pour inclure les définitions de registre de base. Il existe de nombreux types de variables et de constantes dans le C embarqué comme int, char, unsigned int, float, etc., vous pouvez les apprendre facilement. Ici, nous utilisons un entier non signé dont la plage est de 0 à 65535. Nous utilisons «pour la boucle» pour créer un retard, de sorte que la LED sera allumée pendant un certain temps (P1_0 = 0, logique LED négative) et et éteinte (P1_0 = 1, logique LED négative) pour le temps différé. Généralement, quand «pour la boucle» s'exécute 1275 fois, cela donne un délai de 1 ms, nous avons donc créé la fonction «delay» pour créer DELAY et l'avons appelée depuis le programme principal (main ()). Nous pouvons passer le temps de DELAY (en ms) en appelant la fonction «delay» à partir de la fonction principale. Dans le programme, «While (1)» signifie que le programme s'exécutera indéfiniment.
J'explique brièvement comment 1275 fois l'exécution de la boucle «for» donne un délai de 1 ms:
En 8051, 1 cycle de machine nécessite 12 impulsions de cristal pour s'exécuter et nous avons utilisé un cristal de 11,0592 Mhz.
Donc, temps nécessaire pour 1 cycle de machine: 12 / 11,0592 = 1,085us
Donc 1275 * 1,085 = 1,3 ms, 1275 fois la boucle «for» donne près de 1 ms de retard.
Le retard exact produit par le programme «C» est très difficile à calculer, lors de la mesure à partir de l'oscilloscope (CRO), car (j = 0; j <1275; j ++) donnent un retard de près de 1 ms.
On peut donc comprendre en interfaçant simplement la LED avec le microcontrôleur 8051, qu'avec un simple codage, on peut interagir et contrôler le matériel via un logiciel (programmation) à l'aide d'un microcontrôleur. Nous pouvons également manipuler chaque port et chaque broche du microcontrôleur par programmation.