Vous êtes sur la page 1sur 32

TRAITER 1

MICROCONTROLLEUR

Prof : Said TARIK 2eme STE_Kenitra

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 2
LE MICROCONTROLEUR PIC

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

RA4/T0CKI 3 16 OSC1/CLKIN • CLKINT : horloge externe ;


MCLR 4 15 OSC2/CLKOUT • MCLR : Reset ou Master Clear;
VSS 5 14 VDD • T0CKI : entrée d’horloge externe
RB0/INT 6 13 RB7 du Timer 0 ;
RB1 7 12 RB6 • INT : entrée d’interruption
RB2 RB5 externe ;
8 11
RB3 9 10 RB4 • RA0...RA4 : 5 E/S du PORTA ;
• RB0...RB7 : 8 E/S du PORTB.
2.2. Les signaux d’horloge :
Le fonctionnement du μC 16F84 nécessite une horloge qui rythme l’exécution des
instructions du programme.
On distingue trois modes d’horloge :
• Horloge interne à quartz : Avec l’oscillateur à quartz, on peut avoir des fréquences
allant de 4 MHz jusqu’à 20 MHz selon le type du μC.
• Horloge interne à circuit RC : Avec un oscillateur à circuit RC, la fréquence de
l’oscillation dépend de la tension VDD et des éléments Rext et Cext.
• Horloge externe : Application d’un signal horloge externe.
VDD
Quartz de
5kΩ≤ Rext ≤100KΩ
μC 4MHz à 20MHz μC Cext ≥ 20pF μC
16F84 16F84 Rext
C1 16F84
OSC1 OSC1 OSC1

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

2.3. Source de Reset : VDD


VDD
Le Reset du μC 16F84 peut avoir
plusieurs causes : R R μC
μC
• Une mise sous tension POR (Power 16F84 16F84
On Reset) ; MCLR
MCLR
• Une mise à 0 de la broche MCLR

RESET
(Reset manuelle) ; C

• Un débordement du timer du chien


de garde WDT.
Power On Reset Reset manuelle
3. Structure interne du PIC 16F84 :
3.1. Horloge système :
L’horloge système ou horloge instruction, est la base du temps interne qui cadence le
fonctionnement du μC. Elle s’obtient en divisant la fréquence de l’oscillateur par 4.
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.
3.2. Description :
13 Data Bus 8
64 PROGRAM
FLASH ROM EEPROM Data memory
x8 COUNTER
PROGRAM
MEMORY bit
1K x 14 bits s EEPROM
EEDATA Data memory
RAM
8 level stack 64 x 8 bits
14 File
Program
Bus 64 (13 bits) Registers
36 x 8 bits
x8
Instruction bit
Register
RAM ADDR
7(9) EEADR
s
ADDR MUX
Indirect
Direct Addr 5(7) TMR0
7(8) ADDR

FSR

RA4/T0CKI
STATUS
Literal Addr 8

MUX I/O Ports


Power-Up
Instruction TIMER
Decode &
control Oscillator
Start-Up TIMER RA3/RA0
A.L.U
Power_On
RESET
Timming RB7/RB1
Watch Dog
Generation
TIMER
W
RB0/INT

OSC2/CLKOUTO VDD, VSS


MCLR
SC1/CLKIN
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 4

3.3. Les Mémoires :

00H INDF INDF 80H EEPROM de données du 16F84


01H TMR0 OPTION 81H
EEPROM
02H PCL PCL 82H
EEDATA Data memory
03H STATUS STATUS 83H 64 x 8 bits
04H FSR FSR 84H
05H PORTA TRISA 85H
06H PORTB TRISB 86H
07H 87H EEADR
08H EEDATA EECON1 88H
09H EEADR EECON2 89H PC <12 :0>
0AH PCLATH PCLATH 8AH
0BH INTCON INTCON 8BH
0CH 8CH Stack Level 1
.
36 .
General Mapped .
Stack Level 8
Pourpose (accesses)
Regisers In Bank 0
Reset Vector 0000H
(SRAM) U
S
2FH AFH E
R Peripheral Interrupt Vector 0004H
30H B0H
M
E
M
O
R
Y 03FFH
0400H
7FH FFH
ADDR BANK 0 BANK 1 ADDR
FILE FILE
1FFFH
RAM du 16F84
EEPROM programme du 16F84
3.3.1 EEPROM de Programme :
Cette mémoire de 1K stock le programme. L’emplacement de celui-ci peut être à
n'importe quel endroit de la mémoire. Suite à un RESET ou lorsqu'on l'alimente, le PIC16F84
commence toujours à l'adresse 0000H (Vecteur RESET).
De plus, lorsqu'il y a une interruption, et si celle-ci est validée, le microcontrôleur va à
l'adresse 0004H (Vecteur d'interruption).
3.3.2 RAM de données :
Cette mémoire de 68 octets est divisée en deux parties. Une partie appelée SFR, l’autre
le GPR, qui sont encore divisée en deux pages (Bank 0 et Bank 1). Toutes les données de la
mémoire sont appelées registres y compris les données utilisateurs.
• Le SFR (Special Function Registers):
Le SFR est l’ensemble des registres qui permet de configurer tous les modules internes
du PIC16F84 (les PORTS, le TIMER, la gestion des interruptions, etc....).
• Le GPR (General Purpose Register):
Le GPR est l’ensemble des registres à usage général, utilisé par le programmeur pour
stocker les variables et les données.
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 5

