Poly Elbacha PIC

34
A. ELBACHA ENSA-Marrakech 1 CHAPITRE 1 : INTRODUCTION 1. Architecture interne d’un système à microprocesseur L'architecture interne d'un ordinateur se compose essentiellement de trois blocs: le microprocesseur, la mémoire et les entrées/sorties reliées entre elles par trois bus de communication; le bus de données, le bus d’adresses et le bus de commande. Bus de données (8 lignes) Mémoire Unité centrale de traitement microprocesseur Entrées/Sorties Bus de contrôle Bus d'adresses Figure 1 : Architecture interne d’un système à microprocesseur 1.1. Le microprocesseur Un microprocesseur est l'implantation en un seul boîtier, en technologie LSI ou VLSI, d'une unité centrale de traitement de données CPU et d’une unité arithmétique et logique ALU. Son principal travail est de fournir aux autres éléments, qui lui sont raccordés, la synchronisation nécessaire et fonctionnelle du traitement des informations qui lui sont acheminées. 1.2. La mémoire C'est la partie où l'on retrouve les programmes exécutables et les données à traiter. Cette section est subdivisée en deux; d'une part, il y a la mémoire latente et d'autre part, la mémoire vive. Mémoire morte C'est la mémoire de lecture; elle contient le programme du système. L'avantage de la ROM (Read Only Memory), c’est d'être permanente; son contenu ne disparaît pas quand le système n'est plus alimenté. La ROM contient toujours un programme de chargement initial ou un moniteur pour permettre le fonctionnement du système dès la mise sous tension. Dans un contexte de contrôle de processus, presque tous les programmes résideront en ROM car ils seront rarement changés et devront être protégés des pannes d'alimentation. Mémoire vive C'est la mémoire de lecture et d’écriture du système ou RAM (Random Access Memory). Le contenu de ce type de mémoire est perdu lorsque l'on coupe l'alimentation. La mémoire vive (RAM) doit être chargée, avant utilisation, à partir du clavier ou à partir d’une mémoire de masse comme, par exemple, une unité à ruban magnétique ou une unité à disque.

description

pic

Transcript of Poly Elbacha PIC

Page 1: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 1

CHAPITRE 1 : INTRODUCTION 1. Architecture interne d’un système à microprocesseur

L'architecture interne d'un ordinateur se compose essentiellement de trois blocs: le microprocesseur, la mémoire et les entrées/sorties reliées entre elles par trois bus de communication; le bus de données, le bus d’adresses et le bus de commande.

Bus de données (8 lignes)

MémoireUnité centrale de

traitementmicroprocesseur

Entrées/Sorties

Bus de contrôle

Bus d'adresses

Figure 1 : Architecture interne d’un système à microprocesseur

1.1. Le microprocesseur Un microprocesseur est l'implantation en un seul boîtier, en technologie LSI ou VLSI, d'une unité centrale de traitement de données CPU et d’une unité arithmétique et logique ALU. Son principal travail est de fournir aux autres éléments, qui lui sont raccordés, la synchronisation nécessaire et fonctionnelle du traitement des informations qui lui sont acheminées.

1.2. La mémoire C'est la partie où l'on retrouve les programmes exécutables et les données à traiter. Cette section est subdivisée en deux; d'une part, il y a la mémoire latente et d'autre part, la mémoire vive.

Mémoire morte

C'est la mémoire de lecture; elle contient le programme du système. L'avantage de la ROM (Read Only Memory), c’est d'être permanente; son contenu ne disparaît pas quand le système n'est plus alimenté. La ROM contient toujours un programme de chargement initial ou un moniteur pour permettre le fonctionnement du système dès la mise sous tension. Dans un contexte de contrôle de processus, presque tous les programmes résideront en ROM car ils seront rarement changés et devront être protégés des pannes d'alimentation.

Mémoire vive

C'est la mémoire de lecture et d’écriture du système ou RAM (Random Access Memory). Le contenu de ce type de mémoire est perdu lorsque l'on coupe l'alimentation. La mémoire vive (RAM) doit être chargée, avant utilisation, à partir du clavier ou à partir d’une mémoire de masse comme, par exemple, une unité à ruban magnétique ou une unité à disque.

