109
Programmation des Microcontroleurs (PIC) EL MORNAN Page 1 SOMMAIRE 1)Architecture interne d’un système à microprocesseur 2)Le microcontrôleur16F84 3)  Jeux d'instructi ons des PIC  4)  Bits (ou "fusi bles") de configuration  5)Les interruptions 6)Le mode SLEEP 7)Le t imer W ATCHDOG (chien de garde) 8)Accès à la mémoire EEPORM 9)  Remar ques et ast uces de pr ogrammatio n en assemb leur 10) Les étapes nécessaires pour programmer un pic : 11)  Exemples en assembleur avec 16 F84 12) Simulation d’un PIC sous Proteus 13) Circuits d’interfaces avec le microcontrôleur 14) Pic 16F877 :

Programmation Des Microcontroleurs

Embed Size (px)

Citation preview

Page 1: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 1/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 1

SOMMAIRE

1)Architecture interne d’un système à microprocesseur

2)Le microcontrôleur16F84

3) Jeux d'instructions des PIC

4) Bits (ou "fusibles") de configuration

5)Les interruptions

6)Le mode SLEEP

7)Le timer WATCHDOG (chien de garde)

8)Accès à la mémoire EEPORM

9) Remarques et astuces de programmation en assembleur

10) Les étapes nécessaires pour programmer un pic :

11) Exemples en assembleur avec 16F84

12) Simulation d’un PIC sous Proteus

13) Circuits d’interfaces avec le microcontrôleur

14) Pic 16F877 :

Page 2: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 2/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 2

1. Architecture interne d’un système à

microprocesseur

L'architecture interne d'un ordinateur se compose essentiellement de trois blocs: le microprocesseur, lamémoire et les entrées/sorties reliées entre elles par trois bus de communication; le bus de données, le busd’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-1 Architecture interne d’un ordinateur

1.1.1 Le microprocesseur

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

1.1.2 La mémoire

C'est la partie où l'on retrouve les programmes exécutables et les données à traiter. Cette section estsubdivisé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é. LaROM contient toujours un programme de chargement initial ou un moniteur pour permettre lefonctionnement du système dès la mise sous tension. Dans un contexte de contrôle de processus, presquetous 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 dece type de mémoire est perdu lorsque l'on coupe l'alimentation. La mémoire vive (RAM) doit êtrechargé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 3: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 3/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 3

1.2 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 quelquesentrées et quelques sorties afin de communiquer avec l'extérieur.

1.3

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 lessignaux, selon leur fonction.

1.3.1 Le bus de données

C'est un bus bidirectionnel sur lequel transitent les données échangées par les éléments du système.

1.3.2 Le bus d’adresses

Il s'agit d'un bus unidirectionnel, é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 aveclaquelle une opération est désirée.

1.3.3 Le bus de contrôle

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

2.

Les microcontrôleurs :2.1 Généralités :

Un microcontrôleur se présente comme étant une unité de traitement de l’information de type

microprocesseur contenant tous les composants d’un système informatique, à savoir, microprocesseur,

des mémoires et des périphériques (ports, timers, convertisseurs…). Chaque fabricant a sa ou ses familles

de microcontrôleurs.

Une famille se caractérise par un noyau commun (le microprocesseur, le jeu d’instruction…).

Ainsi les fabricants peuvent présenter un grand nombre de pins qui s’adaptent plus au moins à certaines

tâches. Mais un programmeur connaissant une famille n’a pas besoin d’apprendre à utiliser chaque

membre, il lui faut connaître juste ces différences par rapport au père de la famille. Ces différences sont

souvent, la taille des mémoires, la présence ou l’absence des périphériques et leurs nombres

Page 4: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 4/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 4

2.2 Les avantages du microcontrôleur :

L’utilisation des microcontrôleurs pour les circuits programmables à plusieurs points forts et bien

réels. Il suffit pour s’en persuader, d’examiner la spectaculaire évolution de l’offre des fabricants de

circuits intégrés en ce domaine depuis quelques années.

Tout d’abord, un microcontrôleur intègre dans un seul et même boîtier ce qui, avant nécessitait une

dizaine d’éléments séparés. Il résulte donc une diminution évidente de l’encombrement de matériel et

de circuit imprimé.

Cette intégration a aussi comme conséquence immédiate de simplifier le tracé du circuit imprimé

puisqu’il n’est plus nécessaire de véhiculer des bus d’adresses et de donnée d’un composant à un

autre.

Le microcontrôleur contribue à réduire les coûts à plusieurs niveaux :

- Moins cher que les autres composants qu’il remplace.

- Diminuer les coûts de main d’œuvre.

Réalisation des applications non réalisables avec d’autres composants

2.3 Contenu d’un microcontrôleur :

Un circuit microcontrôleur doit contenir dans un seul boîtier tous Les éléments de bases, nous yretrouvons bien évidemment l’unité centrale qui est plus simplifiée par rapport à celle du

microprocesseur. En contre partie, des instructions de manipulation de bits, très utiles pour faire des

entrées/sorties lui ont été ajoutées. Dans certains circuits, cette unité centrale se voit dotée d’un très grand

nombre de registres internes qui servent alors de mémoire vive.

2.4 Organisation de la mémoire

Architecture Von Neumann : une mémoire unique et pour le programme et pour les données.

Architecture Harvard : le programme et les données sont stockés dans des mémoires physiquement

séparés

2.5 Qu'est-ce qu'un PIC ?

Un PIC est un microcontrôleur de chez Microchip. Ses caractéristiques principales sont : Séparation des mémoires de programme et de données (architecture Harvard) : On obtient ainsi une

meilleure bande passante et des instructions et des données pas forcément codées sur le même nombre de bits. Communication avec l'extérieur seulement par des ports : il ne possède pas de bus d'adresses, de bus de

Page 5: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 5/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 5

données et de bus de contrôle comme la plupart des microprocesseurs. Utilisation d'un jeu d'instructions réduit, d'où le nom de son architecture : RISC (Reduced Instructions Set

Construction). Les instructions sont ainsi codées sur un nombre réduit de bits, ce qui accélère l'exécution(1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles). En revanche, leur nombrelimité oblige à se restreindre à des instructions basiques, contrairement aux systèmes d'architecture CISC(Complex Instructions Set Construction) qui proposent plus d'instructions donc codées sur plus de bitsmais réalisant des traitements plus complexes.

Il existe trois familles de PIC :- Base-Line : Les instructions sont codées sur 12 bits- Mid-Line : Les instructions sont codées sur 14 bits- High-End : Les instructions sont codées sur 16 bitsUn PIC est identifié par un numéro de la forme suivant : xx(L)XXyy –zz- xx : Famille du composant (12, 14, 16, 17, 18)- L : Tolérance plus importante de la plage de tension- XX : Type de mémoire de programmeC -EPROM ou EEPROM

CR - PROMF -FLASH- yy : Identification- zz : Vitesse maximum du quartz

Nous utiliserons un PIC 16F84 –10, soit :- 16 : Mid-Line- F : FLASH- 84 : Type- 10 : Quartz à 10MHz au maximum .Il s'agit d'un microcontrôleur 8 bits à 18 pattes.Principales caractéristiques :- 35 instructions

- Instructions codées sur 14 bits- Données sur 8 bits- 1 cycle machine par instruction, sauf pour les sauts (2 cycles machine)- Vitesse maximum 10 MHz soit une instruction en 400 ns (1 cycle machine = 4 cycles d'horloge)- 4 sources d'interruption- 1000 cycles d'effacement/écriture pour la mémoire flash

Brochage et fonction des pattes La Figure montre le brochage du circuit. Les fonctions des pattes sont les suivantes :- VSS, VDD :- OSC1,2 :- RA0-4 :

- RB0-7 :- T0CKL :- INT :- MCLR :

Figure: Brochage du circuit

Page 6: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 6/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 6

2.6 Architecture générale

Figure : Architecture générale du PIC 16F8X.

La Figure 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 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)

Le circuit de mise en œuvre minimale :

Le circuit 16F84 est l’un des plus simples de la famille, mais il permet néanmoins de travailler avec 12 broches d’entrée/sortie !

La mise en œuvre est très simple. Il faut au minimum :- Un circuit d’horloge ( un quartz, deux condensateurs ou bien seulement un condensateur et unerésistance )- Une alimentation +5V !

Page 7: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 7/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 7

2.7 Circuit d’horloge :

2.7 Organisation de la mémoire

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

2.8 Mémoire de programme

C’est elle qui contient le programme à exécuter. Ce dernier est téléchargé par liaison sérieLa Figure 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.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.

Page 8: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 8/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 8

Figure : Organisation de la Mémoire de données.

Page 9: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 9/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 9

2.9 Registre à fonction spéciale (Special Function Register : SFR) :

Les registres à fonction spéciales sont utilisés par le microprocesseur et les périphériques internes. Ils sont stockésdans la RAM statique , ce qui limite à 8 bits (et non 14 bits) ces registres. Les SFRs sont toujours stockés dans

les 32 premiers octets de chaque page (bank). Registre W :

Le registre W est le registre de travail sur 8 bits pour réaliser des opérations arithmétiques ou logiques. Pointeur de pile S :

Le pointeur de pile S est un ensemble de registre sur 13 bits. Sur les PICs, il y a 8 mots de 13 bits, ce qui limite lenombre maximal d’interruption ou d’appel à des sous-programmes. Le pointeur de pile S mémorise une adresse,c’est à dire le contenu du compteur programme. Attention, elle n’est pas manipulable, exclusivement réservée aumicroprocesseur.

Compteur programme ou PC :Le compteur programme, PC, indique l’adresse du prochain code binaire à 14 bits à traiter. Le registre PC est

constitué de deux registres , un registre PCL constitué de 8 bits et un registre PCLATH constitué de 5 bits. Leregistre PC fait donc 13 bits qui correspondent à 8192 mots de 14 bits mais dans notre cas limité à 4096 mots de 14 bits (voir doc du pic16F648A).

Registre d’état (Status Register) :

Le registre d’état est un registre sur 8 bits. Chaque bit à une signification particulière :

Le bit C (Carry) : C est mis à 1 lorsqu’une opération arithmétique génère une retenue. Il est également utilisé

comme indicateur d’erreur lors d’une multiplication ou d’une division, et sert lors de certaines opérations dedécalage ou rotation qui peuvent passer par son intermédiaire ou non. Le bit Z (Zéro) : Z est mis à 1 lorsque le résultat de l’instruction exécuté est nul. Les bits RP1 et RP0 : Bits indiquants sur quelle page (bank), le microprocesseur travail en adressage direct (seul 7 bits d’adresses sont nécessaires).

RP1 RP0 bank 0 (adresse 00h-7Fh) ou page 0 bank 1 (adresse 80h-FFh) ou page 1 bank 2 (adresse 100h-17Fh) ou page 2 bank 3 (adresse 180h-1FFh) ou page 3 Le bit IRP : Bit indiquant sur quelle page (bank), le microprocesseur travail en adressage indirect (8 bits

d’adresses sont nécessaires).0 : bank 0, 1 (adresse 00h-FFh) ou page 0 et 11 : bank 2,3 (adresse 100h-1FFh) ou page 2 et 3

E) Ports Port A : RA0 à RA4 sont des entrées du port parallèle A. Ces lignes sont bidirectionnelles (sauf pour RA4 en entrée

seulement). De plus elles sont partagées avec certains périphériques du pic (voir doc constructeur en fonction des besoins).

Port B : PB0 à PB7 sont des sorties du port parallèle B. Ces lignes sont bidirectionnelles. De plus elles sont partagées avec

certains périphériques du pic (voir doc constructeurs en fonction des besoins).On remarque que l'écran se découpe en 4 champs :

Page 10: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 10/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 10

Champ étiquette Champ opérateur (code mnémonique) ou directive d'assemblage Champ opérande Champ commentaire Pour passer d'un champ à un autre, il suffit de mettre un espace avec la touche espace ouTAB. Plusieurs espaces accolés correspondent à un seul et même espace. Attention on ne peut sauter des champs,

c'est à dire passer du champ étiquette au champ opérande. Seul le champ commentaire est un peu particulier. Si unchamp quelconque est rempli, on peut aller directement au champ commentaire. Il y a une exception, lorsqu'aucunchamp n'est rempli, l'éditeur considère que toute la ligne est un champ commentaire, d'où la condition de mettre ;en début de ligne.

On n'utilisera pas d'étiquette comportant plus de 8 caractères du code ASCII standard.

2.10 Directives d'assemblage :

END

EQU

Fin du fichier contenant le programme.

Permet de donner des équivalences (pour des valeurs).Ex: FSR EQU H’04’.Et dans le programme cela donnera :

MOVF FSR ; Ecriture de W dans FSR

#DEFINE Permet de donner des équivalences (pour des chaînes de caractères).Ex: #DEFINE MONBIT PORTA,1.Et dans le programme cela donnera :

BCF MONBIT ; Met le bit 1 du port A à 0 (équivalent à BCF PORTA,1)

Page 11: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 11/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 11

ORG Détermine où le compilateur doit mettre les codes qui suivent cette commande.

Ex: ORG 0x00.

_CONFIG Détermine les fusibles qui fixeront le fonctionnement du PIC.Ex: _CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_ON.

_CP_OFF : _WDT_ON : _PWRTE_ON : _HS_ON :

_BODEN_ON : _LVP_ON :

