59
- 0 - MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE Spécialité : InfoTronique V.TOURTCHINE MICROCONTROLEUR DE LA FAMILLE PIC Manuscrit élaboré selon le programme officiellement agrée et confirmé par le Conseil Scientifique de la Faculté des Sciences BOUMERDES - 2009 Support de cours & Prise en main du logiciel MPLAB UNIVERSITE M’HAMED BOUGARA DE BOUMERDES FACULTE DES SCIENCES Département de Physique

V.TOURTCHINE MICROCONTROLEUR DE LA FAMILLE PIC · Microcontrôleur de la famille PIC. Support cours & Prise en main du logiciel MPLAB ... programmation. Pour le PIC 16F84 cette é

Embed Size (px)

Citation preview

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 0 -

MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE

Spécialité : InfoTronique

V.TOURTCHINE

MICROCONTROLEUR DE LA FAMILLE PIC

Manuscrit élaboré selon le programme officiellement agrée et confirmé par le Conseil Scientifique de la Faculté des Sciences

BOUMERDES - 2009

Support de cours & Prise en main du logiciel MPLAB

UNIVERSITE M’HAMED BOUGARA DE BOUMERDES FACULTE DES SCIENCESDépartement de Physique

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 1 -

I. LES MICROCONTROLEURS

1.1 Qu’est ce qu’un microcontrôleur (μC):C’est un ordinateur monté dans un circuit intégré. Les avancées

technologiques en matière d’intégration, ont permis d’implanter sur une puce de silicium de quelques millimètres carrés la totalité des composants qui forment la structure de base d’un ordinateur.

Comme tout ordinateur, on peut décomposer la structure interne d’un microprocesseur en trois parties :

-Les mémoires-Le processeur-Les périphériques

Les mémoires sont chargées de stocker le programme qui sera exécuté ainsi que les données nécessaires et les résultats obtenus.

Le processeur est le cœur du système puisqu’il est chargé d’interpréter les instructions du programme en cours d’exécution et de réaliser les opérations qu’elles contiennent .Au sein du processeur, l’unité arithmétique et logique ALU interprète, traduit et exécute les instructions de calcul.

Les périphériques ont pour tâche de connecter le processeur avec le monde extérieur dans les deux sens. Soit le processeur fournit des informations vers l’extérieur (périphérique de sortie), soit il en reçoit (périphérique d’entrée).

Les PICs sont des composants RISC (Reduce Instructions Construction Set), ou encore composant à jeu d’instructions réduit. L'avantage est que plus on réduit le nombre d’instructions, plus facile et plus rapide en est le décodage, et plus vite le composant fonctionne.

La famille des PICs est subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des mots d’instructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits (18FXXX).

Pour identifier un PIC, on utilise simplement son numéro : Les 2 premiers chiffres indiquent la catégorie du PIC, 16 indique un PIC Mid-

Range. Vient ensuite parfois une lettre L, celle-ci indique que le PIC peut fonctionner

avec une plage de tension beaucoup plus tolérante. Vient en suite une ou deux lettres pour indiquer le type de mémoire programme :

- C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM

- CR pour indiquer une mémoire de type ROM

- F pour indiquer une mémoire de type FLASH.

On trouve ensuite un nombre qui constitue la référence du PIC.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 2 -

On trouve ensuite un tiret suivi de deux chiffres indiquant la fréquence d’horloge maximale que le PIC peut recevoir.

1.2 Intérêt des microcontrôleurs :Les microcontrôleurs sont de taille tellement réduite qu’ils peuvent être sans

difficulté implantés sur l’application même qu’ils sont censés piloter. Leur prix et leurs performances simplifient énormément la conception de système électronique et informatique.

On peut encore préciser : Les performances sont identiques voir supérieurs à ses concurrents. Très utilisé donc très disponible. Les outils de développement sont gratuits et téléchargeables sur le WEB. Le jeu d'instruction réduit est souple, puissant et facile à maîtriser. Les versions avec mémoire flash présentent une souplesse d'utilisation et des

avantages pratiques indéniables. La communauté des utilisateurs des PICs est très présente sur le WEB. On

trouve sur le Internet quasiment tout ce dont on a besoin, tutoriaux pour démarrer, documents plus approfondis, schémas de programmeurs avec les logiciels qui vont avec, librairies de routines, forums de discussion . . .

L’utilisation des microcontrôleurs ne connaît de limite que l’ingéniosité des concepteurs, on les trouve dans nos cafetières, les magnétoscopes, les radios

II. PRESENTATION GENERALE DU PIC 16F84Nous nous limiterons dans ce support de cours à la famille Mid-Range et

particulièrement au PIC 16F84, sachant que si on a tout assimilé, on pourra facilement passer à une autre famille, et même à un autre microcontrôleur.

Donc, un 16F84-04 est un PIC Mid-Range dont la mémoire programme est de type FLASH de référence 84 et capable d’accepter une fréquence d’horloge de 4MHz.

Notez que les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge peut être abaissée jusque l’arrêt complet sans perte de données et sans dysfonctionnement. Une version –10 peut donc toujours être employée sans problème en lieu et place d’une – 04. Pas l’inverse, naturellement.

Le PIC 16F84 est un microcontrôleur 8 bits. Il dispose donc d'un bus de données de huit bits. Puisqu’il traite des données de huit bits, il dispose d’une mémoire de donnée dans laquelle chaque emplacement (défini par une adresse) possède huit cases pouvant contenir chacune un bit.

L’organisation générale du PIC 16F84 est composée par 4 blocs principauxcomme le montre la figure 1 :

-Mémoire de programme-Mémoire de données-Processeur-Ressources auxiliaires (périphériques)

La mémoire de programme contient les instructions pilotant l’application à laquelle le microcontrôleur est dédié. Il s’agit d’une mémoire non volatile ( elle garde son contenu, même en l’absence de tension ), elle est de type FLASH c’est à dire

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 3 -

qu’elle peut être programmée et effacée par l’utilisateur via un programmateur et un PC. La technologie utilisée permet plus de 1000 cycles d’effacement et deprogrammation. Pour le PIC 16F84 cette mémoire est d’une taille de 1024*14 bits, c’est à dire qu’elle dispose de 1024 emplacements (de 000h à 3FFh) contenant chacun 14 cases car dans le cas du PIC, les instructions sont codées sur 14 bits. On peut donc stocker 1024 instructions.

Fig.1

La mémoire de donnée est séparée en deux parties :-une mémoire RAM de 68 octets puisque le bus de donnée est de huit bits.

Cette RAM est volatile (les données sont perdues à chaque coupure de courant). On peut y lire et écrire des données.

-une mémoire EEPROM de 64 octets dans laquelle on peut lire et écrire des données (de huit bits soit un octet) et qui possède l’avantage d’être non volatile (les données sont conservées même en l’absence de tension). La lecture et l’écriture dans cette mémoire de données sont beaucoup plus lentes que dans la mémoire de données RAM.

Le processeur est formé de deux parties :-une unité arithmétique et logique (ALU) chargée de faire des calculs.-un registre de travail noté W sur lequel travail l’ALU.

Les ressources auxiliaires qui sont dans le cas du PIC16F84 - ports d’entrées et de sorties.- temporisateur.- interruptions- chien de garde- mode sommeil

Ces ressources seront analysées dans la suite du cours.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 4 -

III. ARCHITECTURE DU PIC 16F84

3.1 Brochage et caractéristiques principales

Le PIC16F84 est un circuit intégré de 18 broches (Fig. 2) :

Fig.2

L’alimentation du circuit est assurée par les pattes VDD et VSS. Elles permettent à l’ensemble des composants électroniques du PIC de fonctionner. Pour cela on relie VSS (patte 5) à la masse (0 Volt ) et VDD (patte 14) à la borne positive de l’alimentation qui doit délivrer une tension continue comprise entre 3 et 6 Volts.

Le microcontrôleur est un système qui exécute des instructions les unes après les autres à une vitesse (fréquence) qui est fixée par une horloge interne au circuit. Cette horloge doit être stabilisée de manière externe au moyen d’un cristal de quartz connecté aux pattes OSC1/CLKIN (patte 16) et OSC2/CLKOUT (patte 15).

La patte 4 est appelée MCLR. Elle permet lorsque la tension appliquée est égale à 0V de réinitialiser le microcontrôleur. C’est à dire que si un niveau bas (0 Volt) est appliqué sur MCLR le microcontrôleur s’arrête, place tout ses registres dans un état connu et se redirige vers le début de la mémoire de programme pour recommencer le programme au début (adressedans la mémoire de programme : 0000).A la mise sous tension, la patte MCLR étant à zéro, le programme démarre donc à l’adresse 0000,( MCLR=Master CLear Reset ).

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLABLes broches RB0 à RB7 et RA0 à RA4 sont les lignes

d’entrées/sorties numériques. Elles sont au nombre de 13 et peuvent être

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 5 -

configurées en entrée ou en sortie. Ce sont elles qui permettent au microcontrôleur de dialoguer avec le monde extérieur (périphériques). L’ensemble des lignes RB0 à RB7 forme le port B et les lignes RA0 à RA4 forment le port A. Certaines de ces broches ont aussi d’autres fonctions (interruption, timer).

3.2 Structure interneLa structure interne du PIC16F84 est donnée figure 3 : (structure HARVARD :

la mémoire de programme et la mémoire de données sont séparées contrairement à l'architecture Von Neuman qui caractérise d'autres fabricants de microcontrôleurs).

Fig.3

On retrouve sur ce schéma la mémoire de programme, la mémoire RAM de données, la mémoire EEPROM, les ports A et B, ainsi que la partie processeur avec

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 6 -

l’UAL et le registre de travail W (World). Nous allons étudier à présent plus en détail le fonctionnement du PIC.