Page 2: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 2

1.3. Les entrées/sorties Les entrées/sorties sont nécessaires pour que le microprocesseur communique avec le monde extérieur et, évidemment, avec l'utilisateur. Il serait tout à fait inutile de réaliser un ordinateur sans qu'il y ait quelques entrées et quelques sorties afin de communiquer avec l'extérieur.

1.4. Les bus de communication Évidemment, pour que le système fonctionne, il doit y avoir une communication entre le microprocesseur, la mémoire et les entrées/sorties. Cette communication est réalisée à l'aide de trois bus qui regroupent les signaux, selon leur fonction.

Le bus de données C'est un bus bidirectionnel (de 8 bits pour un 6809) sur lequel transitent les données échangées par les éléments du système.

Le bus d’adresses Il s'agit d'un bus unidirectionnel (de 16 bits pour un 6809), émanant du microprocesseur et se propageant vers les dispositifs qu'il peut adresser. L'adresse qu'il porte permet d'atteindre une case mémoire ou un registre spécifique avec laquelle une opération est désirée.

Le bus de contrôle C'est un groupe de lignes issues de ou allant vers le microprocesseur et reliant ce dernier à d'autres dispositifs. Son rôle est de véhiculer les signaux destinés à assurer la synchronisation et la commande de l'ensemble du système. Par exemple, la ligne Reset et R/W (lecture/écriture), les lignes d'interruptions et l'horloge appartiennent à ce bus.

Page 3: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 3

2. QU’EST-CE QU’UN MICROCONTROLEUR Un microcontrôleur se présente sous la forme d’un circuit intégré réunissant tous les éléments d’une structure à base de microprocesseur. Il effectue entre autres :

Opérations arithmétiques (addition, multiplication…) et logiques (ET, OU,…), L’exécution d’instructions stockées dans sa mémoire programme. Le dialogue avec des éléments électroniques extérieurs (échanges de données numériques et

analogiques, génération de signaux, …) On générale un microcontrôleur peut contenir :

Un microprocesseur (CPU), De la mémoire de donnée (RAM et EEPROM), De la mémoire programme (ROM, UVPROM ou EEPROM), Des interfaces parallèles pour la connexion des entrées/sorties, Des interfaces séries (synchrone ou asynchrone) pour le dialogue avec d’autres unités, Des timers pour générer ou mesurer des signaux avec une grande précision temporelle Des convertisseurs analogiques/numériques pour le traitement de signaux analogiques.

2.1 Modèles : Il existe une multitude de modèles de microcontrôleurs. Ce vaste choix permet de trouver le type de modèle le plus adapté à ce que l’on veut faire. Les microcontrôleurs ne sont généralement pas très chers, comparé aux processeurs dédiés au calcul très rapide (type PENTIUM). Les microcontrôleurs se distinguent par une grande caractéristique : la taille de sa mémoire de calcule. Quelques microcontrôleurs disponibles sur le marché sont : ATMEL : AT90S8515 ; MICRISHIP : 16F84 et 16F877; MOTORALA: 68HC11; SEAGATE-THOMSON: ST6,ST9…; INTEL: 8051… 2.2 Utilisations : Les systèmes intelligents automatiques, intégrant une technologie à base de microcontrôleur, sont dans tous les domaines de la vie quotidiennes : Télécommunications :carte FAX/MODEM, téléphones portables, interfaces homme machine, gestion d’écrans graphiques… Industriels : automates programmables, contrôle/régulation de processus, supervision… Commercial : électroménager, domotique… Automobile :ABS, calculateur d’injection, tableau de bord… Militaire et spatial : sonde, lanceurs de fusées, missile, robots… Loisirs : concours robotique…

2.3 Avantages :

Encombrement réduit Circuit imprimé peu complexe Faible consommation Coût réduit

2.4 Inconvénient :

Système de développement onéreux Programmation nécessitent un matériel adapté

Page 4: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 4

3. LES DEUX TYPES D’ARCHITECTURE DES MICROCONTROLEURS 3.1 Type Von Neumann ( 68HC11 entre autres)

