25
1 Le Microcontrôleur « pic 16F84 » et « pic 16F877 » Aujourd’hui, les microcontrôleurs sont partout : ordinateurs, portable… Assez facile d’utilisation, pour la plupart, et programmable de fort nombreuses fois (plus de 1000), ou définitivement (OTP : One Time Programmable), leur souplesse d’utilisation a séduit rapidement les divers constructeurs de divers domaines. Aujourd’hui, un des géants mondiaux s’appelle Microchip. Mais il ne faut surtout pas confondre les microcontrôleurs et les microprocesseurs. Pour résumer, on peut dire qu’un microcontrôleur est un ordinateur extrêmement miniaturisé et possédant donc assez peu de mémoire, et dont le processeur est relativement simple, alors qu’un microprocesseur ne fait qu’exécuter des instructions qui lui sont communiquées, puis renvoie les résultats. Les principaux problèmes des microcontrôleurs sont la taille de leur mémoire et le nombre limité de périphériques qu’ils peuvent recevoir en même temps. Cependant, le nombre de ces derniers peut parfois être augmenté en associant, sur les mêmes pattes un périphérique d’entrée et un de sortie, permettant alors de doubler le nombre de périphériques connectables… 1) La référence : Les PIC 16FXX sont des microcontrôleurs 8 bits (largeur du bus de données) conçus en technologie CMOS (faible consommation électrique). Les μC PIC utilisent une architecture RISC (Processeur à jeu dinstructions réduit) avec 35 instructions codées en un mot de 14 bits. Pour identifier un pic, on utilise le numéro inscrit sur son boitier, exemple du PIC 16F84-04 : 16 16 indique un PIC de la famille Mid-Range (Instructions sur 14 bits) F Type de mémoire programme : C EPROM, CR ROM, F FLASH. 84 Référence du PIC 4 La fréquence d’horloge maximale (4 Mhz) 2) Le Brochage : Le 16F84A est un PIC de 18 broches, la figure ci-contre montre le brochage du circuit. Les fonctions des pattes sont les suivantes :

Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

  • Upload
    others

  • View
    5

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

1

Le Microcontrôleur « pic 16F84 » et « pic 16F877 »

Aujourd’hui, les microcontrôleurs sont partout : ordinateurs, portable…

Assez facile d’utilisation, pour la plupart, et programmable de fort nombreuses fois (plus de 1000), ou

définitivement (OTP : One Time Programmable), leur souplesse d’utilisation a séduit rapidement les divers

constructeurs de divers domaines. Aujourd’hui, un des géants mondiaux s’appelle Microchip.

Mais il ne faut surtout pas confondre les microcontrôleurs et les microprocesseurs. Pour résumer, on peut dire

qu’un microcontrôleur est un ordinateur extrêmement miniaturisé et possédant donc assez peu de mémoire, et

dont le processeur est relativement simple, alors qu’un microprocesseur ne fait qu’exécuter des instructions qui

lui sont communiquées, puis renvoie les résultats.

Les principaux problèmes des microcontrôleurs sont la taille de leur mémoire et le nombre limité de

périphériques qu’ils peuvent recevoir en même temps. Cependant, le nombre de ces derniers peut parfois être

augmenté en associant, sur les mêmes pattes un périphérique d’entrée et un de sortie, permettant alors de

doubler le nombre de périphériques connectables…

1) La référence :

Les PIC 16FXX sont des microcontrôleurs 8 bits (largeur du bus de données) conçus en technologie

CMOS (faible consommation électrique). Les µC PIC utilisent une architecture RISC (Processeur à jeu

d’instructions réduit) avec 35 instructions codées en un mot de 14 bits. Pour identifier un pic, on utilise le

numéro inscrit sur son boitier, exemple du PIC 16F84-04 :

16 16 indique un PIC de la famille Mid-Range (Instructions sur 14 bits)

F Type de mémoire programme : C EPROM, CR ROM, F FLASH.

84 Référence du PIC

4 La fréquence d’horloge maximale (4 Mhz)

2) Le Brochage :

Le 16F84A est un PIC de 18 broches, la figure ci-contre montre le brochage du circuit. Les fonctions des

pattes sont les suivantes :

Page 2: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

2

L’alimentation du circuit est assurée par les pattes

VDD (3 à 6v) et VSS (0v).

L’horloge doit être stabilisée de manière externe au