3.2 Principe de fonctionnement du PICUn microcontrôleur exécute des instructions. On définit «le cycle instruction »comme le temps nécessaire à l’exécution d’une instruction. Attention de ne pas confondre cette notion avec le cycle d’horloge qui correspond au temps nécessaire à l’exécution d’une opération élémentaire (soit un coup d'horloge). Une instruction est exécutée en deux phases :

la phase de recherche du code binaire de l’instruction stocké dans la mémoire de programme

la phase d’exécution ou le code de l’instruction est interprété par le processeur et exécuté.

Chaque cycle instruction dure 4 coup d’horloge comme le montre la figure 4 :

Fig.4

On pourrait donc croire qu’un cycle instruction dure 8 cycles d’horloge mais l’architecture particulière du PIC lui permet de réduire ce temps par deux.

En effet, comme les instructions issues de la mémoire de programme circulent sur un bus différent de celui sur lequel circulent les données, ainsi le processeur peut effectuer la phase de recherche d’une instruction pendant qu’il exécute l’instruction précédente (voir les figure 5 et 6).

Fig.5

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 7 -

Fig.63.4 Déroulement d’un programme

Le déroulement d’un programme s’effectue de façon très simple. A la mise sous tension, le processeur va chercher la première instruction qui

se trouve à l’adresse 0000 de la mémoire de programme, l’exécute puis va chercher la deuxième instruction à l’adresse 0001 et ainsi de suite (sauf cas de saut ou d’appel de sous programme que nous allons voir plus loin). On parle de fonctionnement séquentiel.

La figure 7 va nous permettre de mieux comprendre le fonctionnement :

Fig. 7

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 8 -

On constate sur cette figure que la mémoire de programme contient 1024 emplacements (3FF en hexadécimale) contenant 14 bits (de 0 à 13). Une instruction occupe un emplacement qui est défini par une adresse. Le processeur peut alors sélectionner l'emplacement souhaité grâce au bus d’adresse et il peut lire son contenu (ici l’instruction) grâce à son bus d’instruction (voir figure 6). Cet adressage s’effectue à l’aide d’un compteur ordinal appelé PC qui lors de la mise sous tension démarre à zéro puis s’incrémente de 1 tous les quatre coups d’horloge, on exécute bien ainsi les instructions les unes à la suite des autres.

Mais il arrive que dans un programme on fasse appel à un sous programme dont l’adresse de l’instruction ne se trouve pas juste après celle qui est en train d’être exécutée. C’est le rôle de la pile qui sert à emmagasiner de manière temporaire l’adresse d’une instruction. Elle est automatiquement utilisée chaque fois que l’on appelle un sous programme et elle permet une fois que l’exécution du sous programme est terminée de retourner dans le programme principal juste après l’endroit où l’on a appelé le sous programme. On constate que cette pile possède huit niveaux, cela signifie qu’il n’est pas

possible d’imbriquer plus de huit sous programmes, car au-delà de huit, le processeur ne sera plus capable de retourner à l’adresse de base du programme principal.

L’adresse 0000 est réservée au vecteur RESET, cela signifie que c’est à cette position que l’on accède chaque fois qu’il se produit une réinitialisation (0 volts sur la patte MCLR). C’est pour cette raison que le programme de fonctionnement du microcontrôleur doit toujours démarrer à cette adresse.

L’adresse 0004 est assignée au vecteur d’interruption et fonctionne de manière similaire à celle du vecteur de Reset. Quand une interruption est produite et validée, le compteur ordinal PC se charge avec 0004 et l’instruction stockée à cet emplacement est exécutée.

3.5 La mémoire de données RAMSi l’on regarde la mémoire de donnée RAM, on s’aperçoit que celle-ci est un

peu particulière comme le montre la figure 8 :

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 9 -

Fig. 8

On constate en effet que cette mémoire est séparée en deux pages (page 0 et page 1). De plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octets sont réservés pour SFR (Special File Registre). Ces emplacements sont en effet utilisés par le microcontrôleur pour configurer l’ensemble de son fonctionnement. On les appelle registres spécifiques et nous verrons au chapitre suivant leurs rôles.

Le bus d’adresse qui permet d’adresser la RAM est composé de 7 fils ce qui veut dire qu’il est capable d’adresser 128 emplacements différents. Or, chaque page de la RAM est composée de 128 octets, le bus d’adresse ne peut donc pas accéder aux deux pages, c’est pourquoi on utilise une astuce de programmation qui permet de diriger le bus d’adresse soit sur la page 0, soit sur la page 1. Cela est réalisé grâce à un bit d’un registre spécifique (le bit RP0 du registre STATUS) dont nous verrons le fonctionnement plus loin.

La RAM de données proprement dite se réduit donc à la zone notée GPR(Registre à usage générale ) qui s’étend de l’adresse 0Ch (12 en décimale jusqu’à

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 10 -

4Fh (79 en décimale soit au total 68 registres en page 0 et autant en page 1, mais on constate que les données écrites en page 1 sont redirigées en page 0 cela signifie qu’au final l’utilisateur dispose uniquement de 68 registres (donc 68 octets de mémoire vive) dans lesquels il peut écrire et lire à volonté en sachant qu’à la mise hors tension, ces données seront perdues.

3.6 Les registresNous avons vu au chapitre précédent que la mémoire de données RAM

contenait des registres spécifiques qui permettent de configurer le PIC, nous allons les détailler un à un et voir comment on peut accéder à la page 0 ou la page 1. Afin de faciliter la compréhension, les registres les plus utilisés sont encadrés et enfoncés.

adresse 00 et 80 ,INDF . Cette adresse ne contient pas de registre physique, elle sert pour l’adressage indirect.

adresse 01 , TMR0 . Contenu du Timer (8 bits). Il peut être incrémenté par l’horloge (tous les 4 coups d'horloge) ou par la broche RA4.

adresse 02 et 82 , PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (13-8) bits de poids forts sont dans PCLATH.

adresse 03 et 83 , STATUS Registre d’état .Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des témoins (drapeaux ou flag en anglais) caractérisant le résultat de l’opération réalisée par l’UAL. Le bit RP0 est lui en lecture /écriture et c’est lui qui permet de sélectionner la page dans la mémoire RAM.

Si RP0=0 on accède à la page 0 et si RP0=1 on accède à la page 1 .

Au reset, seul le bit RP0 de sélection de page est fixé (RP0=0 : page 0)TO/ (Time Out) : débordement du timer WDTPD/ : (Power Down) caractérise l’activité du chien de garde WDT

Z (Zéro) résultat nul pour une opération arithmétique et logique.

DC (Digit Carry) retenue sur un quartet (4 bits)C (Carry) retenue sur un octet (8 bits).

adresse 04 et 84 , FSR . Registre de sélection de registre : contient l’adresse d’un autre registre (adressage indirect)

adresse 05 , PORTA . Ce registre contient l’état des lignes du port A (voir chapitre sur les ports).

adresse 06 , PORTB . Ce registre contient l’état des lignes du port B (voir chapitre sur les ports).

RP0 TO/ PD/ Z DC C

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 11 -

adresse 08 , EEDATA .Contient un octet lu ou à écrire dans l’EEPROM de données.

adresse 09 , EEADR . Contient l’adresse de la donnée lue ou écrite dans l’EEPROM de données.

adresse 0A et 8A, PCLATH . Voir l’adresse 02 PCL.

adresse 0B et 8B , INTCON .Contrôle des 4 interruptions

Masques :

GIE : (Global Interrupt Enable) : masque global d’inter.

EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM.

T0IE : (Timer 0 Interrupt Enable) autorise l'interruption provoquée par le débordement du TIMER0

INTE: (Interrupt Enable) autorise l’interruption provoquée par un changement d'état sur broche RB0/INT

RBIE: (RB Interrupt Enable) autorise les interruptions provoquées par un changement d'états sur l'une des broches RB4 à RB7. Si ces bits sont mis à 1, ils autorisent les interruptions pour lesquels ils sont dédiés.

Drapeaux :

T0IF : (Timer 0 Interrupt Flag) débordement du TIMER

INTF ( Interrupt Flag) interruption provoquée par la broche RB0/INT

RBIF ( RB Interrupt Flag) interruption provoquée par les broches RB4-RB7.

adresse 81 , OPTION8 bits (tous à 1 au RESET) affectant le comportement des E/S et de TIMER.

RBPU/ (RB Pull-Up) Résistances de tirage à Vdd des entrées du port B (voir le détail du fonctionnement au chapitre port). Si RBPU=0 les résistances de Pull-Up sont connectées en interne sur l'ensemble du port B.

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

RBPU INTEDG RTS RTE PSA PS2

PS11

PS0

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 12 -

INTEDG (Interrupt Edge) sélection du front actif de l’interruption sur RB0/INT (1 pour front montant et 0 pour front descendant).

RTS (Real Timer Source) sélection du signal alimentant le timer 0 : 0 pour horloge interne, 1 pour RA4/T0CLK

RTE (Real Timer Edge) sélection du front actif du signal timer (0 pour front montant).

PSA (Prescaler Assignment) 0 pour Timer 0 et 1 pour chien de garde WDT.

PS2…0 (PreScaler 210) sélection de la valeur du diviseur de fréquence pour les timers.

adresse 85 , TRISA . Direction des données pour le port A : 0 pour sortir et 1 pour entrer (voir chapitre sur les ports).

adresse 86 , TRISB . Direction des données pour le port B : 0 pour sortir et 1 pour entrer (voir chapitre sur les ports).

adresse 88 , EECON1 Contrôle le comportement de l’EEPROM de données.

EEIF (EEProm Interrupt Flag) passe à 1 quand l’écriture est terminée.

WRERR (WRite Error) 1 si erreur d’écriture.

WREN (WRite Enable) : 0 pour interdire l’écriture en EEPROM de données.

WR (WRite) 1 pour écrire une donnée. Bit remis automatiquement à 0

RD (ReaD) : 1 pour lire une donnée. Bit remis automatiquement à 0

adresse 89 , EECON2 . Registre de sécurité d’écriture en EEPROM de données.Une donnée ne peut être écrite qu’après avoir écrit successivement 0x55 et 0xAA dans ce registre.

3.7 Les ports d’entrées/sortiesLe PIC16F84 est équipé de 13 lignes d’entrées/sorties réparties en deux ports :

-le port A : RA0 à RA4-le port B : RB0 à RB7

Chaque ligne peut être configurée soit en entrée, soit en sortie, et ceci indépendamment l’une de l’autre. Pour cela on utilise les registres TRISA et TRISB.

Le bit de poids faible (b0) du registre TRISA correspond à la ligne RA0, le bit b1 de TRISA correspond à RA1 et ainsi de suite. Il en est de même pour le port B et le registre TRISB (b0 de TRISB correspond à RB0 b7 correspond à RB7).

EEIF WRERR WREN WR RD

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 13 -

Si l’on veut placer une ligne en sortie il suffit de mettre le bit correspond dans TRISA ou TRISB à 0 (à retenir : 0 comme Output = sortie).

Si l’on veut placer une ligne en entrée, il suffit de placer le bit correspondant dans TRISA ou TRISB à 1 (à retenir : 1 comme Input = entrée).

Les bits des deux registres PORTA et PORTB permettent soit de lire l’état d’une ligne si celle-ci est en entrée, soit de définir le niveau logique d’une ligne si celle-ci est en sortie.

Lors d’un RESET, toutes les lignes sont configurées en entrées.Important :Particularité du PORTA : les bits b7 à b5 des registres TRISA et PORTA ne correspondent à rien car il n’y

a que 5 lignes (b0 à b4). RA4 est une ligne à collecteur ouvert, cela veut dire que configurée en sortie cette broche assure 0 Volt à l’état bas, mais qu’à l’état haut, il est nécessaire de fixer la valeur de la tension grâce à une résistance de tirage (pull up en anglais)

Particularité du PORTB : il est possible de connecter de façon interne sur chaque ligne une résistance de

tirage (pull up) dont le rôle consiste à fixer la tension de la patte (configuré en entrée) à un niveau haut lorsque qu’aucun signal n’est appliqué sur la patte en question. Pour connecter ces résistances, il suffit de placer le bit RBPU/ du registre OPTION à 0.

3.8 Le TimerDans la majeure partie des applications, il est nécessaire de contrôler le

temps; afin de ne pas occuper le microcontrôleur qu'à cette tâche (boucle de comptage qui monopolise le micro), on le décharge en utilisant un timer. Le pic 16F84 dispose de deux timers, un à usage général (le TMR0) et un autre utilisé pour le chien de garde (watch dog WDG).

Le TMR0 est un compteur ascendant (qui compte) de 8 bits qui peur être chargé avec une valeur initiale quelconque. Il est ensuite incrémenté à chaque coup d'horloge jusqu'à ce que le débordement ait lieu (passage de FF à 00).

Le principe est représenté figure 9 :

Fig.9

Le TMR0 peut remplir deux fonctions:-Temporisateur ou contrôle du temps. Son entrée d'incrémentation est alors l'horloge qui correspond au cycle instruction (Fosc/4). Il est possible d'utiliser un prédiviseur de fréquence que nous verrons plus loin.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 14 -

-Compteur d'événements. Dans ce cas les d'impulsions d'entrées du timer sont fournies par la patte RA4/TOCK1 le choix s'effectue grâce au bit RTS du registre OPTION.

Le pic 16F84 dispose d'un diviseur de fréquence qui peut être assigné soit au chien de garde WDG, soit au TMR0 (uniquement un à la fois). L'assignation du prédiviseur se fait grâce au bit PSA du registre OPTION.

La structure interne du TMR0 est donc la suivante (figure 10)

Fig.10Suivant que le prédiviseur est assigné au chien de garde ou au TMR0, la

valeur de la prédivision n'est pas la même, il faut donc être vigilant lors de la programmation comme le montre la figure 11.

Fig.11

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 15 -

3.9 Mise en oeuvreL’utilisation et la mise en œuvre très simple des PICs les a rendus

extrêmement populaire au point que la société qui les fabrique (MICROCHIP) est en passe de devenir le leader mondial dans le domaine des microcontrôleurs devant MOTOROLA et INTEL.

Il suffit d’alimenter le circuit par ses deux broches VDD et VSS, de fixer sa vitesse de fonctionnement à l’aide d’un quartz (figure12) et d’élaborer un petit système pour permettre de réinitialiser le microcontrôleur sans avoir à couper l’alimentation (figure 13).

Fig.12 Fig.13Il suffit ensuite d’écrire le programme en langage assembleur sur un

ordinateur grâce au logiciel MPLAB de MICROCHIP (logiciel gratuit) puis de le compiler pour le transformer en langage machine et le transférer dans le PIC grâce à un programmateur.

Lors de la mise sous tension, tous les registres spécifiques sont placés dans un état déterminé comme le montre la figure 14

u = unchanged ; x = unknown ; - =unimplemented (read as 0); q = value depends on condition

Fig.14

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 16 -

Il ne nous reste plus qu’à voir le jeu d’instruction de programmation en assembleur du PIC et c’est là que réside tout l’intérêt puisqu’il ne dispose que de 35 instructions qui lui permettent de réaliser toutes les tâches.

IV. JEU D’INSTRUCTIONS DU PIC 16F84Afin de comprendre la fonction de chaque instruction, la notation adoptée pour

les données et adresses manipulées par les instructions est fort simple et est la suivante :

- f représente un registre

- b représente un numéro de bit en sachant que 0 correspond toujours au bit de poids faible (le plus à droite dans le registre)

- k représente une donnée aussi appelée littéraleUn certain nombre d’instructions (ADDWF, ANDWF, etc..) utilise une notation

spéciale présentée sous la forme :

ADDWF f, d Où f indique le registre et où d peut prendre deux valeurs (0 ou 1), ce qui change le comportement de l’instruction. Si d est à 0, le résultat est placé dans le registre de travail W, la valeur dans le registre f est alors inchangée, alors que si d est à 1, le résultat est placé dans le registre f.

Un autre type d’instruction mérite quelques éclaircissements, ce sont les instructions de branchement conditionnel. Prenons comme exemple :

BTFSC f, b Qui va vouloir dire (Bit Test File Skip if Clare) qui signifie que l’on va tester le bit b du registre f (b peut prendre une valeur de 0 à 7 pour un registre 8 bits) .Il peut alors y avoir deux solutions :-Soit le bit testé est à 1, donc la condition testée n’est pas réalisée, le programme continue alors son déroulementnormalement en séquence avec l’instruction juste en dessous.-Soit le bit testé vaut 0, donc la condition testée est réalisée et le programme saute l’instruction qui suit le BTFSC dans le programme.

Les 35 instructions sont donc les suivantes :

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

ADDLW (Add Literal to W)

ADDLW k

W+kW

On ajoute au registre de travail la valeur k et on place le résultat dans le registre de travail W

C, DC, Z 1

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 17 -

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

ADDWF(Add W to F)

ADDWF f, d

W+ff si d=1 ou W+fW si d=0

On ajoute le contenu de W et le contenu de f et on place le résultat dans f si d=1 ou dans W si d=0

C, DC, Z 1

ANDLW (And Literal and W)

ANDLW k

W ET k fW

On effectue un ET logique entre k et et le contenu de W, et on place le résultat dans le registre de travail W

C, DC, Z 1

ANDWF( And W with F )

ANDWF f, d

W ET ff si d=1 ou W ET fW si d=0

On effectue un ET logique entre le contenu de W et le contenu de f , on place le résultat dans W si d=0 ou dans f si d=1

Z 1

BCF(Bit Clear F)

BCF f, b0b (f)

On met à 0 le bit b du registre f

aucuns 1

BSF(Bit Set F)

BSF f, b1b (f)

On met à 1 le bit b du registre f

aucuns 1

BTFSC(Bit Test, Skip if

Clear)

BTFSC f, b

saut de l’instruction qui suit si b (f)=0

Si le bit b de f est nul, l’instruction qui suit celle-ci est ignorée et traitée comme un NOP. Dans ce cas et dans ce cas seulement, l’instruction BTFSC demande deux cycles pour s’exécuter.

aucuns 1 ou 2

BTFSS(Bit Test, Skip if Set)

BTFSS f, b

saut de l’instruction qui suit si b (f)=1

Si le bit b de f est à 1, l’instruction qui suit celle-ci est ignorée et traitée comme un NOP. Dans ce cas et dans ce cas

aucuns 1 ou 2

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 18 -

seulement, l’instruction BTFSS demande deux cycles pour s’exécuter.

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

CALL(subroutine Call)

CALL label

appeler un sou programme (label)

On sauvegarde l’adresse de retour dans la pile puis on appelle le sous programme définit avec l’étiquette label

aucuns 2

CLRF(Clear F) CLRF f

0F

On met le contenu du registre f à 0 et on positionne Z

Z 1

CLRW (Clear W)

CLRW0WOn met le contenu du registre W à 0 et on positionne Z

Z 1

CLRWDT(Clear Watch Dog Timer)

CLRWDT

0WDT et 0pré diviseur du Timer

On met le contenu du registre du timer chien de garde à 0 ainsi que le pré diviseur

Z 1

COMF (Complement F)

COMF f, d

/ff si d=1 ou /fW si d=0

On complémente le contenu du registre f bit à bit , le résultat est placé dans f si d=1 , dans W si d=0.

Z 1

DECF(Decrement F)

DECF f, d

f-1f si d=1 ou f-1W si d=0

On diminue le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0 (dans ce cas f reste inchangé).

Z 1

DECFSZ DECFSZ f, d

f-1f si d=1 ou f-1W si d=0 et saut si f-1=0

On diminue le contenu du registre f d’une unité, le résultat est placé dans f si aucun 1 ou 2

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 19 -

(Decrement F, Skip if Zero)

d=1, dans W si d=0 (dans ce cas f reste inchangé).Si le résultat est nul, l’instructionsuivante est ignorée et dans ce cas, cette instruction dure deux cycles.

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

GOTO (branchement inconditionnel)

GOTO labelOn effectue un saut dans le programme pour aller à l’adresse pointé par le label précisé dans GOTO

aucun 2

INCF (Increment F)

INCF f, d

f+1f si d=1 ou f+1W si d=0

On augment le contenu du registre f d’une unité, le résultat est placé dans fsi d=1, dans W si d=0 (dans ce cas f reste inchangé).

Z 1

INCFSZ(Increment F, Skip if

Zero )

INCFSZ f, d

f+1f si d=1 ou f+1W si d=0 et saut si f-1=0

On augmente le contenu du registre f d’une unité, le résultat est placé dans f si d=1, dans W si d=0 (dans ce cas f reste inchangé).Si le résultat est nul, l’instruction suivante est ignorée et dans ce cas, cette instruction dure deux cycles.

aucun 1 ou 2

IORLW(Inclusive Or literal

with W )

IORLW k

W OU k W

On effectue un OU logique entre le contenu de W et le littéral k, le résultat est placé dans W.

Z 1

IORWF (Inclusive Or W with F)

IORWF f, d

W OU ff si d=1 ou W OU fW si d=0

On effectue un OU entre le contenu de W et le contenu de f , on place le résultat dans f si d=1, dans W si d=0

Z 1

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 20 -

MOVF ( Move F ) MOVF f,d

ff si d=1 ou fW si d=0 On déplace le contenu de f dans f si d=1 ou de f dans W si d=0, ça permeten fait de tester le contenu de f par rapport à0 et de positionner le bit Z

Z 1

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

MOVLW (Move Literal to W )

MOVLW k

kW

On charge le contenu de W avec le littéral k

aucun 1

MOVWF(Move W to F )

MOVWF fWf

On charge le contenu de f avec le contenu de W

aucun 1

NOP (No Operation)

NOP

néant

On ne fait que consommer du temps machine (un cycle dans ce cas)

aucun 1

RETFIE(Return FromInterrupt )

RETFIE

Pile PC

On charge le compteur ordinal avec la valeur qui se trouve au sommet de la pile pour revenir au programme principal lorsque l’exécution du sous programme est terminée.

aucun 2

RETLW(Return Literal to W)

RETLW k

kW, PilePC

On charge le contenu de W avec le littéral k puis on charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme.

aucun 2

RETURN(Return

RETURN

PilePC

On charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi

aucun 2

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 21 -

from subroutine) un retour de sous programme. C’est un RETLW simplifié.

SLEEP ( Sleep ) SLEEP

0PD, 1T0, 0WDT, 0prédiviseur

On place le circuit en mode sommeil avec arrêt de l’oscillateur. Cette commande est à utiliser avec précaution, elle nécessite la connaissance du mode sommeil.

INSTRUCTION SYNTAXE OPERATION

BITS d’état

du registreSTATUSaffectées

duréeCYCLE

SUBLW (Substract W from Literal)

SUBLW k

k-WW

On soustrait le contenu du registre W du littéral k et on place le résultat dans W (soustraction par la méthode du complément à 2).

C, DC, Z 1

SUBWF (Substract W from F )

SUBWF f, d

f-WW si d=0 ou f-Wf si d=1

On soustrait le contenu du registre W du contenu du registre f et on place le résultat dans W si d=0, ou dans f si d=1 (soustraction par la méthode du complément à 2).

C, DC, Z 1

SWAPF(Swap F)

SWAPF f, d

f(0-3)f(4-7) et f(4-7)f(0-3) résultat dans W ou f selon d

On échange les quatre bits de poids forts avec les quatre bits de poids faibles et on place le résultat dans W si d=0, ou dans f si d=1

aucun 1

XORLW(Exclusive Or Literal

with W )

XORLW k

W OU EXCLUSIF kW

On effectue un OU Exclusif entre W et le littéral k, le résultat est placé dans W

Z 1

W OU EXCLUSIF fW si d=0 ou W OU EXCLUSIF ff si d=1

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 22 -

XORWF(Exclusive Or W with

F)

XORWF f, dOn effectue un OU Exclusif entre W et le contenu de f, le résultat est placé dans W si d=0, sinon il est placé dans f.

Z 1

Syntaxe : RLF f,d

Opération :

On effectue une rotation à gauche de un bit du contenu du registre f en passant par le bit de retenu C. Si d=1 le résultat est placé dans f, si d=0, le résultat est placé dans W

Bit d’état du registre STATUS affecté : C

Durée : 1 cycle

Syntaxe : RRF f, d

Opération :

On effectue une rotation à droite de un bit du contenu du registre f en passant par le bit de retenu C. Si d=1 le résultat est placé dans f, si d=0, le résultat est placé dans W

Bit d’état du registre STATUS affecté : C

Durée : 1 cycle

01234567C

Registre f

01234567C

Registre f

RLF (Rotate Left F through carry)

RRF (Rotate Right F through carry)

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 23 -

V. LES OUTILS DE DEVELOPPEMENT 5.1 Deux mot sur MPLAB

MPLAB peut être télécharger directement du site Web http://www.microchip.com Les étapes nécessaires permettant de voir un programme s'exécuter sur un PIC

sont : • Ecrire un programme en langage assembleur dans un fichier texte et le

sauvegarder avec l'extension .asm • Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le

résultat est un fichier avec l'extension .hex contenant une suite d'instruction compréhensible par le pic.

• Transplanter le fichier .hex dans la mémoire programme du PIC (mémoire flash) à l'aide d'un programmateur adéquat. On peut utiliser les programmateurs de Microchip ou tout autre programmateur acheté ou réalisé par soit même.

• Mettre le PIC dans son montage final, mettre sous tension et admirer le travail. Microchip propose gratuitement l'outil de développement MPLAB qui regroupe

l'éditeur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-même, n'est pas gratuit.

Pour ce qui nous concerne, nous utiliseront MPLAB pour écrire, compiler et éventuellement simuler nos programmes, ensuite nous utiliserons un programmateur PICSTART Plus@ pour implanter les programmes dans la mémoire flash du PIC.

5.2 Les directives de MPASM Les directives de l'assembleur sont des instructions qu'on ajoute dans le

programme et qui seront interprétées par l'assembleur MPASM. Ce ne sont pas des instructions destinées au PIC.

5.2.1 Les directives les plus utilisées • LIST : permet de définir un certain nombre de paramètres comme le processeur

utilisé (p), la base par défaut pour les nombres (r), le format du fichier hex à produire (f) ainsi que d'autres paramètres. Exemple : LIST p=16F84A, r=dec, f=inhx8m

• INCLUDE : permet d'insérer un fichier source. Par exemple le fichier p16f84A.inc contient la définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de certain bits; INCLUDE "p16f84A.inc"

• _ _CONFIG : permet de définir les 14 fusibles de configuration qui seront copié dans l'EEPROM de configuration lors de l'implantation du programme dans le PIC (protection de code, type d'oscillateur, chien de garde et temporisation du départ) _ _CONFIG B'11111111111001'

_ _CONFIG H'3FF9' si le fichier p16f84.inc a été inséré, on peut utiliser les constantes prédéfinies : _ _CONFIG _CP_OFF & _XT_OSC & _PWRTE_OFF & _WDT_OFF

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 24 -

• EQU : permet de définir une constante ou une variable : XX EQU 0x20 Chaque fois que le compilateur rencontrera XX, il la remplacera soit par la constante 0x20. ça peut être une constante s'il s'agit d'une instruction avec adressage immédiat, ou d'une adresse s'il s'agit d'une instruction avec adressage direct.

• #DEFINE : définit un texte de substitution #DEFINE pos(x,y,z) (y-2z+x) Chaque fois que le compilateur rencontrera le texte pos(x,y,z), il le remplacera par (y-2z+x)

• ORG : définit la position dans la mémoire programme à partir de laquelle seront inscrites les instructions suivantes.

• DE : pour déclarer des donnés qui seront stockée dans l'EEPROM de donnée au moment de

l'implantation du programme sur le PIC ORG 0x2100 DE "Programmer un PIC, rien de plus simple", 70, 'Z'

• END : indique la fin du programme Pour plus de détail sur les directives de MPASM, voir "MPASM USER'S GUIDE"

5.3 Format des nombres L'assembleur reconnaît les nombres en décimal, hexadécimal, binaire ou octal. Pour

préciser la base il faut utiliser les préfixes précisés dans le tableau ci-dessous :

Base Préfixe Exemple Décimal D'nnn'

.nnn D'36' .36

Hexadécimal

H'nn' 0xnn nnh

H'24' 0x24 24h

Binaire B'….' B'00100100'

Octal O'nnn' O'44'

5.4 Structure d'un programme écrit en assembleur Un programme écrit en assembleur doit respecter une certaine syntaxe et un

certain nombre de règles afin qu'il soit facile à lire et à débuguer : • Tout ce qui commence à la première colonne est considéré comme une

étiquette (label) permettant de faire des renvois et aussi des assignations de constantes et de variables.

• tout ce qui suit un point virgule est considéré comme un commentaire non interprété par le compilateur

On peut à l'aide de la directive LIST ou RADIX définir un format par défaut. Si par exemple on place une des instructions suivantes au début du programme, tous les nombres sans préfix seront interprétés en décimal : LIST r = decRADIX dec (les radix valables sont dec, hex ou oct)

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 25 -

• Un programme apparaît donc comme un texte écrit sur 3 colonnes : - la colonne de gauche contient les étiquettes - la colonne du milieu contient les l’instructions - la colonne de droite contient des commentaires

Il existe différentes écoles indiquant comment doit être organisé un programme. Voici un exemple d'organisation :

1) Quelques lignes de commentaire précisant la fonction du programme.

2) Configuration, exemple : LIST p=16f84INCLUDE "p16f84.inc" _ _CONFIG H'3FF9'

3) Définition des constantes et des variables, exemple :

Microchip propose gratuitement l'outil de développement MPLAB qui regroupe l'éditeur de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation. Le programmateur lui-même, n'est pas gratuit.

Pour ce qui nous concerne, nous utiliseront MPLAB pour écrire, compiler et éventuellement simuler nos programmes, ensuite nous utiliserons un programmateur PICSTART Plus@ pour implanter les programmes dans la mémoire flash du PIC.

Led equ 0 X equ 0x0C cblock 0x0D y,z u,v,w endc

4) Si le programme utilise des interruptions, mettre à l'adresse 0000 (adresse du RESET) une instruction de branchement au début du programme principal :

ORG 0x0 GOTO debut

5) Ecrire la routine d'interruption à l'adresse 4 ORG 0X4