_CPD_OFF :

Aucune protection en lecture du pic (choix par défaut).WatchDog en service par défaut (le mettre à OFF sur nos Kits).Délai de démarrage du pic à la mise sous tension (OFF par défaut).Oscillateur à quartz à grande vitesse (_XT_OSC sur nos kits : quartz lent)(_RS_OSC par défaut).Reset du pic si chute de tension (choix par défaut).Utilisation de RB3 comme broche de programmation sous 5V(choix pardéfaut).

Non protection en écriture de la zone EEPROM (choix par défaut). _DATA_CP_OFF : Non protection en écriture de la zone RAM (choix par défaut). _WRT_ON : _DEBUG_OFF :

Non protection de la mémoire FLASH (lié à _CP_) (choix par défaut). Non utilisation d’un débuggeur (avec RB6 et RB7) (choix par défaut).

#INCLUDE Détermine pour le compilateur toutes les équivalences liés à la structure du pic(pour l’assembleur). Aussi utilisé en programmation en langage C. Cela permetalors d’inclure des fonctions ou procédures en C déjà réalisées.

Ex: #INCLUDE <pic16F648A>.

CBLOCK Détermine un bloc mémoire pour réserver des octets pour différentes variables.ENDC Fin de la déclarat ion pour le bloc mémoire.Ex : CBLOCK 0x20 ; Déclaration d’un bloc mémoire à l’adresse 0x20TEMPTABLEENDC ;

: 1: 8Fin de ladéclarationdu bloc

; Réservation d’un octet à l’adresse 0x20; Réservation de 8 octets à partir de l’adresse 0x21

Page 12: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 12/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 12

2.11 Registres d'usage général

Le PIC 16F84A possède 68 registres d'usage général situés dans la mémoire des données (Data RAM).

Cela correspond donc à 68 octets (68 x 8 bits) de mémoire SRAM, que vous pouvez utiliser commevariables pour votre programme.

Les registres d'usage général sont indifféremment accessibles en banque 0 ou en banque 1.

Banque 0 (adresses 0x0C à 0x4F) Banque 1 (adresses 0x8C à 0xCF)

Notez bien que le registre situé à l'adresse 0x0C (banque 0) est aussi le registre de l'adresse 0x8C (banque1)

Les outils de programmation (MPLAB ...) permettent d'attribuer un nom à un registre.

Il est plus agréable de manipuler :

movwf compteur1

que :

movwf 0x0C

2.12 Registres spéciaux

Le PIC 16F84A a 15 registres spéciaux situés dans la mémoire des données (Data RAM).

La mémoire des données est divisée en 2 banques :

Banque 0 (adresses 0x00 à 0x7F) Banque 1 (adresses 0x80 à 0xFF)

-> Les registres spéciaux :

TIMR0 PORTA PORTB EEDATA EEADR

sont situés en banque 0.

N.B. Pour passer en banque 0, il faut au préalable exécuter l'instruction :

bcf STATUS , RP0

-> Les registres spéciaux :

Page 13: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 13/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 13

OPTION_REG TRISA TRISB EECON1 EECON2

sont situés en banque 1.

N.B. Pour passer en banque 1, il faut au préalable exécuter l'instruction :

bsf STATUS , RP0

-> Les autres registres spéciaux :

STATUS INTCON

FSR , INDF PCL PCLATH

sont indifféremment accessibles en banque 0 ou en banque 1 (donc peu importe la valeur du bit RP0 duregistre STATUS).

3. Jeux d'instructions des PIC

Les PIC 16F84A, 16F876A et 16F877 ont le même jeu d'instructions, constitué de seulement 35

instructions (architecture RISC : Reduced Instruction-Set Computer).

Une instruction est codée par un mot de 14 bits.

La mémoire programme (de type Flash) a une taille de :

1792 octets (16F84A) 3584 octets (16F628A) 7168 octets (16F88)

ce qui permet de stocker un programme de :

1024 instructions (16F84A) 2048 instructions (16F628A) 4096 instructions (16F88)

Une instruction nécessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement (GOTO,CALL ...).

Avec une horloge à quartz de 20 MHz, un cycle correspond à 4/(20.106) = 200 nanosecondes.

Le microcontrôleur peut donc exécuter jusqu'à 5 millions d'instructions par seconde !

Jeu d'instructions

Page 14: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 14/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 14

W : régistre de travail (accumulateur), taille 8 bits

k : valeur littérale, taille 8 bits

némonique ,opérande Description

bit du

registreTATUSaffecté

nombre decycles

MOVLW k k (8 bits) est chargé dans (W) - 1

ADDLW k Additionne k (8 bits) et (W) et place le résultat

dans (W)C, DC , Z 1

SUBLW k

Soustrait W de k (8 bits) et place le résultat

dans (W)

k - (W) -> (W)

C, DC , Z 1

ANDLW kRéalise un ET logique entre k (8 bits) et (W),

et place le résultat dans (W)Z 1

IORLW kRéalise un OU logique (inclusif) entre k (8 bits)

et (W), et place le résultat dans (W)Z 1

XORLW kRéalise un OU exclusif entre k (8 bits) et (W),

et place le résultat dans (W)Z 1

L : label (étiquette)

Mnémonique ,

opérande Description

bit du registre

STATUS affecté

ombre de

cycles

GOTO L Branchement à l'adresse L - 2

CALL LAppelle un sous-programme (subroutine)

situé à l'adresse L- 2

RETURN Retour de sous-programme - 2

RETLW k

Retour de sous-programme, avec chargement

de la valeur littérale k (8 bits) dans (W)- 2

Page 15: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 15/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 15

RETFIE Retour de sous-programme d'interruption - 2

CLRWDT Efface le Watchdog /TO, /PD 1

SLEEP Place le microcontrôleur en mode sommeil /TO, /PD 1

f : registre (spécial ou d'usage général)

b : position du bit (0 à 7)

Mnémonique ,opérande

Description bit du registre

STATUSaffecténombre de

cycles

BCF f , b Mise à 0 du b ème bit du registre f - 1

BSF f , b Mise à 1 du b ème bit du registre f - 1

BTFSC f , b

Si le b ème bit du registre f est égal à 0,

alors l'instruction suivante est ignorée,

et une instruction NOP est exécutée à

la place (soit 2 cycles)

- 1 ou 2

BTFSS f , b

Si le b ème bit du registre f est égal à 1

, alors l'instruction suivante est ignorée,

et une instruction NOP est exécutée à

la place (soit 2 cycles)

- 1 ou 2

f : registre (spécial ou d'usage général)

d : registre de destination (on peut choisir entre le registre de travail W et le registre f ).

Mnémonique ,opérande

Description bit du registre

STATUS affecté

nombre de

cycles

MOVWF f (W) est chargé dans (f) - 1

MOVF f , d (f) (8 bits) est chargé dans (destination) Z 1

ADDWF f , d Additionne le contenu du registre f (8 bits)et (W), et place le résultat dans (destination)

C, DC , Z 1

Page 16: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 16/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 16

SUBWF f , d

Soustrait (W) de (f) (8 bits) et place le

Résultat dans (destination).

(f) - (W) ->(destination)

C, DC , Z 1

ANDWF f , d Réalise un ET logique entre (f) (8 bits)et (W), et place le résultat dans (destination)

Z 1

IORWF f , d

Réalise un OU logique (inclusif) entre (f)

(8 bits)et (W), et place le résultat dans

(destination)

Z 1

XORWF f , d éalise un OU exclusif entre (f) (8 bits) et (W),

et place le résultat dans (destination)

Z 1

COMF f , dRéalise le complément logique de (f)

(8 bits)et place le résultat dans (destination)Z 1

DECF f , dDécrémente (f) et place le résultat dans

(destination). (f) - 1 -> (destination)

Z 1

DECFSZ f , d

Décrémente (f) et place le résultat dans

(destination).Si le résultat est 0, alors

l'instruction suivante est ignorée, et une

instruction NOP est exécutée à la place

(soit 2 cycles)

- 1 ou 2

INCF f , dIncrémente (f) et place le résultat dans

(destination). (f) + 1 -> (destination)

Z 1

INCFSZ f , d

Incrémente (f) et place le résultat dans

(destination).Si le résultat est 0, alors

l'instruction suivante est ignorée, et

une instruction NOP est exécutée à la place

(soit 2 cycles)

- 1 ou 2

CLRF f

Efface le contenu du registre (f).

Remarque : le bit Z est donc mis à 1.Z 1

Page 17: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 17/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 17

CLRW Efface le contenu de l'accumulateur (W).

Remarque : le bit Z est donc mis à 1.

Z 1

RLF f , d

Réalise une rotation circulaire à gauche :

Le résultat est placé dans (destination).

C 1

RRF f , d

Réalise une rotation circulaire à droite :

Le résultat est placé dans (destination).

C 1

SWAPF f , d

Les 4 bits de poids forts et les 4 bits de poids

faible de (f) sont échangés.

Le résultat est placé dans (destination).

- 1

NOP Cette instruction ne fait rien (durée 1 cycle). - 1

3.1 Modes d'adressages

On ne peut pas concevoir un programme qui ne manipule pas de données. Il existe quatre grands typesd'accès à une donnée ou modes d'adressage :

Adressage inhérentAdressage immédiat

Adressage directAdressage indirect

Adressage inhérent :

Ce mode n’est pas à proprement parler un mode d’adressage, mais tous les fabricants le décomptentcomme tel

Les instructions agissent sur les registres internes du microprocesseur. Les instructions comportent donc un codeopérateur seul sans opérande.

CLRW Met le registre de travail W à 0 et met le bit Z à 1.

Page 18: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 18/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 18

Adressage immédiat La donnée est contenue dans l'instruction .La donnée est contenue dans un registre.L'adresse de la donnée est contenue dans un pointeurExemple : movlw 0xC4; Transfert la valeur 0xC4 dans W

Adressage direct

La donnée est contenue dans un registre. Ce dernier peut être par un nom (par exemple W) ou une adressemémoire.

Exemple : movf 0x2B, 0 ; Transfert dans W la valeur contenue à l'adresse 0x2B. ! L'adresse 0x2B peut correspondre à 2 registres en fonction de la

banque

Adressage indirect

3.2

Le compteur de programme (PC)Le PC contient l'adresse de la prochaine instruction que doit exécuter le programme.

Le programme est stocké dans la mémoire de programme (de type Flash, reprogrammable jusqu'à 10000fois) aux adresses 0x0000 à 0x3FF (soit 1024 adresses).

Le codage d'une instruction nécessite un seul emplacement mémoire : on peut donc stocker un programmede 1024 instructions au maximum (pour le PIC 16F84A).

Le PC est constitué des deux registres spéciaux :

PCL PCLATH

Le registre spécial PCL est situé à l'adresse 0x02 (banque 0) de la mémoire des données (Data RAM).

Ce registre est également accessible en banque 1 (à l'adresse 0x82).

Le registre spécial PCLATH est situé à l'adresse 0x0A (banque 0) de la mémoire des données.

Ce registre est également accessible en banque 1 (à l'adresse 0x8A).

Le PC contient une adresse codée sur 13 bits :

Le registre PCL contient l'adresse de poids faible (8 bits) du PC Le registre PCLATH contient l'adresse de poids fort (5 bits) du PC.

Par exemple :

(PCL) = B'10110011'

(PCLATH) =B'---00010' (les bits 5 à 7 ne sont pas utilisés par le PIC 16F84A)(PC) = B'0001010110011' (adresse 0x2B3 en numération hexadécimale).

Page 19: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 19/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 19

La prochaine instruction que va exécuter le PIC est donc située à l'adresse 0x2B3 de la mémoire de programme.

Vous pouvez manipuler le contenu des registres PCL et PCLATH.

Par exemple, les instructions :

movlw 0x02 ; W = 0x02

movwf PCLATH ; (PCLATH) = 0x02

movlw 0xB3 ; W = 0xB3

movwf PCL ; (PCL) = 0xB3

font sauter le programme à l'adresse 0x2B3 (après l'exécution de l'instruction movwf PCL).

On a ainsi fait un GOTO "programmé" (goto 0x2B3)

3.3 L'adressage relatif

L'instruction addwf PCL , f permet de faire ce que l'on appelle un adressage relatif.

Cette technique est largement utilisée pour la gestion des tableaux de données.

- Les sous-programmes (ou routines)

- La routine d'interruption

- La pile

1- Les sous-programmes (routines)

Prenons un exemple :

...MOVLW B'10010001'

CALL routine1

CLRW

...

...

routine1 ; étiquette de début de la routine

Page 20: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 20/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 20

instructions de la routine

RETURN ; retour de routine

Supposons que le µC en soit à l'exécution de l'instruction MOVLW B'10010001'.

L'instruction suivante est l'instruction CALL : il s'agit d'une instruction d'appel à un sous-programme.

Le µC saute alors à la position définie par l'étiquette "routine1".

Puis, les instructions du sous-programme sont exécutées.

La fin du sous-programme est signalée par l'instruction RETURN (ou aussi RETLW).

Cette instruction indique qu'il faut revenir à l'instruction qui suit l'instruction CALL, c'est à dire dans cetteexemple CLRW.

N.B. Les instructions CALL et RETURN (ou RETLW) s'utilisent toujours par paire.

3.4 La routine d'interruption

Il s'agit d'un sous-programme particulier : il est déclenché par une interruption (alors qu'un sous- programme "classique" est appelé par l'instruction CALL).

Le µC se branche alors à l'adresse H'0004' de la mémoire de programme (les instructions de la routined'interruption doivent donc commencer à cette adresse).

La fin de la routine d'interruption est signalée par l'instruction RETFIE.

L'instruction RETFIE provoque le retour dans le programme principal, à l'endroit où il avait étéinterrompu par l'apparition de l'interruption.

3.5

La pile

La pile est une zone mémoire particulière.

Page 21: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 21/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 21

Pour le PIC 16F84A, elle est constituée de 8 emplacements de 13 bits.

La pile intervient dans le mécanisme interne des instructions :

CALL RETURN RETLW RETFIE

En effet, c'est dans la pile qu'est mémorisée l'adresse de retour d'une routine.

Quand intervient une instruction CALL ou une interruption, l'adresse de l'instruction suivante (qui setrouve dans le compteur de programme PC) est sauvegardée dans la pile.

Quand une instruction RETURN, RETLW ou RETFIE apparaît, le µC lit la dernière valeur sauvegardéedans la pile, libère l'emplacement et se branche à l'adresse indiquée.

Avec le mécanisme de la pile, un sous-programme peut appeler un sous-programme (ou plutôt un sous-sous-programme) : la pile réserve un autre emplacement..

La taille de la pile est limitée à 8 niveaux (pour le PIC 16F84A).

S'il y a plus de 8 routines actives en même temps, le contenu de la pile est écrasé et le programme nefonctionne plus correctement.

Cela se traduit par un plantage (le µC ne fait plus rien) ou bien par un comportement plus ou moinsincohérent (le µC fait des choses bizarres) ... problèmes que l'on retrouve exactement sur des programmes

plus complexes (Windows de Microsoft ...).

Remarques :

- il ne peut y avoir qu'une seule routine d'interruption (car un seul vecteur d'interruption : H'0004')

- la routine d'interruption peut appeler un sous-programme (avec l'instruction CALL)

- un sous-programme ne doit pas s'appeler lui-même

3.6 Le compteur

Le PIC 16F84 est doté d'un compteur 8 bits. La Figure en donne l'organigramme

Page 22: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 22/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 22

Figure: Organigramme du Timer0.

3.7 Registre TMR0

C'est le registre de 8 bits qui donne la valeur du comptage réalisé. Il est accessible en lecture et enécriture à l'adresse 01h dans la banque 0.. Choix de l'horloge Le timer0 peut fonctionner suivant deux modes en fonction du bit T0CS (OPTION_REG.5). Enmode timer (T0CS=0), le registre TMR0 est incrémenté à chaque cycle machine (si le pré-diviseur n'est pas

sélectionné).En mode compteur (T0CS=1), le registre TMR0 est incrémenté sur chaque front montant ou chaque front

descendant du signal reçu sur la broche RA4/T0CKl en fonction du bit T0SE(OPTION_REG.4). Si T0SE=0, les fronts montants sont comptés, T0SE=1, les fronts descendants sont

comptés.Pré-diviseur

En plus des deux horloges, un pré-diviseur, partagé avec le chien de garde, est disponible. La période del'horloge d'entrée est divisée par une valeur comprise entre 2 et 256 suivant les bits PS2,PS1 et PS0 (respectivement OPTION_REG.2, .1 et .0) (Figure). Le bit PSA (OPTION_REG.3) permet de

choisir entre la pré-division de timer0 (PSA=0) ou du chien de garde (PSA=1).

Figure : Valeurs du pré-diviseur en fonction de PSA, PS2, PS2 et PS0.

Page 23: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 23/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 23

Fin de comptage et interruption Le bit T0IF (INTCON.2) est mis à 1 chaque fois que le registre TMR0 passe de FFh à 00h. On peut donc

testerce bit pour connaître la fin de comptage. Pour compter 50 événements, il faut donc charger TMR0 avec lavaleur 256-50=206 et attendre le passage de T0IF à 1. Cette méthode est simple mais bloque le processeurdans une boucle d'attente.

On peut aussi repérer la fin du comptage grâce à l'interruption que peut générer T0IF en passant à 1Le processeur est ainsi libre de travailler en attendant cet événement.Registres utiles à la gestion de timer0 Plusieurs registres ont été évoqués dans ce paragraphe. Ils sont synthétisés dans la Figure

Figure: Registres utiles à la gestion de timer0.

Page 24: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 24/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 24

4. Bits (ou "fusibles") de configuration

On se place dans le cadre de l'outil de développement MPLAB de Microchip.

La syntaxe utilisée est alors :

Exemple de configuration

Dans le code source (fichier avec extension .asm), les fusibles de configuration sont indiqués au

compilateur avec la directive suivante :__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

Nom Valeurspossibles

Signification

CP

Code Protection bit)

ON

Rend impossible la lecture de la mémoire de programmeFlash

et de l'EEPROM (à travers un programmateur)

C'est une protection contre le piratage industriel.

OFF Lecture possible

PWRTE

(Power-up TimerEnable bit)

ON

A la mise sous tension du µ C, lance une temporisationd'environ 72 ms durant laquelle est effectué un RESET

interne.

Il est conseillé d'utiliser cette configuration.

OFF Temporisation désactivée

WDT

(Watchdog TimerEnable bit)

ON Active le watchdog (chien de garde)

OFF Désactive le watchdog

OSC

(Oscillator Selection

bits)

RC

Oscillateur de type Résistance / Condensateur

Remarques : économique, réservé aux applications où

la précision de la base de temps n'est pas critique.

HS Oscillateur à quartz haute fréquence (4 MHz, 20 MHz ...).

XT Oscillateur à quartz ou à résonateur céramique

LP Oscillateur à quartz de faible puissance (32,768 kHz ...)

Page 25: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 25/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 25

Remarque

Les bits de configuration ne sont pas modifiables.

Dans l'exemple ci-dessus, pour activer le watchdog et utiliser un oscillateur de type RC, il faut modifier lecode source, recompiler et reprogrammer le µC ...

__config _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC

5. Les interruptions

Le PIC 16F84A dispose de 4 sources d'interruptions :

1. Interruption sur la broche RB0/INT2. Interruption "RB" : sur changement du niveau logique d'au moins une de ces 4 broches : RB4,

RB5, RB6 ou RB7 (port B)3. Interruption de débordement du registre TMR0 (H'FF' -> H'00')4. Interruption de fin d'écriture de l'EEPROM

5.1 - Le mécanisme des interruptions

Quand une interruption survient, le programme principal est interrompu :

Le µC finit l'exécution de l'instruction en cours puis il se branche vers le sous-programme d'interruption (laroutine d'interruption).

Quand la routine d'interruption est achevée (instruction retfie), le µC retourne au programme principal, àl'endroit exact où il l'avait quitté.

5.2 - Cas d'une seule source d'interruption

Imaginons une application où l'on désire utiliser l'interruption sur la broche RB0/INT.

Il peut s'agir d'un bouton poussoir connecté sur la broche RB0/INT :

Page 26: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 26/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 26

/RBPU = 0 : activation des résistances de pull-up du port B (bit 7 du registre OPTION_REG) INTEDG = 0 : l'interruption de la broche RB0/INT est active sur un front descendant (bit 6 du

registre OPTION_REG)