La mémoire programme (ROM) contient les codes des instructions et les données. Au moins deux cycles d’horloge par instruction : L’opérande n’est pas intégré à l’instruction.

Exemple :

Cette instruction occupe deux adresses en ROM pour y loger les octets de LDAA (code $96) et la donnée $8F. Elle nécessite plusieurs cycles d’horloge :

adresse AD sur le bus d’adresse, code $96 sur le bus de données adresse AD+1 sur le bus d’adresse, valeur $10 sur le bus de données

Le jeu d’instruction de ces microcontrôleurs est important : CISC (Complex Instructions Set Computer) Le 68HC11 possède un jeu complexe de 145 instructions. 3.2 Type Harvard sur (PIC16Fxx entre autres)

Instruction Registre utilisé Mode d’adressage Format de la donnée Opérande / Donnée Charge l’accumulateur A avec la valeur (immédiate) Hexadécimale 8F

LDA A # $ 8F

Page 5: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 5

La mémoire programme (ROM) contient les codes des instructions et des données de façon séparées. Un seul cycle d’horloge par instruction. *

L’opérande est intégré à l’instruction. Exemple :

Cette instruction comprend : Le code de l’instruction (0x30) sur 6 bits La donnée 0x8F sur 8 bits

On trouvera donc en mémoire programme un mot de 14 bits 110000 10001111 instruction movlw constante 0x8F Les mémoires instructions et données et les bus correspondants sont séparés. Ceci permet, au même instant de :

exécuter l’instruction correspondant à l’adresse courante extraire l’instruction suivante

La ROM Programme, registre tampon, décodeur d’instruction constituent un « pipeline ».

L'idée est d'exécuter l'instruction n-1 pendant que l'instruction n est chargée en mémoire RAM. Ainsi, une fois le système enclenché, pendant chaque cycle machine une instruction est chargée et une autre exécutée. On a donc l'équivalent d'une instruction par cycle machine. Notons que l'instruction CALL dure 2 cycles machine comme toutes les instructions de branchement. Le séquencement de l’horloge est sur 4 phases. Le jeu d’instruction de ces microcontrôleurs est réduit : RISC : (Reduced Instructions Set Computer) Par exemple les PIC de la série 16Fxx possèdent un jeu réduit à 35 instructions. 4. QU’EST-CE QU’UNE PIC ? Une PIC (Programmable Interface Controler) n’est rien d’autre qu’un microcontrôleur, c’est à dire une unité de traitement de l’information de type microprocesseur à laquelle on a ajouté des périphériques internes permettant de réaliser des montages sans nécessiter l’ajout de composants externes.

Instruction Registre utilisé Format de la donnée Opérande / Donnée move la constante (l) dans le registre (W) Hexadécimale 8F

movl w 0x 8F

Page 6: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 6

La dénomination PIC est sous copyright de Microchip, donc les autres fabricants ont été dans l’impossibilité d’utiliser ce terme pour leurs propres microcontrôleurs. Les PICs sont des composants dits RISC (Reduce Instructions Construction Set), ou encore composant à jeu d’instructions réduit. Pourquoi ? Et bien, sachez 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. Toutes les PICs Mid-Range ont un jeu de 35 instructions, stockent chaque instruction dans un seul mot de programme, et exécutent chaque instruction (sauf les sauts) en 1 cycle. On atteint donc des très grandes vitesses, et les instructions sont de plus très rapidement assimilées. L’horloge fournie à la PIC est prédivisée par 4 au niveau de celle-ci. C’est cette base de temps qui donne le temps d’un cycle. Si on utilise par exemple un quartz de 4MHz , on obtient donc 1000000 de cycles/seconde, or, comme la pic exécute pratiquement 1 instruction par cycle, hormis les sauts, cela vous donne une puissance de l’ordre de 1MIPS (1 Million d’Instructions Par Seconde). Pensez que les pics peuvent monter à 20MHz. C’est donc une vitesse de traitement plus qu’honorable. 5. LES DIFFERENTES FAMILLES DES PICS La famille des PICs est subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des mots d’instructions (nous verrons ce que c’est) 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. Nous nous limiterons à la famille Mid-Range, sachant que si vous avez tout compris, vous passerez très facilement à une autre famille, et même à un autre microcontrôleur. 6. IDENTIFICATION D’UNE PIC Pour identifier une PIC, on utilise simplement son numéro. Les 2 premiers chiffres indiquent la catégorie de la PIC, 16 indique une PIC Mid-Range. Vient ensuite parfois une lettre L : Celle-ci indique que la PIC peut fonctionner avec une plage de tension beaucoup plus tolérante. Ensuite, vous trouvez :