écrire la routine d'interruption ici RETFIE

Si le programme est configuré pour interdire les interruptions, on peut se passer des étapes 4) et 5),

6) Ecrire les sous programmes (s'il y en a). Chaque procédure commence par une étiquette qui représente son nom, et se termine par l'instruction RETURN

7) Ecrire le programme principal (commençant par l'étiquette début: si lesétapes 4 et 5

END

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 26 -

5.5 Références [1] PIC16F8X, document DS30430C, www.microchip.com

[2] PIC16F84a, document DS35007A, www.microchip.com

[3] Programmation des PIC, Première partie-PIC16F84-Révision 5, par BIGONOFF,http://www.abcelectronique.com/bigonoff/organisation.php?2654c

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 27 -

Présentation de MPLAB:

MPLAB est un outil de développement pour les PIC 16F84 et autres.

Il contient

un éditeur un assembleur un simulateur

Il permet

La rédaction du fichier source en langage assembleur (fichier.ASM) Sa transformation en fichier objet (fichier.HEX) prêt à être chargé dans la mémoire

programme du microcontrôleur L’ensemble des fichiers nécessaires à ces opérations est regroupé dans un espace " projet "

(fichier.PJT)

1. Création d’un nouveau projet

1.1 Préparation

1.2 Utilisation d’un tutorial « Wizard » pour la création des projets

Fig.1

Créez dans votre espace disque dur (par exemple le disque C) un répertoire où vous rangez tous vos projets et y tappelez, à titre d’exemple : « Projets MPLAB ». Il est recommandé de créez aussi un sous répertoire, par exemple : « manip_1 », « LED_clinot », « manip_2 » etc...

Lancez MPLAB IDE v.6.60 à partir de l’icône représenté ci-contre, qui se trouve dans votre bureau.

Après quelques instants, vous vous retrouvez avec un écran vide avec menu et barres d’outil. Si certaine fichiers ou projets s’ouvrent lors du démarrage, fermez-les.

Après avoir lancé MPLAB, choisissez dans le menu « Project » l’option « Project Wizard… »(voir la figure 1).

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 28 -

Fig.2

Fig.3

L’assistant de création de projet s’affiche.

(Fig.2) Cliquez sur « Suivant »

La première étape(Fig.3) consiste à indiquer la référence du microcontrôleur qui sera utilisé (dans notre cas c’est le PIC 16F84A). Cliquez ensuite sur « Suivant »

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 29 -

Fig.4

Fig.5

La seconde étape (voir la figure 4) consiste à indiquer le langage qui sera utilisé pour la programmation. Pour une programmation en assembleur, choisissez pour la rubrique « Active Toolsuite » le langage « Microchip MPASM Toolsuite » Cliquez ensuite sur « Suivant »

Cliquer pour parcourir l’arborescence des

répertoires

Indiquer le nomsouhaité pour le projet

Spécifier le répertoire (Projets MPLAB) et

sous répertoire(manip_1)

Cliquer pour sélectionner

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 30 -

La troisième étape (voir la figure 5) consiste à indiquer le nom du projet ainsi que son emplacement. Indiquez dans la case « Project Name » le nom souhaité pour le projet (par exemple : manip_1) Spécifiez le répertoire dans la case « Project Directory » en utilisant le bouton « Browse » pour parcourir l’arborescence des répertoires. Dans notre cas c’est le répertoire « Projet MPLAB » et sous -répertoire « manip_1 » (voir la figure 5). Cliquer « Select » Cliquez ensuite sur « Suivant »

Fig.6

Fig.7

La dernière étape 4permet d’ajouter au projet un fichier source existant (fig.6). Dans le cas où aucun fichier source n’est à incorporer au projet, cliquez directement sur « Suivant ». Pour ajouter un fichier source existant, parcourir l’arborescence dans la fenêtre de gauche, sélectionner le fichier désiré puis cliquer sur bouton « Add ». Cocher ensuite la case située à gauche du nom du fichier pour qu’il soit copié à partir de son emplacement d’origine dans le répertoire du projet. Cliquez ensuite sur « Suivant ».

L’assistant de création de projet (fig.7) affiche un résumé de celui-ci : contrôler les différentes informations présentées :

a) Référence du microcontrôleur ;