3.3.3 EEPROM de données :


Une EEPROM de 64 octets est disponible pour y stocker les données semi permanentes.
Pour accéder à cette mémoire, on utilise les registres EEADR, EEDATA. 2 registres de contrôle
sont associés à cette mémoire EECON1 et EECON2.
3.3.4 La pile :
Un groupe de 8 registres de 13 bits, son rôle est de sauvegarder temporairement le
contenu du PC lors de l’appel d’un sous programme ou du service d’une interruption. La pile
n’est pas dans le fichier des registres, donc elle n’est pas manipulable par le programmeur.
3.4. Registre de configuration :
Pendant la phase de la programmation du μC, on programme aussi un registre de
configuration logé dans la mémoire EEPROM. Ce registre est un mot de 14 bits qui permet de :
• Choisir le type de l'oscillateur pour l'horloge ;
• Valider ou non le timer du watchdog WDT ;
• Autoriser ou non une temporisation à la mise sous tension ;
• Interdire ou non la lecture des mémoires de programme et de données.
13 12 11 10 9 8 7 6 5 4 3 2 1 0

CP CP CP CP CP CP DP CP CP CP PWRTE WTDE FOSC1 FOSC0

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


• FOSC1FOSC0 = 11 : Oscillateur à circuit RC jusqu'à 4 MHz ;
• FOSC1FOSC0 = 10 : Oscillateur HS, quartz haute fréquence, jusqu'à 20 MHz ;
• FOSC1FOSC0 = 01 : Oscillateur XT, quartz standard jusqu'à 4 MHz ;
• FOSC1FOSC0 = 00 : Oscillateur LP, quartz basse fréquence, jusqu'à 200 KHz.
• Bit WDTE : Validation du timer du watchdog WDT
• WDTE = 1 : Timer du watchdog validé ;
• WDTE = 0 : Timer du watchdog validé inhibé.
• Bit PWRTE : Validation d'une temporisation à la mise sous tension
Le μC possède un timer permettant de retarder de 72 ms le lancement du programme
après la mise sous tension. Ce délai maintient le μC à l’arrêt et permet ainsi à la tension
d'alimentation de bien se stabiliser.
• PWRTE = 1 : le μC démarre tout de suite ;
• PWRTE = 0 : le μC attend 72 ms.
• Bits CP : Protection en lecture de la mémoire programme
• CP = 1 : pas de protection du code programme ;
• CP = 0 : protection du code programme activée.
• Bits DP : Protection en lecture de la mémoire des données
• DP = 1 : pas de protection des données mémoire ;
• DP = 0 : protection des données mémoire activée.
3.5. ALU et le registre W :
Le registre W, qui n’a pas d’adresse, est un registre de travail de 8 bits.
L’ALU est une unité arithmétique et logique de 8 bits qui réalise les opérations entre W et
n'importe quel autre registre f ou constante k. Le résultat de l'opération peut être placé soit
dans W soit dans f.
L’ALU est associée au registre d’état STATUS par les bits Z, C et DC :
7 6 5 4 3 2 1 0

IRP RP1 RP0 /TO /PD Z DC C

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 6

3.6. Registres spéciaux :


Ces registres spéciaux font partie du SFR (Special Function Registers) et configurent le µC.
Certains registres initialisent les périphériques alors que d'autres sont utilisés par le CPU.
• Les registres utilisés par le CPU :
INDF, FSR, STATUS, INTCON et PC : PCLATH-PCL.
• Les registres utilisés par le PORTA :
TRISA et PORTA.
• Les registres utilisés par le PORTB :
TRISB et PORTB.
• Les registres utilisés par le TIMER :
TMR0 et OPTION.
•Les registres utilisés par l’EEPROM :
EEDATA, EEADR, EECON1 et EECON2.
4. Les ports A et B :
4.1. Particularités du port A :
• Le port A désigné par PORTA est un port bidirectionnel de 5 bits (RA0 à RA4) ;
• La configuration de direction du port A est déterminée avec le registre TRISA ;
• Les broches RA0 à RA3 sont des entrées/sorties compatibles TTL ;
• La broche RA4 est multiplexée avec l'entrée d'horloge du registre TMRO ;
• La broche RA4 est une sortie à drain ouvert, il ne faut pas oublier de mettre une
résistance externe vers VDD.
• Chaque broche du port A configurée en sortie peut fournir un courant de 20 mA au
maximum, mais tout le port A configuré en sortie ne peut pas débiter un courant total
supérieur à 50 mA.
• Chaque broche du port A configurée en entrée peut accepter un courant de 25 mA au
maximum, mais tout le port A configuré en entrée ne peut pas accepter un courant total
supérieur à 80 mA.
4.2. Particularités du port B :
• Le port B désigné par PORTB est un port bidirectionnel de 8 bits (RB0 à RB7) ;
• La configuration de direction du port B est déterminée avec le registre TRISB ;
• Toutes les broches sont des entrées/sorties compatibles TTL ;
• Les entrées du port B bénéficient d'un "tirage au plus" interne - connectées à des
résistances de rappel à VDD - ;
• La broche RB0 est multiplexée avec l'interruption INT ;
• Les broches RB4 à RB7, à condition qu'elles soient configurées en ENTREE, peuvent
générer une interruption lorsqu'elles changent d'états ;
• Chaque broche du port B configurée en sortie peut fournir un courant de 20 mA au
maximum, mais tout le port B configuré en sortie ne peut pas débiter un courant total
supérieur à 100 mA ;
• Chaque broche du port B configurée en entrée peut accepter un courant de 25 mA au
maximum, mais tout le port B configuré en entrée ne peut pas accepter un courant total
supérieur à 150 mA.

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 7

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