moyen d’un cristal de quartz connecté aux pattes

OSC1/CLKIN et OSC2/CLKOUT.

La patte 4 est appelée MCLR. Elle permet lorsque

la tension appliquée est égale à 0V de réinitialiser le

microcontrôleur.

Les broches RB0 à RB7 (portB) et RA0 à RA4 (portA)

permettent au microcontrôleur de dialoguer avec le

monde extérieur (périphériques). Elles peuvent

être configurées en entrée ou en sortie. Certaines de

ces broches ont aussi d’autres fonctions tels que

interruption,compteur (RB0/INT ; RA4/TOCKL)

a) Exemple d’alimentation :

b) Exemple d’horloge :

Pour fonctionner correctement, le microcontrôleur nécessite la présence d'une horloge qui doit être

câblée entre les bornes « OSC1 et OSC2 ». Cette horloge peut être réalisée de différentes façons :

Page 3: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

3

3) Structure interne :

La structure générale du PIC 16F84 comporte 4

blocs comme le montre la figure 2 :

Mémoire de programme

Mémoire de données

Processeur

Ressources auxiliaires (périphériques)

La mémoire de programme contient les instructions pilotant l’application à laquelle le microcontrôleur est

dédié. Il s’agit d’une mémoire non volatile (elle garde son contenu, même en l’absence de tension), elle est

de type FLASH c’est à dire qu’elle peut être programmée et effacée par l’utilisateur via un programmateur et

un PC. Pour le PIC 16F84 cette mémoire est d’une taille de 1024x14 bits, c’est à dire qu’elle dispose de 1024

emplacements (de 000h à 3FFh) contenant chacun 14 cases car dans le cas du PIC, les instructions sont

codées sur 14 bits. On peut donc stocker 1024 instructions.

La mémoire de donnée est séparée en deux parties :

une mémoire RAM de 68 octets puisque le bus de donnée est de huit bits. Cette RAM est volatile

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

une mémoire EEPROM de 64 octets dans laquelle on peut lire et écrire des données (de huit bits soit

un octet) et qui possède l’avantage d’être non volatile (les données sont conservées même en l’absence

de tension). La lecture et l’écriture dans cette mémoire de données sont beaucoup plus lentes que dans la

mémoire de données RAM.

Le processeur est formé de deux parties :

une unité arithmétique et logique (UAL) chargée de faire des calculs.

un registre de travail noté W sur lequel travail l’UAL.

Les ressources auxiliaires qui sont dans le cas du PIC16F84

ports d’entrées et de sorties.

temporisateur (timers)

interruptions

chien de garde

Page 4: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

4

4) Mémoire de données RAM :

La mémoire RAM est constituée de deux parties :

Les registres SFR (Special Function Register), ce sont les registres de fonctionnement du PIC.

L'ensemble de ces registres est souvent appelé fichier des registres.

Les registres GPR (General Propose Register) sont des positions mémoire que l'utilisateur peut

utiliser pour stocker ses variables et ces données. On remarquera donc que, indépendamment de leur

nature, les positions de la RAM sont toujours appelé registres.

Les registres SFR

Les registres GPR

Les registres spéciaux SFR :

Nous avons vu au chapitre précédent que la mémoire de données RAM contenait des registres spécifiques

qui permettent de configurer le PIC, nous allons les détailler un à un et voir comment on peut accéder à la

page 0 ou la page 1.

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

indirect.

adresse 01, TMR0. Contenu du Timer (8 bits). Il peut être incrémenté par l’horloge (fosc/4) c'est à

dire tous les 4 coups d'horloge ou par la broche RA4.

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

sont dans PCLATH.

adresse 03 et 83, STATUS Registre d’état.

Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des témoins (drapeaux ou flag

en anglais) caractérisant le résultat de l’opération réalisée par l’UAL. Le bit RP0 est lui en lecture

/écriture et c’est lui qui permet de sélectionner la page dans la mémoire RAM.

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

TO/ (Time Out) : débordement du timer WDT

PD/ (Power Down) : caractérise l’activité du chien de garde WDT

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

DC : (digit carry) retenue sur un quartet (4 bits)

C : (carry) retenue sur un octet (8 bits).

Page 5: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

5

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

(adressage indirect)

adresse 05, PORTA. Ce registre contient l’état des lignes du port A.