b) Outil utilisé en fonction du langage ;

c) Répertoire du projet.

Cliquez sur « Terminer » pour valider la création du projet.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 31 -

MPLAB affiche, en plus de la fenêtre du projet, une fenêtre d’édition dans laquelle on peut aisément modifier le programme source grâce à la coloration syntaxique.

MPLAB affiche dans une fenêtre le nom du projet (d’extension .mcp : MicroChipe Project). Celui-ci mentionne éventuellement le nom du fichier source spécifiée à l’étape 4 précédente. Un double clic sur celui-ci permet de l’ouvrir en vue de l’éditer. Si aucun fichier existant n’a été incorporé au projet à l’étape 4, choisir dans le menu « File » l’option « New » ou cliquer sur l’icône.

Une fenêtre d’édition apparaît. Taper le texte du programme source (en assembleur) puis enregistrer le fichier dans le même répertoire que celui du projet.

Incorporer ce nouveau fichier au projet en choisissant l’option « Add Files… » dans le menu contextuel (obtenu par un clic du bouton droit de la souris) de la rubrique « Source Files ». Rechercher puis sélectionner le fichier sauvegardé précédemment.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 32 -

2. Ouverture d’un projet existant

3. La mise en œuvre du logiciel MPLAB

3.1 La barre d’outils de MPLAB