C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM CR pour indiquer une mémoire de type ROM Ou F pour indiquer une mémoire de type FLASH.

Notez à ce niveau que seule une mémoire FLASH ou EEPROM est susceptible d’être effacée, donc n’espérez pas reprogrammer vos PICs de type CR. Pour les versions C, voyez le datasheet Puis vous verrez les derniers chiffres identifient précisément la PIC. (84) Enfin vous verrez sur les boîtiers « -XX » dans laquelle XX représente la fréquence d’horloge maximale que la PIC peut recevoir. Par exemple –04 pour une 4MHz. Donc, une 16F84-04 est une PIC Mid-Range (16) dont la mémoire programme est de type FLASH (F) donc réinscriptible, de type 84 et capable d’accepter une fréquence d’horloge de 4MHz. Notez dès à présent que les PICs sont des composants STATIQUES, c’est à dire que la fréquence d’horloge peut être abaissée jusqu’à 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. Ceci par opposition aux composants DYNAMIQUES, donc la fréquence d’horloge doit rester dans des limites précises. N’essayez donc pas de faire tourner votre PIII/500 à 166MHz, car c’est un composant dynamique.

Page 7: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 7

CHAPITRE 2 : ETUDE DE LA PIC 16F84

1. BROCHAGE ET FONCTION DES PATTES

La Figure II.1 montre le brochage du circuit. Les fonctions des pattes sont les suivantes : - VSS, VDD : Alimentation - OSC1,2 : Horloge - RA0-4 : Port A - RB0-7 : Port B - T0CKL : Entrée de comptage - INT : Entrée d'interruption - MCLR : Reset : 0V

Choix du mode programmation : 12V - 14V exécution : 4.5V - 5.5V

Figure II.1 : Brochage du circuit.

Un microcontrôleur PIC 16F84, pour pouvoir fonctionner, a nécessairement besoin de : - une alimentation de 5 Volts ; - un quartz et deux condensateurs (si un pilotage précis par base de temps à quartz est

nécessaire), ou une résistance et un condensateur (pour une base de temps de type RC, économique, utilisable dans les cas ne demandant pas une extrême précision de cadencement);

- un condensateur de découplage (pour réduire les transitoires se formant inévitablement dans tout système impulsionnel) ;

- un bouton poussoir et une résistance, pour la mise en place d’une commande de Reset. Ces éléments - qu’il convient de considérer comme des invariants devant nécessairement

figurer dans tout montage - représentent le cortège obligatoire de tout microcontrôleur PIC 16F84, de la même façon - pourrais-je dire - qu’un transistor demande, pour fonctionner, une résistance de Base et une résistance de Collecteur.

Les applications type sont celles de la Figure II.2:

Figure II.2 : Cortège des invariants.

Page 8: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 8

Les Entrées/Sorties A part les cinq pins réservées au cortège des invariants devant nécessairement figurer dans

tout montage, les treize autres pins du 16F84 servent d’entrées/sorties. Elles sont regroupées en deux ports : Port A et Port B. Le Port A possède 5 lignes, nommées:

RA0..........pin 17 RA1..........pin 18 RA2..........pin 1 RA3..........pin 2 RA4..........pin 3 (RA4/T0CKI)

(NB : RA = Register A) Le Port B possède 8 lignes, nommées:

RB0..........pin 6 (RB0/INT) RB1..........pin 7 RB2..........pin 8 RB3..........pin 9 RB4..........pin 10 RB5..........pin 11 RB6..........pin 12 RB7..........pin 13

