Académique Documents
Professionnel Documents
Culture Documents
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 :
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 :
1
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 :
2
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.
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.
3
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.
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.
5
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.
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.
6
7
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..
Exemple :
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.
Application 1 :
Objectif
8
Organigramme Programme en assembleur
b) Gestion de la temporisation :
…………………………………………………
La valeur max que l’on peut donner à N1 est 255, ce qui donne une
10
Temporisation avec TMR0 :
Le module TMR0 (Timer 0) possède deux modes de fonctionnement :
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 :
11
Calculer alors la valeur N (hexadécimal) à charger dans le compteur C pour avoir T= 8s
.………….….………….….………….….………….….………….….………….….………….….………….….
………….….………….….…………..………….….………….….……….….………….….………….….……
…….….….................................................................................................................................................................
....................................................................................................................……….…….………….………………
Application 1 :
Objectif :
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:
Tous ces bits sont dans le registre INTCON à part le drapeau EEIF de l'interruption EEPROM qui
se trouve dans le registre EECON1.
5- Sauvegarde du contexte.
8- Restauration du contexte
13
Application 1 :
Objectif :
** Organigramme :
** programme en assembleur :
14
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.
15
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.
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.
16
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.
17
Quelques registres de configuration et leurs bits :
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 INTCON (adresse : 0Bh ; 8Bh ; 10Bh ; 18Bh) : ( même que le pic 16F84)
18
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.
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é.
20
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 :
21
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 :
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
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 :
22
** 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 :
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 :
23
** 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)
24
e) Les interruptions:
Le microcontrôleur dispose de plusieurs sources d'interruptions :
25