Fig.8

L’ouverture d’un projet existant (d’extension .mcp) peut se faire en choisissant dans le menu « Project » l’option « Open… » ou en cliquant sur l’icône verte « Open Project »

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 33 -

Les différentes icônes disponibles dans la barre d’outils de MPLAB sont définiées sur la figure 8.

Remarque : en fonction du mode de fonctionnement choisi (mode simple, mode « Débuggage », mode programmation), les icônes de la partie droite ne sont pas les mêmes. La barre d’outils représentée sur la figure 8 correspond au mode « Débuggage ».

3.2 Les fenêtres de MPLAB

En plus de ces différentes icônes de la figure 8, plusieurs fenêtres peuvent être affichées (voir la figure 9) : Les fenêtres qu’il est indispensable d’avoir en permanences ouvertes :- projet en cours (il est impossible de la fermer)- fichier(s) source(s) du projet : un double clic sur le nom du fichier source dans le gestionnaire de projet permet de rouvrir celui-ci.- Fenêtre de « Sortie » (« Output ») : les différents onglets permettent d’afficher : Les résultats de la compilation (onglet « Build ») Le résultat de la recherche dans tous les fichiers source du projet (onglet « Find in files »)Dans le cas où cette fenêtre a été fermée, cocher dans le menu « View » l’option « Output »

Fig.9

Certaines fenêtres qu’il est utile d’afficher dans certains cas (voir la figure 10) :- « Watch » : permet d’afficher le contenu de registres du microcontrôleur ou de variables (choisir dansle menu « View » l’option « Watch »).- « Special Fonction Registers » : permet d’afficher le contenu des registres particuliers dumicrocontrôleur (choisir dans le menu « View » l’option « Special Fonction Registers »).- « File Registers » : permet d’afficher le contenu des registres particuliers du microcontrôleur (choisirdans le menu « View » l’option « File Registers »).- « Disassembly listing » : permet d’afficher le listing du programme en assembleur à la suite de lacompilation, associé au code objet généré (choisir dans le menu « View » l’option « Disassemblylisting »).

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 34 -

Fig.10

3.3 Les différentes étapes du développement

Pour développer une application destinée à être exécutée par un microcontrôleur PIC avec le logiciel MPLAB seul, les différentes étapes sont les suivantes :- saisie du programme source (en assembleur) grâce à l’éditeur de texte de MPLAB ;

- assemblage ou compilation du programme source ;

- « débuggage » du programme, c’est-à-dire recherche et correction des erreurs de programmation;

- programmation du microcontrôleur cible pour obtenir un fonctionnement autonome de la carteélectronique en cours de développement.

3.3.1 Saisie du programme source – Assemblage / Compilation

L’éditeur de texte de MPLAB permet, grâce à la coloration syntaxique, d’écrire le programme source en assembleur.La traduction du programme source en code objet s’effectue grâce à l’icône « Build» (voir fig. 11).

Il est impératif d’observer le résultat de la compilation dans l’onglet « Build » de la fenêtre « Output »(fig.9) : Un message d’erreur (« Error ») nécessite obligatoirement une modification du programme source, la compilation n’étant pas complète. Pour corriger l’erreur, un double clic sur le message d’erreur de lafenêtre « Output » permet d’arriver directement sur la ligne du programme source comportant l’erreur. Un message d’avertissement (« Warning », « Message ») doit être examiné avec soin : dans certains cas, il s’agit d’un oubli ou d’une erreur dans le programme source. Cependant, un programme

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 35 -

destiné à être exécuté par un microcontrôleur comporte systématiquement une boucle infinie qui sera signalée par un message d’avertissement. Le Message « BUILD SUCCEEDED » indique une compilation réussie (comportant éventuellement des avertissements).

3.3.2 Mode « Débuggage »Pour détecter d’éventuelles erreurs de programmation, il est nécessaire de faire exécuter le programme par le microcontrôleur en mode « débuggage ». Ce mode permet les différentes actions suivantes : Exécution en pas à pas ; Exécution fonction par fonction ; Exécution en continu ; Exécution continue jusqu’à une certaine ligne du programme source (« point d’arrêt »); Affichage du contenu de registres du microcontrôleur et/ou variables (valeurs actualisées à chaque

arrêt du programme).

3.3.2.1 Passage en mode « Débuggage »

Les principales icônes utilisées pour le « débuggage » apparaissent dans la partie droite de la barre d’outils de MPLAB :

Fig.11

Pour bénéficier du mode de fonctionnement «Débuggage », choisir dans le menu« Debugger » l’option « Select Tool » puis « MPLAB SIM ».

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 36 -

3.3.2.2 Etapes du mode « Débuggage »La procédure habituelle est la suivante : Lancer la compilation (ou l’assemblage) du programme source après chaque modification de celui-

ci : icône « Build (Compile le programme)» (voir la figure 11) ;