(NB : RB = Register B) A remarquer que RB0 (pin 6) et RA4 (pin 3), outre qu’à pouvoir servir d’entrées/sorties, selon

la façon dont on les programme peuvent respectivement servir l’une comme entrée d’interruption et l’autre comme entrée d’horloge externe pour le pilotage du timer (TMR0).

2. ARCHITECTURE GENERALE

La Figure II.3 présente l'architecture générale du circuit. Il est constitué des éléments suivants :

- un système d'initialisation à la mise sous tension (power-up timer, …) - un système de génération d'horloge à partir du quartz externe (timing génération) - une unité arithmétique et logique (ALU) - une mémoire flash de programme de 1k "mots" de 14 bits - un compteur de programme (program counter) et une pile (stack) - un bus spécifique pour le programme (program bus) - un registre contenant le code de l'instruction à exécuter - un bus spécifique pour les données (data bus) - une mémoire RAM contenant les SFR et 68 octets de données. - une mémoire EEPROM de 64 octets de données - 2 ports d'entrées/sorties - un compteur (timer) - un chien de garde (watchdog).

Page 9: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 9

Figure II.3 : Architecture générale du circuit

3. ORGANISATION DE LA MEMOIRE

La PIC contient de la mémoire de programme et de la mémoire de données. La structure Harvard des PICs fournit un accès séparé à chacune. Ainsi, un accès aux deux est possible pendant le même cycle machine.

3.1 Mémoire de programme

C'est elle qui contient le programme à exécuter. La Figure II.3 montre l'organisation de cette mémoire. Elle contient 1k "mots" de 14 bits dans le cas du PIC 16F84, même si le compteur de programme (PC) de 13 bits peut en adresser 8k. Il faut se méfier des adresses images ! L'adresse 0000h contient le vecteur du reset, l'adresse 0004h l'unique vecteur d'interruption du PIC. La pile contient 8 valeurs. Comme le compteur de programme, elle n'a pas d'adresse dans la plage de mémoire. Ce sont des zones réservées par le système.

3.2 Mémoire de données

Elle se décompose en deux parties de RAM (Figure II.4) et une zone EEPROM. La première contient les SFRs (Special Function Registers) qui permettent de contrôler les opérations sur le circuit. La seconde contient des registres généraux, libres pour l'utilisateur. La dernière contient 64 octets. Comme nous le verrons ulterieurement, les instructions orientées octets ou

Figure II.4 : Organisation de la mémoire de programme et de la pile.

Page 10: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 10

bits contiennent une adresse sur 7 bits pour désigner l'octet avec lequel l'instruction doit travailler. D'après la Figure* II.4, l'accès au registre TRISA d'adresse 85h, par exemple, est impossible avec une adresse sur 7 bits. C'est pourquoi le constructeur a défini deux banques. Le bit RP0 du registre d'état (STATUS.5) permet de choisir entre les deux. Ainsi, une adresse sur 8 bits est composée de RP0 en poids fort et des 7 bits provenant de l'instruction à exécuter.

3.3 Registres spéciaux – SFRs

Ils permettent la gestion du circuit. Certains ont une fonction générale, d’autres une fonction spécifique attachée à un périphérique donné. La Figure* II.5 donne la fonction de chacun des bits de ces registres. Ils sont situés de l'adresse 00h à l'adresse 0Bh dans la banque 0 et de l'adresse 80h à l'adresse 8Bh dans la banque 1. Les registres 07h et 87h n'existent pas.

INDF (00h - 80h) : Utilise le contenu de FSR pour l'accès indirect à la mémoire.

TMR0 (01h) : Registre lié au compteur. PCL (02h - 82h) : Contient les poids faibles du compteur

de programmes (PC). Le registre PCLATH (0Ah-8Ah) contient les poids forts.

STATUS (03h - 83h) : Il contient l'état de l'unité arithmétique et logique ainsi que les bits de sélection des banques.

FSR (04h - 84h) : Permet l'adressage indirect. PORTA (05h) : Donne accès en lecture ou écriture au