IRP RP1 RP0 /TO /PD Z DC C

C’est le registre d’état, il contient :


• 5 bits, témoins (drapeaux) caractérisant le résultat de l’opération réalisée par la CPU
(à lecture seule) :
 /TO : (Time Out) débordement du timer WDT ;
 /PD : (Power Down) caractérise l’activité du chien de garde WDT ;
RESET Etat /TO /PD PC
Mise sous tension 1 1 0000
Normal NA NA 0000
0 sur broche MCLR
Sleep NA 0 0000
Normal 0 1 0000
Chien de garde
Sleep 0 0 PC + 1
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 8

 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).
• 2 bits - RP1 et RP0 - de sélection de banc (Ecriture/lecture) ;
• 1 bit - IRP - de sélection de page (Ecriture/lecture).
4. Les modes d’adressages :
 Mode littéral : Dans ce mode d’adressage, la donnée est intégrée avec le code de
l’opération.
MOVLW 0x55 ; charger la valeur 0x55 dans le registre W
 Mode direct : Les 7 premiers bits de l’adresse du fichier, sont intégrés avec le code de
l’opération. Les 2 bits RP0, RP1 du registre STATUS sont utilisés pour compléter l’adresse
sur 9 bits.
MOVF 0x55, W ; charger le contenu de l’adresse 0x55 dans W
 Mode indirect : L’adresse du fichier est formée par le contenu du FSR et le bit IRP du
registre STATUS.
MOVF INDF, W ; charger le contenu de la case mémoire pointée par le FSR.
5. Plan mémoire :
5.1. Plan mémoire en mode direct :
STATUS From opcode
RP1 RP0 6 5 4 3 2 1 0

Bank select Location select


00 01 10 11
000H 080H 100H 180H

07FH 0FFH 17FH 1FFH


Bank 0 Bank 1 Bank 2 Bank 3

5.2. Plan mémoire en mode indirect :


STATUS FSR register
IRP 7 6 5 4 3 2 1 0

Page select Location select


0 1
000H 100H

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

1 bit (d) pour indiquer si le résultat obtenu


doit être conservé dans le registre de travail W
(d = 0) ou sauvé dans le fichier f (d = 1).

Instructions opérant sur les registres indicateurs cycles Code opération


ANDWF F, d ET entre W et le fichier f  (W ou f ? d) Z 1 00.0101.dfff.ffff
IORWF F, d Ou inclusif entre W et f  (W ou f ? d) Z 1 00.0100.dfff.ffff
XORWF F, d Ou exclusif entre W et f  (W ou f ? d) Z 1 00.0110.dfff.ffff
COMF F, d Complément à 1 de f  (W ou f ? d) Z 1 00.1001.dfff.ffff
SWAPF F, d Permute les deux quartets de f  (W ou f ? d) 1 00.1110.dfff.ffff
ADDWF F, d Ajouter W au fichier f  (W ou f ? d) C, DC, Z 1 00.0111.dfff.ffff
SUBWF F, d Soustraire W du fichier f  (W ou f ? d) C, DC, Z 1 00.0010.dfff.ffff
DECF F, d Décrémenter le fichier f  (W ou f ? d) Z 1 00.0011.dfff.ffff
DECFSZ F, d Décrémenter f  (W ou f ? d), sauter si 0 1(2) 00.1011.dfff.ffff
INCF F, d Incrémenter le fichier f  (W ou f ? d) Z 1 00.1010.dfff.ffff
INCFSZ F, d Incrémenter f  (W ou f ? d), sauter si 0 1(2) 00.1111.dfff.ffff
RLF F, d Rotation à gauche de f à travers C  (W ou f ? d) C 1 00.1101.dfff.ffff
RRF F, d Rotation à droite de f à travers C  (W ou f ? d) C 1 00.1100.dfff.ffff
CLRF F Effacer le fichier f Z 1 00.0001.1fff.ffff
CLRW Effacer le registre de travail W Z 1 00.0001.0xxx.xxxx
MOVF F, d Charge f dans W si d= 0, si non réécrit f dans f Z 1 00.1000.dfff.ffff
MOVWF F Stocker W dans le fichier f 1 00.0000.1fff.ffff

6.2. Instructions opérant sur les constantes :


Ce sont des instructions qui manipulent des données qui sont codées dans l’instruction
directement. Elles sont codées de la manière suivante :
13 12 11 10 9 8 7 6 5 4 3 2 1 0
c c c c c c k k k k k k k k