Exécuter le programme soit en continu (icône « Run (Lance le programme) » soit en modes pas à pas (icônes «Step Into», « Step Over » ou « Step Out »);

Après un lancement en continu du programme, l’arrêt de celui-ci s’effectue grâce à l’icône « Halt »,suivi éventuellement d’un « Reset ».

La flèche verte indique la prochaine instruction qui sera exécutée.

3.3.2.3 Utilisation de points d’arrêt.L’exécution du programme en continu ne permet pas toujours de détecter l’origine d’un

fonctionnement incorrect.Les modes pas à pas ou fonction par fonction sont parfois d’une mise en oeuvre laborieuse.Il peut alors être judicieux d’utiliser les points d’arrêts : une ligne du programme source est

affectée d’un marqueur qui déclenchera l’arrêt du programme lorsque le microcontrôleur exécutera l’instruction correspondante.

La définition et la suppression des points d’arrêts est réalisée par un double clic sur la ligne souhaitée, ou en choisissant lors d’un clic droit sur celle-ci l’option « Set Breakpoint » ou « Remove Breakpoint ».

La suppression de tous les points d’arrêts s‘effectue en choisissant lors d’un clic droit dans la fenêtre d’édition l’option « Breakpoints » puis « Remove All Breakpoints ».Remarque : à un instant donné, un seul point d’arrêt est actif (« Enable »), les éventuels autres points d’arrêts sont provisoirement désactivés (« Disable »).

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 37 -

Point d’arrêt actif

Point d’arrêt désactivé

Suppression/Activation des points d’arrêt

4. Exercice4.1 Créez votre source

Une fois le projet entièrement défini, vous pouvez commencer à développer le code de votre application.

Sélectionnez File ->New. Vous obtenez une fenêtre de l’éditeur. Saisir le fichier ci-dessous(fig.12) en exemple (joint sous le nom de votre projet).

4.2 Ajoutez le fichier au projet

1. Dans la fenêtre nom du projet.mcw sélectionnez Source Files puis avec le bouton droit faire Add. File

2. Sélectionnez le fichier que vous venez de créer et de sauvegarder.3. Cliquez sur Ouvrir.

Le nom du fichier doit apparaître dans la fenêtre projet au dessous de « Source Files ».

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 38 -

Fig.12 Le fichier source

4.3 Construisez le projet

Après avoir configuré le projet et saisi le code il est temps de construire le projet. Cela provoquera la compilation du fichier source en utilisant la suite logicielle choisie.

Sélectionnez Project -> Build All pour construire le projet. Votre fichier doit être assemblé correctement et vous obtenez la fenêtre ci-dessous.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 39 -

S’il y a eu un problème de compilation celui-ci est indiqué dans la fenêtre pour permettre de retrouver les erreurs. Un double cloc sur l’erreur pointe directement la ligne du programme sur laquelle se situe l’erreur.

Une fois la compilation terminée le fichier debug (*.cod ou *.cof) généré par MPLAB sera chargé. Ce fichier permet de débouguer le code source et de visualiser les variables symboliques dans les fenêtres d’observation.

4.4 Simulez le comportement du programme

4.4.1 Sélectionnez Debbugger -> Select Tools -> MPLAB SIM.

4.4.2 Faites un Reset du programme; sélectionnez Debugger -> Reset ou touche de fonction F6. Une flèche verte apparaît à gauche de la première ligne du programme.

4.4.3 Lancez l’exécution de votre programme ; faites Debugger -> Run ou F9. L’information « Running » apparaît à la gauche de la barre d’état.

4.4.4 Pour arrêter l’exécution faites Debugger -> Halt ou F5.

4.4.5 Vous pouvez aussi exécuter le programme pas à pas : faites Debugger -> Step Info ou touche F7. A ce moment la flèche verte pointe l’instruction qui va être exécutée. A tout instant vous pouvez voir le contenu d’une variable en plaçant le pointeur de la souris sur le nom de la variable.

4.5 Visualisez la fenêtre d’observationLorsque l’on exécute le programme il est intéressant de voir évoluer le contenu des registre

utilisés dans le programme. Toutes les fenêtres de debogage sont accessibles par le menu View.

File Rejister Contenu de la RAM et des FER Programme Memory Contenu de la mémoire programmeEEPROM Contenu de la mémoire de sauvegarde en

EEPROMSp. Fct. Registers Tous les registres SFRWatch Voir ci dessousHardware Stack Contenu de la pileDisassembly Listing Code Hex desassembléSimulator Trace Voir plus loin

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 40 -

Faite View -> Watch pour ouvrir une fenetre d’observation (Watch Windows).

4.6. Exécution et visualisation

4.6.1 Effectuez un Reset du programme.

4.6.2 Faites exécuter le programme pas à pas jusqu’à la ligne

bsf PORTB,0 ; on allume la LED

4.6.3 Faite avancer le programme d’un pas de plus et observez le changement d’état du bit 0 du PORTB.

4.6.4 Avancez de deux pas pour voir le contenu retard_1 à FF.

4.6.5 La temporisation est réalisée par décrémentation de deux variables ; pour raccourcir la durée vous pouvez modifier directement les valeurs de retard_1 et retard_2 en cliquent deux fois sur la valeur et en saisissant la nouvelle valeur (par exemple : 0x02).

4.6.6 Exécutez le programme de manière à revenir à la ligne (fig.13)

bcf PORTB,0 ; on éteint la LED

4.6.7 Pour continuer utilisez le bouton 5 Step Over (fig.11) ceci permet d’exécuter tout le sous-programme en mode Run et de pointer l’instruction suivante.

4.7 Utiliser les points d’arrêt et le mode Trace

Ces deux modes permettent soit d’arrêter l’exécution du programme à des endroits précis (point d’arrêt) soit d’enregistrer les actions du programme (mode Trace).

Deux menu déroulants vous permettent de sélectionner soit le contenu des registres (Add SFR) soit le contenu des variables utilisés (Add Symbol).Sélectionnez par exemple PORTB puis cliquez sur Add SFR.Faites la même chose pour sélectionner TRISB, retard_1 et retard_2. Vous obtenez ainsi une fenêtre qui vous indique le nom, l’adresse et la valeur des quatre symboles sélectionnés. L’affichage de la valeur se fait par défaut en hexadécimal, ce mode peut être modifié en faisant un clic droit dans la fenêtre. Vous pouvez afficher les informations sur 8, 16, 24 ou 32 bits dans les formats hexadécimaux, binaires, décimaux ASCII ou en nombre flottant.Sélectionnez Properties en cliquant par bouton droit de souris sur le registre intéressé (retard_1).

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 41 -

Fig.13

4.7.1 Utilisation d’un point d’arrêt

Il est souvent intéressant d’exécuter un programme et de l’arrêter à un endroit bien détermine ; ceci est possible en utilisant les points d’arrêt.

4.7.1.1 Effectuez un Reset de l’application.

4.7.1.2 Effectuez un clic droit sur la ligne suivante

bcf PORTB,0 ; on éteint la LED

4.7.1.3 Dans le menu contextuel qui apparaît choisissez Set Breakpoint. Un signal stop doit apparaître en face de la ligne indiquée (fig.14).

Fig.14

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 42 -

4.7.1.4 Lancez la simulation en mode Run ; l’exécution s’arrête à l’emplacement du pointd’arrêt pré défini (fig.14).

Fig.15

4.7.1.5 Effectuez un Reset du programme. Selectionnez Debugger -> Stopwatch. La fenêtre « Stopwatch » doit être apparaître (fig.15).

4.7.1.6 Lancez la simulation en mode Run ; l’exécution s’arrête à l’emplacement du point d’arrêt pré défini et dans la fenêtre Stopwatch vous pouvez consulter le nombre de cycles machines et le temps d’exécution en μs (fig.15).

4.7.2 Utilisation du mode Trace

Ce mode permet d’enregistrer les actions du programme en cours d’exécution et de suivre ensuite son comportement.

4.7.2.1 Validez le mode Trace en faisant Debugger -> Setting ; choisissez ensuite l’onglet Trace / Pins pour obtenir la fenêtre ci-dessous.

Deux cases à cocher contrôlent la manière dont s’effectue la collecte des données. Si seule le première case est cochée (Trace Enable) le simulateur enregistre les données en mode Run jusqu’à ce qu’il rencontre un point d’arrêt ou qu’il soit arrêté manuellement. Il permettra ensuit de visualiser les 8192 dernières cycles. Si la deuxième case est aussi cochée (Break Trace Buffer Full) le simulateur enregistre les 8192 cycles d’exécution et arrête la mémorisation et l’exécution du code.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 43 -

4.7.2.2 Faites View -> Simulator Trace. La trace du simulateur montre pour chaque cycle machine l’instruction exécute plus les données qui ont été lues ou écrites dans les registres. Pour chaque instruction la trace donne l’adresse du Compteur de Programme, le code opération (Op) en hexadécimal, l’étiquette s’il y a lieu et l’instruction désassemblée. Les quatre colonnes suivantes montrent les données lues ou écrites (fig.16):

SA Adresse Source adresse du registre où a été lue la donnée SD Source Data donnée lue DA Destination Adresse adresse du registre où a été écrite la donnée DD Data Destination donnée écrite

Fig.16

La dernière colonne donne le nombre de cycles. Cela peut permettre de mesurer la durée d’exécution d’une parte du programme. Si vous cliquez avec le bouton droit de la souris dans la ligne grise du haut vous obtenez un menu qui vous permet de choisir les colonnes à afficher.

4.8 Utiliser les fonctions avancées du simulateur

4.8.1 Configurez le simulateur

Après avoir sélectionné MPLAB SIM comme outil de debogage, sélectionnez Debugger -> Settrings ; vous obtenez la fenêtre ci-dessous.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 44 -

L’onglet « Clock » permet de fixer la fréquence de l’horloge pour permettre à la trace du simulateur de définir les durées d’exécution des cycles machines et donc de mesurer des durées d’exécution de partie de programme.

L’onglet « Break Options » donne des informations sur les points d’arrêt. Si la case « Global Break Enable » n’est pas cochée alors les points d’arrêt seront inopérants. Ceci est util quand on a de nombreux points d’arrêts et que l’on veut les invalider sans les supprimer. Remarquez la possibilité d’observer les dépassements de la pile.

L’onglet « Trace/Pins » a été déjà vu au paragraphe 4.7.2.L’onglet « Limitations » indique les limitations générales du simulateur par rapport au

composant qui doit être simulé ; le bouton « Détails » ouvre le menu d’aide et permet de détaiiller les limitations liées à ,chaque composant.

4.8.2 Création de stimulus

Les stimuli sont des pseudo signaux appliqué aux entrées du processeur. Ils permettent de simuler l’influence de l’environnement sur le déroulement du programme.

Choisissez Debugger -> Stimulus Controller pour ouvrir la fenêtre de la figure 17.

Fig.17

L’onglet « Pin Stimulus » permet de définir les pseudo signaux que l’on veut créer ; ils peuvent être de type :

Soit synchrones et ils sont définis comme des horloges dont on donne la durée à l’état haut et bas

Soit comme des signaux asynchrone actionnés par clic sur le bouton « Fire », ce clic produisant l’effet indiqué dans la colonne « Action »

L’onglet « File Stimulus » permet de créer des fichiers de simulus qui peuvent être mémorisées et rejoués.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 45 -

Règle d’or de la programmation des PICs : programmer en boucle. Fonction de temporisation.

Le but de cette partie de manuscrit est de maîtriser la programmation en assembleur d’un PIC, en utilisant des exemples d’applications très simples.

I. Exemple d’application du PIC 16F84: TELERUPTEUR

Cet exemple de programmation est destiné pour apprendre les différentes étapes de programmation en assembleur. Le fichier assembleur proposé pour cet exemple permet de faire allumer les LEDs connectés sur le microcontrôleur de la famille PIC.

La figure 1 représente le schéma de principe du telerupteur.Le circuit doit réaliser la fonction suivante. Un appui sur un des boutons-poussoirs (B_P)

branchés sur le portA allume les 8 LEDs branchés sur le port B, une seconde l’appui fait les éteindre.

Remarque : pour simplifier le schéma, on a représenté un sel B_P (branché en parallèle avec les autres B_P qui peuvent être installés éventuellement dans les différents endroits) et une LED.

Fig.1

Remarque important :

Pour programmer en langage ASSEMBLEUR il faut non seulement connaître le fonctionnement de chaque instruction, mais aussi l’architecture interne du microcontrôleur, la structure de sa mémoire, les adresses des registre spéciaux, le fonctionnement de chacune de ses ressources internes, etc..La programmation en langage ASSEMBLEUR s’appuie sur des organigrammes plus travaillés, et requiert plus de rigueur et de minutie.

U1

PIC16F84A

RA21RA32RA4T0CKI3

MCLR4

VSS5

RB0INT 6RB1 7RB2 8RB3 9RB4 10RB5 11RB6 12RB7 13

VDD 14

OSC2CLKOUT 15OSC1CLKIN16

RA017RA118

LED

R1220Ω0.1%

R2 1kΩ0.1%B_P

VDD5V

VDD5V

C1 1uF

R3

1kΩ0.1%

U2

C2 15pFC3 15pF

C4 10uF

VDD

5V

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 46 -

II. Approche structurelle et analyse du schéma électrique

Particularité du Bouton-Poussoir (B_P)Les microcontrôleurs sont des composants très rapides. Ils ne fonctionnent pas à la même échelle de

temps que nous. Imaginons de nous transformer en PIC. Nous voyons alors un énorme B_P.Lorsque ce B_P est appuyé, c’est alors une énorme barre qui vient court-circuiter deux contacts. Cette

barre est élastique. Que « voit » le PIC ? Il « voit » une énorme barre flexible qui tombe d’une énorme hauteur sur deux contacts métalliques. Une fois la barre est en contact, elle rebondit plusieurs fois (c’est le régime transitoire). A chaque appui sur le B_P, le PIC « voit » donc une série de fermeture et d’ouverture du B_P, au lieu d’une seule à notre échelle de temps. Le PIC est donc plus rapide que notre B_P.

Toujours Il faut tenir en compte les régimes transitoires des périphériques (bouton_poussoir, clavier etc..)branchés sur le microcontrôleur

III. Une des variantes de la programmation de l’application

3.1 OrganigrammeAvant la construction d’un programme il est préférable de réaliser un organigramme qui

représente le cheminement d’un programme à écrire. Cela va faciliter la programmation en assembleur.

L’organigramme de réalisation de notre programme en question est proposé sur la figure 2.Ici chaque action est symbolisée par un rectangle, un choix est symbolisé par un losange.

3.2 Organisation d’un fichier « .asm ». Quelques étapes pour la construction d’un programme.

Le fichier assembleur de l’application est donné par la figure 3. Considérons les étapes principales généralement utilisés et conseillés dans la programmation en assembleur (voir : Programmation des PIC, Première partie-PIC16F84 par

BIGONOFF, http://www.abcelectronique.com/bigonoff/organisation.php?2654c)

3.2.1 Les commentaires

De la ligne 1 à la ligne 13 vous voyez un cadre. Le premier caractère de chaque ligne, vous verrez le symbole « ; ». Tout ce qui suit étant considéré comme zone de commentaire, vous pouvez y mettre ce que vous voudrez. Ce commentaire vous aiderais de vous rappellerez ce que vous voulu faire. Les commentaires vous seront alors d’une grande utilité si vous décidez de modifier votre programme.

A la ligne 19, nous trouverons une DIRECTIVE destinée à MPASM pour indiquer quel type de processeur est utilisé dans ce programme.

3.2.2 Les directives

Les DIRECTIVES ne font pas partie du programme, elles ne sont pas traduites en OPCODE, elles serrent à indiquer à l’assembleur de quelle manière il doit travailler. Ce sont donc des COMMANDES destinées à l’assembleur en lui-même.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 47 -

Fig.2 : L’organigramme de l’application

Fig.3 : Le programme assembleur de l’application

1) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2) ; Ce programme assure la gestion des LEDs en mode3) ; de télécommande :un appui sur un des4) ; Boutons-Poussoirs allume les LEDs tendis que5) ; l’appui suivante fait éteindre ces LEDs6) ;7) ; Nom du projet : TELERUPTEUR8) ; Auteur : V.Tourtchine9) ; Date : 09/200910) ; Microcontrôleur : Microchip PIC 16F84A11) ; Langage : Assembleur12) ; IDE : Microchip MPLAB13) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx14)15) ;xxxxxxxxxxxxxxxx16) ; Processeur17) ;xxxxxxxxxxxxxxxx18)19) List p=16F84A20) #include <p16F84A.inc>

