Vous êtes sur la page 1sur 10

1/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

Chapitre 3 Microcontrôleur Famille PIC 16


I. Microcontrôleur aspect matériel:
1. Qu’est-ce qu’un Microcontrôleur ?
C’est un circuit intègre réunissant tous les éléments d'une structure à base de microprocesseur (système
minimal: un microprocesseur- une mémoire de programme - une mémoire de données - des
interfaces d’entrée – sortie).Il agit comme un ordinateur:
 Il calcule : toutes les opérations simples (+ - x /)
 Il décide: toute la logique simple (et, ou, comparaison, test de valeur)
 Il a une mémoire pour garder: Un programme, le résultat de ses calculs…
 Il peut détecter grâce à ses entrées: des boutons, des capteurs…
 Il peut commander grâce à ses sorties: des LEDS, un afficheur, un moteur …
Le microcontrôleur présente des avantages tels que :
 La simplicité de mise en œuvre ;
 La grande capacité de traitement ;
 Le cout relativement faible.
2. Où les trouvent-on ? PARTOUT!
Les systèmes et les objets techniques à base de microcontrôleur prennent de plus en plus de place dans
notre quotidien (Téléviseur ; Téléphone mobile ; Lave-linge; Play station ; Clé USB…)
3. Microcontrôleur de microchip : PIC16F84…
Les microcontrôleurs de Microchip (Architecture HARVARD) sont désignés par le synonyme PIC
(Programmable Interface Controler).

Architecture HARVARD : la mémoire de programme et la mémoire de données sont séparées.

3 .1 - Identification des microcontrôleurs de Microchip:


Un PIC est généralement identifié par une référence de la forme suivante :
xxXXyy- zz
 xx : famille du composant " 12, 14, 16, 17 ,18,32 ".
 XX : type de mémoire programme :
* C: EPROM ou EEPROM; * CR: PROM; * F: Flash.
 yy : Identificateur.
 zz : vitesse maximale du quartz de pilotage.
2/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

Exemple:

(14 Bits d' instructions)

3.2 - Brochage : exemple de PIC : 16F84 et 16F876


Ces microcontrôleurs sont commercialisés en boitier DIL (Dual in line) 18 broches.

Broche (pin) utilisation


RA0 à RA4 Lignes d’entrées/sorties du
port A
RB0 à RB7 Lignes d’entrées/sorties du
port B
Vdd Alimentation de 5V
VSS Masse de 0V

MCLR RESET du circuit


OSC1 et OSC2 Broches recevant le quartz
externe (horloge)

 Consommation : 2mA sous 5V à 4 MHz.


 Architecture RISC (Reduce Instructions Construction Set : composant à jeu
d’instructions réduit) : 35 instructions de durée 1 ou 2 cycles.
𝑭𝒐𝒔𝒄
 Durée d’un cycle d’instruction = quatre périodes d’horloge → Fcycle =
𝟒
3.3 Structure interne du PIC 16F84 :
Voici généralement ce que l'on trouve à l'intérieur d'un tel composant :

2007H

68 Octets
3/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

 Une mémoire programme de type flash de 1K (1024) mots de 14 bits ;


 Une mémoire RAM constituée :
 Des registres de contrôle et de configuration SFR (Special Function Register) ;
 68 octets de RAM utilisateur appelés aussi GPR (General Propose Register) ;
 Une mémoire EEPROM de donnée de 64 octets ;
 Deux ports d'entrée sortie, un de 8 bits et un de 5 bits ;
 Un timer/Compteur (TMR0) incrémenté par une horloge interne ou externe ;
 Un chien de garde / compteur qui est un timer particulier (WDT : Watch Dog Timer);
 Un pré-diviseur de fréquence programmable permettant d'étendre les possibilités du Timer
TMR0 et du chien de garde WDT ;
 4 sources d'interruption ;
 L'horloge peut être générée par 4 types d'oscillateurs sélectionnables ;
 Une unité arithmétique et logique (UAL) chargée de faire des calculs ;
 Un registre de travail noté W (8 bits) sur lequel travail l’UAL ;
 Des convertisseurs analogique / numérique pour le traitement des signaux analogiques
(exemple : PIC16F877). Le PIC 16F84 ne contient pas des convertisseurs.
3.4 - Déroulement d’un programme :
Le déroulement d’un programme s’effectue de façon très simple. A la mise sous tension ou suite à un
RESET, le processeur va chercher la première instruction qui se trouve à l’adresse 0000H de la
mémoire de programme, l’exécute puis va chercher la deuxième instruction à l’adresse 0001H et ainsi
de suite (sauf cas de saut ou d’appel de sous-programme). On parle de fonctionnement séquentiel.
De plus, lorsqu'il y a une interruption, le processeur va à l'adresse 0004H.

PC : est un compteur ordinal (13 bits) qui lors de la mise sous tension démarre à zéro puis s’incrémente
de 1 tous les quatre coups d’horloge (un cycle d'instruction).

La pile : sert à emmagasiner de manière temporaire l’adresse d’une instruction.


4/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

3.5 - Organisation de la mémoire RAM :


Elle est découpée en deux pages : Bank 0 (page 0) et Bank 1(page 1). L'accès à la Bank 0 se fait en
positionnant le bit 5 du registre STATUS (RP0) à 0. Pour l'accès à la Bank 1 on doit mettre ce bit à 1.
Les 12 premiers octets de chaque page sont réservés pour la zone SFR. Le reste est attribué à la zone
GPR pour de la RAM.

3.6 - Le ports d'E/S :


Pour communiquer avec l'extérieur le PIC 16F84 dispose de 2 ports bidirectionnels, ce qui signifie qu'ils
peuvent être configurés et utilisés comme des entrées ou des sorties.

 PORT A de 5 bits (de RA0 à RA4) :

 PORT B de 8 bits (de RB0 à RB7):


5/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

A ces deux registres, PORTA et PORTB correspondent également deux registres de direction :
TRISA et TRISB.

La configuration de direction pour chaque bit du port est déterminée avec le registre TRIS.
• Bit i de TRIS = 0 → bit i de PORT configuré en sortie.
• Bit i de TRIS = 1 → bit i de PORT configuré en entrée.
3.7- Quelques registres spéciaux de la RAM :
 STATUS ou registre d'état (adresse 03 et 83) :
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.

IRP et RP1 doivent être laissés à "0" pour avoir accès aux deux pages possibles du PIC 16F84 (de 00 à
7F et de 80 à FF).
TO (Time Out) : débordement du timer WDT.
PD (Power Down) : ce bit est mis à 0 par l'instruction SLEEP.
Z (Zero) : ce bit est mis à 1 quand un résultat arithmétique ou logique est nul.
DC (Digit Carry) : retenue sur un quartet (4 bits).
C (carry) : retenue sur un octet (8 bits).
 OPTION (adresse 81) :
Ce registre en lecture écriture permet de configurer les pré-diviseurs du Timer et du Watchdog, la
source du Timer, le front des interruptions et le choix du Pull ups (résistances de tirage) sur le Port
B.

RBPU (RB Pull Up) : Résistances de tirage à Vdd des entrées du port B.
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).
TOCS (TMR0 Clock Source) sélection du signal alimentant le timer0 :
0 pour horloge interne, 1 pour RA4/T0CLK.
TOSE (TMR0 Source Edge) sélection du front actif du signal timer0 :
0 pour front montant, 1 pour front descendant.
6/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

PSA = Prescaler Assignement bit.


1 = Le pré-diviseur est affecté au watchdog..
0 = Le pré-diviseur est affecté au Timer TMR0.

PS2 PS1 PS0 = Prescaler Rate Select bits

Quand le pré-diviseur est affecté au Watchdog


(PSA=1), TMR0 est pré-divisé par 1.

3.8 - Registre de configuration en adresse 2007H :


Dans la zone Programme à l'adresse 2007H, se trouve un mot de 14 bits qui permet de configurer les
particularités du PIC. On ne peut accéder à l'adresse 2007H qu'en phase de programmation. Ce mot
permet :
 De choisir le type de l'oscillateur pour l'horloge ;
 De valider ou non le WDTtimer ;
 D’interdire la lecture des mémoires EEPROM de programme et de données.

FOSC1 : FOSC0 Sélection du type d'oscillateur pour l'horloge :


11 : Oscillateur RC ;
10 : Oscillateur HS (High speed) : quartz haute fréquence jusqu'à 10 MHz ;
01 : Oscillateur XT, c'est le mode le plus utilisé, quartz jusqu'à 4 MHz ;
00 : Oscillateur LP (Low power), consommation réduite, jusqu'à 200 kHz.

WDTE validation du timerWDT (chien de garde) :


1 : WDT validé ;
0 : WDT inhibé.

PWRTE validation d'une temporisation à la mise sous tension :


1 : temporisation inhibée ;
0 : temporisation validée.

CP Protection en lecture du code programme :


1 : pas de protection ;
0 : protection activée
7/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

4 - Les instructions du PIC 16F84 :


Tous les PIC Mid-Range ont un jeu de 35 instructions. Chaque instruction est codée sur un mot de
14bits qui contient le code opération (OC) ainsi que l'opérande. A part les instructions de saut, toutes
les instructions sont exécutées en un cycle d’horloge (4 périodes d’horloge).

F représente un registre ; b représente un numéro de bit ; K représente une donnée aussi appelé littéral
8/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

II. Microcontrôleurs aspect logiciel :


1. Langages de programmation de PIC :
Les microcontrôleurs sont des composants programmables. Ils font ce que leur dit de faire le
programme et rien d'autre. Le programme est une suite d'instructions. Elles sont codées en binaire
(code machine) pour pouvoir être exécutées par le microcontrôleur.

Pour écrire un programme, il existe plusieurs solutions ( langages) mais chacune nécessite une forme
de traduction :
 Langage de programmation de haut niveau (C , BASIC , PASCAL…) : pour le traduire en
code machine il faut utiliser plusieurs programmes ( des compilateurs et des interpreteurs).

 Langage de programmation de bas niveau appelé aussi assembleur :c’est un langage proche du
code machine. Il est alors facile de le traduire mais il faut connaître l’architecture interne du
microcontrôleur.

 Langage de programmation graphique (FLOWCODE,ALGOPIC…) grâce auquel le


programme à implanter dans le PIC est directement représenté sous forme d'algorigramme.Pour
le traduire en code machine il faut utiliser des compilateurs.

2. Programmation en langage assembleur :


Avant la construction d’un programme, il est recommandé de réaliser un algorigramme qui représente le
cheminement du programme à écrire. Cela va faciliter la programmation.

2.1 Procédure à suivre pour programmer en assembleur :

Les étapes nécessaires permettant de voir un programme s'exécuter sur un PIC sont :
 Ecrire un programme en langage assembleur (avec le jeu d’instructions du PIC) dans un
fichier texte et le sauvegarder avec l'extension .asm (fichier source) en utilisant un éditeur texte ;
 Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le résultat est un
fichier exécutable avec l’extension. hex (code machine) ;
 Transférer le fichier .hex dans la mémoire programme du PIC (mémoire flash) à l'aide d'un
kit programmateur et son logiciel de transfert ;
 Mettre le PIC dans son montage final, mettre sous tension.

2.2 Les directives de MPASM les plus utilisées :


Les directives de l'assembleur sont des instructions qu'on ajoute dans le programme et qui seront
interprétées par l'assembleur MPASM. Ce ne sont pas des instructions destinées au PIC.

 LIST : permet de définir un certain nombre de paramètres comme le type de PIC utilisé….
Exemple : LIST p=16F84A,

 INCLUDE : permet d'insérer un fichier source. Par exemple le fichier p16f84A.inc qui contient la
définition d'un certain nombre de constante comme les noms des registres ainsi que les noms de
certains bits.
Exemple: # INCLUDE< p16f84A.inc>
INCLUDEp16f84A.inc
9/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

 __CONFIG : permet de définir les 14bits de configuration qui seront copié dans l'EEPROM de
configuration lors de l'implantation du programme dans le PIC (protection de code, type
d'oscillateur, chien de garde et temporisation du départ)
Exemple : __CONFIG B'11111111111001'
__CONFIG H'3FF9'

 EQU : permet de définir une constante ou une variable :

Exemple : XX EQU 0x20


Chaque fois que le compilateur rencontrera XX, il la remplacera par la constante 0x20.

 #DEFINE : définit un texte de substitution

Exemples : #DEFINE led1 PORTA,0 ;led1est remplacé par PORTA,0


#DEFINE Bp2 PORTA,3 ; Bp2est remplacé par PORTA,3

 ORG : permet de choisir l’adresse de début, dans laquelle sera logée la première instruction de
votre programme.

Exemple : ORG H'0000' ;


le programme commencera à l’adresse 0000H de la mémoire programme du PIC.

Si on utilise un sous-programme d’interruption, il faut éviter d’utiliser dans le programme principal


l’adresse 0004H. Dans ce cas il faut loger le programme principal à une autre adresse que 0000H. La
fonction GOTO permet de renvoyer vers une étiquette ou une adresse.

Exemple : ORG H'0000' ; initialisation du PIC


GOTO start ; va à l’étiquette start

La syntaxe ORG, peut être utilisée plusieurs fois, ce qui permet de loger des sous programmes à des
emplacements mémoire définie.
 ; : le compilateur ignore tout ce qui suit un point-virgule (; ).
Exemple : ; je peux écrire des commentaires après le point-virgule

 END : indique la fin du programme

2.3 Les étiquettes (Labels) : permettent de remplacer une adresse en format numérique.
Exemple : GOTO tempo
2.4 Format des nombres :
L'assembleur reconnaît les nombres en décimal, hexadécimal, binaire ou octal. Pour préciser la base il
faut utiliser les préfixes précisés dans le tableau ci-dessous :

Base Préfixe Exemple

Décimal D'nnn' D'39'


.nnn .39
Hexadécimal H'nn' H'2F'
0xnn 0x2F
Binaire B'….' B'01100101'
10/10 2 ème STE CHAINE D’INFORMATION : TRAITER AZNAG

EXERCICES : Programmation en assembleur d’un PIC


Exercice 1 :
1- Mettre 0 dans W
2- Charger la valeur 20H dans W
3- Charger la valeur de W à l’adresse 020H
4- Charger la valeur à l’adresse 020H dans W
5- Mettre à 1 le bit 5 de la valeur à l’adresse 003H
6- décrémenter la valeur à l’adresse 020H, et stoker le résultat à la même adresse
7- décrémenter la valeur à l’adresse 020H, et stoker le résultat dans W
8- décrémenter la valeur à l’adresse 020H, et stoker le résultat à l’adresse 021H
9 - Charger la valeur 20 dans W

Exercice 2:
1 - A quoi sert le programme suivant :
MOVLW B’00000001’
MOVWF TRISA

2 - Soit le programme suivant :


MOVLW 0x15
MOVWF 0x19
MOVLW 0x90
ADDWF 0x19, 0
MOVWF 0x20
A quoi sert-il ? Où est stocké le résultat final ? Que vaut-il ?

Exercice 3 : Configurer le PORTB en entrée. Lire le contenu du PORTB. Mettre le résultat dans la
case mémoire d’adresse 1CH.
Exercice 4 : Configurer le PORTB en sortie. Initialiser le PORTB à 4FH.

Exercice 5 : Configurer les broches RB0, RB3, RB6, RB7 du PORTB en entrée et les broches RB1, RB2,
RB4, RB5 du PORTB en sortie.

Exercice 6 : Configurer les broches RA0, RA1, RA2 du PORTA en entrée et les broches RA3, RA4
du PORTA en sortie.

Exercice 7 :
Écrire un programme qui additionne deux valeurs en RAM ("donnee1" et "donnee2") et met le résultat
dans une variable 8 bits "somme".

Exercice 8 :
Réaliser un programme qui vient chercher six fois des valeurs (8 bits) sur le PORTB et les additionne
dans une variable "Somme" (8 bits). On vous demande de gérer la somme sur 8 bits seulement sans
gérer la retenue.

Exercice 9 : Ecrire un programme qui permet d’allumer successivement une led rouge, orange puis
verte (l’allumage de la led suivante éteint la précédente, chaque led sera allumée pendant 0,5 s). Le
programme tournera indéfiniment.
Nota : Pour simplifier l’étude utiliser un algorigramme avant d’écrire le programme.

Vous aimerez peut-être aussi