adresse 06, PORTB. Ce registre contient l’état des lignes du port B.

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

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

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

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

Masque :

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

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

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

débordement du TIMER0

INTE: (Interrupt Enable) autorise l’interruption provoquée par un changement d'état

sur broche RB0/INT

RBIE: (RB Interrupt Enable) autorise les interruptions provoquées par un

changement d'états sur l'une des broches RB4 à RB7.

Si ces bits sont mis à 1, ils autorisent les interruptions pour lesquels ils sont dédiés.

Drapeaux :

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

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

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

adresse 81, OPTION. 8 bits (tous à 1 au RESET) affectant le comportement des E/S et des timers.

RBPU/ (RB Pull Up) : Résistances de tirage à Vdd des entrées du port. Si RBPU/=0

les résistances de pull-up sont connectées en interne sur l'ensemble du port B.

INTEDG (Interrupt Edge) : sélection du front actif de l’interruption sur RB0/INT (1

pour front montant et 0 pour front descendant).

RTS (Real Timer Source) : sélection du signal alimentant le timer 0 : 0 pour horloge

interne, 1 pour RA4/T0CLK

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

montant).

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

PS2...PS0 (Prescaler 210) : sélection de la valeur du diviseur de fréquence pour les

timers.

adresse 85, TRISA. Direction des données pour le port A : 0 pour sortir et 1 pour entrer.

adresse 86, TRISB. Direction des données pour le port B : 0 pour sortir et 1 pour entrer.

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

adresse 89, EECON2. Registre de sécurité d’écriture en EEPROM de données. Une donnée ne peut

être écrite qu’après avoir écrit successivement 0x55 et 0xAA dans ce registre.

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

RBPU/ INTEDG RTS RTE PSA PS2 PS1 PS0

Page 6: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

6

5) JEU D’INSTRUCTIONS :

Afin de comprendre la fonction de chaque instruction, la notation adoptée pour les données et adresses

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

f représente un registre

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

droite dans le registre )

k représente une donnée aussi appelé littéral

Un certain nombre d’instructions (ADDWF, ANDWF, etc..) utilise une notation spéciale présentée sous la

forme :

ADDWF f, d Où f indique le registre et où d peut prendre deux valeurs (0 ou 1), ce qui change

le comportement de l’instruction. Si d est à 0, le résultat est placé dans le registre

de travail W, la valeur dans le registre f est alors inchangée, alors que si d est à 1,

le résultat est placé dans le registre f.

Un autre type d’instruction mérite quelques éclaircissements, ce sont les instructions de branchement

conditionnel. Prenons comme exemple :

BTFSC f, b Qui va vouloir dire (Bit Test File Skip if Clear) qui signifie que l’on va tester le

bit b du registre f (b peut prendre une valeur de 0 à 7 pour un registre 8 bits) .Il

peut alors y avoir deux solutions :

-Soit le bit testé est à 1, donc la condition testée n’est pas réalisée, le

programme continue alors son déroulement normalement en séquence avec

l’instruction juste en dessous.

-Soit le bit testé vaut 0, donc la condition testée est réalisée et le

programme saute l’instruction qui suit le BTFSC dans le programme.

Cette façon de programmer peut paraître étrange, mais avec de l’habitude, elle s’avère très pratique et permet

de réaliser des programmes compacts et performants.

Voilà les 35 instructions à utiliser pour la programmation : (page suivante)

Page 7: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

7

Page 8: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

8

6) Mise en oeuvre et programmation de pic 16F84 :

La mise en œuvre d'une application, à base de microcontrôleur, consiste à traduire un cahier des

charges en un programme code, puis à le transférer vers la mémoire programme du

microcontrôleur.

Pour ce faire, divers outils de développement sont mis à la disposition du concepteur. Parmi ces outils,

on cite :

la programmation graphique, elle est basée sur l'interconnexion graphique de symboles ou modules

"exemple : organigramme".

la programmation en assembleur.

la programmation mettant en œuvre un langage évolué tels que langage C, Basic,Pascal, etc..

a) Configuration des entrées et sorties :

Pour configurer la direction des entrées /sorties on fait appel aux registres TRISA et TRISB situés

au Bank1 de la RAM ;

TRISA : Ce registre permet de configurer, en entrée ou en sortie, les 5 bits du port A.

TRISB : Ce registre permet de configurer, en entrée ou en sortie, les 8 bits du port B.

