La programmation des pic16F876

  Electronique et Loisirs - Pic - Cours de Programmation.Extrait du CHAPITRE II

Dans l’apprentissage de la programmation, rien ne vaut l’exemple. Pour cela, nous vous propo-sons trois petits pro-grammes que nous détaillerons. Pour tous nos exemples nous ferons référence à la car te de test décrite dans le chapitre I. Elle contient, entre autres, un afficheur 7 segments à cathode commune et un buzzer.

Le fichier DEMO_01.ASM
Le premier programme, DEMO_01.ASM, permet de faire clignoter un afficheur 7 segments reliés au PORT_C du microcontrô-leur.

Il faudra imposer un 1 logique en sortie du microcontrôleur pour allumer le segment correspondant, et un 0 pour l’éteindre.


Dans la première par tie du pro-gramme, les valeurs respectives des PORT_A, PORT_B et PORT_C, sont données à travers la directive EQU. De cette façon les ports sont définis. Ils correspondent respect-tivement aux registres d’adresse 05, 06 et 07.

On définit ensuite le registre STA-TUS, d’adresse 03, et ses deux bits RP0 et RP1, qui nous servi-ront pour sélectionner les diffé-rentes banques de mémoire.


Puis c’est le tour de TRISA, TRISB, et TRISC, qui sont les registres de configuration des por ts, à travers lesquels vous pourrez définir si les pattes sont configurées en entrée ou en sortie.


Les deux registres ADCON0 et ADCON1 gèrent le conver-tisseur A/D. Notez bien que, même si le convertisseur A/D n’est pas utilisé dans cette application, vous devez de toute façon le configurer puisque 5 lignes du PORT_A sont par-tagées avec le convertisseur analo-gique/digital à 10 bits, présent à l’in-térieur du microcontrôleur.


Vous pouvez utiliser le PORT_A comme un por t normal digital ou bien utiliser une par tie des lignes comme entrées pour le conver tisseur A/D. Pour déci-der comment utiliser le PORT_A, vous devrez préparer correctement certains des bits du registre ADCON1.


Voyons ce registre en détail. Les quatre bits qui nous intéressent sont les bits les moins significatifs, dénommés PCFG0, PCFG1, PCFG2 et PCFG3. Le tableau du registre de contrôle du conver tisseur A/D (Tableau 1) montre, en fonction des différentes combinai-sons de ces quatre bits, quelles pattes du PORT_A deviennent entrées analo-giques ou bien entrées / sorties digi-tales.


Les deux colonnes Vref+ et Vref– font référence à la référence de tension que le conver tisseur utilisera pour ef fec-tuer la conversion A/D. Vref+ et Vref–peuvent coïncider avec les alimenta-tions du microcontrôleur ou bien peu-vent être des tensions appliquées à certaines pattes du port.


Si, par exemple, nous mettons les quatre bits de configuration à 0, ce qui correspond à la première ligne du tableau, toutes les lignes du PORT_A travaillent en entrées analogiques. Dans ce cas, le conver tisseur utilise comme référence de tension la masse (Vref– = Vss) et Vcc (Vref+ = Vdd), c’est-à-dire la tension d’alimentation utilisée par le microcontrôleur lui-même.

Rappelez-vous que le microcontrôleur utilisé étant à 28 pattes (PIC16F876), seules 5 entrées analogiques, dénom-mées AN0 à AN4, sont prévues. Les entrées AN5, AN6 et AN7, qui figurent dans le tableau, n’existent que dans les PIC à 40 pattes.


Si vous utilisez, par exemple, la com-binaison 1011, les pattes RA0, RA1 et RA5 du PORT_A seront des entrées analogiques, alors que la tension de référence de conversion ira de Vref–,
que nous appliquerons à la patte 2 du PORT_A (RA2) jusqu’à Vref+, c’est-à-dire à la tension que nous applique-rons à la patte 3 du PORT_A.


Puisque, dans cette première applica-tion, le PORT_A n’est pas utilisé, nous l’analyserons comme si c’était un port digital normal. Pour ce faire, nous devrons donc charger en PCFG0 à PCFG3 la combinaison 0110 ou bien 0111 puisque 011x signifie que le bit indiqué par “x” peut être soit 0 soit 1.

Le second registre utilisé par le conver-tisseur est le registre ADCON0, dont nous parlerons en détail plus tard. Pour l’instant, disons seulement qu’en char-geant la valeur 0, le conver tisseur est désactivé.


Voyons maintenant en détail comment ces registres ont été initialisés en ana-lysant la par tie de listing appelée

                                                   “Configuration des por ts en sor tie”.

Configuration des ports en sortie Pour initialiser correctement les diffé-rents registres, rappelez-vous que la car te mémoire de ces microcontrôleurs prévoit l’utilisation de quatre banques séparées.

Pour pouvoir écrire correctement une donnée sur un registre, vous devez avant tout sélectionner la bonne banque de mémoire, en utilisant les deux bits RP0 et RP1. Par exemple, ADCON0 se trouve dans la banque de mémoire 0. Il faut donc mettre à 0 les deux bits RP0 et RP1, avec les ins-tructions BCF STATUS, RP0 (BCF = Bit Clear File, c’est-à-dire met à 0 un bit d’un registre) et BCF STATUS, RP1.
 

Le nombre 0 est ensuite chargé dans le registre W (MOVLW 0) puis transféré dans le registre ADCON0 (MOVWF ADCON0).

Le registre ADCON1 se trouve par contre dans la banque de mémoire 1. Il sera donc nécessaire de mettre à 1 RP0 et RP1 avant de pouvoir écrire une donnée dans ce registre. Ceci est réalisé grâce aux deux instructions suivantes (BSF STATUS, RP0 et BCF STATUS, RP1).

Puis le nombre 7 (c’est-à-dire, en binaire 00000111) est chargé dans le registre ADCON1 pour pouvoir utiliser tout le PORT_A comme entrée ou sor-tie digitale.


Une fois les registres du PORT_A ini-tialisés, on passe à la configuration du por t lui-même. Nous vous rappelons que pour configurer une patte en entrée ou en sor tie, vous devez mettre à 0 (sor tie) ou à 1 (entrée) le bit correspondant du registre TRIS associé au port.





Aucun commentaire:

Enregistrer un commentaire