Code opérations Valeur immédiate codée sur 8 bits


sur 6 bits (donc de 0 à 255)

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 10

Instructions opérant sur les constantes indicateurs cycles Code opération


ADDLW k Ajouter la constante k à W : W  W + K C, DC, Z 1 11.111x.kkkk.kkkk
SUBLW k Soustraire W de la constante k : W  K - W C, DC, Z 1 11.110x.kkkk.kkkk
ANDLW k ET entre la constante k et W : W  K et W Z 1 11.1001.kkkk.kkkk
IORLW k Ou inclusif entre k et W : W  K ou W Z 1 11.1000.kkkk.kkkk
XORLW k Ou exclusif entre k et W : W  K ou ex W Z 1 11.1010.kkkk.kkkk
MOVLW k Charger la constante k dans W : W  K 1 11.00xx.kkkk.kkkk
RETLW k Retour d’un sous programme avec k dans W 2 11.01xx.kkkk.kkkk

6.3. Instructions opérant sur les bits d’un fichier :


Ce sont des instructions destinées à manipuler directement les bits d’un registre d'une case
mémoire. 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 b b b f f f f f f f

3 bits pour indiquer le numéro


du bit à manipuler (de 0 à 7)
Instructions opérant sur les bits d’un fichier indicateurs cycles Code opération
BCF F, b Mettre à zéro le bit numéro b du registre f 1 01.00bb.bfff.fff
BSF F, b Mettre à un le bit numéro b du registre f 1 01.01bb.bfff.fff
BTFSC F, b Tester le bit b de f, sauter une instruction si 0 1(2) 01.10bb.bfff.fff
BTFSS F, b Tester le bit b de f, sauter une instruction si 1 1(2) 01.11bb.bfff.fff

6.4. Instructions de saut/appel et instructions générales :


Les instructions de saut/appel provoquent une rupture dans la séquence de déroulement du
programme. Elles sont codées de la manière suivante :
13 12 11 10 9 8 7 6 5 4 3 2 1 0
c c c L L L L L L L L L L L

Code Destination codée sur 11 bits (limite d’adressage


opérations sur à 2K), à compléter par les bits 3 et 4 du
3 bits registre PCLATCH pour former une adresse sur 13
bits : 8bits  PCL et 5bits  PCLATCH
Instructions générales indicateurs cycles Code opération
GOTO L Branchement à la ligne de label L 2 10.1LLL.LLLL.LLLL
CALL L Branchement à un sous programme de label L 2 10.0LLL.LLLL.LLLL
RETURN Retourner d’un sous programme 2 00.0000.0000.1000
RETFIE Retourner d’un s. programme d’interruption 2 00.0000.0000.1001
CLRWTD Effacer le Watchdog Timer TO, PD 1 00.0000.0101.0100
SLEEP Mettre le μC en mode veille TO, PD 1 00.0000.0110.0011
NOP Pas d’opération 1 00.0000.0xx0.0000
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 11

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)

RA4 RA3 RA2 RA1 RA0


2. Le port d’E/S PORTA :
Le port A désigné par PORTA est un port de 5 bits (RA0 à RA4). RA5, RA6 et RA7 ne sont pas
accessibles. 2 registres pour utiliser ce port :
• TRISA : Registre de direction ou registre de configuration du PORTA
La configuration de direction se fait par positionnement des bits du registre TRISA, de la
manière suivante :
• Si le bit TRISAi = 0 alors la broche RAi du PORTA est configurée en sortie ;
• Si le bit TRISAi = 1 alors la broche RAi du PORTA est configurée en entrée ;
• PORTA : Registre de sortie du PORTA
La lecture ou l’écriture des broches RA0 … RA4, se ramène tout simplement à une
lecture ou écriture du registre PORTA.
La broche RA4 est multiplexée avec l'entrée d'horloge du registre TMR0.
3. Le port d’E/S PORTB :
Le port B désigné par PORTB est un port de 8 bits (RB0 à RB7). 2 registres pour utiliser ce
port :
• TRISB : Registre de direction ou registre de configuration du PORTB
La configuration de direction se fait par positionnement des bits du registre TRISB, de la
manière suivante :
• Si le bit TRISBi = 0 alors la broche RBi du PORTA est configurée en sortie ;
• Si le bit TRISBi = 1 alors la broche RBi du PORTA est configurée en entrée ;
• PORTB : Registre de sortie du PORTB
La lecture ou l’écriture des broches RB0 … RB7, se ramène tout simplement à une
lecture ou écriture du registre PORTB.
La broche
Prof:said RB0 est multiplexée avec l'interruption
TARIK 2eme STE INT. IBN_SINA_Kenitra
TRAITER 12

4. Configuration d’un PORTx :


Les registres TRISx appartiennent à la Bank 1 des SFR. Lors de l’initialisation du µC, il ne
faut pas oublier de changer de page mémoire pour les configurer.
Pour configurer un PORTx, il faut :
• Accéder à la Bank 1 ;
• Déterminer le mot à mettre dans le registre TRISx ;
• Mettre ce mot dans le registre de travail W ;
• Transférer le contenu de W dans le registre TRISx ;
• Accéder à la Bank 0, pour pouvoir accéder au PORTx.
5. Exemples d’application :
Exemple 1 :
Configurer le PORTB en entrée, lire le contenu du PORTB et mettre le résultat dans la
case mémoire d’adresse 0CH.
…………………………… ; Accès à la Bank1
…………………………… ; Bit n° 7 6 5 4 3 2 1 0