Exemple :

BSF STATUS,RP0 ; passage en bank 1

MOVLW b'00010010' ; charge la valeur B'00010010' dans W

MOVWF TRISA ; charge la valeur de W dans le registre TRISA

Alors que pour avoir accès en lecture ou en écriture aux ports du μc, on utilise les registres PORTA et

PORTB situés au Bank0 de la RAM.

BCF STATUS,RP0 ; passage en banque 0

BSF PORTA,0 ; mise à 1 de la sortie RA0

CLRF PORTB ; mise à 0 de toutes les sorties du port B

Application 1 :

Objectif

Une LED est connectée à RB7 tandis qu'un

interrupteur (switch) est connecté à RA0.

La LED devrait s'allumer lorsque l'interrupteur est

fermé et s'éteindre lorsque l'interrupteur est ouvert.

1= pour configurer une broche en entrée

0 = pour configurer une broche en sortie

Page 9: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

9

Organigramme Programme en assembleur

b) Gestion de la temporisation :

Temporisation avec une boucle :

L’organigramme ci-dessous permet de réaliser un sous programme de temporisation (Sp. tempo) en utilisant

la case mémoire 0x20 de la RAM, chargée par une valeur N 1.

L’objectif est de calculer le temps écoulé lors d’exécution de ce sous programme.

Avec un quartz de fosc = 4Mhz, la fréquence réelle du PIC : F=1/fosc=1Mhz

Donc 1 cycle = 1/F = 1μs

Alors la temporisation T1 du sous-programme en fonction de N1 est :

…………………………………………………

La valeur max que l’on peut donner à N1 est 255, ce qui donne une

temporisation max de : T1 max = ………………………………………………….

Page 10: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

10

Temporisation avec deux boucles :

- le temps T2 en fonction de N1 et N2 est : …………….……………………

- La valeur max que l‟on peut donner à N1 et N2 est 255, donc la

valeur maximale de T2 est : .………….………….…………

Temporisation avec trois boucles :

le temps T3 en fonction de N1, N2 et N3 est :

…………….……………………

La valeur max que l’on peut donner à N1, N2 et N3 est 255,

donc la valeur maximale de T3 est : .………….………….…………

Page 11: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

11

Temporisation avec TMR0 :

Le module TMR0 (Timer 0) possède deux modes de fonctionnement :

Le mode timer utilisé pour les temporisations (Fosc)

Le mode compteur utilisé pour faire du comptage (RA4).

En mode Timer, le contenu du registre TMR0 est alors incrémenté à chaque cycle de l'horloge interne. Le

durée du cycle on peut l’augmenter en utilisant le prédiviseur avec le taux désiré.

Ce registre contient un nombre de 8 bits (0 à 255), et son débordement (après les 256

incrémentations) est manifesté par l’apparition du drapeau TOIF (bit 2 du registre INTCON).

Alors pour réaliser une temporisation avec TMR0 d’une durée Tx, on peut appliquer la formule suivante :

** Organigramme : ** Sous programme en assembleur

Pour la configuration suivante :

TMR0 utilise l’horloge système (Fosc) de 4MHz et le prédiviseur avec

un taux de 256

Page 12: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

12

Calculer alors la valeur N (hexadécimal) à charger dans le compteur C pour avoir T= 8s

.………….….………….….………….….………….….………….….………….….………….….………….….

………….….………….….…………..………….….………….….……….….………….….………….….……

…….….….................................................................................................................................................................

....................................................................................................................……….…….………….………………

Application 1 :

Objectif :

Réaliser un circuit qui fait clignoter

une LED connectée à RB0 pour un

temps prédéterminé par le sous-

programme de temporisation.

BSF STATUS, RP0 ; « accès à la bank 1 »

........ ................, .... ;

......... ..............., ........... ; « accès à la bank 0 »

Loop ......... ................, ......... ; « allumer la led »

.......... ................. ; « appeller le sous prog Tempo »

.......... ................., ......... ; « Etteindre la led »

........... ..................... ; « appeller le sous prog Tempo »

............ Loop ;

« sous programme temporisation avec une boucle»

.......................................................... ;

......................................................... ;

.......................................................... ;

........................................................... ;

.......................................................... ;

« sous programme temporisation avec TMR0»

.......................................................... ;

............................................................ ;

.......................................................... ;

.......................................................... ;

............................................................ ;