port A, 5 bits. Les sorties sont à drain ouvert. Le bit 4 peut être utilisé en entrée de comptage PORTB (06h) : Donne accès en lecture ou écriture au port B. Les sorties sont à drain ouvert.

Le bit 0 peut être utilisé en entrée d'interruption. EEDATA (08h) : Permet l'accès aux données dans la mémoire EEPROM. EEADR (09h) : Permet l'accès aux adresses de la mémoire EEPROM. PCLATCH (0Ah - 8Ah) : Donne accès en écriture aux bits de poids forts du compteur de

programme. INTCON (0Bh - 8Bh) : Masque d'interruptions. OPTION_REG (81h) : Contient des bits de configuration pour divers périphériques. TRISA (85h) : Indique la direction (entrée ou sortie) du port A. TRISB (86h) : Indique la direction (entrée ou sortie) du port B. EECON1 (88h) : Permet le contrôle d'accès à la mémoire EEPROM. EECON2 (89h) : Permet le contrôle d'accès à la mémoire EEPROM.

Figure II.5 : Organisation de la

mémoire de données.

Page 11: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 11

Figure II.6 : Description des SFR.

3.4 Mémoire EEPROM Le PIC possède une zone EEPROM de 64 octets accessibles en lecture et en écriture par le

programme. On peut y sauvegarder des valeurs, qui seront conservées même si l'alimentation est éteinte, et les récupérer lors de la mise sous tension. Leur accès est spécifique et requiert l'utilisation de registres dédiés. La lecture et l'écriture ne peuvent s'exécuter que selon des séquences particulières.

Page 12: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 12

4. PORTS D'ENTREES/SORTIES

Le PIC 16F84 est doté de deux ports d'entrées/Sorties appelés PortA et PortB.

4.1. Port A

Il comporte 5 pattes d'entrée/sortie bi-directionnelles, notées RAx avec x={0,1,2,3,4} sur le brochage du circuit (Figure* II.2). Le registre PORTA, d'adresse 05h dans la banque 0, permet d'y accéder en lecture ou en écriture. Le registre TRISA, d'adresse 85h dans la banque 1, permet de choisir le sens de chaque patte (entrée ou sortie) : un bit à 1 positionne le port en entrée, un bit à 0 positionne le port en sortie.

La Figure II.7 donne le câblage interne d'une patte du port A : - "Data Latch" : Mémorisation de la valeur écrite quand le port est en sortie. - "TRIS Latch" : Mémorisation du sens (entrée ou sortie) de la patte. - "TTL input buffer" : Buffer de lecture de la valeur du port. La lecture est toujours réalisée sur la patte, pas à la sortie de la bascule d'écriture. - Tansistor N : En écriture : Saturé ou bloqué suivant la valeur écrite.

En lecture : Bloqué. - Transistor P : Permet d'alimenter la sortie.

La patte RA4 peut aussi servir d'entrée de comptage pour le timer0.

4.2. Port B

Il comporte 8 pattes d'entrée/sortie bi-directionnelles, notées RBx avec x={0,1,2,3,4,5,6,7} sur le brochage du circuit (Figure* II.2). Le registre PORTB, d'adresse 06h dans la banque 0, permet d'y accéder en lecture ou en écriture. Le registre TRISB, d'adresse 86h dans la banque 1, permet de choisir le sens de chaque patte (entrée ou sortie) : un bit à 1 positionne le port en entrée, un bit à 0 positionne le port en sortie. Le câblage interne d'une porte du port B ressemble beaucoup à celui du port A (Figure II.8). On peut noter la fonction particulière pilotée par le bit RBPU (OPTION_REG.7) qui permet d'alimenter (RBPU=0) ou non (RBPU=1) les sorties. Les quatre bits de poids fort (RB7-RB4) peuvent être utilisés pour déclencher une interruption sur changement d'état . RB0 peut aussi servir d'entrée d'interruption externe.

Figure II.7 : Câblage interne d'une patte du port A.

Figure II.8 : Câblage interne d'une patte

du port B.

Page 13: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 13

5. JEU D’INSTRUCTION DU PIC 16F84 :

Page 14: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 14