On veut donc provoquer une interruption quand on appuie sur le bouton poussoir.

Pour cela, il faut commencer par autoriser les interruptions de manière globale : GIE = 1 (bit 7 du registre INTCON)

Puis, on autorise uniquement l'interruption qui nous intéresse :

INTE = 1 (bit 4 du registre INTCON) : autorise l'interruption sur la broche RB0/INT RBIE = 0 (bit 3 du registre INTCON) : désactive l'interruption "RB" T0IE = 0 (bit 5 du registre INTCON) : désactive l'interruption de débordement du registre TMR0 EEIE = 0 (bit 6 du registre INTCON) : désactive l'interruption de fin d'écriture de l'EEPROM

Enfin, on initialise le drapeau (flag) INTF à 0 (bit 1 du registre INTCON).

Tout cela se fait pendant la phase d'initialisation du programme principal par :

movlw B'10010000'

movwf INTCON

Maintenant, quand on appuie sur le bouton poussoir, le drapeau INTF est automatiquement mis à 1.

Le µC prend en compte cette interruption quand il a connaissance du niveau haut de drapeau INTF (3 ou 4

cycles de délai).

Le mécanisme des interruptions est lancé (voir plus haut).

Important :

Il faut remettre le drapeau INTF à 0 avant de quitter la routine d'interruption (bcfINTCON, INTF).

Sinon, le µC se rebranche indéfiniment sur la routine d'interruption (puisque INTF = 1) : le programme est planté !

Sauvegarde et restauration du contexte de travail

Page 27: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 27/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 27

Il est important que le contexte de travail du programme principal soit le même avant et après l'exécutionde la routine d'interruption.

Cela concerne le registre STATUS et l'accumulateur W qui doivent retrouver le même contenu (en effet,ces deux registres sont souvent utilisés et donc modifiés pendant la routine d'interruption).

Voici la procédure préconisée par Microchip :

La routine d'interruption commence par la sauvegarde du registre W puis du registre STATUS :

org H'0004' ; vecteur d'interruption (directive du compilateur MPLAB)

movwf W_TEMP

swapf STATUS, W

movwf STATUS_TEMP La routine d'interruption finit par la restauration du registre STATUS puis du registre W :

swapf STATUS_TEMP, W

movwf STATUS

swapf W_TEMP, f

swapf W_TEMP, W

retfie ; retour d'interruption

Page 28: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 28/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 28

Page 29: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 29/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 29

5.3 - Cas de plusieurs sources d'interruption

On suppose que les 4 sources d'interruptions sont actives :

GIE = 1

INTE = 1 RBIE = 1 T0IE = 1 EEIE = 1

Dans la routine d'interruption (après avoir sauvegardé le registre W et le registre STATUS), se pose laquestion suivante : quelle est la source de l'interruption ?

La réponse se fait en testant, les uns après les autres, le niveau logique des drapeaux :

INTF (bit 1 du registre INTCON)

RBIF (bit 3 du registre INTCON) T0IF (bit 2 du registre INTCON) EEIF (bit 4 du registre EECON1)

Par exemple, supposons que l'interruption est due au débordement du registre TMR0 :

INTF = 0 RBIF = 0 T0IF = 1 EEIF = 0

Après le test, le µC se branche vers le bloc de traitement spécifique de l'interruption TMR0.

Il ne faut pas oublier d'effacer le drapeau T0IF.

On finit par la restauration du registre STATUS puis du registre W.

Il peut arriver qu'il y ait plusieurs sources d'interruptions en même temps :

INTF = 1 RBIF = 1 T0IF = 0 EEIF = 0

Dans ce cas, on se peut se contenter de traiter une seule source d'interruption à la fois.

Ce sera l'interruption RB0/INT s'il se trouve que le drapeau INTF est testé en premier.

Après retour dans le programme principal, on aura :

INTF = 0 RBIF = 1

T0IF = 0 EEIF = 0

Page 30: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 30/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 30

L'interruption "RB" est alors traitée, etc ...

On voit ici que l'on peut choisir des niveaux de priorités entre les différentes sources d'interruptions.

Page 31: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 31/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 31

6. Le mode SLEEP

6.1 Préambule

L'utilisation du mode SLEEP (Power-down mode) n'a d'intérêt que dans les applications alimentées par piles ou batteries.En effet, en mode SLEEP la consommation électrique du µC devient très faible.

6.2 Mise en mode Sommeil

Le µC est placé en mode SLEEP après une instruction SLEEP.

L'instruction SLEEP provoque :

La mise à 0 du bit /PD du registre STATUS La mise à 1 du bit /TO du registre STATUS L'inhibition de l'horloge (broches OSC1/CLKIN et OSC2/CLKOUT) ce qui a pour conséquence

d'arrêter le programme (d'où une consommation d'énergie électrique réduite) Le mise à 0 du timer du watchdog (chien de garde)

Attention : le timer du watchdog continue de fonctionner pendant le mode SLEEP (si le watchdog estactif).

6.3 Réveil (Power-up)

Le µC se réveille, et reprend une activité normale, quand :

Il y a un RESET externe (niveau bas sur la broche /MCLR) : le programme est réinitialisé (adresseH'0000' de la mémoire de programme).

La temporisation du watchdog est dépassée (si le watchdog est actif) : le programme reprend àl'instruction qui suit l'instruction SLEEP.

Une interruption RB0/INT, RB ou EEPROM survient (si ces interruptions sont autorisées) même

quand le bit GIE (du registre INTCON) est égal à 0 :o si GIE = 0 : le programme reprend à l'instruction qui suit l'instruction SLEEPo si GIE = 1 : l'instruction qui suit l'instruction SLEEP est exécutée puis le programme saute

à la routine d'interruption (adresse H'0004' de la mémoire de programme)

Remarque : l'interruption TMR0 ne peut pas réveiller le µC.

Page 32: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 32/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 32

7. Le timer WATCHDOG (chien de garde)

7.1 Préambule

Le timer watchdog (le watchdog pour simplifier) est un dispositif qui permet au µC de reprendre la main encas de plantage.

Nous entendons par plantage :

la conséquence d'un bug (dans ce cas, c'est une erreur humaine et il faut corriger le programme) la conséquence d'une perturbation électrique qui fait sauter le programme à une adresse

