Académique Documents
Professionnel Documents
Culture Documents
MICROCONTROLLEUR
1. Introduction :
1.1. Description :
Le PIC (Programmable Interface Controler) 16F84 est un
microcontrôleur 8 bits de faible coût, produit par la société MicroChip.
C’est un composant électronique qui regroupe dans un même boîtier
tous les éléments vitaux d’un système programmé : CPU, RAM, ROM,
Interfaces d’entrées/sorties.
De plus, avec son jeu d'instructions réduit, il est très agréable à utiliser
lorsqu'on désire s'initier à l'étude d'un microcontrôleur.
1.2. Caractéristiques :
• 1K de mémoire programme ; • 1 Timer/Compteur ;
• 68 octets de RAM ; • 1 Chien de garde ;
• 64 octets D'EEPROM ; • MODE SLEEP (faible consommation) ;
• 13 entrée/sortie réparties en 2 ports ; • 4 Sources d’oscillateur sélectionnable ;
• PORTA et PORTB ; • Protection du code ;
• 4 sources d’interruption ; • 35 instructions seulement.
2. Structure externe du PIC 16F84 :
2.1. Brochage :
• VDD, VSS : Broches
RA2 1 18 RA1 d’alimentation (3 à 5.5 v) ;
RA3 2 17 RA0 • OSC1, OSC2 : Signaux d’horloge ;
1 6 F 8 4
Q Cext
OSC2 OSC2 FOSC/4 OSC2
NC
C2
Horloge interne à Horloge interne à Horloge externe
quartz
Prof:said TARIK circuit
2eme STERC IBN_SINA_Kenitra
prof:S.TARIK 2°STE L.Q.I.S_Kenitra
TRAITER 3
RESET
(Reset manuelle) ; C
FSR
RA4/T0CKI
STATUS
Literal Addr 8
1. Introduction
Les μC PIC 16Fxxx possèdent un jeu de 35 instructions. Chaque instruction est codée sur
un mot de 14 bits qui contient le code opération ainsi que l'opérande. A part les instructions de
saut, toutes les instructions sont exécutées en un cycle d'horloge. Sachant que l’horloge fournie
au μC est prédivisée par 4, si on utilise par exemple un quartz de 4 MHz, on obtient donc
1000000 cycles/seconde, cela nous donne une puissance de l’ordre de 1 MIPS (1 Million
d’Instructions Par Seconde).
2. Structure simplifiée du PIC 16F877 :
13
P.C
0000H 13 000H
FLASH ROM 9 RAM
PROGRAM 9 File Register
MEMORY 8 level stack 9 FSR + GPR
8K x 14 bits (13 bits) 512 x 8 bits
1FFFH 1FFH
14 8 7 Direct
8 Indirect
R.I F.S.R
Litteral 8 8
6 IR
1 P
RP1
8 RP0
D.I 8
TO
STATUS
W 3
PD
A.L.U Z
DC
8
C
0 1 8
d
3. Le registre STATUS :
7 6 5 4 3 2 1 0
0FFH 1FFH
Page 0 Page 1
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 9
6. Le jeu d’instruction :
Le PIC16F84 a un jeu d’instructions relativement limité mais possède une architecture
interne (RISC) qui permet une programmation efficace et rapide (toutes les instructions,
exceptées les sauts, s'exécute en un cycle d'horloge).
6.1. Instructions opérant sur les registres :
Ce sont des instructions qui manipulent les registres (RAM). Elles sont codées de la manière
suivante :
Adresse du fichier sur 7 bits,
Code opérations à compléter par les bits RP0
sur 6 bits et RP1 du registre STATUS
13 12 11 10 9 8 7 6 5 4 3 2 1 0
c c c c c c d f f f f f f f
13 12 11 10 9 8 7 6 5 4 3 2 1 0
c c c c b b b f f f f f f f
1. Introduction :
Pour communiquer avec l'extérieur le PIC 16F84 dispose de 2 ports : PORTA et PORTB.
Les ports sont bidirectionnels, ce qui signifie qu'ils peuvent être configurés et utilisés comme
des entrées ou des sorties.
Le microcontrôleur reçoit les informations sur un port d'entrée :
informations logiques issues de capteurs sur un ou plusieurs bits d'un port d'entrée,
informations numériques codées sur 8 bits sur un port entier.
informations analogiques variables dans le temps, si le PIC est doté d'un
convertisseur analogique / numérique.
Le microcontrôleur traite ces données et les utilisent pour commander des circuits qui
sont connectés sur un port de sortie.
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB (Bank 0)
TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 TRISB (Bank 1)
PIC 16 F 84
TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 TRISA (Bank 1)
PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 PORTA (Bank 0)
Exemple 4 :
Configurer les broches : • RB0, RB1, RB6, RB7 en entrée et RB2, RB3, RB4, RB5 en sortie ;
• RA2, RA3, RA4 en entrée et RA0, RA1 en sortie ;
5v
P1 allume toutes les LEDs ;
• Une action sur le bouton poussoir
P1 P0 éteint toutes les LEDs.
RA1 Travail Demandé :
Faire un programme qui permet
RB7
d’avoir le fonctionnement décrit ci-
LED7 dessus.
………….………………….
Début
………….………………….
………….………………….
………………………… PORTB en sortie
RA0, RA1 en entrée ………….………………….
………….………………….
………………………… Eteindre
les LEDs
………….………………….
LAB1 ………….………………….
Dans ce cas, on utilise l’instruction NOP qui veut dire ‘ne rien faire’. Ainsi, le
microcontrôleur perd un cycle machine à ne rien faire.
L’horloge du microcontrôleur le PIC16F84, est associée à un quartz externe, elle génère
le signal qui cadence l'exécution des instructions. Chaque instruction du programme est traitée
en un cycle machine (une période de l'horloge avec une division interne par 4), exceptées les
sauts qui s'exécutent en deux cycles d'horloge.
Par exemple, si la fréquence du quartz est de 4 Mhz,
F = 4 Mhz F / 4 = 1 Mhz Un Cycle = 4 / F Un Cycle = 1 µs
Donc le temps d’exécution d’une instruction NOP est de 1 µs.
2- Temporisation moyenne :
2.1- Principe :
2.2- Organigramme:
Tempo 2
Tempo 1
(0C)H V
(0C)H V
(0C)H (0C)H - 1
(0C)H (0C)H - 1
Pas d’opération
Non
(0C)H = 00 H Non
(0C)H = 00 H
Retour
Retour
2.3- Programme:
La boucle se répète v fois, donc les instructions DECFSZ et GOTO pour le sous programme
n°1 (NOP, DECFSZ et GOTO pour le sous programme n°2) sont répétées, aussi v fois.
Tempo 1 = …..………………………………………………………….
Tempo 2 = …..………………………………………………………….
Si la fréquence du quartz est égale à 4 Mhz : Un Cycle = ……….………………….
La temporisation est maximale, pour VMAX
Tempo 1MAX = …..………………………………………………………….
Tempo 2MAX = …..………………………………………………………….
3- Temporisation grande :
3.1- Principe :
Tempo
Nb de
Sous programme Tempo
(0C)H n Cycle
Tempo …………………….. 1
…………………….. 1
(0D)H m
Lab1 …………………….. 1
…………………….. 1
(0D)H (0D)H - 1 Lab2 …………………….. 1(2)
…………………….. 2
Non ………………...….. 1(2)
(0D)H = 00 H …………………….. 2
…………………..... 2
(0C)H (0C)H - 1
Non
(0C)H = 00 H
Retour
Tempo = ………………………….……………………………….
Tempo = ………………………….……………………………….
Si la fréquence du quartz est égale à 4 Mhz : Un Cycle = …………………………
La temporisation est maximale, pour nMAX et mMAX
Tempo MAX = ………………………….……………………………….
Tempo MAX = ………………………….……………………………….
Tempo MAX = ………………………….……………………………….
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
prof: S.TARIK 2°STE
TRAITER 16
Organigramme
Nb de
Sous programme Tempo
Cycle
Tempo
Tempo MOVLW n 1
MOVWF 0x0C 1
(0C)H n Lab1…….…………………………. ………
……..…………………………. ………
(0D)H m ……..…………………………. ………
……..…………………………. ………
……..…………………………. ………
(0E)H p
……..…………………………. ………
……..…………………………. ………
……………………. ……..…………………………. ………
……..…………………………. ………
……..…………………………. ………
……………
……..…………………………. ………
Calcul de la Temporisation :
…………………….
Si la fréquence du quartz est égale à 4 Mhz :
Un Cycle = …………………………...
…………… Tempo = …………………………………….
………………………………………………
Tempo = …………………………………….
……………………. Tempo = …………………………………….
Tempo = …………………………………….
Tempo = …………………………………….
…………… La temporisation est maximale, pour nMAX ,
mMAX et pMAX
Tempo MAX ………………………………….
………………………………………………
Retour
Tempo MAX =………………………………….
Tempo = 4 + 5. n + 5. m. n + 3. p. m. n cycles
Tempo = ……………………………………………………….
Tempo = ………………………………………………………..
Tempo = ………………………..…. Tempo ≈ ………………
4.2- Faire un programme qui permet d’allumer et d’éteindre les LEDs connectées
au PORTB.
L7 L6 L5 L4 L3 L2 L1 L0 Organigramme :
Début
Configuration du PIC
Programme :
………………………………; Accès Bank1 …………………….
………………………………; PORTB en Sortie
………………………………; Accès Bank0
Lab ……………………………… TEMPO
………………………………; LEDS allumées
………………………………; appel SP tempo
…………………….
………………………………
………………………………; LEDS eteintes
………………………………; appel SP tempo …………………….
………………………………
4.3- Faire un programme qui permet d’allumer et d’éteindre les LEDs connectées
au PORTB 4 par 4.
L7 L6 L5 L4 L3 L2 L1 L0 Organigramme :
Début
Configuration du PIC
Programme :
………………………………; Accès Bank1 …………………….
………………………………; PORTB en Sortie
………………………………; Accès Bank0
Lab ……………………………… …………………….
………………………………;
………………………………; appel SP tempo
…………………….
………………………………
………………………………;
………………………………; appel SP tempo …………………….
………………………………
4.4- Faire un programme qui permet d’allumer et d’éteindre les LEDs connectées
au PORTB 2 par 2.
L7 L6 L5 L4 L3 L2 L1 L0 Organigramme :
Début
…………………….
…………………….
Programme :
………………………………; Accès Bank1
…………………….
………………………………; PORTB en Sortie
………………………………; Accès Bank0
Lab ……………………………… …………………….
………………………………
………………………………; appel SP tempo …………………….
………………………………
……………………………… …………………….
………………………………; appel SP tempo
……………………………… …………………….
………………………………
………………………………; appel SP tempo
……………………………… …………………….
………………………………
………………………………; appel SP tempo …………………….
GOTO Lab
4.5- Faire un programme qui permet d’allumer et d’éteindre les LEDs connectées
au PORTB 1 par 1.
L7 L6 L5 L4 L3 L2 L1 L0
Organigramme :
Début
…………………….
…………………….
Programme :
………………………………; Accès Bank1
………………………………; PORTB en Sortie …………………….
………………………………; Accès Bank0
Lab 1 ………………………………
…………………….…
………………………………
………………….
Lab 2 ………………………………; appel SP tempo
………………………………
……………………………… ………………
……………………………… …….
………………………………
Prof:said TARIK
prof: S.TARIK 2eme STE IBN_SINA_Kenitra
2°STE L.Q.I.S
TRAITER 19
1. Présentation :
Le PIC 16F84 dispose d’un TIMER, c’est un module programmable dont les fonctions
principales sont :
• La génération de signaux périodiques (astable) ;
• La génération d'impulsions (monostable) ;
• Le comptage d'évènements (compteur) ;
• La génération de signaux PWM (modulation de largeur d'impulsions pour les Mcc).
2. Les registres du TIMER0 :
• Le registre TMR0 :
Ce registre de 8 bits s'incrémente de "1" a chaque impulsion de l'horloge interne
(Fosc/4) ou par une horloge externe appliquée sur la broche TOCKI/ RA4. Il est associé au
module TIMER/Compteur. Ce registre se trouve à l’adresse 01H.
• Le registre OPTION :
Ce registre contiens les bits de contrôles du PRESCALER, de l'interruption externe INT,
de la sélection TIMER/Compteur et du "tirage au plus" du PORTB. Ce registre se trouve à
l’adresse 81H.
3. Fonctionnement :
3.1. Schéma simplifié :
0
Fosc/4 Data Bus
1 8
Sync with
T0CKI Programable internal TMR0
1
pin Prescaler clocks
0
2 cycles delay
T0SE
T0CS Set interrupt
PSA flag bit T0IF
PS2 PS1 PS0 on overflow
3.2. Structure du registre OPTION :
7 6 5 4 3 2 1 0
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
Il s’agit d’un convertisseur A/N 10 bits à 8 entrées. Les 5 premiers sont sur le PORTA en
RA0, RA1, RA2, RA3 et RA5. Les 3 entrées supplémentaires sont sur le PORTE en RE0, RE1, RE2.Les
tensions de références haute et basse peuvent être choisies par programmation comme suit :
Vref+ peut être VDD ou la broche RA3.
Vref- peut être VSS ou la broche RA2.
2- ORGANISATION INTERNE :
111
RE2 / AN7
110
RE1 / AN6
Vin 101
RE0 / AN5
Tension à convertir 100
A/D RA5 / AN4
011
Converter RA3 / AN3 / Vref+
010
RA2 / AN2 / Vref-
001
RA1 / AN1
VDD 000
RA0 / AN0
Vref+
Vref-
VSS
Prof:said TARIK
prof:S.TARIK 2eme STE
2°STE IBN_SINA_Kenitra
L.Q.I.S_Kenitra
TRAITER 22
3- Le Registre ADCON1 :
7 21 0 7 0 7 0 7 6 5 0
00000000 00000000
5- Exemple d’utilisation :
Configuration :
Programme en assembleur :
…………………………..
………………………….. ; Valeur binaire 1 0 0 0 0 0 0 1
; Conversion du canal RA3
; Sélection du canal 3 avec les bits CHS2, CHS1 et CHS0 : 0 1 1
; GO/DONE = 1 Lancement d’une conversion
…………………………..
…………………………..
…………………………..
………………………….. ; Déclenchement de la conversion
ATT ………………………….. ; attendre la fin de conversion
…………………………..
; Fin de conversion, lecture du résultat
………………………….. ; Partie haute
…………………………..
………………………….. ; Passage en page 1
………………………….. ; Partie basse
………………………….. ; Passage en page 0
…………………………..
LES INTERRUPTIONS
I/ INTRODUCTION
L’interruption est un mécanisme fondamental dans le fonctionnement des microcontrôleurs, elle permet de
prendre en compte des évènements extérieurs et de leurs associer un traitement spécifique.
Le microcontrôleur finit l’exécution de l’instruction en cour, puis il se branche vers le sous programme
d’interruption appelé aussi routine d’interruption.
Quand le sous-programme d’interruption est terminé (indiqué par l’instruction RETFIE :RETurn From Interrupt
Enable ), le microcontrôleur retourne au programme principal à l’endroit où il l’avait quitté.
AND
OR
INTEDG : ( Interrupt Edg ) : front d’interruption : 1 pour front montant, 0 pour front descendant
BSF OPTION_REG,INTEDG
MOVLW B’10010000’
MOVWF INTCON
MOVLW B’10001000’
MOVWF INTCON
MOVLW B’10100000’
MOVWF INTCON
BCF EECON1,EEIF
MOVLW B’11000000’’
MOVWF INTCON
- R1 = 10 K . - R2 = 10 K . - R3 = 220 . - X1 = 4 MHZ . - C1 = 15 n . - C2 = 15 n .
AFFICHEUR
&
DECODEUR BCD
C2
X1
C1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
RAZ
3
RA4/T0CKI
6
RB0/INT
7
U1 RB1
8
RB2
9
RB3
R1 RB4
10
PIC16F84A 11
RB5
12 R2
RB6
13
RB7
LED R3
PB
ORGANIGRAMME DE L’INTERRUPTION
Sauvegarde de W et STATUS
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP
SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
Conclusion :…………………………………………………………………………………………………………………………………………………….
début début
LIST p=16F84
#include "P16F84.INC"
H1 EQU 0X30
H2 EQU 0X31
H3 EQU 0X32
N EQU 0X36
DEBUT
ORG 0
GOTO CON_R
ORG 0X04
;+++++++++++++++++++SAUVEGARDE ++++++++++++++++++++++++++++++++++++++++
SAUVEGARDE
;+++++++++++++++++ N = N + 1 ++++++++++++++++++++++++++++++++++++++++
INCF N
MOVF N , 0
MOVWF PORTA
RESTAURER
SWAPF STATUS_TEMP , W
MOVWF STATUS
SWAPF W_TEMP , F
SWAPF W_TEMP , W
BCF INTCON , 1
CON_R
MOVLW H'01'
MOVWF TRISB
MOVLW H'00'
MOVWF TRISA
MOVLW H'C0'
MOVWF OPTION_REG
MOVLW H'90'
MOVWF INTCON
BCF STATUS , RP0 .
MOVLW B'00000000'
MOVWF PORTA
BSF STATUS , C
F_NORM
MOVLW H'80'
MOVWF PORTB
CALL TEMPO
MOVLW H'00'
MOVWF PORTB
CALL TEMPO
GOTO F_NORM
TEMPO
MOVLW H'01'
MOVWF H3
S31 MOVLW H'0F'
MOVWF H2
S21 MOVLW H'FF'
MOVWF H1
S11 DECFSZ H1
GOTO S11
DECFSZ H2
GOTO S21
DECFSZ H3
GOTO S31
RETURN
END