…………………………… ; PORTB en entrée PORTB … … … … … … … …


…………………………… ; Accès à la Bank0 TRISB … … … … … … … …
…………………………… ; W  PORTB Hex … …
…………………………… ; (0CH)  W
Exemple 2 :
Configurer le PORTB en sortie et initialiser le PORTB à FFH.
…………………………… ; Accès à la Bank1
…………………………… ; Bit n° 7 6 5 4 3 2 1 0

…………………………… ; PORTB en sortie PORTB … … … … … … … …


…………………………… ; Accès à la Bank0 TRISB … … … … … … … …
…………………………… ; W  FFH Hex … …
…………………………… ; PORTB  W
Exemple 3 :
Configurer les broches :
• RB1, RB3, RB5, RB7 du PORTB en entrée ;
• RB0, RB2, RB4, RB6 du PORTB en sortie ;
• RA4 du PORTA en entrée ;
Bit n° 7 6 5 4 3 2 1 0
• RA0, RA1, RA2, RA3 du PORTA en sortie.
PORTB … … … … … … … …
…………………………… ; Accès à la Bank1
TRISB … … … … … … … …
…………………………… ;
Hex … …
…………………………… ; Configuration PORTB
PORTA … … … … … … … …
…………………………… ;
…………………………… ; Configuration PORTA TRISA … … … … … … … …
…………………………… ; Accès à la Bank0 Hex … …
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
TRAITER 13

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 ;

…………………………… ; Accès à la Bank1 Bit n° 7 6 5 4 3 2 1 0


…………………………… ; PORTB … … … … … … … …
…………………………… ; Configuration PORTB TRISB … … … … … … … …
…………………………… ;
Hex … …
…………………………… ; Configuration PORTA
PORTA … … … … … … … …
…………………………… ; Accès à la Bank0
TRISA … … … … … … … …
Exemple 5 :
Hex … …
Soit le montage suivant :
5v
v
Fonctionnement :
P0 RB0
• Au repos les LEDs sont éteintes ;
RA0
LED0 • Une action sur le bouton poussoir
PIC 16 F 84

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.

Organigramme : Programme assembleur :

………….………………….
Début
………….………………….
………….………………….
………………………… PORTB en sortie
RA0, RA1 en entrée ………….………………….
………….………………….
………………………… Eteindre
les LEDs
………….………………….
LAB1 ………….………………….

…………… B.P1 LAB2 ………….………………….


enfoncé ?
………….………………….
………….………………….
………………………… Allumer
les LEDs ………….………………….
LAB3 ………….………………….
…………… B.P0
enfoncé ? ………….………………….
………….………………….
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
L.Q.I.S
TRAITER 14

Sous programme de temporisation


1- Temporisation faible :

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 :

On utilise des sous programmes, appelés sous programmes de temporisation.


En général on charge un registre de la zone GPR, par une donnée 8 bits, et on passe le temps à
décrémenter ce fichier, jusqu’à ce que son contenu soit nul. Ainsi, le temps perdu à l’exécution
de ce sous programme est le temps de Temporisation.

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:

Sous programme Tempo Nb de Cycle Sous programme Tempo Nb de Cycle


…………………….. 1 …………………….. 1
…………………….. 1 …………………….. 1
Loop …………………….. 1(2) Loop …………………….. 1
…………………….. 2 …………………….. 1(2)
…………………….. 2 …………………….. 2
…………………….. 2
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
prof: S.TARIK 2°STE
TRAITER 15

2.4- Calcul de la Temporisation :

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 :

On utilise des boucles imbriquées et on ajuste par des NOP.

3.2- Organigramme: 3.3- Programme:

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

3.4- Calcul de la Temporisation :

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

4.1- Donner un exemple de sous programme de temporisation. Utiliser 3 boucles


imbriquées.

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 =………………………………….

Calcul de la Temporisation pour n = 5, m = 255 et p = 255 :

Tempo = 4 + 5. n + 5. m. n + 3. p. m. n cycles
Tempo = ……………………………………………………….
Tempo = ………………………………………………………..
Tempo = ………………………..…. Tempo ≈ ………………

prof: S.TARIK Prof:said TARIK 2°STE 2eme STE IBN_SINA_Kenitra


TRAITER 17

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

prof: S.TARIK 2°STE


Prof:said TARIK 2eme STE IBN_SINA_Kenitra
L.Q.I.S
TRAITER 18

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

Bit 7 : RBPU - PORTB Pull-Up -