.......................................................... ;

............................................................ ;

.......................................................... ;

END

Config des

ports

Page 13: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

13

c) Les interruptions :

Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure

d'interruption qui se trouve à l'adresse 0004h.

Le PIC16F84 possède 4 sources d'interruption. A chaque interruption sont associés deux bits:

un bit de validation (autorisation) : permet d'autoriser ou non l'interruption.

un drapeau (flag) : permet au programmeur de savoir de quelle interruption il s'agit.

Tous ces bits sont dans le registre INTCON à part le drapeau EEIF de l'interruption EEPROM qui

se trouve dans le registre EECON1.

fonctionnement d’une interruption :

La séquence classique de fonctionnement d'une interruption est la suivante :

1- Détection de l'événement déclencheur.

2- Fin de l'instruction en cours

3- Sauvegarde de l'adresse de retour.

4- Déroutement vers la routine d'interruption.

5- Sauvegarde du contexte.

6- Identification de l'événement survenu.

7- Traitement de l'interruption correspondante

8- Restauration du contexte

9- Retour au programme initial

Page 14: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

14

Application 1 :

Objectif :

établir un programme qui permet d’inverse

l’allumage d’une LED, reliée à RA0, à

chaque pression sur un bouton-poussoir

relié à RB0.

** Organigramme :

** programme en assembleur :

Page 15: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

15

5) les caractéristiques de pic 16F877 :

Nous nous limiterons dans cette partie à la famille Mid-Range et particulièrement au PIC 16F876/877, sachant

que si on a tout assimilé, on pourra facilement passer à une autre famille, et même à un autre microcontrôleur.

Les éléments essentiels du PIC 16F877 sont :

Une mémoire programme de type EEPROM flash de 8K mots de 14 bits,

Une RAM donnée de 368 octets,

Une mémoire EEPROM de 256 octets,

Trois ports d'entrée sortie, A (6 bits), B (8 bits), C (8 bits),

Convertisseur Analogiques numériques 10 bits à 5 canaux,

USART, Port série universel, mode asynchrone (RS232) et mode synchrone

SSP, Port série synchrone supportant I2C

Trois TIMERS avec leurs Prescalers, TMR0, TMR1, TMR2

Deux modules de comparaison et Capture CCP1 et CCP2

Un chien de garde WDT,

13 sources d'interruption,

Générateur d'horloge, à quartz (jusqu’ à 20 MHz) ou à Oscillateur RC

Protection de code,

Fonctionnement en mode sleep pour réduction de la consommation,

Programmation par mode ICSP (In Circuit Serial Programming) 12V ou 5V,

Possibilité aux applications utilisateur d’accéder à la mémoire programme,

Tension de fonctionnement de 2 à 5V,

Jeux de 35 instructions.

Page 16: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

16

6) Les éléments de base du PIC 16F876/877 :

a) L'Horloge :

L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz ou d'un

oscillateur RC.

Quel que soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en divisant

la fréquence par 4. Dans la suite de ce document on utilisera le terme Fosc/4 pour désigner l'horloge système.

Exemple :

Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter une

instruction de 1µs.

b) L'ALU et l’accumulateur W :

L’ALU est une Unité Arithmétique et logique 8 Bits qui réalise les opérations arithmétiques et logique de

base. L’accumulateur W est un registre de travail 8 bits, toutes les opérations à deux opérandes passent par

lui. On peut avoir :

Une instruction sur un seul opérande qui est en général un registre situé dans la RAM

Une instruction sur 2 opérandes. Dans ce cas, l’un des deux opérandes est toujours

l’accumulateur W, l’autre peut être soit un registre soit une constante.

Pour les instructions dont un des opérandes est un registre, le résultat peut être récupéré soit dans

l’accumulateur, soit dans le registre lui-même.

c) Organisation de la mémoire RAM :

L’espace mémoire RAM adressable est de 512 positions de 1 octet chacune :

96 positions sont réservées au SFR (Special Function Registers) qui sont les registres de configuration

du PIC.

Les 416 positions restantes constituent les registres GPR (General Propose Registers) ou RAM

utilisateur. Sur le 16F876 et 16F877, 3 blocs de 16 octets chacun ne sont pas implantés physiquement

d’où une capacité de RAM utilisateur de 368 GPR.

7) Le brochage de PIC 16F876/877 :

Page 17: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

17