quelconque et inattendue

Le plantage se traduit généralement par un "blocage" : le µC ne fait plus rien ou bien des choses étranges.

Il faut alors faire un RESET externe (en supposant qu'un bouton poussoir sur la broche /MCLR a été prévuà cet effet) :

Autrement, il faut couper l'alimentation, attendre quelques secondes que les condensateurs de filtrage sedéchargent, et remettre en route. Nous allons voir que le watchdog, par logiciel, permet de faire unRESET interne.

7.2 Reset du watchdog

Pour utiliser le watchdog, il faut choisir de l'activer : cela se fait au niveau des bits de configuration.

Il faut ensuite placer (judicieusement) dans le programme l'instruction CLRWDT.

Cette instruction remet à 0 le timer du watchdog.

Si le timer watchdog dépasse une certaine durée, cela provoque un RESET interne : le programme estréinitialisé (adresse H'0000' de la mémoire de programme).

Cette durée dépend des bits PSA, PS2, PS1 et PS0 du registre OPTION_REG :

Page 33: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 33/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 33

PSA PS2, PS1, PS0 Taux de

prédivision

du Watchdog

Duréeindicative

0 XXX 1 18 ms

1 000 1 18 ms

1 001 2 36 ms

1 010 4 72 ms

1 011 8 144 ms

1 100 16 288 ms

1 101 32 576 ms

1 110 64 1,15 s

1 111 128 2,3 s

X = 0 ou 1

En effaçant le watchdog à intervalles réguliers (avec CLRWDT), le timer ne doit normalement jamais"déborder".

En cas de plantage, le timer déborde ce qui génère un RESET, et le programme redémarre.

Remarques :

L'instruction CLRWDT :

met à 1 le bit /TO du registre STATUS met à 1 le bit /PD du registre STATUS

En cas de débordement du watchdog :

le bit /TO est mis à 0

3- Cas particulier du mode SLEEP

En mode SLEEP, le µC se réveille si la temporisation du watchdog est dépassée (si le watchdog est actif).

Mais il n'y a pas RESET : le programme reprend à l'instruction qui suit l'instruction SLEEP.

le bit /TO est mis à 0

Page 34: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 34/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 34

le bit /PD est mis à 0

7.3 Reset

Il y a plusieurs types de Reset :

Reset à la mise sous tension (POR : Power-on Reset) Reset externe en mode de fonctionnement normal (niveau bas sur la broche /MCLR) Reset externe pendant le mode SLEEP (niveau bas sur la broche /MCLR) Reset dû au Watchdog (en mode de fonctionnement normal) Réveil dû au Watchdog (en mode SLEEP)

7-3-1- Reset à la mise sous tension (POR : Power-on Reset)

Un Reset interne a lieu à la mise sous tension, ou après une coupure de courant.

Le programme est initialisé (adresse H'0000' de la mémoire de programme).

Le bit /TO (du registre STATUS) est mis à 1 Le bit /PD (du registre STATUS) est mis à 1

7-3-2- Reset externe (en mode de fonctionnement normal)

Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui génère un Reset"externe" :

Le programme est réinitialisé (adresse H'0000' de la mémoire de programme).

Le bit /TO (du registre STATUS) est mis à 1 Le bit /PD (du registre STATUS) est mis à 1

7-3-3- Reset externe pendant le mode SLEEP

On se place dans le cas où le µC est placé en mode SLEEP (suite à l'instruction SLEEP).

Quand on appuie sur le bouton poussoir, la broche /MCLR passe au niveau bas, ce qui génère un Reset"externe" :

Page 35: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 35/108

Page 36: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 36/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 36

En testant si /TO = 0, on peut savoir si le Reset est dû à un plantage (débordement de Watchdog), etorienter la suite de programme en conséquence

8.

Accès à la mémoire EEPORM

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 lesré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 peut s'exécuter que selon des séquences particulières.

8.1 . Registres utilisés

Quatre registres sont utilisés pour l'accès à la mémoire eeprom du PIC :- EEDATA contient la donnée.- EEADR contient l'adresse.- EECON1 (Figure* VIII.1) est le registre de contrôle de l'accès à l'eeprom. Cinq bits permettent un cet

accès :- RD et WR initient la lecture ou l'écriture. Ils sont mis à 1 par le programme pour initier l'accès et mis à

zéro par le système à la fin de l'accès.- WREN autorise (1) ou non (0) l'accès en écriture.- WRERR est mis à 1 par le système quand une opération d'écriture est interrompue par MCLR, reset ou le

chien de garde.

- EEIF est un drapeau d'interruption signalant la fin de l'écriture physique dans la mémoire eeprom. Il doitêtre mis à 0 par programme.

Figure : Registre EECON1.

Page 37: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 37/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 37

- EECON2 joue un rôle spécifique lors de l'écriture.

8.2 Lecture

Pour lire une donnée dans la mémoire eeprom, il faut mettre l'adresse dans EEADR et positionner RD à 1.La valeur lue est alors disponible dans EEDATA au cycle machine suivant. Le programme ci-dessousdonne un exemple de lecture dans la mémoire eeprom.

8.3

EcriturePour écrire une donnée dans la mémoire eeprom, il faut d'abord mettre l'adresse dans EEADR et la donnée

dans EEDATA. Un cycle bien spécifique doit ensuite être respecter pour que l'écriture ait lieu. L'exemplesuivant donne le cycle :

Page 38: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 38/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 38

9. Remarques et astuces de programmation en

assembleur

9-1- Charger une valeur littérale dans un registre

movlw B'10001100' ; W = B'10001100'

movwf REGISTRE ; (REGISTRE) = B'10001100' = 0x8C = D'140'

9-2- Charger un registre avec le contenu d'un autre registre

movf REGISTRE1 , W ; W = (REGISTRE1)

movwf REGISTRE2 ; (REGISTRE2) = (REGISTRE1)

9-3- Echanger le contenu de deux registres : (REGISTRE1) < - > (REGISTRE2)

Il faut utiliser une variable intermédiaire :

REGISTRE_TEMP (registre d'usage général)

movf REGISTRE1 , W ; W = (REGISTRE1)

movwf REGISTRE_TEMP ; (REGISTRE_TEMP) = (REGISTRE1)

movf REGISTRE2, W ; W = (REGISTRE2)

movwf REGISTRE1 ; (REGISTRE1) = (REGISTRE2)

movf REGISTRE_TEMP, W ; W = (REGISTRE_TEMP)

movwf REGISTRE2 ; (REGISTRE2) = (REGISTRE_TEMP)

9-4 Tests de comparaison

9-4- Tests d'égalité

9-4-1- Le contenu du registre est-il nul ?

(REGISTRE) = 0x00 ?

Page 39: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 39/108

Page 40: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 40/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 40

movf REGISTRE , f ; (REGISTRE) = (REGISTRE)

btfsc STATUS , Z ; test du bit Z

goto non ; Z = 1 c'est-à-dire (REGISTRE) = 0x00

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-3- Le contenu du registre est-il égal à une certaine valeur ?

(REGISTRE) = 0x3F ?

Page 41: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 41/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 41

movlw 0x3F ; W = 0x3F

subwf REGISTRE, W ; W = (REGISTRE) - 0x3F

btfss STATUS, Z ; test du bit Z

goto non ; Z = 0 c'est-à-dire (REGISTRE) != 0x3F

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-4- Le contenu du registre est-il différent d'une certaine valeur ?

(REGISTRE) != 0x3F ?

Page 42: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 42/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 42

movlw 0x3F ; W = 0x3F

subwf REGISTRE, W ; W = (REGISTRE) - 0x3F

btfsc STATUS, Z ; test du bit Z

goto non ; Z = 1 c'est-à-dire (REGISTRE) = 0x3F

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-5- Le contenu du registre est-il égal au contenu d'un autre registre ?

(REGISTRE1) = (REGISTRE2) ?

Page 43: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 43/108

Page 44: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 44/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 44

movf REGISTRE2 , W ; W = (REGISTRE2)

subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)

btfsc STATUS, Z ; test du bit Z

goto non ; Z = 1 c'est-à-dire (REGISTRE1) = (REGISTRE2)

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-7 - Le contenu du registre est-il strictement supérieur à une certaine valeur ?

(REGISTRE) > 0x3F ?

Les valeurs sont supposées en binaire naturel.

Page 45: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 45/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 45

movf REGISTRE , W ; W = (REGISTRE)

sublw 0x3F ; W = 0x3F - (REGISTRE)

btfsc STATUS, C ; test du bit C (Carry)

goto non ; C = 1 c'est-à-dire 0x3F >= (REGISTRE)

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-8 - Le contenu du registre est-il supérieur ou égal à une certaine valeur ?

(REGISTRE) >= 0x3F ?

Les valeurs sont supposées en binaire naturel.

Page 46: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 46/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 46

movlw 0x3F ; W = 0x3F

subwf REGISTRE, W ; W = (REGISTRE) - 0x3F

btfss STATUS, C ; test du bit C (Carry)

goto non ; C = 0 c'est-à-dire (REGISTRE) < 0x3F

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-9 - Le contenu du registre est-il strictement inférieur à une certaine valeur ?

(REGISTRE) < 0x3F ?

Les valeurs sont supposées en binaire naturel.

Page 47: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 47/108

Page 48: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 48/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 48

movf REGISTRE , W ; W = (REGISTRE)

sublw 0x3F ; W = 0x3F - (REGISTRE)

btfss STATUS, C ; test du bit C (Carry)

goto non ; C = 0 c'est-à-dire 0x3F < (REGISTRE)

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-11 - Le contenu du registre est-il supérieur ou égal au contenu d'un autre registre ?

(REGISTRE1) >= (REGISTRE2) ?

Les valeurs sont supposées en binaire naturel.

Page 49: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 49/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 49

movf REGISTRE2 , W ; W = (REGISTRE2)

subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)

btfss STATUS, C ; test du bit C (Carry)

goto non ; C = 0 c'est-à-dire (REGISTRE1) < (REGISTRE2)

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-4-12 - Le contenu du registre est-il strictement inférieur au contenu d'un autre registre ?

(REGISTRE1) < (REGISTRE2) ?

Les valeurs sont supposées en binaire naturel.

Page 50: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 50/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 50

movf REGISTRE2 , W ; W = (REGISTRE2)

subwf REGISTRE1, W ; W = (REGISTRE1) - (REGISTRE2)

btfsc STATUS, C ; test du bit C (Carry)

goto non ; C = 1 c'est-à-dire (REGISTRE1) >= (REGISTRE2)

bloc d'instructions 1

goto suite

non

bloc d'instructions 2

suite

suite du programme

9-5- Boucle Do While

Exemple :

Page 51: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 51/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 51

debut

bloc d'instructions

movf REGISTRE , f

btfsc STATUS , Z

goto debut

suite

suite du programme

9-6- Boucle While

Exemple :

Page 52: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 52/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 52

debut

movlw 0xE8 ; W = 0xE8

subwf REGISTRE, W ; W = (REGISTRE) - 0xE8

btfss STATUS , Z

goto suite

bloc d'instructions

goto debut

suite

suite du programme

9-7- Boucle FOR

Une variable (1 octet) sert de compteur.

Exemple :

Pour exécuter le bloc d'instructions 20 fois, la valeur initiale du compteur doit être 21 :

Page 53: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 53/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 53

movlw D'21' ; W = D'21'

movwf COMPTEUR ; (COMPTEUR) = D'21' pour 20 boucles

debut

decfsz COMPTEUR , f ; (COMPTEUR) = (COMPTEUR) - 1

goto boucle ; (COMPTEUR) != 0

goto suite ; (COMPTEUR) = 0

boucle

bloc d'instructions

goto debut

suite

Page 54: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 54/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 54

suite du programme

N.B. Avec (COMPTEUR) = 0xFF en valeur initiale, on effectue 254 boucles.

Avec (COMPTEUR) = 0x00 en valeur initiale, on effectue 255 boucles.

Avec (COMPTEUR) = 0x01 en valeur initiale, on effectue 0 boucle.

9-8- Manipulation de bits. Les masques

9-8-1- Mettre à 0 certains bits d'un registre

Exemple : on veut mettre à 0 les bits 1, 2, 4 et 6, les autres bits étant inchangés :

B'u0u0u00u'

movlw B'10101001' ; W = B'10101001' (on appelle ça un masque)andwf REGISTRE , f ; fonction ET logique

Valeur initiale : (REGISTRE) = B'11010101'

Valeur finale : (REGISTRE) = B'10000001'

N.B. S'il n'y a qu'un seul bit à mettre à 0, il faut simplement utiliser l'instruction bcf .

S'il faut mettre tous les bits à 0, il faut simplement utiliser l'instruction clrf REGISTRE

9-8-2- Mettre à 1 certains bits d'un registre

Exemple : on veut mettre à 1 les bits 1, 2, 4 et 6, les autres bits étant inchangés :

B'u1u1u11u'

movlw B'01010110' ; W = B'01010110' (masque)

iorwf REGISTRE , f ; fonction OU logique

Valeur initiale : (REGISTRE) = B'11010101'

Valeur finale : (REGISTRE) = B'11010111'

N.B. s'il n'y a qu'un seul bit à mettre à 1, il faut simplement utiliser l'instruction bcf

9-8-3- Inverser certains bits d'un registre

Exemple : on veut complémenter les bits 1, 2, 4 et 6, les autres bits étant inchangés.movlw B'01010110' ; W = B'01010110' (masque)

Page 55: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 55/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 55

xorwf REGISTRE , f ; fonction logique OU exclusif

Valeur initiale : (REGISTRE) = B'11010101'

Valeur finale : (REGISTRE) = B'10000011'

N.B. s'il faut inverser tous les bits, il faut simplement utiliser l'instruction

comf REGISTRE , f

9-9- Tables de données

On utilise la technique de l'adressage relatif .

Exemple :

On désire effectuer l'opération arithmétique : y = 10x +1Ainsi, pour x =D'16' : y = D'161'

Cela peut se faire simplement avec un tableau de données.

On commence par créer la routine table.

Pour des raisons de simplicité, l'adresse de début de cette routine peut être (pour un microcontrôleur16F84A) :

0x100 0x200 0x300

; xxxxxxxxxxx

; Routine table

; xxxxxxxxxxx

org 0x0300 ; adresse de début de la table

table

addwf PCL , f ; (PCL) = (PCL) + W

retlw D'1'

retlw D'11'

retlw D'21'

retlw D'31'

Page 56: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 56/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 56

retlw D'41'

retlw D'51'

retlw D'61'

retlw D'71'

retlw D'81'

retlw D'91'

retlw D'101'

retlw D'111'

retlw D'121' retlw D'131'

retlw D'141'

retlw D'151'

retlw D'161'

retlw D'171'

retlw D'181'

retlw D'191'

retlw D'201'

retlw D'211'

retlw D'221'

retlw D'231'

retlw D'241'

retlw D'251'

; Fin de la routine table

; xxxxxxxxxxxxxxxxxx

Avec un début de routine à l'adresse 0x300, l'instruction retlw D'1' se trouve à l'adresse 0x301, retlwD'11' à l'adresse 0x302 etc...

Page 57: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 57/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 57

La table peut contenir jusqu'à 255 éléments (0x301 à 0x3FF).

Ici, notre table possède 26 éléments donc pas de problème de taille.

Dans le programme principal, pour appeler la routine, il faut au préalable charger le registre spécialPCLATH avec la valeur 0x03 (0x02 si l'adresse de début est 0x200 etc ...) :

movlw 0x03 ; W = 0x03

movwf PCLATH ; (PCLATH) = 0x03

movlw D'16' ; W = D'16' : 16ème ligne de la table

call table

movwf resultat ; (resultat) = D'161'

10. les étapes nécessaires pour programmer un pic :

Page 58: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 58/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 58

11. Exemples en assembleur avec 16F84

11.1 Calcul de la temporisation

Temporisation précise : utilisation du timer

Temporisation non précise : utilisation des boucles

A chaque fois que l’on désire fabriquer 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.

Sachant que l’horloge interne divise par quatre la fréquence issue du quartz.Prenons l’exemple d’une temporisation avec un quartz de 4Mhz : l’instruction GOTO TEMPO dure 2

cycles , et l’instruction DECFSZ 1cycle. Le compteur (retard) est initialisé à 255. Le PIC fera 255 fois la boucle de temporisation : la temporisation est donc 3*255=765µs(3cycles *255*1µs)

11.2 Exemple d’une temporisation de 0.2s

;------------ Définition des registres temporaires ---------------

retard1 EQU 0x0C ; le registre temporaire retard1 se trouve à l' adresse 0C

retard2 EQU 0x0F ; le registre temporaire retard2 se trouve à l' adresse 0F

;------------ Programme de temporisation ( 0.2 s ) ---------------

MOVLW 0xFF ; on met 255 dans le registre W

MOVWF retard1 ; on charge retard1 avec 255 ( FFh contenu du registre W )

MOVWF retard2 ; on charge retard2 avec 255 ( FFh contenu du registre W )

tempo

DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO tempo ; le registre retard1 = 0 sinon retour à tempo

MOVLW 0xFF ; on met 255 dans le registre W

MOVWF retard1 ; on charge retard1 avec 255 ( FFh contenu du registre W )

DECFSZ retard2,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO tempo ; le registre retard1 = 0 sinon retour à tempo

RETURN ; retour au programme principal après l 'instruction CALL

Page 59: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 59/108

Page 60: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 60/108

Page 61: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 61/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 61

movf key,w

movwf PORTB ; change l 'état des leds à chaque fois que la tempo est finie

goto debut

tempo

movf TMR0,w

btfss STATUS,2 ;test du bit Z

goto tempo

MOVLW 0x06 ; on met 06 dans le registre W

MOVWF TMR0 ; on met W dans le registre du TIMER 0

DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO tempo ; le registre retard1 = 0 sinon retour à tempo

return

END

11.4 Exemple d'application: Un compteur binaire

; Titre : Compteur binaire

; PIC utilisé : PIC 16 F 84

Page 62: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 62/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 62

; On réalise un compteur binaire sur les broches RB0 à RB7 d' un PIC 16 F 84 le quartz utilisé

; est de 4 Mhz , on effectue une tempo environ égale à 0.2 seconde.

;------------ Directive d' assemblage pour MPLAB ---------------

list p=16f84A

#include p16f84A.inc

__config H'3FF9'

;------------ Définition des constantes ---------------

#define inter0 0 ; bouton marche

;------------ Définition des registres temporaires ---------------

retard1 EQU 0x0C ; le registre temporaire retard1 se trouve à l' adresse 0C

retard2 EQU 0x0D ; le registre temporaire retard2 se trouve à l' adresse 0D

memo EQU 0x0E ; le registre memo tampon se trouve à l' adresse 0E

;------------ Init des ports A et B ---------------

ORG 0

bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder

; à la 2eme page mémoire ( pour trisa et trisb )

MOVLW B'00000000' ; on met 00 dans le registre W

MOVWF TRISB ; on met 00 dans le port B il est programmé en sortie

MOVLW 0x1F ; on met 1F dans le registre W

MOVWF TRISA ; on met 00 dans le port A il est programmé en entrée

bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status pour accéder

; à la 1ere page mémoire

;------------ Programme principal ---------------

Main

btfss PORTA,inter0 ; interrupteur 0 ( marche ) appuyé ? si oui on continu sinon

goto Main ; on va à l' étiquette Main

MOVLW 0xFF ; on met 255 dans le registre W

MOVWF retard1 ; on charge retard1 avec 255 ( FFh contenu du registre W )

MOVLW 0xFF ; on met 255 dans le registre W

Page 63: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 63/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 63

MOVWF retard2 ; on charge retard2 avec 255 ( FFh contenu du registre W )

MOVF memo, W ; on met memo dans W

MOVWF PORTB ; on met W sur le port B ( leds )

CALL tempo ; on appel la temporisation

MOVLW 0x01 ; on met 1 dans le registre W

ADDWF memo, F ; on additionne memo + 1

GOTO Main ; retour au début du programme

;------------ Programme de temporisation ( 0.2 s ) ---------------

tempo

DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO tempo ; le registre retard1 = 0 sinon retour à tempo

MOVLW 0xFF ; on met 255 dans le registre W

MOVWF retard1 ; on charge retard1 avec 255 ( FFh contenu du registre W )

DECFSZ retard2,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO tempo ; le registre retard1 = 0 sinon retour à tempo

RETURN ; retour au programme principal après l 'instruction CALL

END ; fin du programme

Page 64: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 64/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 64

11.5 Exemple d'application: Les feux tricolores

; Titre : Feux tricoloresPIC utilisé : PIC 16 F 84

; On réalise des feux tricolores sur les broches RB0 à RB5 d' un PIC 16 C 84

; le quartz est de 4 Mhz , on effectue une tempo longue environ égale à 4 secondes et

; une tempo courte environ égale à 1.5 secondes.

; un bouton marche sur le port A permet de lancer l' application

; RB0=rouge1 RB1=orange1 RB2=vert1

; RB3=rouge2 RB4=orange2 RB5=vert2

;------------ Directive d' assemblage pour PLAB ---------------

list p=16f84A

#include p16f84A.inc

__config H'3FF9'

;------------ Définition des constantes ---------------

#define inter0 0 ; bouton marche

#define inter1 1 ; bouton clignotement orange

Page 65: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 65/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 65

;------------ Définition des registres temporaires ---------------

retard1 EQU 0x0C ; le registre temporaire retard1 se trouve à l' adresse 0C

retard2 EQU 0x0F ; le registre temporaire retard2 se trouve à l' adresse 0F

retard3 EQU 0x10 ; le registre temporaire retard3 se trouve à l' adresse 10

;------------ Init des ports A et B ---------------

ORG 0

bsf STATUS,5 ; on met à 1 le 5eme bit du registre status pour accéder

; à la 2eme page mémoire ( pour trisa et trisb )

MOVLW 0x00 ; on met 00 dans le registre W

MOVWF TRISB ; on met 00 dans le port B il est programmé en sortie

MOVLW 0x1F ; on met 1F dans le registre W

MOVWF TRISA ; on met 1F dans le port A il est programmé en entrée

bcf STATUS,5 ; on remet à 0 le 5eme bit du registre status pour accéder

; à la 1eme page mémoire

;------------ Init des feux ROUGE1 et ROUGE2 ---------------

MOVLW B'00001001' ; on met 0C dans le registre W ( Rouge1 et Rouge2 )

MOVWF PORTB ; on met W sur le port B ( led )

;-------------------- Programme principal ----------------------

debut

MOVLW B'00001001' ; on met 0C dans le registre W ( Rouge1 et Rouge2 )

MOVWF PORTB ; on met W sur le port B ( led )

btfss PORTA,inter0 ; interrupteur 0 ( marche ) appuyé ? si oui on continu sinon

;va à debutgoto debut

ret_cli

btfsc PORTA,inter1 ; interrupteur 1 ( clignotant ) appuyé ? si oui on

;va à clignote

goto clignote

MOVLW B'00001001' ; on met 0C dans le registre W ( Rouge1 et Rouge2 )

MOVWF PORTB ; on met W sur le port B ( led )

Page 66: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 66/108

Page 67: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 67/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 67

movwf retard1

DECFSZ retard2,F ; on décrémente retard2 et on saute la prochaine instruction si

GOTO attente ; le registre retard2 = 0 sinon retour à attente

movlw 0xFF ; on recharge retard2

movwf retard2

DECFSZ retard3,F ; on décrémente retard3 et on saute la prochaine instruction si

GOTO attente ; le registre retard3 = 0 sinon retour à attente

RETURN ; retour au programme principal après l 'instruction CALL

;------------ Programme de temporisation courte ---------------

tempo2

MOVLW 0xFF ; on met ff dans le registre W

MOVWF retard1 ; on met W dans le registre retard1

MOVWF retard2 ; on met W dans le registre retard2

MOVLW 0x07 ; on met 7 dans le registre W

MOVWF retard3 ; on met W dans le registre retard3

attente2

DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction si

GOTO attente2 ; le registre retard1 = 0 sinon retour à attente2

movlw 0xFF ; on recharge retard1

movwf retard1

DECFSZ retard2,F ; on décrémente retard2 et on saute la prochaine instruction si

GOTO attente2 ; le registre retard2 = 0 sinon retour à attente2movlw 0xFF ; on recharge retard2

movwf retard2

DECFSZ retard3,F ; on décrémente retard3 et on saute la prochaine instruction si

GOTO attente2 ; le registre retard3 = 0 sinon retour à attente2

RETURN

clignote

MOVLW B'00010010' ; on met 12 dans le registre W ( Orange1 et Orange2 )

Page 68: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 68/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 68

MOVWF PORTB ; on met W sur le port B ( led )

CALL tempo2 ; on appel la temporisation courte

MOVLW B'00000000' ; on met 00 dans le registre W ( aucune led )

MOVWF PORTB ; on met W sur le port B ( led )

CALL tempo2 ; on appel la temporisation courte

GOTO ret_cli

END

11.6 Exemple d'application: La perceuse

Cycle effectué par la perceuse

1) Dès l'appui sur le bouton départ cycle, la perceuse se met en rotation puis descend.Les leds "descente" et "rotation" sont allumées.

2) Dès que le capteur de position bas est actionné, la perceuse remonte après une temporisation de 3s.Les leds "montée" et "rotation" sont allumées.