RBPU = 1 : le "tirage au plus" interne du PORTB est désactivé.
RBPU = 0 : le "tirage au plus" interne du PORTB est activé.
Bit 6 : INTEDG - INTerrupt EDGe -
INTEDG = 1 : la broche RB0/INT génère une interruption sur un front montant ;
INTEDG = 0 : la broche RB0/INT génère une interruption sur un front descendant.
Bit 5 : T0CS - TMR0 Clock Source -
Il permet de sélectionner le mode de fonctionnement du TIMER/Compteur :
TOCS = 1 : sélection de l'horloge externe (RA4) qui correspond au COMPTEUR ;
TOCS = 0 : sélection de l'horloge interne qui correspond au mode TIMER.
Bit 4 : T0SE - TMR0 Source Edge –
Ce bit détermine sur quel front -montant ou descendant- l'entrée RA4 incrémentera le
registreTARIK
Prof:said TMRO : 2eme STE IBN_SINA_Kenitra
prof:S.TARIK 2°STE L.Q.I.S
TRAITER 20

TOSE = 1 : front descendant ;


TOSE = 0 : front montant.
Bit 3 : PSA - PreScaler Assignment -
PSA = 1 : alors le Prescaler est associé avec le WDT ;
PSA = 0 : alors le Prescaler est associé avec le TIMER.
Bit 2, 1, 0 : PS0, PS1, PS2 - Prescaler Select -
RATIO RATIO
Ces trois bits effectuent une PS2 PS1 PS0
TMRO WDT
division de la fréquence d'horloge du 0 0 0 1:2 1:1
Prescaler.
0 0 1 1:4 1:2
Remarque :
0 1 0 1:8 1:4
• Lorsque le TIMER0 déborde, le BIT T0IF
0 1 1 1:16 1:8
du registre INTCON passe à 1. Après
utilisation, n’oublier pas de remettre 1 0 0 1:32 1:16
TOIF à zéro. 1 0 1 1:64 1:32
• Le Prescaler est partagé avec le Timer 1 1 0 1:128 1:64
WDT (WATCHDOG) 1 1 1 1:256 1:128

4. Le WATCHDOG Timer WDT (Chien de garde):


C’est un compteur 8 bits incrémenté en permanence (même si le μC est en mode sleep) par
une horloge RC intégrée indépendante de l'horloge système. Lorsqu’il déborde, (WDT Time
Out), deux situations sont possibles :
• Si le μC est en fonctionnement normal, le WDT Time-out provoque un RESET. Ceci
permet d’éviter de rester planté en cas de blocage du microcontrôleur.

Si le μC est en mode SLEEP, le WDT Time-out provoque un WAKE-UP, l'exécution du
programme continue normalement là où elle s'est arrêtée avant de rentrer en mode
SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations.
L'horloge du WDT a une période voisine de 70 μs ce donne un Time-Out toutes les 18 ms. Il
est cependant possible d'augmenter cette durée en faisant passer le signal Time-Out dans le
Prescaler programmable, partagé avec le timer TMR0.
L'usage du WDT doit se faire avec précaution pour éviter la réinitialisation inattendue et
répétée du programme. Pour éviter un WDT Time Out lors de l'exécution d'un programme, on a
deux possibilités :
• Inhiber le WDT de façon permanente en mettant à 0 le bit WDTE dans le registre de
configuration ;
• Remettre le WDT à 0 périodiquement dans le programme principal à l'aide de l'instruction
CLRWDT pour éviter qu'il ne déborde.
PSA
0 0
Clock WDT
WDT
WDT Time Out
1 Programable 1
Prescaler

PS2 PS1 PS0

prof:S.TARIK Prof:said TARIK 2°STE 2eme STE L.Q.I.S_Kenitra IBN_SINA_Kenitra


TRAITER 21

C.A.N interne du 16F877


1- PRESENTATION :

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.

Ce module convertisseur A/N utilise 4 registres qui sont :


 ADRESH en page 0 : MSB des 10 bits résultat.
 ADRESL en page 1 : LSB des 10 bits résultat.
 ADCON0 en page 0 : registre de contrôle n°0 du module CAN.
 ADCON1en page 1 : registre de contrôle n°1 du module CAN.

Une conversion commence toujours par la mise à 1 du bit GO/DONE du registre


ADCON0. Lorsque la conversion est terminée ce bit repasse à 0.La valeur résultante N de la
conversion est le contenu de ADRESH: ADRESL est égale à :
Vin – Vref-
Si Vref+ = VDD = 5V et Vref- = VSS = 0V N = ─────── x 1023
Alors : N = 1023 * VIN / 5 Vref+ – Vref-

VDD et VSS sont les tensions d’alimentation du microcontrôleur le PIC16 F 877

2- ORGANISATION INTERNE :

CHS2 CHS1 CHS0

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 :

IL permet de choisir une configuration parmi les 16 proposées.


La configuration de ce registre ne dispense pas de configurer les registres de directions des
PORTA et PORTE respectivement TRISA et TRISE.
ADFM — — — PCFG3 PCFG2 PCFG1 PCFG0

Bit 7 ADFM: A/D Result Format Select bit


1 = le résultat sera justifié à droite.
0 = le résultat sera justifié à gauche.
Bit 3-0 PCFG3…PCFG0: A/D Port Configuration Control bits

PCFG3 AN7 AN6 AN5 AN4 AN3 AN2 AN0R AN0