CHAPITRE 3 : ORGANISATION D’UN FICHIER

« .asm » 1. Les commentaires

;********************************************************************** ; Ce programme fait clignoter une LED à une fréquence approximative de 1Hz * ; NOM: * ; Date: * ; Auteur: * ;**********************************************************************

2. Les directives

Les DIRECTIVES ne font pas partie du programme, elles ne sont pas traduites en

OPCODE, elles servent à indiquer à l’assembleur de quelle manière il doit travailler. Ce sont donc

des COMMANDES destinées à l’assembleur en lui-même.

Au contraire, les INSTRUCTIONS seront traduites en OPCODE et chargées dans le PIC. Il

est donc impératif de bien faire la distinction.

3. les fichiers « include »

Signale à l’assembleur que les ASSIGNATIONS sont dans le fichier P16F84.inc. Que

contient ce fichier ? Et bien tout simplement la valeur de toutes les CONSTANTES que nous allons

utiliser. Pour voir ce qu’il contient, allez dans le menu « file ->Open », choisissez « all files » dans

le cadre inférieur, et ouvrez p16F84.inc. Une fois dépassée la zone de commentaires, vous verrez

des lignes du style :

FSR EQU H'0004'

Cette ligne signifie tout simplement que FSR EGAL 0x0004. Autrement dit, lorsque vous

utiliserez FSR dans une instruction, MPASM interprétera FSR comme étant 0x04. 0x04 étant tout

simplement l’adresse de FSR dans la mémoire de la PIC.

4. La directive _CONFIG

Cette directive détermine le fonctionnement du PIC.

Notez que puisque la mémoire programme des PICs vierges contient des « 1 », le niveau actif de

ces bits sera le niveau « 0 ».

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC

Page 15: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 15

Page 16: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 16

5. Les assignations

Les assignations se comportent comme une simple substitution. Au moment de

l’assemblage, chaque fois que l’assembleur va trouver une assignation, il la remplacera

automatiquement par sa valeur.

Si vous remplacez la valeur d’une assignation, le changement sera effectif pour tout le

programme. Vous ne risquez donc pas d’oublier des valeurs en chemin.

Exemple d’assignation :

mavaleur EQU 0x20

6. Les définitions

Sachez que les « define » fonctionnent comme des ASSIGNATIONS. A ceci près que nous

réserverons les assignations pour les valeurs, et les définitions 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ésire utiliser, puis la chaîne à substituer. Par exemple :

#DEFINE monbit PORTA,1

7. Les macros

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) (end of macro).

Une macro remplace un morceau de code que nous utilisons souvent. La macro fonctionne

également uniquement comme un simple traitement de texte.

La macro simplifie donc l’écriture, mais ne raccourci pas la taille du fichier .hex obtenu.

Exemple :

;************************************************************************* ; MACRO ;************************************************************************* BANK0 macro ; passer en banque0

bcf STATUS,RP0 endm

BANK1 macro ; passer en banque1 bsf STATUS,RP0 endm

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.

Page 17: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 17

Pour placer nos variables, qui sont des emplacements mémoires auxquels on a donné un

nom, nous consultons de nouveau le tableau 4-2. Nous voyons que la zone RAM librement

utilisable commence à l'adresse 0x0C. Notre zone de variable contiendra donc la directive

CBLOCK 0x0C ; début de la zone variables

Ensuite, la définition des emplacements mémoire doit répondre à la syntaxe suivante : nom

de la variable suivi du signe « : » suivi de la taille utilisée.

Par exemple :

w_temp :1 ; Zone de 1 byte

montableau : 8 ; zone de 8 bytes

Ensuite, vous devrez préciser la fin de la zone en cours à l’aide de la directive :

ENDC ; Fin de la zone

9. Les étiquettes

Vous trouverez dans les programmes en 1ere colonne ce que nous appellerons des

ETIQUETTES. Ce sont des noms que vous choisissez et qui sont de s 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. Nous en verrons

plus loin le principe.

10. La directive « ORG »

La directive ORG, suivie de l’adresse, précise à quelle adresse les instructions qui suivent