EXPLICATION

Directives pour MPASM

On utilisera les registres :« retard_ms », « mémo » et les constantes « B_P » et « LEDs »

Le portA et le portB seront programmés d’après le schéma de principe

On vérifie que le Bouton_Poussoir est appuyé pour lancer le programme

On appelle du sous-programme de temporisation

On appelle du sous-programme de gestion des LEDs

On vérifie que le Bouton_Poussoir est relâché pour revenir au début du programme.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 48 -

21) ;xxxxxxxxxxxxxxxxxxxxxx22) ; Bits de configuration23) ;xxxxxxxxxxxxxxxxxxxxxx24)25) __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC26)27) ;code protect OFF28) ;watchdog timer OFF29) ;power up timer ON30) ;xxxxxxxxxx31) ; Macro32) ;xxxxxxxxxx33)34) bank1 macro ; passage en banque 135) bsf STATUS,RP036) endm37)38) bank0 macro ; passage en banque 039) bcf STATUS,RP040) endm41)42) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx43) ; Définition des constantes44) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx45)46) #DEFINE B_P PORTA,0 ; B_P est branché sur le PORTA,047)48) #DEFINE LEDs PORTB ; LEDs sont branchées sur le PORTB49)50)51) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx52) ; Déclaration des registres temporaires53) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx54) CBLOC 0x00c55) retard_ms : 1 ; « retard_ms » à l'adresse 0x0c56) mémo : 1 ; « mémo » à l'adresse 0x0d57) compte_1 : 158) compte_2 : 159) ;xxxxxxxxxxxxxxxxxxxxxxx60) ; Démarrage sur reset61) ;xxxxxxxxxxxxxxxxxxxxxxx62)63) org 0x0000 ;adresse de départ après reset 64) goto start ;adresse 0: start65)66) ;xxxxxxxxxxxxxxxxxxxx67) ; Initialisation68) ;xxxxxxxxxxxxxxxxxxxx69) start70) bank171) movlw B'00000001'72) movwf TRISA ; bit 0 du PORTA configuré en entrée73) movlw B'00000000'74) movwf TRISB ; PORTB configuré en sortie75) bank076) clrf PORTA ; initialisation du portA77) clrf PORTB ; initialisation du portB78) clrf mémo ; initialisation du registre "mémo"79) movlw D’10’ ; 10 -> w80) movwf retard_ms,f ; initialisatio du"retard_ms" avec 1081) goto début ; -> début du programme principal 82)83) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx84) ; Programme principal85) ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx86) début87) btfss B_P ; tester si B_P est appuyé?88) goto début ; non -> début

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 49 -

89) call tempo ; oui -> appeller du s/programme "tempo"90) call gestion ; appeller du s/programme "gestion" 91) call appui ; appeller s/programme "appui"92) goto début ; retour au début du programme93)94)95) ;======== Sous-programme "tempo" de temporisation ===============96) tempo97) movlw D’250’ ; le contenu pour le registr « compte_1 »98) movwf compte_1 ; 250 -> « compte_1 »99) movf retard_ms,w ; le contenu du « retard_ms » -> W 100) movwf compte_2,f ; W -> « compte_2 »101) boucle_1102) nop103) decfsz compte_1,f ; décrémenter le « compte_1 » et sauter:104) goto boucle_1 ; -> boucle_1 si « compte_1 » n’est pas 0105) movlw D’250’ ; si « compte_1 » est 0106) movwf compte_1,f ; on charge le « compte_1 » avec D’250’107) boucle_2 108) decfsz compte_2,f ; décrémenter le « compte_2 » 109) goto boucle_1 ; si le « compte_2 » n’est pas 0 110) return ; si le « compte_2 » est 0111)112) ;====== Sous-programme "gestion" des LEDs ==============113) gestion114) comf mémo,f ; inverser les bits du registre "mémo"115) movf mémo,w ; sauvegarder « mémo » dans le registre w116) movwf LEDs ; charger le registre LEDs par w117) return ; -> programme principal118)119) ;======== Sous-programme"appui" du test de B_P ================= 120) appui121) btfsc B_P ; détecter si B_P est appuyé?122) goto appui ; oui -> appui123) return ; non -> programme principal124)125) END ; fin du programme

3.2.4 La directive CONFIG

La ligne 25, commence par « __ CONFIG ». Cette ligne contient les « fameux fusibles » qui fixent le fonctionnement du PIC.

Les valeurs écrites ici seront intégrées dans le fichier « .hex » pour signaler au programmateur les valeurs à encoder aux adresses spécifiques du PIC.

3.2.5 Les macros

Plus bas, lignes 34 à 36, nous trouverons une MACRO :

bank1 macro ; passage en banque 1bsf STATUS,RP0endm

La macro se compose d’un nom écrit en première colonne, suivi par la directive « macro ». Commence alors à la ligne suivante la portion de code qui constitue la macro. La fin de la macro est définie par la directive « endm ».

Une macro remplace donc un morceau de code que nous utilisons souvent. La macro fonctionne également uniquement comme un simple traitement de texte. Chaque fois que la macrosera rencontrée, elle sera remplacée au moment de l’assemblage par la ligne (dans notre cas) :

bsf STATUS,RP0

La macro simplifie donc l’écriture, mais ne raccourci pas la taille du fichier .hex obtenu, puisque la ligne sera écrites dans le PIC.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 50 -

3.2.6 La définitions des constantes

Descendons encore un peu. Dans les lignes 51 et 53 nous trouverons un exemple de DEFINE. Les « define » est destiné pour remplacer un texte plus complexe.

Par exemple nous pourrons utiliser un PORT suivi d’un numéro de bit, ou bien carrément une instruction avec ses paramètres.

Une définition est construite de la manière suivante : La directive #DEFINE, suivie par le nom que l’on désir utiliser, puis la chaîne à substituer. Dans notre exemple :

Les définitions servent à simplifier une modification éventuelle dans le programme. Supposons que vous décidez de connecter le B_P sur le PORTA bit 4 (RA4), à titre d’exemple. Nul besoin de rechercher partout dans le programme, il suffira de changer dans la zone DEFINE.

#DEFINE B_P PORTA,0 soit autrement : bouton equ 0 puis#DEFINE B_P PORTA,bouton

#DEFINE B_P PORTA,4 soit autrement : bouton equ 4 puis#DEFINE B_P PORTA,bouton

3.2.7 La déclaration des registres temporaires ou des variables

La zone de mémoire RAM librement utilisable commence à l’adresse 0x0c. Donc vous pouvez utiliser 68 emplacements RAM, qui répondront à la syntaxe suivante :

retard_ms equ 0x0c ; le registre « retard_ms » à l’adresse 0x0cmémo equ 0x0d ; le registre « mémo » à l’adresse 0x0d

3.2.8 La zone des variables

Toute zone définie par l’utilisateur commence avec la directive CBLOCK, suivie par l’adresse du début de la zone. Ensuit, nous pouvons utiliser 68 emplacements mémoire, qui répondront à la syntaxe suivant : nom de la variable suivi du signe « : » suivi de la telle utilisée. Dans notre exemple on peut défini des registres temporaire comme suit :

CBLOCK 0x0c ; début de la zone variableretard_ms : 1 ; le registre « retard_ms » à l’adresse 0x0cmémo : 1 ; le registre « mémo» à l’adresse 0x0d

3.2.9 Les étiquettes

Vous trouverez dans les programmes en 1ère colonne ce qu’on a l’appelé des ETIQUETTES. Ce sont des noms que vous choisissez et qui sont des REPERES pour le programme.

L’assembleur les remplacera par l’adresse du programme à, l’endroit où elles sont positionnées. Ceci vous évite de devoir calculer les emplacements programme.

3.2.10 La directive « ORG »

La directive ORG, suivie de l’adresse, précise à quelle adresse les instructions qui suivent seront placées dans le PIC.

Après un reset ou mise sous tension, le PIC démarre toujours à l’adresse 0x00. Le début du programme doit donc se situer là.

L’adresse 0x04 est l’adresse utilisée par les interruptions (nous verrons dans le prochain séance de TD). Il ne vous reste donc pas grande place pour placer votre programme. Nous commencerons donc par un saut vers l’emplacement du programme principal où nous aurons plus de place. Allons donc voir ligne 68 comment tout ceci fonctionne :

org 0x00 ; adresse de départ après resetgoto start ; adresse 0 : start

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 51 -

La première ligne est une DIRECTIVE qui indique que la ligne suivante sera placée à l’adresse 0x00.

La seconde ligne est une INSTRUCTION qui indique au PIC que le programme doit sauter à l’adresse « start » . « start » est une ETIQUETTE.

Après le reset, le PIC exécute donc l’instruction goto start qui se trouve à l’adresse 0x00, suivie par l’instruction qui se trouve à l’adresse start plus bas dans le programme (donc juste en dessous de l’étiquette start).

3.2.11 La routine d’initialisation

Les instructions contenues à partir de l’étiquette « start » (de la ligne 70 à la ligne 81) vous devriez avoir comprise.

3.2.12 Le programme principal

A partir de la ligne 86 à la ligne 123 c’est le programme principal. Dans notre cas ce programme peut être représenté sans utiliser l’appelle des sous-programmes et de macro. Le choix dépend de la fréquence d’utilisation dans le programme des sous-programmes et des macro. Vous pouvez choisir la méthode que vous préférez. Très important, c’est d’avoir compris les deux méthodes.

3.2.13 La directive « END »

Cette directive précise l’endroit où doit cesser l’assemblage de votre programme. Elle est obligatoire dans tout programme.

Toutes les instructions situées après la directive END seront tout simplement ignorées.

3.3 Calcul du temps d’exécution d’une temporisation