VREF+ VREF- CHAN
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 A0 RA0
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF + A A A RA3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF + A A A RA3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF + D A A RA3 VSS 2/1
011x D D D D D D D D VDD VSS 0/0
1000 A A A A VREF + VREF - A A RA3 RA2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF + A A A RA3 VSS 5/1
1011 D D A A VREF + VREF - A A RA3 RA2 4/2
1100 D D D A VREF + VREF - A A RA3 RA2 3/2
1101 D D D D VREF + VREF - A A RA3 RA2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF + VREF - D A RA3 RA2 1/2

A = Analog input D = Digital I/O


Résultat sur 10 bits
ADFM = 1 ADFM = 0
Justification à Droite Justification à Gauche

7 21 0 7 0 7 0 7 6 5 0
00000000 00000000

ADRESH ADRESL ADRESH ADRESL


4- Le Registre ADCON0 :

Ce registre permet de définir l’horloge de conversion, le canal à convertir, la mise en


fonctionnement du CAN, et le lancement d’une conversion.

ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON


Prof:said TARIK 2eme STE IBN_SINA_Kenitra
prof:S.TARIK 2°STE L.Q.I.S_Kenitra
TRAITER 23

Bit 7-6 ADCS1:ADCS0: A/D Conversion Clock Select.


Ces 2 bits permettent de choisir la vitesse de conversion:
00 = FOSC/2
10 = FOSC/32
01 = FOSC/8
11 = FRC oscillator RC interne

Bit 5-4-3 CHS2:CHS0: Analogue Channel Select bits


Ces 3 bits permettent de choisir le canal qui va être converti:

CHS2 CHS1 CHS0 Canal sélectionné


0 0 0 RA0/AN0
0 0 1 RA1/AN1
0 1 0 RA2/AN2
0 1 1 RA3/AN3
1 0 0 RA5/AN4
1 0 1 RE0/AN5
1 1 0 RE1/AN6
1 1 1 RE2/AN7

Bit 2 GO/DONE: A/D Conversion Status bit


1 = démarre la conversion.
0 = la conversion est terminée.

Bit 0 AD ON: A/D On bit


0 = convertisseur A/N en arrêt.
1= convertisseur A/N en service.

5- Exemple d’utilisation :

Configuration :

On souhaite obtenir la configuration suivante avec un PIC16F877 :


RE2 : Sortie logique RE1 : Sortie logique RE0 : Entrée logique
RA5 : Sortie logique RA4 : Entrée Logique RA3 : Entrée analogique
RA2 : Entrée logique RA1 : Entrée analogique RA0 : Entrée analogique
Tension de référence VREF = VDD – VSS = 5V et fréquence du quartz égale à 12MHz.

Programme en assembleur :

Toutes les lignes de sorties des PORTs sont mises à zéro.


…………………………..
………………………….. ; Mise à zéro des ports A et E
; Accès aux registres TRISx Banque mémoire 1
………………………….. ; RP0 = 1
………………………….. ; RP1 = 0
; Configuration des registres de directions
…………………………..
………………………….. ; Configuration du PORTA X X S E E E E E
…………………………..
Prof:said TARIK 2eme STE IBN_SINA_Kenitra
prof:S.TARIK 2°STE L.Q.I.S_Kenitra
TRAITER 24

………………………….. ; Configuration du PORTE 0 0 0 0 0 S S E


; Configuration du registre ADCON1 Page 1
; ADFM = 1 justification à droite du résultat
; PCFG 3:0 0100 => RE3:RE0 Type D comme Digitale
; => RA4 : D, RA3 : A comme Analogique
; => RA2 : D, RA1 : A et RA0 : A
…………………………..
………………………….. ; Valeur binaire 1 0 0 0 0 1 0 0
; Retour en banque mémoire 0
………………………….. ; RP0 = 0
………………………….. ; RP1 = 0

; Configuration du registre ADCON0 Page 0


; ADCS1 et ADSC0 = 1 0 Fréquence Max 20MHz
; ADON = 1 Mise en route du CAN
; 0 pour les autres bits

…………………………..
………………………….. ; 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
…………………………..

prof:S.TARIK 2°STE L.Q.I.S_Kenitra

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 25

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.

II/ MECANISME D’INTERRUPTION

Quand une interruption survient, le programme principal est interrompu :

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

On peut schématiser ce mécanisme par la figure suivante

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 26

III/ SOURCES D’INTERRUPTIONS

Le pic 16F84 dispose de quatre sources d’interruptions :

1- Changement d’état (passage de 1 à 0 ou de 0 à 1 ) de la broche RB0/INT.


2- Changement d’état des broches RB4, RB5, RB6,RB7 du PORTB
3- Débordement de TIMER ZERO : TMR0.
4- Fin d’écriture sur la mémoire EEPROM.

On peut assimiler ces 4 sources d’interruptions par la figure ci-dessous

AND

OR

Les registres à utiliser pour réaliser une interruption sont :

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 27

Exemples pour la configuration des registres utilisés :

Ex1 : interruption par RB0 sur front montant

Les bits utilisés :

GIE : (Global Interrupt Enable ) : validation générale d’interruption

INTE : ( Interrupt Enable ) : activation d’interruption sur RB0

INTF : ( Interrupt Flag ) : signale le passage à l’exécution du sous- programme d’interruption.

INTEDG : ( Interrupt Edg ) : front d’interruption : 1 pour front montant, 0 pour front descendant