3) Dès que le capteur de position haut est actionné, la remontée s'arrête. Après une

temporisation de 3s la rotation s'arrête. Fin de cycle.

Arrêt d'urgence

4) Si l'arrêt d'urgence est actionné, la rotation s'arrête et la perceuse remonte quel que soit l'endroit oùl'on se trouve dans le cycle. La led "défaut" est allumée et mémorise jusqu'au prochain départ cycle.Tant que l'arrêt d'urgence est appuyé le cycle ne peut démarrer.

Page 69: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 69/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 69

; Titre : Perceuse

; PIC utilisé : PIC 16 F 84

; On réalise une simulation d’une perceuse en utilisant les broches RB0 à RB3

; pour le bouton marche, le coup de poing d' arrêt d'urgence et les deux fin de

; course haut et bas.

; Les broches RB4 à RB7 représentent la rotation, la montée et la descente.

; Entrées : RB0= Arrêt RA0= Marche RA1= Capteur haut RA2= Capteur bas

; Sorties : RB1= Rotation RB2= Descente RB3= Montée RB4= Défaut mémorisé

; Cycle :

; 1) appui sur marche -> rotation + descente

; 2) capteur bas actionné -> temporisation et rotation + remontée

; 3) capteur haut actionné -> rotation + temporisation et arrêt rotation