Grâce aux caractéristiques sur le jeu (set) d’instructions des PIC, on peut connaître le nombre de cycles nécessaires pour l’exécution d’une instruction. Sachant que l’horloge interne divise par 4 le fréquence issue du quartz, cella donne, pour un quartz de 4 MHz, un temps de 1 µs par cycle machine (f = 4 MHz /4 = 1 MHz, d’où T = 1/f = 1 µs).

A chaque fois qu’on a besoin d’introduire dans le programme une temporisation, il faut calculer le temps machine nécessaire pour exécuter cette temporisation afin de déterminer la valeur exacte de la temporisation.

Prenons l’exemple d’une temporisation (de la ligne 96 à 110 dans notre programme) avec un quartz de 4 MHz.

L’instruction goto et return dure 2 cycles machines, l’instruction decfsz dure 1 cycle ainsi que l’instruction nop. Le registre « compte_1 » est initialisé à 250.

Le PIC fera 250 fois la boucle_1 de temporisation : la temporisation est donc de :(ligne 102 + ligne 103 + ligne 104) x compte_1 – ligne104= (nop + decfsz + goto) x compe_1 – goto = (1+1+2) x 250 – 2 = 1 000 – 2 (cycles)

Maintenant avec la boucle_2 = retard_ms on a: (1 000 – 2) x compte_2 + (ligne105 + ligne106)compte_2 – ligne109 soit :(1 000 – 2) x retard_ms + (movlw + movwf) x retard_ms – goto soit:(1 000 – 2) x retard_ms +(1+1)x retard_ms – 2 (cycles) plus :

(ligne89 + ligne97 + ligne98 + ligne99 + ligne 100 + ligne 110) soit :(call + movlw + movwf + movf + movwf + return) = (2 + 1 + 1 +1 + 1 + 2) = 8 (cycles)

Finalement le nombre de cycles NbCycles est égale à :NbCycles = 1 000 x retard_ms – 2 x retard_ms + 2 x retard_ms – 2 + 8 = 1 000 x retard_ms + 4Alors on peut déterminer le temps totale de temporisation :NbSycles x 1 µs = 1 000 x retard_ms x 1 µs + 4 x 1 µs = 103 x retard_ms x 1 µs + 4 x 1 µs

Si on néglige les 4 µs par rapport à 103 x retard_ms x 1 µs, on a pour le temps de temporisation: tempo = 103 x retard_ms x 1 µs = 103 x retard_ms (µs).

Supposons que le régime transitoire du B_P n’est dépasse pas 10 ms = 10 x 103 µs.Alors on peur calculer le contenu maximal du registre « retard_ms » :

retard_ms = 10 x 103/ 103 = 10 (cycles) Dans notre programme le registre « retard_ms » a été initialisé avec le contenu à 10.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 52 -

IV. Exercices

Exercice 1. Une minuterie

Le schéma d’application est représenté sur la figure 1. Le fonctionnement du circuit est suivant. De que le montage sera alimenté et le bouton-poussoir B_P appuyé, la LED devra s’allumer et y restera durant un période préalablement établi (180 ms ). L’organigramme est représenté sur la figure 4.Pour la temporisation on utilisera une fonction « tempo » de l’exemple précédent.

Écrire en assembleur le programme pour le PIC 16F84A.

Fig. 4 L’organigramme d’une minuterie

Exercice 2. Le clignotant

Le schéma d’application est représenté sur la figure 1. Le fonctionnement du circuit est suivant.De que le montage sera alimenté, et le bouton_poussoir B_P sera constamment appuyé la LED devra clignoter indéfiniment (période de 400 millisecondes)

Écrire en assembleur le programme pour cette application en utilisant PIC 16F84A.

Exercice 3. Les feux tricoloresLe but de cet exercice est de simuler le fonctionnement de deux feux tricolores. Le schéma de principe est représenté sur la figure 5.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 53 -

La partie commentaire de l’organigramme représenté sur la figure 6 décrit successivement ce que doit faire le programme. On défini une constante, que l’on nomme « Inter0 », et qui correspond au bouton marche / arrêt de notre montage, et une constante « Inter1 » qui correspond à l’interrupteur qui déclare les faux en mode clignotant. On effectue une temporisation longue « tempo_lg » environ 4 s et une temporisation courte « tempo_ct » environ égal à 1,5 s.

Ecrire en assembleur le programme correspondant à l’organigramme de la figure 6.

Fig.5

U1

PIC16F84

OSC2/CLKOUT15

MCLR4

OSC1/CLK16

VDD14

RA017RA118

RA21RA32RA4/T0CLK3

RB0/INT 6RB1 7

RB2 8RB3 9RB4 10RB5 11RB6 12

RB7 13

LV LJ LR

0

LV

LJ

LR

R6 R5 R4

R9

R8

R7

1uF

0

10uF

0

+ C2

0

12

12

3 X 470

3 X 470

R31 k

R21 k

0 0

C3 15pF

+C1

R1 1 k

Alimentationstabilisée 5 V

0

+ 5 v

Inter 0Inter 1

0

0

Q1

4 MHz

C4 15pF

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 54 -

Feu 1 à l'orange, fue 2 à l'orange

Appel de la temporisation courte

Feu 1 éteint, fue 2 éteint

Appel de la temporisation courte

Etat initial

Déclaration des variables utilisées

Initialisation des ports A et B

Initialisation des feux au signal rouge

Le boutonmarche-arrêtest appuiyé ?

Le boutonclignotant est

appuiyé ?

Appel de la temporisation longue

Feu 1 au vert, fue 2 au rouge

Appel de la temporisation longue

Feu 1 à l'orange, fue 2 au rouge

Appel de la temporisation courte

Feu 1 àu rouge, fue 2 au rouge

Appel de la temporisation courte

Feu 1 àu rouge, fue 2 au vert

Appel de la temporisation longue

Feu 1au rouge, fue 2 à l'orange

Appel de la temporisation courte

NON

OUI

NON

OUI

Fig. 6

COMMENTAIRES

On utilise les registres :retard_1, retard_2, retard_3.

Le porte A est programmé en entrée et le porte B en sortie (vers la LED)

On impose un signal rouge aux deux feux tricolores.

On vérifie que l’interrupteur «Marche» est appuyé pour lancer le programme.

Si le bouton clignotant est appuyé, le programme se déroute vers l’étiquette « clignote », les feux clignotent à l’orange.

Fonctionnement normal

Appel de la temporisation longue avant de passer le feu 1 au vert.

Appel de la temporisation longue avant de passer le feu 1 à l’orange.

Appel de la temporisation courte avant de repasser le feu 1 au rouge.

Appel de la temporisation courte.

Le feu 2 passe au vert.

Appel de la temporisation longue.

Le feu 2 passe à l’orange.

Appel de la temporisation courte avant de retourner en début de programme.

Fonctionnement en clignotantPassage des feux 1 et 2 à l’orange.

Appel de la temporisation courte.

On éteint les 2 feux.

Appel de la temporisation courte et retour.

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 55 -

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Nom du projet : tricolor;; Auteur : V.TOURTCHINE; Date : 09/2009; Microcontrôleur : Microchip PIC 16F84A; Langage : Assembleur; IDE : Microchip MPLAB;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

;xxxxxxxxxxx; Processeur;xxxxxxxxxxx

List p=16F84A#include <p16F84A.inc>

;xxxxxxxxxxxxxxxxxxxxxx; Bits de configuration;xxxxxxxxxxxxxxxxxxxxxx

__config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

;xxxxxx; Macro;xxxxxx

bank1 macro ; passage en banque 1bsf STATUS,RP0endm

bank0 macro ; passage en banque 0bcf STATUS,RP0endm

LRon_1 macrobsf LR_1endm

LJon_1 macrobsf LJ_1endm

LVon_1 macrobsf LV_1endm

LRon_2 macrobsf LR_2endm

LJon_2 macrobsf LJ_2endm

LVon_2 macrobsf LV_2endm

;xxxxxxxxxxxxxxxxxxxxxxxxxxx; Déclaration des variables;xxxxxxxxxxxxxxxxxxxxxxxxxxx

CBLOCK 0x0Cretard_ct : 1 retard_lg : 1compte_1 : 1 compte_2 : 1ENDC

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Définition des consrantes;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx#DEFINE LR_1 PORTB,0

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 56 -

#DEFINE LJ_1 PORTB,1#DEFINE LV_1 PORTB,2#DEFINE LR_2 PORTB,3#DEFINE LJ_2 PORTB,4#DEFINE LV_2 PORTB,5#DEFINE Inter0 PORTA,0#DEFINE Inter1 PORTA,1

;xxxxxxxxxxxxxxxxxxxx; Démarrage sur reset;xxxxxxxxxxxxxxxxxxxx

org 0x0000goto start

;xxxxxxxxxxxxxxx; Initialisation;xxxxxxxxxxxxxxx

startbank0clrf PORTAclrf PORTBbank1movlw B'00000011'movwf TRISAmovlw B'00000000'movwf TRISBbank0clrf PORTAclrf PORTBmovlw d'6'movwf retard_lgmovlw d'2'movwf retard_ctclrf compte_1clrf compte_2goto début

;xxxxxxxxxxxxxxxxxxxx; Programme principal;xxxxxxxxxxxxxxxxxxxxdébut

btfss Inter0goto débutbtfsc Inter1goto clignotecall STOPcall route_1avertcall route_1call J_1call STOPcall route_2avertcall route_2call J_2goto début

;=========== s/p tempo_lg ================tempo_lg

movlw d'250'movwf compte_1movf retard_lg,w movwf compte_2

boucle_1lgnopdecfsz compte_1goto boucle_1lgmovlw d'250'movwf compte_1

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 57 -

boucle_2lg decfsz compte_2,f goto boucle_1lg return

;========== s/p tempo_ct =============

tempo_ctmovlw d'100'movwf compte_1movf retard_ct,w movwf compte_2

boucle_1ctnopdecfsz compte_1,fgoto boucle_1ctmovlw d'100'movwf compte_1

boucle_2ct decfsz compte_2,f goto boucle_1ct return

;========== s/p STOP =========STOP

clrf PORTBLRon_1LRon_2call tempo_ctreturn

;======== s/p J_1 ============J_1

clrf PORTBLJon_1LRon_2call tempo_ctreturn

;========= S/P J_2 ===========J_2

clrf PORTBLJon_2LRon_1call tempo_ctreturn

;======== S/P route_1 =========route_1

clrf PORTBLVon_1LRon_2call tempo_lgreturn

;======= S/P route_2 =========route_2

clrf PORTBLRon_1LVon_2call tempo_lgreturn

V.Tourtchine. Microcontrôleur de la famille PIC. Support de cours & Prise en main du logiciel MPLAB--------------------------------------------------------------------------------------------------------------------------------------

- 58 -

;====== S/P route_1 avert ========route_1avert

clrf PORTBLRon_1LJon_1LRon_2call tempo_ctreturn

;======= s/p route_2 avert =========route_2avert

clrf PORTBLRon_1LRon_2LJon_2call tempo_ctreturn

;======= s/p clignote =========clignote

clrf PORTBcall tempo_ctLJon_1LJon_2call tempo_ctgoto début

END