8) L’accès à la RAM directement (mode d’adressage direct):

a) La RAM :

La RAM apparaît alors organisée en 4 banks de 128 octets chacun. L'adresse instruction permet d'adresser à

l'intérieur d'un bank alors que les bits RP0 et RP1 du registre STATUS permettent de choisir un bank. La

Figure II-1 montre l’organisation de la RAM avec les zones allouée au SFR et aux GPR.

Page 18: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

18

Quelques registres de configuration et leurs bits :

b) les registres spéciaux du 16F877 :

La mémoire RAM est divisée en 4 banques. Elle comprend tous les registres spéciaux permettant de contrôler le

cœur du PIC ainsi que ses périphériques. Elle contient également des cases mémoires à usage générique dans

lesquelles pourront être stockées les variables de nos futurs programmes.

o Registre STATUS (adresse : 03h ; 83h ; 103h ; 183h) :

RP1 ; RP0 : bits de sélection de banque mémoire. Utilisé pour l’adressage indirect :

1 1 = Banque 3

1 0 = Banque 2

0 1 = Banque 1

0 0 = Banque 0

o Registre OPTION_REG (adresse : 81h ; 181h) : ( même que le pic 16F84)

o Registre INTCON (adresse : 0Bh ; 8Bh ; 10Bh ; 18Bh) : ( même que le pic 16F84)

Page 19: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

19

o Les ports du 16F877:

Le PIC 16F877 est doté de 5 ports, ce qui est plutôt confortable :

les pattes du PORTA servent également au convertisseur Analogique/Numérique,

les pattes du PORTD au Port Parallèle Esclave, etc.

On voit également que les ports B, C et D ont 8 lignes d’entrée/sortie, alors que le port A n’en a

que 6 et le port E que 3.

On peut configurer les entrées/sorties de chaque port en entrée ou en sortie, grâce à un registre spécial

dédié à chaque port.

o Les timers du 16F877:

Le timer 0 : C’est un compteur 8 bits (0 à 255) simple, qui compte des impulsions soit internes,

soit d’une source externe. On peut par ailleurs lui appliquer une pré-division programmable entre 1

et 256.

Le timer 1 : Le Timer1 fonctionne sur le même principe que le Timer0, mais avec un registre

de comptage plus gros : 16 bits au lieu de 8. De plus, il possède un mode de fonctionnement

particulier : on peut l’utiliser en association avec un des modules CCP (modules de capture et de

comparaison).

Le timer 2 : Le Timer2 a un fonctionnement différent des Timer0 et Timer1. C’est un compteur

8 bits avec pré-diviseur et post-diviseur. On s’en sert pour générer des signaux carrés, ou, en

association avec le module CCP, des signaux PWM.

PWM étant l’acronyme de « Pulse Width Modulation » ou, en français, Modulation de Largeur

d’Impulsion (MLI).

c) Le convertisseur analogique - numérique:

Le convertisseur A/D convertit le signal analogique présent sur une de ses 8 entrées en son équivalent

numérique, codé sur 10 bits. Les pattes AN2 et AN3 peuvent être utilisées comme références de tension ou

comme entrées analogiques standard, les références de tension étant dans ce dernier cas prises sur les

tensions d’alimentations du PIC : VDD et VSS. (VDD pour le + et VSS pour le -). On peut donc numériser

jusqu’à 8 signaux analogiques. Pas tous en même temps, bien sûr, étant donné qu’il n’y a qu’un seul

module de conversion pour 8 signaux d’entrée multiplexés. Mais si vos signaux n’évoluent pas trop vite

(fréquence basse), vous pouvez numériser le signal sur la patte AN0, puis celui sur AN1…