; Arrêt d'urgence : La perceuse s'arrête de tourner et remonte, un voyant défaut mémorise

; l' action. Le voyant défaut s' efface au prochain cycle.

;------------ Directive d' assemblage pour PLAB ---------------

list p=16f84A

#include p16f84A.inc

Page 70: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 70/108

Page 71: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 71/108

Page 72: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 72/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 72

goto descente ; va à descente

CALL tempo ; on appel la temporisation

MOVLW B'00001010' ; on met 0A dans le registre W ( Rotation + montée )

MOVWF PORTB ; on met W sur le port B ( led )

remonte

btfss PORTA,capteur_h ; interrupteur 1 ( capteur haut ) appuyé ? si non on

goto remonte ; va à remonte

CALL tempo ; on appel la temporisation

MOVLW B'00000010' ; on met 02 dans le registre W ( Rotation )

MOVWF PORTB ; on met W sur le port B ( led )

CALL tempo ; on appel la temporisation

MOVLW B'00000000' ; on met 00 dans le registre W ( arret )

MOVWF PORTB ; on met W sur le port B ( led )

GOTO debut ; retour au début du programme

;---------------------------------------------- Programme de temporisation -----------------------------------

tempo

MOVLW 0xFF ; on met ff dans le registre W

MOVWF retard1 ; on met W dans le registre retard1

MOVWF retard2 ; on met W dans le registre retard2

MOVLW 0x12 ; on met 12 dans le registre W

MOVWF retard3 ; on met W dans le registre retard3

attente

DECFSZ retard1,F ; on décrémente retard1 et on saute la prochaine instruction siGOTO attente ; le registre retard1 = 0 sinon retour à tempo

movlw 0xFF ; on recharge retard1

movwf retard1

DECFSZ retard2,F ; on décrémente retard2 et on saute la prochaine instruction si

GOTO attente ; le registre retard2 = 0 sinon retour à tempo

movlw 0xFF ; on recharge retard2

movwf retard2

Page 73: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 73/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 73

DECFSZ retard3,F ; on décrémente retard3 et on saute la prochaine instruction si

GOTO attente ; le registre retard3 = 0 sinon retour à tempo

RETURN ; retour au programme principal après l 'instruction CALL

END

11.7 La compilation se fait a l’aide du logiciel MPLAB de Microchip

11.8

Le programmateur des microcontrôleursUne fois le fichier est compilé ; il porte l’extension .HEX on doit le transférer vers le microcontrôleur a

travers un programmateur universel qui peut être relié au PC a travers le port série ou le port USB

On peut programmer toutes les sortes de PIC selon le schéma de brochage en utilisant le logiciel PICPgmou ICPROG ou autre logiciel.

Page 74: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 74/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 74

12. Simulation d’un PIC sous Proteus

Pour faire cela il est nécessaire d’avoir :-> Proteus qui contient le module de simulation des pic (Module VSM)

-> Un schéma dont tout les composants sont simulables (ou ceux qui le sont pas : exclus de la simulation :exemple les borniers )-> Un fichier exécutable (code machine) FICHIER.HEX, OU MIEUX un code machine + informations

de Débugage :FICHIER.COF 1. Présence Module VSM

Le module VSM effectue la simulation du microprocesseur à partir de votre code source.Vérifier la présence du module VSM adapté au microprocesseur à simuler sous Proteus.-> Lancer Licence Manager :

VSL pour PIC 16 XXXX dans l’exemple.2.Fichier à simuler Editer les propriétés du Microprocesseur puis sélectionner le fichier source, on peut utiliser :VERSION 1 : Soit le fichier_source.HEX

Page 75: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 75/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 75

VERSION 2 : Soit le fichier_source.COF (contenant le fichier source et les directives de désassemblage)Il est préférable d’utiliser plutôt ce fichier. Ce qui permet des mises au point plus efficace (mode pas à pas)

. Lancer la simulation

Pour lancer la simulation il suffit de cliquer sur l’icone « PLAY verte » en bas de page

Page 76: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 76/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 76

Pour lancer la simulation en mode pas à pas (et débogage) :

En exécutant la simulation en mode pas à pas , vous pouvez ensuite exécuter le programme par pas, mettredes points d’arrêt dans le programme, voir l’état des registres, etc...

N’hésitez pas à utiliser du clic droit de la souris dans le code source ;)

Page 77: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 77/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 77

13. Circuits d’interfaces avec le microcontrôleur

13.1 AFFICHEUR LCD

13-1-1 Présentation :L’afficheur LCD, autrement appelé un afficheur à cristaux liquide. Il consomme relativement de 1 à5 mA

et constitué de deux lames de verre, distante de 20 µm environ, sur lesquelles sont dessinées les mersnantisses formant les caractères. L’application entre les deux faces d’une tension alternative bassefréquence de quelques volts (3à5V) le rend absorbant .Un afficheur à cristaux liquide ne peut être utiliséqu’avec un bon éclairage ambiant .Son lisibilité augmente avec l’éclairage

13-1-2 Principe de fonctionnement :

on utilise le mode 4 bits de l’afficheur LCD. Dans ce mode, seul les 4 bits de poids fort (D4à D7) del’afficheur sont utilisés pour transmettre les données et les lires. Les 4bits de poids faible (D0à D3) sont

alors connectés à la masse, on a donc besoin hors alimentation de sept fils pour commander l’afficheur.Les données sont écrites séquentiellement les quatre bits de poids fort suivi des quatre bits de poids faible.Une impulsion positive d’au moins 450ns doit être envoyée sur la ligne E pour valider chaque demi -octet. On peut après chaque action sur l’afficheur vérifier que celui-ci est en mesure de traiterl’information suivante .Pour cela, il faut demander une lecture en mode commande et tester le flag BusyBT. Lorsque BF=0, l’afficheur est près à recevoir une nouvelle commande ou donnée.

13-1-3 Présentation d’un écran LCD :

Qu’il soit à une ou deux lignes, un afficheur LCD se présente sous la forme suivante :

Au-dessus de l’écran à cristaux liquides proprement dit, on trouve une série de 14 broches aux rôlesSuivantes :

Broche 1 : masse ; Broche 2 : Vcc ;

Broche 3 : luminosité ; Broche 5, R/W : sélection du mode lecture ou écriture :

Page 78: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 78/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 78

0 écriture

1 lecture

Broche 6, E : Commande des opérations d’écriture ou de lecture ;Broche 7à 14 : utilisées pour le transfert des données ou des instructions. Le transfert peut se faire sur 8 bits, toutes les broches sont alors utilisées, ou sur 4 bits, dans ce cas, seules les broches 11 à 14 sontutilisées.

Page 79: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 79/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 79

G N D

V C C

D 7

1 4

D 6

1 3

D 5

1 2

D 4

1 1

D 3

1 0

D 2

9

D 1

8

D 0

7

E

6

R W

5

R S

4

V S S

1

V D D

2

V E E

3

LCDLM032L

RA0/AN02

RA1/AN13

RA2/AN2/VREF-4

RA4/T0CKI6RA5/AN4/SS

7

RE0/AN5/RD8

RE1/AN6/WR9

RE2/AN7/CS10

OSC1/CLKIN13

OSC2/CLKOUT14

RC1/T1OSI/CCP216

RC2/CCP117

RC3/SCK/SCL18

RD0/PSP019

RD1/PSP120

RB7/PGD40

RB6/PGC39

RB538

RB437

RB3/PGM36

RB235

RB134

RB0/INT33

RD7/PSP730

RD6/PSP629

RD5/PSP528

RD4/PSP427

RD3/PSP322

RD2/PSP221

RC7/RX/DT26

RC6/TX/CK25

RC5/SDO24

RC4/SDI/SDA23

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI15

MCLR/Vpp/THV1

U1

PIC16F877VDD=VCC

VSS=GND

E

E

RW

R W R

S

RS

V E E

Montages de l’afficheur LCD avec le PIC

13.2 Le clavier

13-2-1 Présentation :

Le clavier est le périphérique le plus commode pour saisir du texte, mais dans notre carte on va utiliserun clavier alphanumérique à 16 touches matricées pour saisir des numéros et un peut d’alphabets, pourconnecter le clavier au microcontrôleur on est besoin d’un codeur de clavier 74LS922 pour préserver lesressources du microcontrôleur.

Page 80: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 80/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 80

13-2-2 Principe de fonctionnement :

Le clavier se compose de 16 touches reparties sur une matrice de 4 lignes (chaque ligne contient 4touches) 4 pistes sont disposées horizontalement (elles correspondant aux 4 lignes de touches) et 4 autres

pistes sont disposées verticalement (elles correspondant aux 4 colonnes de touches). Chaque touche agitcomme un bouton poussoir qui établit le contact entre une des 4 pistes horizontales et une des 4 pistesverticales.

Chaque touche est un interrupteur, normalement en position ouverte .Lorsqu’une touche estappuyée un signal électrique est envoyé vers le codeur, circuit électronique très simple qui associe àchaque signal un code (par exemple le code ascii de la touche). Ce signal peut être utilisé pour envoyerune interruption au processeur à fin qu’il traite l’information. Les codeurs réellement utilisés assurent defonctions supplémentaires comme le décodage automatique des touches appuyées longtemps.

Page 81: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 81/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 81

13.3 Circuit ULN2003

L’ULN est un composant qui à pour rôle de commander les relais. Il comporte deux transistors, deuxdiodes et deux résistances. Le fait qu’il renferme tous les composants lui permet d’avoir une longue duréede vie et de minimiser les pertes de courant.

L’ULN est capable d'écouler un courant max de 500mA par transistor et supporte une tension max de 50V.Ainsi vous pouvez connecter directement la majorité des relais sans problème

Figure : Structure interne de l’ULN2003

Page 82: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 82/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 82

13.4 Circuit ULN2803

L'ULN2803 est décrit comme "un conducteur à 8 lignes". Cela signifie qu'il contient le circuit pourcontrôler huit lignes de productions individuelles, chaque acte indépendamment des autres.

Page 83: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 83/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 83

13.5 Les moteurs

13-5-1. Moteur pas à pas :

Moteur pas à pas

a) Présentation :

Le moteur pas à pas est un moteur qui tourne en fonction des impulsions électriques reçu dans ses bobinages. L’angle minimal entre deux modifications des impulsions électrique s’appelle un pas .Oncaractérise un moteur par le nombre de pas par tour.

b) Principe de fonctionnement :

Pour identifier le brochage du moteur ,un simple ohmmètre(calibre 100 ou 200ohms)permet de déterminerd’une part les trois fils appartenant chaque bobinage [P1-com1-P1\]et[P2-com2-P2\] ,d’autre part le pointmilieu d’un bobinage donnée(si la résistance entre le commun et une phase vaut alors que celle entre les

deux phase vaut2R) .les deux les deux bobinages sont interchangeable, ainsi que les deux phases extrêmesd’un même bobinage (P1etP1\) ; signalons que cette dernière manipulation entraîne un changement dusens de rotation. Un cycle étant réalisé en quatre étapes successives, la séquence ment est donc effectué

par un compteur binaire à quatre sorties, lesquelles présenteront donc cinq combinaisons différentes(0000, 0001, 0010, 0100, 1000).Les étapes défilent au rythme de l’horloge intégrée au compteur.

c) Connexion du moteur pas à pas sur la carte :

Page 84: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 84/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 84

Le moteur pas à pas+ULN2003A sont connectés aux lignes RD0 à RD3 du microcontrôleur.

13-5-2 Moteur à courant continu :

Le moteur à courant continue est une machine électrique tournante constitué de deux parties principales : le

stator (la partie fixe) et le rotor (la partie mobile).

Moteur à courant continue

a)

Connexion du moteur

Dans ce figure on à utiliser deux relaies pour changer le sens de rotation du moteur à courant continue. Lesdeux pins MCC1 et MCC2 relier avec les pins RE0 etRE1 du microcontrôleur.

Page 85: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 85/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 85

Lorsqu'on veut commander le sens de rotation d’un moteur (à courant continu ou pas à pas) on est souventobligé d'inverser la polarité. De plus il est généralement préférable de pouvoir faire varier la vitesse dumoteur. La solution est d’utiliser le pont en H.

Figure : Principe du pont en H

En regardant les schémas, on voit le sens de rotation du moteur : sur le schéma a ; le moteur est à l'arrêt

(on devrait même dire qu'il est freiné : en effet court-circuiter les deux pôles d'un moteur revient à lefreiner).

Sur le schéma b ; il tourne dans le sens inverse du schéma c, et enfin sur le schéma d ; il est freiné. Et bien voici la base du pont en H, toute l'idée réside dans ce schéma. Bien sûr, pour l'implémenter, il vanous falloir remplacer les interrupteurs par des transistors.

N1 N2 TAT MOTEUR

0 0 ARRET

0 1 SENS 1

1 0 SENS 2

1 1 ARRET

Figure : Tableau des différentes sequences

Page 86: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 86/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 86

Lorsqu'on arrête le moteur, et qu'il continue à tourner avec l'inertie, il se comporte comme une génératrice.Pour éviter d'avoir des courants dans les transistors on monte des diodes de roues libres.

Figure: Schéma d’un pont en H

b) Commande de 2moteurs DC avec Times L293D

Page 87: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 87/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 87