BSF OPTION_REG,INTEDG

MOVLW B’10010000’

MOVWF INTCON

Ex2 : interruption par RB7, RB6, RB5, RB4

Les bits utilisés : GIE, RBIE, RBIF

MOVLW B’10001000’

MOVWF INTCON

Ex3 : interruption par TMR0

Les bits utilisés : GIE, T0IE, TOIF

MOVLW B’10100000’

MOVWF INTCON

Ex4 : interruption par EEPROM

Les bits utilisés : GIE, EEIE, EEIF

BCF EECON1,EEIF

MOVLW B’11000000’’

MOVWF INTCON

APPLICATION : FONCTION_1 : EN MODE NORMAL ==> CLIGNOTER UNE LED .


FONCTION_2 : EN MODE INTERRUPTION ==> INCREMENTER UN COPMTEUR

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 28

- 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

Schéma de l'application support :

ORGANIGRAMME DE L’INTERRUPTION

Sauvegarde de W et STATUS

MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 29

Restauration des registres W et STATUS

SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W

On suppose qu’ avant la sauvegarde W=10101111 et STATUS =11110000.

Donner les états (le contenu) de W_TEMP et STATUS_TEMP après la sauvegarde.

W_TEMP =…………………………………………………………. STATUS_TEMP =……………………………………………..

Donner les états (le contenu) de W et STATUS après restauration.

W =…………………………………………………………………….. STATUS =…………………………………………………………..

Conclusion :…………………………………………………………………………………………………………………………………………………….

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 30

début début

Passage à la page 1 : Initialisation


Configuration des registres :
Registre STATUS ---> ( RP0 = 1 ) .
- RB0 : entrée ( BP ) ; RB7 : sortie ( LED ) .
- ( RA0...RA3 ) : sorties ( AFFICHEUR ) ...
Configuration des PORTS :

( 00000 ) ----> TRISA .


Fonctionnement en mode : NORMAL .
( 00000001 ) ----> TRISB .
Programme PRINCIPAL

Configuration du registre OPTION : BP = 0 Clignotement de la LED


( 11000000 ) ----> OPTION .
INTEDG = 1 ; BP = Etat transitoir
Déclenchement de l' INTERRUPTION
Configuration du registre INTCON :
BP =
( 10010000 ) ----> INTCON .

GIE = 1 ; INTE = 1 ; INTF = 0 .


Fonctionnement en mode : INTERRUPTION .

Programme d' INTERRUPTION


Retour à la page 0 : - PAS de clignotement de la LED .
Registre STATUS ---> ( RP0 = 0 ) . - ( N = N + 1 ) --- PORTA ( AFFICHEUR ) .

Configuration des REGISTRES : Fonctionnement de l'application support :

STATUS IRP RP1 RP0 / TO / PD Z DC C

OPTION / RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0

INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBF

; FONCTION_1 : EN MODE NORMAL ==> CLIGNOTER UNE LED .


; FONCTION_2 : EN MODE INTERRUPTION ==> INCREMENTER UN COPMTEUR .
; PROFESSEUR : TARIK said .
; LYCEE IBN SINA KENITRA .

LIST p=16F84

#include "P16F84.INC"

;++++++++++++++++ INITIALISATION ++++++++++++++++++++++++++

H1 EQU 0X30

H2 EQU 0X31

H3 EQU 0X32

W_TEMP EQU 0X34

STATUS_TEMP EQU 0X35

N EQU 0X36

DEBUT

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 31

ORG 0
GOTO CON_R

;+++++++++++++++ DEBUT DE L'INTERRUPTION +++++++++++++++++++++++++++++++

ORG 0X04

;+++++++++++++++++++SAUVEGARDE ++++++++++++++++++++++++++++++++++++++++

SAUVEGARDE

MOVWF W_TEMP ;W ---> W_TEMP .


SWAPF STATUS , W ;Inversion de 2 quartets de STATUS .
MOVWF STATUS_TEMP ;W ---> STATUS_TEMP .

;+++++++++++++++++ N = N + 1 ++++++++++++++++++++++++++++++++++++++++

INCF N
MOVF N , 0
MOVWF PORTA

;+++++++++++++++++++++++ RESTAURATION +++++++++++++++++++++++++++++++++

RESTAURER

SWAPF STATUS_TEMP , W
MOVWF STATUS
SWAPF W_TEMP , F
SWAPF W_TEMP , W

BCF INTCON , 1

RETFIE ; Fin de l'interruption .

;++++++++++++++++++++ CONFIGURATION DES REGISTRES +++++++++++++++++

CON_R

BSF STATUS , RP0

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

;++++++++++++++ FONCTIONNEMENT NORMAL +++++++++++++++++++++++++

F_NORM

MOVLW H'80'
MOVWF PORTB
CALL TEMPO

Prof:said TARIK 2eme STE IBN_SINA_Kenitra


TRAITER 32

MOVLW H'00'
MOVWF PORTB
CALL TEMPO
GOTO F_NORM

;++++++++++++++ TEMPORISATION +++++++++++++++++++++++++++++++++++++

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

Prof:said TARIK 2eme STE IBN_SINA_Kenitra

Vous aimerez peut-être aussi