o ADCON0 (adresse : 1Fh. Registre de configuration du convertisseur Analogique / Digital :

ADCS1:ADCS0 : Bits de sélection d’horloge de conversion Analogique / Numérique

00 = FOSC / 2 ; 01 = FOSC / 8 ; 10 = FOSC / 32 ;

CHS2:CHS0 : Bits de sélection du canal analogique

000 = canal 0 (RA0/AN0); 001 = canal 1 (RA1/AN1) ; 010 = canal 2 (RA2/AN2) …

GO/ DONE : Bit de statut de conversion Analogique / Numérique Si ADON = 1 :

1 = Conversion A/D en cours. (Mettre ce bit à 1 démarre la conversion A/D)

0 = Conversion A/D pas en cours (ce bit est automatiquement effacé par le matériel lorsque la

conversion Analogique/Digitale est terminée)

ADON : Bit de mise en route du module A/D

1 = Le module convertisseur A/D est en service

0 = Le module convertisseur A/D est désactivé et ne consomme pas de courant.

Page 20: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

20

o ADCON1 (adresse : 9Fh) Registre de configuration du convertisseur Analogique / Digital :

ADFM : Bits de sélection du format de résultat de conversion Analogique / Numérique

1 = Justifié à droite. Les 6 bits de poids fort du registre ADRESH sont lus comme ‘0’

0 = Justifié à gauche. Les 6 bits de poids faible du registre ADRESL sont lus comme ‘0’

PCFG3:PCFG0 : Bits de contrôle de configuration de port A/D

o ADRESL (Adresse 9Eh) Registre de résultat de conversion Analogique / Numérique (LSB) :

o ADRESH (Adresse 1Eh) Registre de résultat de conversion Analogique / Numérique (MSB)

o Déroulement d’une Conversion :

Le PIC dispose d’un échantillonneur bloqueur intégré constitué d'un interrupteur S, d'une capacité de

maintien C=120 pF et d’un convertisseur Analogique numérique 10 bits. Pendant la conversion, la tension

Ve à l'entrée du convertisseur A/N doit être maintenue constante.

Au départ il faut commencer par faire l’acquisition du signal en fermant l’interrupteur S, ceci se fait à

l’aide du registre ADCON0, soit au moment de la validation du module par le bit ADON soit après un

changement de canal si ADON est déjà positionné.

Page 21: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

21

Après la fin de l’acquisition, on peut démarrer une conversion en positionnant le bit GO_DONE,

l'interrupteur S s’ouvre pour assurer le blocage de la tension. La conversion commence, elle est réalisée en

12 TAD, à la fin, le bit GO_DONE repasse à 0, le drapeau ADIF passe à 1 et le résultat est chargé dans les

registres ADRESL et ADRESH. Le module met 2 TAD supplémentaires pour fermer l'interrupteur S ce qui

démarre une nouvelle phase d’acquisition pendant laquelle la tension Ve rejoint la tension analogique d'entrée

Va. Le temps d'acquisition dépend de la constante de temps RC, R étant la somme des résistances entre le

module de conversion et la source de la tension analogique. Après la fin de l’acquisition, on peut démarrer une

nouvelle conversion et ainsi de suite.

o Temps de conversion :

Le temps de conversion est égal à 12 TAD

TAD est le temps de conversion d'un bit, il dépend de la fréquence du quartz et du pré-diviseur (div) choisi :

TAD = div x 1/fosc. Le choix de div doit être ajusté pour que TAD soit ≥ à 1,6 µs.

Avec un quartz de 4 MHz, il faut choisir div=8 ce qui donne TAD = 2 µs soit un temps de conversion :

TCONV = 24 µs

o Temps d'acquisition :

Temps d'acquisition = TACQ = Tc + CT +2 µs

Tc : temps de charge du condenseur = (Ric+Rss+Rs) C Ln(2047)

Ric = Résistance d’interconnexions, elle est inférieure à 1k

Rss = Résistance du l’interrupteur S (Sampling switch), elle dépend de la tension

d’alimentation Vdd. Elle est égale à 7kΩ pour Vdd=5V

Rs : Résistance interne de la source du signal analogique. Microchip recommande de ne pas

dépasser 10 kΩ

C : Capacité de blocage = 120 pF

CT : Coefficient de température = (Tp -25°C) 0.05 µs/°C

Tp = Température Processeur, voisine de 45°C en temps normal

Page 22: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

22

o Valeur numérique obtenue :

Quelle est la relation entre la tension analogique convertie et le nombre N recueilli dans le registre ADRES ?

Si on note :

Q = pas de quantification = (Vref+ - Vref-)/1024

Va = tension analogique à convertir

N = valeur numérique obtenue,

Avec Vref- = masse, on obtient N = int (Va / Q)

exemple :

Vref+ = Vdd = 5V, Vref- = 0, Vin = 4 V

Q = 5V/1024 = 0,0048828125 V

N = 4V / 0,0048828125 = 819

o Programmation :

1) Si des entrée de PORTE sont utilisées, le configurer en mode normal à l'aide du bit PSPMODE