13.6 Les relais

Les relais sont pilotés via un transistor de commande, une diode de roue libre est montée aux bornes durelais pour la protection du transistor

Q2 2N2222

VCC

D2 1N4148

R2 2.2k

3

1 4

2

5

REL2

POMP1 RL20

RL21

Montage du relais

13.7

Isolation à l’aide d’un opto- triac

Exemple de commande d’une lampe.

Page 88: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 88/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 88

13.8 Les touches de commande

Si on dispose de trois boutons poussoirs (SW0, SW1 et SW2)qui sont reliés à trois entrées numériques dumicrocontrôleur en les reliant respectivement aux résistances (R10 ,R9 et R8) de rappel à la source Vccde moyenne valeurs (2.2 K Ω) pour ne pas consommer plus de l’énergie .

R8 2.2k R9

2.2k R10 2.2k

VCC

1 2 SWO

1 2 SW1

1 2 SW2

RE0 RE1 RE2

Montage des boutons poussoirs

13.9 Communication série avec RS232

Le circuit adaptateur de niveau de tension TTL :RS232 permet alors de relier un interface

(exemple le téléphone au port série d’un PC) .

Présentation :

Les liaisons séries permettant la communication entre deux systèmes numériques en limitant le

nombre de Fils de transmission..

DCD (Data Carrier Detecte ) : Cette ligne est une entrée active à l’état haute. Elle signal à l’ordinateur

qu’une liaison a été établie avec un correspondant.

Page 89: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 89/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 89

RX( Reciver Data) : Cette ligne est une entrée.C’est ici que transitent les informations du

correspondant vers l’ordinateur.

TX (Transmit Data ) : cette ligne est une sortie. Elle permet la véhicule des données de l’ordinateur

vers le correspondant.

DTR (Data Terminal Ready ) :Cette ligne est une sortie active à l’état haut Elle permet à l’ordinateur

de signaler au correspondant que le port série à été libéré et qu’il peut être utilisé s’il le souhaite.

GND (GrouND) : c’est la masse.

DSR (Data Set Read) : Cette ligne est une entrée active à l’état haut. Elle permet au correspondant de

signaler qu’une donnée est prête.

RTS (Request To Send ) : cette ligne est une sortie active à l’état haut. Elle indique au correspondant

que l’ordinateur veut lui transmettre des données..

CTS (Clear To Send ) : Cette ligne est une entrée active à l’état haut.Elle indique à l’ordinateur que le

correspondant est prêt à recevoir des donnés.

RI( RING Indicator) :Cette ligne est une entrée active à l’état haut.Elle permet à l’ordinateur de

savoir si un correspondant veut initier une communication avec lui.

Fonctionnement :

Pour pouvoir dialoguer avec le PC, le microcontrôleur utilise son module USART signifie

(Universal Synchronous Asynchronous Reciever Transmitter ).

C’est donc un module qui permet d’envoyer et de recevoir des données en mode série, soit de

façon synchrone, soit asynchrone. Le module USART de notre PIC gère uniquement deux pins,à savoir

RC6/TX/CK et RC7/RX/DT.

Une liaison série synchrone nécessite une connexion dédiée à l’horloge, donc il reste une seule

ligne pour transmettre les données. Alors qu’en mode asynchrone on n’a pas besoin d’une ligne

d’horloge, il nous restera alors deux lignes pour communiquer, chacune étant dédiée à un sens de

transfert. Nous pourrons donc envoyer et recevoir des données en même temps.

Les liaisons RS 232 sont des liaisons asynchrones très utilisées en informatique. Elle nécessite que

l’émetteur et le récepteur soit informé de la vitesse choisie de transfert.

Puisque le récepteur connaît la vitesse du transfert il peut se passer de signal de synchronisation.

Trois lignes sont nécessaires à cette liaison.

TX : transmission de donnés.

RX:récepteur de donné.

Page 90: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 90/108

Page 91: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 91/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 91

Page 92: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 92/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 92

13.11 BUS I2C

Le bus I2C (inter integrated circuit ce qui donne IIC et par contraction I2C), a été propos initialement parPhilips mais adopté de nos jours par des très fabricants. C’est bus de communication de type série.

1. Présentation :

Le bus I2C qui n’utilise que deux lignes de signal (et les masses correspondantes bien sûr) permet à uncertain nombre d’appareils d’échange des informations sous forme série avec un débit pouvant atteindre100 Kbits par seconde ou 400 kbits par seconde pour les versions les plus récentes. Même si ces débits

peuvent sembler relativement faibles, les premières applications du bus I2C sont des applications audioou vidéo pour lesquelles la simplicité de mise en œuvre est nettement plus importante qu’un débit élevé.

Les points forts du bus I2C sont :Premièrement c’est un bus série bifilaire utilisant une ligne de données appelée SDA (Serial Data) et une

ligne d’horloge appelée SCL (Serial Clock).

Les données peuvent être échangées dans les deux sens sans restriction.

Le bus est multi-maître : chaque abonné dispose d’une adresse codée sur 7 bits, on peut donc connectersimultanément 128 abonnés d’adresses différentes sur le même bus.Un acquittement est généré pour chaque octet de donnée transféré.Le bus peut travailler à une vitesse maximum de 100 K bits par seconde (ou 400 Kbits par seconde) étant

entendu que son protocole permet de ralentir automatiquement l’équipement le plus rapide pour s’adapterà la vitesse de l’élément le plus lent, lors d’un transfert.

Le nombre maximum d’abonnés n’est limité que par la charge capacitive maximale du bus qui peut être de400pF.

Les données envoyées par paquets de huit bits indépendants(le bit de poids fort est envoyé le premier) sur

la ligne SDA, chaque octet est suivie par un bit d’acquittement .La ligne SCL fonctionne comme unehorloge sérielle d’un registre à décalage, tant que cette ligne est à l’état haut les données de la ligne SDAdoivent être stables.

Page 93: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 93/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 93

Figure : architecture interne du PCF8583

Certaines combinaisons particulières de niveaux et de fronts des deux lignes déterminant la condition dedépart ou d’arrêt de la transmission des données.

Condition de départ : Un front descendant sur SDA quand SCL est à l’état haut.Condition d’arrêt : Un front montant sur SDA quand SCL est à l’état haut.

13.12 Module horloge temps réel :

PCF8583 :

Le PCF8583 fonctionne en véritable horloge calendrier c'est-à-dire en mode de 24 heures et sur une période de vingt quatre ans. Il possède une sortie d’interruption et de la RAM qui possède 232 octetsdisponibles en plus de ceux de sa propre fonction.

Figure 15 : Schéma de brochage

Caractéristiques électriques :

- consommation faible de courant.

- garantie de la fonction d’horloge et de rétention de mémoire sous 1v (et 2µ A) ce qui permet de le secourirfacilement par une batterie.

Page 94: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 94/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 94

2. Connexion de PCF8583:

L’horloge temps réel PCF8583 à accès I2C est raccordée à la ligne RC3 du Pic pour l’horloge (SCL) et àRC4 pour les données (SDA), la liaison aux lignes RC3 et RC4 s’effectue en changeant l’état du SW9.Les résistances R48 et R49 maintiennent positivement ces signaux au repos. Le montage contient aussiune pile rechargeable pour alimenter le PCF8583 en cas où la carte n’est pas alimentée.

Le bus I2C appartient à la catégorie des bus série par opposition aux bus parallèle ou les données sonttransmises par bloc, les données sont ici envoyées bit par bit par groupe d’octet sur la ligne SDA.La ligneSCL fonctionne comme une horloge sérielle d’un registre à décalage. Tant que la ligne SCL est à l’étathaut les données de la ligne SDA doivent être stables.

Lorsque la ligne SCL est à l’état bas, le circuit qui émet les données peut modifier l’état.

Figure: condition de validité des données sur le bus I2C

Certaines combinaisons particulières de niveaux et de fronts des deux lignes déterminant la condition dedépart ou d’arrêt de la transmission des données.

Condition de départ : Un front descendant sur SDA quand SCL est à l’état haut. Condition d’arrêt : Un front montant sur SDA quand SCL est à l’état haut.

Page 95: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 95/108

Page 96: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 96/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 96

Remarque importante : On peut se passer de circuit RC à la seule condition que le temps de monté deVDD soit suffisamment rapide (au minimum 50mV/ms). Si le temps de montée est inférieur à 50mV/ms,il faut rajouter un réseau RC.

• EXTERNAL RESET (Mise à l’état bas de MCLR). Remise à zéro extérieure. Il faut appliquer unniveau bas sur l'entrée RESET pendant au moins 2μS pour que l'Initialisation soit prise en compte.

• WDT: Chien de garde.

Si le WDT arrive à la fin du temps de garde sans avoir été rafraîchi il y aura alors une initialisation dumicrocontrôleur.

• BOR: Baisse de l’alimentation.

Si la tension VDD chute en dessous de 4V pendant 100μS au moins, le microcontrôleur peut générer unRESET.

14.2 Oscillateur : OSC1 et OSC2 ou CLKIN et CLOUT.

Ces broches permettent de faire fonctionner l’oscillateur interne du PIC.

On peut utiliser 3 types d’oscillateurs :

- Un quartz ou résonateur céramique

- Un oscillateur externe

- Un réseau RC

Remarque : Les instructions standards durent 1 cycle machine (sauf les instructions de sauts 2 cycles). Lemicrocontrôleur utilise 4 coups d’horloge pour réaliser un cycle machine.

Si la fréquence du QUARTZ est de 20MHz (T=50nS), une instruction sera exécutée toutes les 200nS,Dans ce cas là, le microcontrôleur a une puissance de calcul de 5MIPS (5 Millions d’instructions par

secondes ! ! !).

La fréquence MAX est de 20MHz pour les microcontrôleurs dont les références se terminent par -20.Parexemples : 16F876-20 (20MHz max) et 16F876-04 (4MHz max).

.

RA0/AN02

RA1/AN1

3

RA2/AN2/VREF-4

RA4/T0CKI6

RA5/AN4/SS7

RE0/AN5/RD8

RE1/AN6/WR9

RE2/AN7/CS10

OSC1/CLKIN13

OSC2/CLKOUT14

RC1/T1OSI/CCP2 16

RC2/CCP1 17

RC3/SCK/SCL 18

RD0/PSP0 19

RD1/PSP1 20

RB7/PGD 40

RB6/PGC 39RB5

38RB4

37RB3/PGM

36RB2

35RB1

34RB0/INT

33

RD7/PSP7 30

RD6/PSP6 29

RD5/PSP5 28

RD4/PSP427

RD3/PSP3 22

RD2/PSP2 21

RC7/RX/DT 26

RC6/TX/CK 25

RC5/SDO 24

RC4/SDI/SDA 23

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI 15

MCLR/Vpp/THV1

U1

PIC16F877

C1

1nF

C2

1nF

X1CRYST AL

Brochage du circuit d’oscillation PIC16F877

Page 97: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 97/108

Page 98: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 98/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 98

Figure 2: Architecture interne du PIC 16F877

*Les 5 ports sont d’entrées sorties input/output, ils sont bidirectionnels :-Le port A (6 bits) I/O pure et/ou convertisseur analogique et/ou TIMER 0.

La broche RA4 5Entrée du timer 0 T0CKI) est de type DRAIN OUVERT.

-Le port B (8 bits) I/O pure et/ou programmation in situ ICSP/ICD, RB0 est entrée d’interruption externe.

-Le port C (8 bits) I/O pure et/ou SPI/I2C et/ou USART.

-Le port D (8 bits) I/O pure et/ou port parallèle 8 bits associé au port E.

-Le port E (3 bits) I/O pure et/ou pilotage du port E RE0/R, RE1/WR et RE/CS.

Remarque : Si le PIC est utilisé en mode ICSP/ICD il faut laisser libre les broches RB3/PGM,RB6/PGC ainsi que RB7/PGD) et les configurer en entrée.

Page 99: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 99/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page 99

• Le PORT C (8 bits) I/O pure et/ou TIMER 1 et/ou SPI / I2C et/ou USART.• Le PORT D (8 bits) I/O pure et/ou port parallèle 8 bits associé au PORT E.

• Le PORT E (3 bits) I/O pure et/ou pilotage du PORT E RE0/RD, RE1/WR et RE2/CS.

14.4 Configuration des PORTx, les registres PORTx et TRISx.

Tous les ports sont pilotés par deux registres :

- Le registre de PORTx, si le PORT x ou certaines lignes de PORT X sont configurées en sortie, ceregistre détermine l’état logique des sorties.- Le registre TRISx, c’est le registre de direction. Il détermine si le PORTx ou certaines lignes de portsont en entrée ou en sortie. L’écriture d’une 1 logique correspond à une entrée (1 comme Input) etl’écriture d’une 0 logique correspond à une sortie (0 comme Output).

Au RESET toutes les lignes de ports sont configurées en entrées.

Remarque : Les registres TRISx appartiennent à la BANQUE 1 des SFR.

Lors de l’initialisation du microcontrôleur il ne faut pas oublier de changer de page mémoire pour lesconfigurer.

Le tableau ci dessous représente les caractéristiques de PIC :

Tableau de caractéristiques

14.5 . Les mémoires du PIC 16F877 :

Les mémoires sont de trois types différents :

1 La mémoire FLASH :