seront placées dans la PIC. Il est important de savoir 2 choses :

- Après un reset ou une mise sous tension, la PIC démarre toujours à l’adresse 0x00. Le début

de votre programme doit donc se situer là.

- L’adresse 0x04 est l’adresse utilisée par les interruptions.

11. La directive « END »

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

obligatoire dans tout programme, sous peine d’une erreur qui vous signalera que la fin de fichier

(End Of File) a été atteinte avant de rencontrer la directive END.

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

Page 18: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 18

CHAPITRE 4 : PROGRAMMATION DU TIMER 0

1) Présentation :

C’est le plus ancien des timers implantés dans les PICs, son ancienne appellation était RTC, pour

Real Time Clock (horloge temps réelle). On peut se servir de celui-ci pour générer des événements

périodiques, comme le rafraîchissement d’afficheurs multiplexés ou ’incrémentation de variables

(secondes, minutes …. ).

Celui-ci est incrémenté soit par l’horloge interne (Fosc/4) ou par une horloge appliquée sur la

broche TOCKI/ RA4 .

Comme on peut le constater sur ce schéma le timer 0 partage avec le chien de garde Watchdog le

pré diviseur. Celui-ci est affecté à l’un ou à l’autre, suivant la valeur du bit PSA (0 : Timer0 et 1 :

chien de garde). On peut obtenir un schéma simplifié du fonctionnement du timer0 sans le chien de

garde.

Page 19: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 19

2) Les registres qui fonctionnent avec le TIMER0

Page 20: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 20

Page 21: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 21

Page 22: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 22

Page 23: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 23

Page 24: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 24

Page 25: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 25

Page 26: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 26

CHAPITRE 5 : LE CHIEN DE GARDE

Page 27: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 27

Page 28: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 28

CHAPITRE 6 : LES INTERRUPTIONS

Page 29: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 29

Page 30: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 30

CHAPITRE 7 : LES ACCÈS EN MÉMOIRE « EEPROM »

Page 31: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 31

Page 32: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 32

Page 33: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 33

CHAPITRE 8 : MODE SOMMEIL

1. Principe

Lorsque le PIC n'a rien à faire (par exemple lors de l'attente d'une mesure extérieure),

ce mode est utilisé pour limiter sa consommation : le PIC est mis en sommeil (le

programme s'arrête) jusqu'à son réveil (le programme repart). Ce mode est

principalement utilisé pour les systèmes embarqués fonctionnant sur pile.

2. Gestion

2.1. Mise en sommeil

La mise en sommeil est réalisée grâce à l'instruction sleep. La séquence suivante est

exécutée :

- Le chien de garde est remis à 0 (équivalent à clrwdt)

- Le bit TO (STATUS.4) est mis à 1

- Le bit PD (STATUS.3) est mis à 0

- L'oscillateur est arrêté ; le PIC n'exécute plus d'instruction

2.2. Réveil

Ce mode n'est intéressant que si l'on peut en sortir pour relancer le programme. Trois

événements permettent de sortir le PIC du sommeil :

- Application d'un niveau 0 sur l'entrée MCLR (broche numéro 4). Le PIC

effectue alors un reset et relance le programme à partir de l'adresse 0000h.

Les bits TO (STATUS.4) et PD (STATUS.3) permettent à l'utilisateur de

savoir quel événement à lancer le programme (mise sous tension, reset,

chien de garde).

- Activation du chien de garde. Le programme reprend à l'instruction suivant le

sleep.

- Apparition d'une interruption (RB0/INT, RB ou EEPROM). Il faut pour cela

que les bits de validation spécifique des interruption concernées soient

positionnés. Si le bit de validation générale des interruptions (GIE) est à 0

Page 34: Poly Elbacha PIC

A. ELBACHA ENSA-Marrakech 34

(pas de validation des interruptions), le programme reprend après

l'instruction sleep comme pour le chien de garde. Si le bit de validation

générale des interruptions (GIE) est à 1 (validation des interruptions),

l'instruction suivant le sleep est exécutée et la fonction d'interruption liée à

l'événement qui a réveillé le PIC est exécutée.