2) Configurer les E/S en Analogique/Numérique/Référence (ADCON1)

3) Configurer les entrées analogiques en entrées (TRISA, TRISE)

4) Définir l'horloge de conversion à l'aide du diviseur DIV dans ADCON0

5) Choisir le canal à convertir et valider le module (ADCON0)

6) Attendre le temps d’acquisition (12 µs )

7) Lancer la conversion, GO = 1 (ADCON0)

8) Attendre fin de conversion, GO = 0 ou drapeau ADIF=1

9) Traiter le résultat

10) Si l'on désire prendre d'autres mesures, recommencer au point 7 en faisant attention aux timings

Application 1 :

** objectif :

Pour comprendre le fonctionnement du convertisseur A / N, nous

allons étudier l‟exemple ci-contre en utilisant une thermistance

CTN :

- allumez la LED lorsque la température est supérieure à 25°C,

- éteignez la LED lorsqu'elle est inférieure à 25°C.

Page 23: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

23

** Détermination de valeur numérique de la tension de référence correspondante à 25°C.

on suppose que la tension correspondante à 25°C est 𝑽𝑰𝑵 = 2.4 V , et elle augmente lorsque la

température augmente.

Alors la valeur numérique correspondante à 2.4 V (pour le CAN, VDD = 5 et VSS =0) est :

N= (1023/5) × 𝟐. 𝟒 ≅ 491= [0111101011]2

Avec une justification à gauche, Les 8 bits (MSB) du résultat de conversion sont stockés dans

ADRESH, et les 2 bits (LSB) dans ADRESL. Afin de faciliter l’élaboration du sous programme de

conversion, on va utiliser que les 8 bits du poids fort et négliger les 2 bits du poids faible. Donc la nouvelle

valeur numérique de référence sera : [01111010]B = [122]D = [7A]H

Cette valeur est comparée avec la valeur convertie par le CAN et enregistrée dans ADRESH.

* La valeur convertie par le CAN est enregistrée par la suite dans la case mémoire ValAN.

** Organigramme :

Page 24: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

24

** programme en assembleur

d) L’USART :

L’USART ou Universal Synchronous Asynchronous Receiver Transmitter est l’un des deux modules de

communication série du PIC ou SCI en anglais (Serial Communication Interface).

Comme son nom l’indique, elle peut établir une liaison synchrone ou asynchrone, recevoir et transmettre

des données, selon la manière dont elle est configurée.

Concrètement, l’USART permet de communiquer avec le reste du monde : un ordinateur ou tout autre

matériel équipé d’une interface série RS232, des circuits intégrés convertisseurs Numérique/Analogique ou

Analogique/Numérique, des EEPROMs série…

L’USART peut être configurée selon 3 modes :

o Asynchrone (Full Duplex)

o Synchrone Maître (Half Duplex)

o Synchrone Esclave (Half Duplex)

Page 25: Le Microcontrôleur « pic 16F84 » et « pic 16F877 · 2020. 3. 30. · 3 3) Structure interne : La structure générale du PIC 16F84 comporte 4 blocs comme le montre la figure 2

25

e) Les interruptions:

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).

Interruption SPI ou I2C du module MSSP (SSPIE).

Interruption du registre de capture et/ou de comparaison 1 (CCPI1E).

Interruption du registre de capture et/ou de comparaison 2 (CCPI2E).

Débordement du TIMER1 (TMR1E).

Débordement du TIMER2 (TMR2E).

Collision de BUS (BCLIE)

f)Le mode SLEEP :

Le mode Sleep est un mode de fonctionnement particulier du PIC dans lequel celui-ci réduit sa consommation

électrique au minimum. Il est presque entièrement désactivé, son oscillateur est éteint. Le PIC est en mode «

veille » ! Pour sortir de cette torpeur, il faut un des événements suivant :

Reset du circuit, ou

Réveil par le Watch-Dog Timer (ci celui-ci est activé, il continue de fonctionner en mode SLEEP)

Interruption générée par un module périphérique (Timer, convertisseur A/D, changement d’état de port,

SSP….)

Ce mode peut être particulièrement intéressant pour une application fonctionnant sur pile ou batterie et qui ne

requiert le fonctionnement du microprocesseur qu’à la survenue d’événements particuliers. On prolonge ainsi

considérablement l’autonomie.