C’est une mémoire programme de taille 8ko. Chaque case mémoire unitaire est de taille 13 bits. Cettemémoire est de type mémoires stable, c'est-à-dire qu’on peut réécrire dessus à volonté, car le 16F877 estcaractérisé par la possibilité d’écrire des données. La zone mémoire est caractérisée par une adresse de 13

bits, alors ceci nous impose donc pour l’adressage les registres EEAR et EEADRH. De même, nousaurons pour les données, les registres EEDATA et EEDATH.

2 La mémoire RAM :

Cette mémoire de taille 368 octets est une mémoire d’accès rapide et elle est volatile (les données seront perdus lorsque elle n’est plus sous tentions). Elle contient tous les registres de configuration du PIC ainsi

Page 100: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 100/108

Page 101: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 101/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

101

Figure : Plan Mémoire pour les instructions

(Code programme)

Le plan mémoire est linéaire les adresses vont de 0000h à 1FFFh (8k mots de 14 bits), par page de 2Kmots. On peut remarquer, le vecteur de reset est figé en 0000h.

Les PICs n’ont qu’un seul vecteur d’interruption en 0004h. Lors d’une interruption, le sous programmeassocié devra déterminer quel périphérique a demandé une interruption.

La pile utilisée par les sous programmes n’est pas implantée en mémoire de donnée comme avec lesmicrocontrôleurs classiques, mais dans la mémoire programme. Elles sont utilisées lors d’appels de sous

programmes, on ne peut pas imbriquer plus de 8 sous programmes (Ce qui est déjà beaucoup).

14.8 Les interruptions :

14-8- 1 Présentation :

Le microcontrôleur dispose de plusieurs sources d'interruptions.

• Une interruption externe, action sur la broche INT/RB0.

• Débordement du TIMER0.

• Changement d’état logique sur une des broches du PORTB (RB4 à RB7).

• Une interruption d’un des périphériques (PEIE).

- Fin de programmation d’une case mémoire de l’EEPROM.

- Changement d’état sur le PORTD (PSPIE).

- Fin de conversion analogique numérique (ADIE).

- Réception d’une information sur la liaison série (RCIE).

- Fin d’émission d’une information sur la liaison série (TXIE).

Page 102: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 102/108

Page 103: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 103/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

103

14-8-4 Mécanisme générale d’une interruption :

Une routine d’interruption est un sous-programme particulier, déclenché par l’apparition d’un événementspécifique. Cela a l’air un peu ardu, mais vous allez voir que c’est très simple.

Voici donc comment cela fonctionne :

Le programme se déroule normalement L’événement survient Le programme achève l’instruction en cours de traitement Le programme saute à l’adresse de traitement de l’interruption Le programme traite l’interruption Le programme saute à l’instruction qui suit la dernière exécutée dans le programme principal.

Il va bien sûr de soi que n’importe quel événement ne peut pas déclencher une interruption. Il faut que 2conditions principales soient remplies :

L’événement en question doit figurer dans la liste des événements susceptibles de provoquer uneinterruption pour le processeur sur lequel on travaille

L’utilisateur doit avoir autorisé l’interruption, c’est à dire doit avoir signalé que l’événement enquestion devait générer une interruption.

Le programme principal ne sait pas quand il est interrompu, il est donc crucial de lui remettre ses registresdans l’état où ils étaient avant l’interruption.

En effet, supposons que l’instruction xxx ait positionné un flag (par exemple, le bit d’indicateur Z). Si parmalheur, la routine d’interruption a modifié ce bit, le programme ne pourra pas se poursuivre

normalement.

Nous voyons également que l’instruction xxx termine son exécution avant de se brancher sur la routined’interruption. Une instruction commencée n’est donc jamais interrompue.

Mécanisme d’interruption sur les PICs :

les PICs répondent au fonctionnement général ci-dessus, mais elles ont également leurs particularités.Voyons maintenant le principe des interruptions sur les PICs

Tout d’abord, l’adresse de début de toute interruption est fixe. Il s’agit toujours de l’adresse 0x04.

Toute interruption provoquera le saut du programme vers cette adresse.

Toutes les sources d’interruption arrivant à cette adresse, si le programmeur utilise plusieurssources d’interruptions, il lui faudra déterminer lui-même laquelle il est en train de traiter.

Les PICs en se connectant à cette adresse, ne sauvent rien automatiquement, hormis le contenu duPC, qui servira à connaître l’adresse du retour de l’interruption. C’est donc à l’utilisateur de se chargerdes sauvegardes.

Le contenu du PC est sauvé sur la pile interne (8 niveaux). Donc, si vous utilisez des interruptions,vous ne disposez plus que de 7 niveaux d’imbrication pour vos sous-programmes. Moins si vous utilisezdes sous-programmes dans vos interruption.

Page 104: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 104/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

104

Le temps de réaction d’une interruption est calculé de la manière suivante : le cycle courant del'instruction est terminé, le flag d'interruption est lu au début du cycle suivant. Celui-ci est achevé, puis le

processeur s'arrête un cycle pour charger l'adresse 0x04 dans PC. Le processeur se connecte alors àl'adresse 0x04 où il lui faudra un cycle supplémentaire pour charger l'instruction à exécuter. Le tempsmort total sera donc compris entre 3 et 4 cycles.

Une interruption ne peut pas être interrompue par une autre interruption. Les interruptions sontdonc invalidées automatiquement lors du saut à l’adresse 0x04 par l’effacement du bit GIE (que nousallons voir).

Les interruptions sont remises en service automatiquement lors du retour de l’interruption.L’instruction RETFIE agit donc exactement comme l’instruction RETURN, mais elle repositionne enmême temps le bit GIE.

14.9 Le convertisseur

Le CAN est un périphérique intégré destiné à mesurer une tension et la convertir en nombre binaire qui pourra être utilisé par un programme.

Le16F877 travaille avec un convertisseur analogique/numérique qui permet un échantillonnage sur 10 bits.Le signal numérique peut donc prendre 1024 valeurs possibles. On sait que pour pouvoir numériser unegrandeur, nous devons connaître la valeur minimale qu’elle peut prendre, ainsi que sa valeur maximale,Les pics considèrent par défaut que la valeur minimale correspond à leur Vss d’alimentation, tandis que lavaleur maximale correspond à la tension positive d’alimentation Vdd. le principe de la conversion suit laséquence est la suivante :

- Le pic connecte le pin sur laquelle se trouve la tension à mesurer à un condensateur interne, qui va secharger via une résistance interne jusque la tension appliquée.

Le pin est déconnecté du condensateur, et ce dernier est connecté sur le convertisseuranalogique/numérique interne.

Le temps nécessaire à la conversion est égal au temps nécessaire à la conversion d’un bit multiplié par lenombre de bits désirés pour le résultat. Concernant notre pic, il faut savoir qu’il nécessite, pour laconversion d’un bit, un temps nommé Tad.

Ce temps est dérivé par division d’horloge principale. Le diviseur peut prendre une valeur de 2, 8 ou 32. Letemps de conversion Tad ne peut détendre, pour des raisons électroniques, en dessous de 1.6 us pour lesversions classiques de 16F87x, et en dessous de 6 us pour les versions LC. Donc en fonction des

fréquences utilisées pour le quartz du pic, on choisit le diviseur le plus approprié. Voici un tableau qui reprend les valeurs de diviseur à utiliser pour quelques fréquences courantes du quartz

et pour les PICs de type classique :

Diviseur 20Mhz 5Mhz 4Mhz 2Mhz 1,25Mhz 333,3Khz

2 100ns 400ns 500ns 1µs 1,6µs 6µs

8 400ns 1,6µs 2µs 4µs 6,4µs 24µs

32 1,6µs 6,4µs 8µs 16µs 25,6µs 96µs

Osc RC 2-6µs 2-6µs 2-6µs 2-6µs 2-6µs 2-6µs

Page 105: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 105/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

105

Les valeurs 400ns; 1,6µs; 2µs; 4µs; 6,4; 24µs correspondent au meilleur diviseur en fonction de lafréquence choisie, en ce qui nous concerne puisqu’on utilise une fréquence de 4MHZ, on utilisera lavaleur de 2µs dans notre programmation. Il faut à présent préciser que le PIC nécessite un temps Tad avant le démarrage effectif de la conversion, et un temps supplémentaire Tad à la fin de la conversion.

Résumons donc le temps nécessaire pour effectuer l’ensemble des opérations :

- On charge le condensateur interne (nécessite le temps Tacq).

- On effectue la conversion (nécessite le temps 12 * Tad).

- On doit attendre 2 * Tad avant de pouvoir recommencer une autre conversion.

Figure : cycle de conversion

Le module de conversion utilise 4 registres disposés comme suit :*Registre de Résultat High (ADRESH)

*Registre de Résultat Low (ADRESL)

*Registre0 de Contrôle (ADCON0)

*Registre1 de Contrôle (ADCON1)

Regardons cela de prés dans la figure ci-dessous :

Configuration interne du module de convertisseur analogique/numérique :

Figure : module du convertisseur

Page 106: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 106/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

106

On voit très bien sur ce schéma que les pins AN2 et AN3 servent selon la position du sélecteur d’entréeanalogique ou de tension de référence. Le sélecteur de canal permet de sélectionner lequel des 8 canauxva être appliqué au convertisseur analogique/digital.

On voit que la sélection de la source des tensions de référence dépend de bits du registre ADCON1, tandisque le canal sélectionné pour être numérisé dépend d’ADCON0. C’est le registre ADCON1 qui

détermine si ce port sera utilisé comme port I/O ou comme port analogique. Nous en aurons besoin dansla programmation.

Les registres ADRESL et ADRESH : Le convertisseur donne un résultat sur 10 bits, et donc que ce résultat devra donc obligatoirement être

sauvegardé dans 2 registres. Ces registres sont tout simplement les registres ADRESL et ADRESH.Comme 2 registres contiennent 16 bits, et que nous n’en utilisons que 10, Microchip nous a laissé lechoix sur la façon dont est sauvegardé le résultat, nous pouvons soit justifier le résultat à gauche, soit àdroite

La justification à droite complète la partie gauche du résultat par des « 0 ». Le résultat sera donc de la

forme : ADRESH ADRESL

La justification à gauche procède bien évidemment de la méthode inverse :

ADRESH ADRESL

La justification à droite sera principalement utilisée lorsque nous avons besoin de l’intégralité des 10 bitsde résultat, tandis que la justification à gauche est très pratique lorsque 8 bits vous suffisent. Dans ce cas,les 2 bits de poids faibles se trouvent isolés dans ADRESL, il suffit donc de ne pas en tenir compte. Cetteapproche est destinée à nous épargner des décalages de résultats.

Le choix de la méthode s’effectue à l’aide du bit 7 d’ADCON1. Le registre ADCON1 :

Ce registre permet de déterminer le rôle de chacune des pins AN0 à AN7. Il permet donc de choisir si un pin sera utilisé comme entrée analogique, comme entrée/sortie standard, ou comme tension de référence.Il permet également de décider de la justification du résultat.

Pour pouvoir utiliser un pin en mode analogique, il faudra que ce pin soit configuré également en entrée par TRISA. Le registre ADCON1 dispose, comme tout registre accessible de notre PIC, de 8 bits, dontseulement 5 sont utilisés :

0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 0 0 0 0 0 0

Page 107: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 107/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Page

107

Tableau : le registre ADCON1

Le bit ADFM permet de déterminer si le résultat de la conversion sera justifié à droite (1) ou à gauche (0). Nous trouvons dans ce registre les 4 bits de configuration des pins liés au convertisseuranalogique/numérique. Ces bits nous permettent donc de déterminer le rôle de chaque pin.

Comme nous avons 16 combinaisons possibles, nous aurons autant de possibilités de configuration (en fait,vous verrez que nous n’en avons que15)

Le registre ADCON0 :

Ce registre est le dernier utilisé par le convertisseur analogique/numérique. Il contient les bits que nousallons manipuler lors de notre conversion. Sur les 8 bits de notre registre, 7 seront utilisés.

B7 ADFM A/D result format select

B6 INUTILISE lu comme « 0 »

B5 INUTILISE lu comme « 0 »

B4 INUTILISE lu comme « 0 »

B3 PCFG3 Port Configuration control bit 3

B2 PCFG2 Port Configuration control bit 2

B1 PCFG1 Port Configuration control bit 1

B0 PCFG1 Port Configuration control bit 0

Page 108: Programmation Des Microcontroleurs

8/10/2019 Programmation Des Microcontroleurs

http://slidepdf.com/reader/full/programmation-des-microcontroleurs 108/108

Programmation des Microcontroleurs (PIC) EL MORNAN

Tableau : le registre ADCON0 :

B7 ADCS1 A/D conversion Clock Select bit 1

B6 ADCS0 A/D conversion Clock Select bit 0

B5 CHS2 Analog Channel Select bit2

B4 CHS1 Analog Channel Select bit1

B3 CHS0 Analog Channel Select bit0

B2 GO/DONE A/D conversion status bit

B1 Inutilisé lu comme « 0 »

B0 ADON A/D ON bit

14.10 l’oscillateur :

L’horloge est un système qui peut être réalisée soit avec un QUARTZ(a), soit avec une horlogeextérieur(b), soit avec un circuit RC(c), dans ce dernier la stabilité du montage est limitée.

La fréquence maximale d’utilisation va dépendre de Microcontrôleur utilisé. Le suffixe indiqué sur le