You are on page 1of 113

Le PIC16F877

Introduction aux microcontrleurs


Illustration par le PIC16F877

Dr : A. ABBOU
IGA 2013

ABBOU 1
DEFINITION

Un microcontrleur est un C.I qui rassemble les


lments essentiels d'un ordinateur :

Processeur
Mmoires
Units priphriques et interfaces dE/S

ABBOU 2
Du -processeur au -contrleur

Pour raliser un systme (micro computer) minimum, il


faut ajouter au microprocesseur les lments suivants :
Mmoire de programme ROM.
Mmoire de donnes RAM.
Circuits dEntres/Sorties PIA, ACIA, TIMER.
ABBOU 3
Du -processeur au -contrleur

Les microcontrleurs amliorent l'intgration et le cot (li


la conception et la ralisation) d'un systme base de
microprocesseur

Microcontrleur = Microprocesseur + Ram + Rom + E/S

Un microcontrleur est donc un composant autonome,

Les microcontrleurs peuvent fonctionner sans laddition


de circuits externes

ABBOU 4
Caractristiques dun -Contrleur

Circuit imprim peu complexe


Faible consommation
Cot rduit
Encombrement rduit

Programmation ncessitant un matriel adapt

une vitesse de fonctionnement et taille mmoire


plus faible par rapport aux microprocesseurs

ABBOU 5
Applications
Informatique et tlcommunication (souris,
modems)
Contrle de processus industriels (rgulation,
pilotage)
Vido (Appareil photos et camra numriques),
Multimdia (tlviseur, carte audio, carte
vido,MP3,)
Systmes embarqus, comme les contrleurs des
moteurs automobiles (ABS, injection,GPS, airbag),
les tlcommandes, jouets, la tlphonie mobile,
ABBOU 6
Familles de microcontrleurs

la famille Atmel AT91 , Atmel AVR ;


le C167 de Siemens;
la famille Hitachi H8;
lIntel 8085 , Intel 8051
la famille Motorolla 68HC11, 68HC08 , 68HC12 ;
la famille des PIC de Microchip ;
la famille des ST6, ST7, ST10, STR7, STR9 de
STMicroelectronics ;
la famille ADuC d'Analog Devices ;
la famille MSP430 de Texas Instruments ;
la famille LPC21xx ARM7-TDMI de Philips ;
ABBOU 7
Les PICs de Microchip
La socit Amricaine Microchip Technologie a mis au
point dans les annes 90 un microcontrleur CMOS :
le PIC (Peripheral Interface Controller).
Ses caractristiques principales sont :
- Architecture RISC : Reduced Instruction Set Computer
Jeu dinstruction rduit
Instruction et oprande cods sur un seul mot
Toutes les instructions (hors saut) sur un cycle machine

-Architecture Harvard :
Le programme et les donnes sont stockes dans
des mmoires physiquement spares.

ABBOU 8
Architecture
Architecture de Von Neumann :
Un seul Bus malgr la
sparation de lespace
mmoire donnes et
mmoire programme.
Occupation mmoire dune
instruction variable.
Architecture Harvard :
Un bus pour chaque Mmoire
(Donnes et programme)
Occupation mmoire fixe
pour toutes les instructions
ABBOU 9
Architecture
RISC & CISC
RISC Reduced Instruction Set Computer
Toutes les instructions ont la mme taille
Les modes d'adressage sont simples (immdiat, registre)
- Jeu dInstruction rduit

CISC Complex Instruction Set Computer


Instructions de taille et de temps d'excution variable
Modes d'adressage complexes
Il faut plusieurs instructions CISC pour 1 instruction RISC
- Jeu dinstruction tendu

ABBOU 10
Architecture
RISC & CISC
Exemple: on dplace 100 octets de l'adresse mmoire src vers l'adresse mmoire dst.
A gauche on utilise une macro-instruction (RISC) REP MOVSB quivalent la partie figure en
vert droite.

RISC CISC Pascal


MOV CX,100
MOV CX,100 MOV DI,dst
MOV DI,dst MOV SI,src
MOV SI,src Var
boucle:
REP MOVSB i : integer;
MOV AL,[DI]
src, dst : array[1..100] of byte;
MOV [SI],AL
INC SI
for i:=1 to 100 do
INC DI
dst[i]=src[i];
DEC CX
JNZ boucle

ABBOU 11
Structure en Pipe Line
Dcomposition des tches
Optimisation pour larchitecture RISC
Prparation de linstruction suivante durant
lexcution de celle prsente
Squencement

movlw 0xFF
movwf Portb
call sub1
movf Portc,w

ABBOU 12
Microcontrleurs
Architecture interne

Mmoire flash : C'est une mmoire


rinscriptible qui conserve ses donnes
lorsque la PIC n'est pas alimente. Elle est
utilise pour stocker le programme.
Mmoire RAM : C'est une mmoire volatile.
Les variables utilises au cours du
programme sont stockes cet endroit.
Unit de Calcul : C'est l o se droulent
toutes les oprations une vitesse dfinie
par la frquence d'horloge.
Registre temporaire W : C'est ici qu'est
stocke la valeur ncessaire pour une
opration de l'unit de calcul.
Ports E/S ( Entres/Sorties ) : Ce sont les
units qui font le lien entre ce qui se passe
l'intrieur du PIC et l'extrieur.
Modules annexes : Toutes les fonctions
annexes (timers, comparateurs,
convertisseurs analogiques/numriques ...)

ABBOU 13
Les diffrentes familles des PICs

Base-line (Les instructions sont codes sur12 bits)


- PIC 10 - PIC 12
- Certains PIC12F & PIC16F

Mid-range (Les instructions sont codes sur 14 bits)


- La plupart des PIC 16
- Certains PIC12F

High-end (Les instructions sont codes sur 16 bits)


- PIC 17
- PIC 18

ABBOU 14
Rfrence des MCU

ABBOU 15
Rfrence des MCU

PIC 16F877
Le numro 16 signifie qu'il fait partie de la famille
"MID-RANGE". C'est la famille de PIC qui travaille
sur des mots de 14 bits.

La lettre F indique que la mmoire programme de


cette PIC est de type "Flash".

Les derniers chiffres permettent d'identifier


prcisment la PIC, ici c'est une PIC de type 877.

La rfrence 16F877 peut avoir un suffixe du type


"-XX" dans lequel XX reprsente la frquence
d'horloge maximale que la PIC peut recevoir.
ABBOU 16
Caractristiques gnrales de la famille 16F87x

diffrents circuit de la famille 16F87X

ABBOU 17
lments constitutifs du PIC 16F877

ABBOU 18
Structure du PIC 16F877

ABBOU 19
Le cur du PIC : le microprocesseur

ABBOU 20
La mmoire

ABBOU 21
La Pile et le Compteur Programme

ABBOU 22
Les Ports dEntres/Sorties gnraux : PORTA, PORTB,
PORTC, PORTD, PORTE

ABBOU 23
Le Port Parallle Esclave (PSP : Parallel Slave Port)

ABBOU 24
Le circuit de gnration dhorloge

ABBOU 25
Le TIMER0

ABBOU 26
Le TIMER1

ABBOU 27
Le TIMER2

ABBOU 28
Les modules CCP1 et CCP2

ABBOU 29
Le convertisseur Analogique Digital 10bits

ABBOU 30
LUSART

ABBOU 31
Le SSP, Synchronous Serial Port

32
Brochage du PIC 16F877

33
Organisation de la mmoire RAM

Lespace mmoire RAM adressable est de 512 positions


de 1 octet chacune :
96 positions sont rserves au SFR (Special Function
Registers) qui sont les registres de configuration du PIC.
Les 416 positions restantes constituent les GPR
(General Propose Registers) ou RAM utilisateur.
Sur le 16F877, 3 blocs de 16 octets chacun ne sont pas
implants physiquement do une capacit de RAM
utilisateur de 368 GPR

ABBOU 34
Organisation de la mmoire RAM

- Le plan mmoire des donnes et des registres internes est


dcoup en 4 zones ou bank de 128 octets
- pour accder une zone il faut positionner les bits RP0 (bit 5)
et RP1 (bit 6) du registre STATUS.

RP1 : RP0 Zone Slectionne(Bank)


00 De 00h 7Fh : BANK 0
01 De 80h FFh : BANK 1
10 De 100h 17Fh : BANK 2
11 De 180h 1FFh : BANK 3

ABBOU 35
Plan Mmoire des registres

ABBOU 36
Organisation de la mmoire RAM

ABBOU 37
Organisation de la mmoire RAM

Vous disposerez de 368 octets libres rparties de la


manire suivante:

- 80 octets en banque 0, adresses 0x20 0x6F


- 80 octets en banque 1, adresses 0xA0 0XEF
- 96 octets en banque 2, adresses 0x110 0x16F
- 96 octets en banque 3, adresses 0x190 0x1EF
-16 octets communs aux 4 banques, soit 0x70
0x7F = 0xF0 0xFF = 0x170 0x17F =0x1F0
0x1FF.

ABBOU 38
Accs la RAM par adressage direct
Accs la RAM par Adressage direct

ABBOU 39
Accs la RAM par adressage indirect
Accs la RAM par Adressage indirect

ABBOU 40
La mmoire Programme ou mmoire flash

- Cette mmoire de 8 x 1024 mots de 14 bits sert stocker le programme

- Elle est non volatile (flash) et reprogrammable souhait

- Chaque position de 14 bits contient une instruction.

- Le programme excutable par le PIC est implant dans la mmoire


flash l'aide d'un programmateur (hard+soft )

ABBOU 41
Organisation mmoire programme

42
Organisation mmoire programme

-Le plan mmoire est linaire les adresses vont de 0000h


1FFFh (8k mots de 14 bits), par page de 2K mots .

-Le vecteur de reset est fig en 0000h.

-Les PICs nont quun seul vecteur dinterruption en 0004h.

-La pile utilise par les sous programmes nest pas implante
en mmoire de donne comme avec les microcontrleurs
classiques, mais dans la mmoire programme.

-on ne peut pas imbriquer plus de 8 sous programmes (Ce qui


est dj beaucoup ! !).

ABBOU 43
Les mmoires permanentes
La mmoire EEPROM de donnes

- Le PIC 16F876/877 dispose de 256 octets de mmoire


EEPROM de donne.

- Son implantation physique commence la position dadresse


absolue 2100h.

- on utilise ladressage relatif par rapport la premire position.

- La premire position aura ladresse 0,

ABBOU 44
Les instructions du 16F876/877
- Les instructions orientes Registre
- Les instructions orientes bits
- Les instructions oprant sur une constante
- Les instructions de saut et appel de procdures

Exercice 1)
Dans quel bank se trouvent les cases mmoire d'adresse : 1A4h, B5h, 130h, 58h,
100, 200, 250, 300, 400
Exercice 2)
Combien de cases mmoires libres (GPR) y a-t-il dans la zone mmoire qui
commence la position A0h et se termine EAh.
Exercice 3)
Quelle est l'adresse de la dernire position d'une zone mmoire de 40 cases qui
commence la position 190h.
Exercice 4)
Combien de cases mmoires libres (GPR) y a-t-il dans le bank1. Mme question pour
le bank2. ABBOU 45
Dcodage dadresse des mmoires
Exercice A: Pour un microprocesseur disposant de 16 lignes d'adresses et 8 lignes
de donnes, tablir le dcodage permettant de situer 8 Ko de donnes aux adresses
hautes de la mmoire. On dispose pour cela de boitiers de 4 Ko de mmoire.
Rechercher l'adresse des boitiers mmoire, faire le mapping mmoire puis le schma
lectrique.
Exercice B: on dsire raliser le dcodage dadresse par EPROM dun circuit
mmoire M de 8Ko. En fait, pour raliser M, on dispose uniquement de 4 boitiers
mmoire de capacit 2Ko chacun implants suivant le tableau suivant:

Boitiers Adresse dimplantation


Boitier 1 1000h - 17FFh
Boitier 2 1800h - 1FFFh
Boitier 3 C000h - C7FFh
Boitier 4 CA00h - D0FFh

a- Donner les avantages de dcodage dadresse par EPROM


b- Raliser le dcodage dadresse
ABBOU 46
Jeu dinstructions
Opration sur les registres

{W,F ? d} signifie que le rsultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f


ABBOU 47
Jeu dinstructions
Suite

ABBOU 48
Jeu dinstructions

{W,F ? d} signifie que le rsultat va soit dans W si d=0 ou w, soit dans F si d= 1 ou f

LEGENDE DES TABLEAUX DINSTRUCTIONS


Dtermine la destination :
d=0 Registre Travail
d d=1 Registre Mmoire SFR ou
RAM.

F Adresse SFR ou RAM en hexa.

fff ffff Adresse SFR ou RAM en binaire.

Valeur immdiate sur 8bits ou


Adresse de destination sur 11
K bits.
bbb Valeur binaire, elle dtermine le
bit modifier ou tester

ABBOU 49
Les paramtres des instructions agissant sur registre

Pour les instructions qui agissent sur registre, le paramtre F reprsente


ladresse du registre considr. Le paramtre d (destination) joue un rle
important, si on prend d = 0 ou w, le rsultat de lopration sera plac dans
laccumulateur W, si on prend d = 1 ou f, le rsultat de lopration sera plac
dans le registre prcis par F.

Exemple:
ADDWF 70h,1 ou ADDWF 70h,f
Signifie : additionner le contenu de W avec le contenu de la case mmoire
dadresse 70h et placer le rsultat dans la case mmoire 70h

Exemple:
XORWF 35h,0 ou XORWF 35h,w
Signifie : faire un ou exclusif entre W et le contenu de la case mmoire
dadresse 35h et placer le rsultat dans laccumulateur W

ABBOU 50
Les paramtres des instructions agissant sur bit

Pour les instructions agissant sur un bit, le paramtre F indique le


registre qui contient le bit modifier et le paramtre b indique le
numro du bit modifier; on compte partir de zro en commenant
droite

Exemples:

BSF STATUS,2 ; signifie : placer 1 le bit 2 (3me bit partir de la


droite) du registre STATUS

BCF 45h,6 ; signifie : placer 0 le bit 6 (7me bit partir de la droite)


du registre de la case mmoire dadresse 45h

ABBOU 51
Les instructions MOVWF et MOVF

Ce sont les instructions les plus utilises,

MOVWF permet de copier laccumulateur W dans un registre (SFR ou GPR):


Exemples:
MOVWF STATUS ; signifie : Copier le contenu de W dans le registre STATUS
MOVWF 55h ; signifie : Copier le contenu de W dans la case mmoire
dadresse 55h

MOVF permet de copier le contenu dun registre (SFR ou GPR) dans


laccumulateur W, le paramtre d doit tre = 0
Exemples:
MOVF STATUS,0 ; Copier le contenu du registre STATUS dans laccumulateur W
MOVF 35h,0 ; Copier le contenu de la case mmoire dadresse 35h dans
laccumulateur W
MOVF STATUS,1 ; Copier le contenu du registre STATUS dans lui mme
ABBOU 52
Les instructions btfss et btfsc

Ces instructions permettent de tester un bit et de sauter ou non une


ligne de programme en fonction de la valeur du bit,

Exemples:
btfsc F,b : bit test skip if clear : teste le bit b du registre F et saute
linstruction suivante si le bit test est nul

btfss F,b : bit test skip if set : teste le bit b du registre F et saute
linstruction suivante si le bit test est gal 1

ABBOU 53
Les instructions incfsz et decfsz

Ces instructions permette dincrmenter ou de dcrmenter un registre et


de sauter si le rsultat est nul

Exemples:

Incfsz F,1 : increment skip if Z : incrmente le registre F et sauter une


ligne si le rsultat = 0. Le paramtre 1 indique que le rsultat de
lincrmentation doit aller dans F.

deccfsz F,1 : decrement skip if Z : dcrmente le registre F et sauter une


ligne si le rsultat = 0. Le paramtre 1 indique que le rsultat de la
dcrmentation doit aller dans F.

ABBOU 54
Linstruction goto

Permet de transfrer lexcution une autre position du programme


repre par une tiquette (label)

Exemple:

ABBOU 55
Linstruction call
Linstruction call permet dappeler une fonction. Une fonction est un sous
programme crit la suite du programme principal. Sa premire ligne doit
comporter une tiquette et elle doit se terminer par return.

Exemple:

Dduire La diffrence entre


call et goto?
ABBOU
56
Les indicateurs dtat (drapeaux)
Les bits Z, DC et C situs dans le registre STATUS sont des indicateurs qui
permettent de savoir comment une instruction sest termine. Toutes les
instructions nagissent pas sur les indicateurs, voir liste des instructions ci-
dessous.

Z : passe 1 quand le rsultat dune instruction est nul


C : passe 1 quand lopration a gnr une retenue
DC : passe 1 quand le 4me bits gnre une retenue
Ces bits peuvent tre utilis trs astucieusement par les instructions btfsc et
btfss qui permettent de tester un bit et de raliser un saut conditionnel:

57
Les particularits de programmation du 16F87x
La directive _CONFIG

-cette directive dtermine le fonctionnement du PIC.

-La valeur est inscrite au moment de la programmation dans


un registre spcial, situ en mmoire programme ladresse
0x2007

-ne peut plus tre modifi en cours dexcution du


programme.

- Ce registre de 14 bits (fusibles ou switch) de configuration


est organis comme suit :

ABBOU 58
Les particularits de programmation du 16F87x
CP1/CP0 : bits 13/12 ; Dterminent quelle zone de la mmoire
programme sera protge contre la lecture externe (via ICSP) ou
l'criture par programme conformment l'tat du bit 9 (WRT).
On peut choisir de protger la totalit de la mmoire ou seulement une
partie.

Les diffrentes zones pouvant tre protges sont les suivantes :


1 1 : Aucune protection (_CP_OFF)
1 0 : Protection de la zone 0x1F00 0x1FFF (_CP_UPPER_256)
0 1 : Protection de la zone 0x1000 0x1FFF (_CP_HALF)
0 0 : Protection de lintgralit de la mmoire (_CP_ALL)

ABBOU 59
Les particularits de programmation du 16F87x
DEBUG : bit 11 : Debuggage sur circuit. Permet de ddicacer RB7 et RB6 la
communication avec un debugger.
1 : RB6 et RB7 sont des I/O ordinaires (_DEBUG_OFF)
0 : RB6 et RB7 sont utiliss pour le debuggage sur circuit (_DEBUG_ON)

WRT : bit 9 : Autorisation dcriture en flash


1 : Le programme peut crire dans les zones non protges par les bits
CP1/CP0 (_WRT_ENABLE_ON)
0 : Le programme ne peut pas crire en mmoire flash (_WRT_ENABLE_OFF)

LVP : bit 7 : Utilisation de la pin RB3/PGM comme broche de progra 5V


1 : La pin RB3 permet la program du circuit sous tension de 5V (_LVP_ON)
0 : La pin RB3 est utilise comme I/O standard (_LVP_OFF)

ABBOU 60
Les particularits de programmation du 16F87x
CPD : bit 8 : Protection en lecture de la mmoire EEPROM de donnes.
1 : mmoire EEPROM non protge (_CPD_OFF)
0 : mmoire EEPROM protge contre la lecture externe via ICSP (_CPD_ON)

BODEN : bit 6 : provoque le reset du PIC en cas de chute de tension


(surveillance de la tension dalimentation)
1 : En service (_BODEN_ON)
0 : hors service (_BODEN_OFF)

PWRTE : bit 3 : Dlai de dmarrage la mise en service. Attention, est


automatiquement mis en service si le bit BODEN est positionn.
1 : dlai hors service (sauf si BODEN = 1) (_PWRTE_OFF)
0 : dlai en service (_PWRTE_ON)
ABBOU 61
Les particularits de programmation du 16F87x
WDTE : bit 2 : Validation du Watchdog timer
1 : WDT en service (_WDT_ON)
0 : WDT hors service (_WDT_OFF)
FOSC1/FOSC0 : bits 1/0 : slection du type doscillateur
11 : Oscillateur de type RC (_RC_OSC) (3K < R < 100k, C > 20 pF)
10 : Oscillateur haute vitesse (_HS_OSC) (4 Mhz 20 Mhz)
01 : Oscillateur basse vitesse (_XT_OSC) (200 kHz 4 Mhz)
00 : Oscillateur faible consommation (_LP_OSC) (32 k 200 kHz)
Voici 3 exemples dutilisation :
__CONFIG B'11111100111001'
__CONFIG H'3F39
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON &
_CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF &
_XT_OSC
ABBOU 62
Les particularits de programmation du 16F87x

LIST : permet de dfinir un certain nombre de paramtres comme le


processeur utilis (p), la base par dfaut pour les nombres (r) ainsi que d'autres
paramtres.
Exemple : LIST p=16F876, r=dec

avec r=dec, les nombres sans spcification particulire seront considrs par
l'assembleur comme des nombre dcimaux,

INCLUDE : permet d'insrer un fichier source. Par exemple le fichier


p16f876.inc contient la dfinition d'un certain nombre de constante comme les
noms des registres ainsi que les noms de certains bits;
Exemple: INCLUDE "p16f876.inc"

EQU : permet de dfinir une constante ou une variable :


Exemple : XX EQU 0x20 ABBOU 63
Les particularits de programmation du 16F87x

ORG : dfinit la position dans la mmoire programme partir de laquelle seront


inscrites les instructions suivantes.

Exemple :

ABBOU 64
Les particularits de programmation du 16F87x

#DEFINE : fonctionne un peu comme la directive EQU tout en tant un peu


plus gnrale, car elle permet daffecter toute une chane une abrviation
Exemples:

#DEFINE XX 0x20 ; dans ce cas cest quivalent XX EQU 0x20


#DEFINE LED PORTB,3 ; ici chaque fois que le compilateur rencontrera le
mot LED, il le remplacera par PORTB,3

BCF LED ; teindre la LED branche sur la broche 3 de PORTB


On peu ainsi affecter une abrviation toute une instruction

#DEFINE eteindre bcf PORTC,5 ;affecte labrviation eteindre linstruction


bcf PORTC,5
#DEFINE allumer bsf PORTC,5 ;affecte labrviation allumer linstruction
bsf PORTC,5

Allumer ; allume la LED branche sur la broche 5 de PORTC


Eteindre ; teindre la LED branche
ABBOU sur la broche 5 de PORTC 65
Exercices
Exercice 5)
Ecrire un programme qui incrmente indfiniment la position mmoire (RAM) 60h.
Exercice 6) : Accs la RAM par l'adressage direct
Donner le programme qui copie :
35 dans la position 20h, 'A' dans la position A0h
b11101 dans la position 110h, 35h dans la position 190h
Exercice 7) : Soustraction
Donner le programme qui :
-soustrait la constante 33 de l'accumulateur W (W-33)
-Soustrait la constante 40h de la case mmoire d'adresse 70h ([70h]-40h [70h])
-qui soustrait le contenu de la case mmoire 70h de l'accumulateur W avec le
rsultat dans W ( W [70h] W )
- qui soustrait le contenu de la case mmoire 71h de l'accumulateur W avec le
rsultat dans la case mmoire ( W [71h] [71h] )
Exercice 8) : Accs la RAM par l'adressage indirect
Donner le programme qui copie l'alphabet majuscule dans la RAM partir de la
position 190h
Exercice 9) : (comp1.asm)
Comparer les contenus des cases mmoire 6Fh et EFh, sil son gaux mettre zro
tous les bits de la case 16Fh sinon mettreABBOU
1 tous les bits de la case 1EFh 66
Boucles de temporisation

ralisation des temporisations l'aide de simples boucles, sans recours aux 3


TIMER du PIC:
A-Temporisation avec une boucle
movlw 4
movwf 70h
ici decfsz 70h,f
goto ici
- Les instructions movlw et movwf prennent 1 cycle chacune
- L'instruction decfsz prend un cycle si elle ne saute pas et 2 cycles quand elle saute
- L'instruction goto prend 2 cycles
- chaque passage dans la boucle prend (1+2) cycle sauf le dernier qui prend 2 cycle

Avec un quartz = fosc = 4 Mhz, 1 cycle = fosc/4 = 1 s, ce qui donne une


temporisation max de 769 s

ABBOU 67
Boucles de temporisation

B-Temporisation avec 2 boucles imbriques


La boucle intrieure (N1) se fait toujours 256 fois. La boucle extrieure se fait N2
fois. Cest N2 qui constituera le paramtre de la fonction, Il faut le placer dans W
avant de lappeler.

tempo2 : ; il faut dfinir W dans le programme


principal
movwf AN2
t2 : decfsz AN1,f
goto t2
decfsz AN2,f
goto t2
return

ABBOU 68
Exercices
Exercice 5) : Accs la RAM par l'adressage direct
Donner le programme qui copie :
35 dans la position 20h, 'A' dans la position A0h
b1010 dans la position 110h, 35h dans la position 190h
Exercice 6) : Soustraction
Donner le programme qui :
-soustrait la constante 33 de l'accumulateur W (W-33)
-Soustrait la constante 40h de la case mmoire d'adresse 70h ([70h]-40h
[70h])
-qui soustrait le contenu de la case mmoire 70h de l'accumulateur W avec
le rsultat dans W ( W [70h] W )
- qui soustrait le contenu de la case mmoire 71h de l'accumulateur W avec
le rsultat dans la case mmoire ( W [71h] [71h] )
Exercice 7) : Accs la RAM par l'adressage indirect
Donner le programme qui copie l'alphabet majuscule dans la RAM partir
de la position 190h
Exercice 8) : (comp1.asm)
Comparer les contenus des cases mmoire 6Fh et EFh, sil son gaux mettre
zro tous les bits de la case 16Fh ABBOU
sinon mettre 1 tous les bits de la case
69
1EFh
outils de dveloppement
Loutil de dveloppement principal est lenvironnement de
dveloppement intgr MPLAB fournit gratuitement par Microchip
Procdure de travail:
Les tapes ncessaires permettant de voir un programme s'excuter sur un PIC sont :
Ecrire un programme en langage assembleur dans un fichier texte et le sauvegarder
avec l'extension .asm
Compiler ce programme avec l'assembleur MPASM fourni par Microchip. Le rsultat
est un fichier excutable avec l'extension .hex contenant une suite d'instruction
comprhensible par le pic.
Transplanter le fichier .hex dans la mmoire programme du PIC (mmoire flash)
l'aide d'un programmateur adquat. On peut utiliser les programmateurs de Microchip
ou tout autre programmateur achet .
Mettre le PIC dans son montage final, mettre sous tension.

Microchip propose gratuitement l'outil de dveloppement MPLAB qui regroupe l'diteur


de texte, le compilateur MPASM, un outil de simulation et le logiciel de programmation.
Le programmateur lui-mme, n'est malheureusement pas gratuit.
ABBOU 70
outils de dveloppement
Lenvironnement de dveloppement MPLAB

MPLAB-IDE peut tre tlcharg sur le site Web


http://www.microchip.com

Aprs l'installation, lancer MPLAB et faire les config ci-dessous :


Configure Select Device PIC16F876 ou PIC16F877
..
...
..

Sance de
Prise en main de MPLAB

ABBOU 71
Les ports parallles d'entre sortie
Le 16F877 possde 5 ports diffrents :

le port A (6 broches)

le port B (8 broches)

le port C (8 broches)

le port D (8 broches)

le port E (3 broches)

a fait 33 broches dentres-sorties (E/S) disponibles


Chaque port est associ un registre de direction TRISx

- un bit 1 --> I --> Input --> entre -

- un bit 0 --> O --> Output --> sortie -

Le courant absorb ou fourni peut atteindre 25 mA

La majorit des broches sont


ABBOU 72
multiplexes avec d'autres fonctions
Le port A

Cest un port de 6bits (RA0 RA5). RA6 et RA7 ne sont pas

accessibles.

La ligne RA4 est partage avec l'entre TOCK1 du timer0,

Les autre lignes sont partages avec les fonctions

analogiques (CAN ),

Direction configure dans TRISA (85h bank1),

Donnes accessibles dans PORTA (05h bank0).

ABBOU 73
Les registres utiliss par le port A

En sortie, RA4 est une E/S drain ouvert, pour l'utiliser comme
sortie logique, il faut ajouter une rsistance de pull-up externe.

Il faut remarquer que la logique est inverse, si on envoie 0 sur RA4,


l'interrupteur se ferme et la LED s'allume. Si on envoie 1, l'interrupteur
s'ouvre et la LED s'teint.
Pour les utiliser les E/S en E/S numriques, il faut crire '00000110'
dans le registre ADCON1 ABBOU 74
Le port B

Le port B dsign par PORTB est un port bidirectionnel


de 8 bits (RB0 RB7). Toutes les broches sont compatibles TTL.

La configuration de direction se fait l'aide du registre TRISB,


positionner un bit de TRISB 1 configure la broche
correspondante de PORTB en entr et inversement.
Au dpart toutes les broches sont configures en entre.

En entre, la ligne RB0 appele aussi INT peut


dclencher linterruption externe INT.

En entre, une quelconque des lignes


RB4 RB7 peut dclencher l'interruption RBI.

Direction configure dans TRISB (86h bank1),

Donnes accessibles dans PORTB(06h bank0).


ABBOU 75
Le port C

N'existe que pour les botiers 28 et 40 broches,

Partag avec les liaisons sries, les Timers 1,2 et les modules CCP,

port bidirectionnel de 8 bits (RC0 RC7).

Toutes les broches sont compatibles TTL.

Entres trigger de Schmitt,

Direction configure dans TRISC (87h bank1),

Donnes accessibles dans PORTC (07h bank0).

ABBOU 76
Le port D

Le port D dsign par PORTD est un port bidirectionnel de 8 bits (RD0


RD7). Toutes les broches sont compatibles TTL et ont la fonction trigger de
Schmitt en entre.

Chaque broche et configurable en entre ou en sortie


laide du registre TRISD.

PORTD nest pas implment sur tous les processeurs


16F87X, il est disponible sur le 16F877, le 16F874 et le 16F871

PORTD peut tre utilis dans un mode particulier appel parallele


slave port, pour cela il faut placer le bit PSPMODE (bit 4) de TRISE 1.
Dans ce cas les 3 bits de PORTE deviennent les entres de control de
ce port (RE, WE et CS) ABBOU 77
Le port E

PORTE contient seulement 3 bits RE0, RE1 et RE2. Les 3 sont configurables
en entre ou en sortie laide des bits 0, 1 ou 2 du registre TRISE.

PORTE nest pas implment sur tous les processeurs 16F87X, il est
disponible sur le 16F877, le 16F874 et le 16F871

Les 3 bits de PORTE peuvent tre utiliss soit comme


E/S numrique soit comme entres analogiques du CAN.
La configuration se fait laide du registre ADCON1.

Si le bit PSPMODE de TRISE est plac 1, Les


trois bits de PORTE deviennent les entres de control
du PORTD qui (dans ce cas) fonctionne en mode parallele
Slave mode

A la mise sous tension (RESET), les 3 broches de PORTE sont configures


comme entres analogiques.

ABBOU 78
EXERCICES

Exercice 9 : Clignoter une LED

Donner le programme qui fait clignoter une LED branche


sur RA0 avec une temporisation voisine de 0.5s. Sachant
que le PIC est dot d'un quartz de 4 MHz. la temporisation
sera ralise l'aide de boucles imbriques

Exercice 10 : Clignoter une LED

Le programme prcdent sera modifi pour que la Led


branche sur RA0 sera commande par deux bottons
poussoirs(START et STOP) branchs sur RB0 et RB1
- Lorsquon appuie sur START le clignotement dmarre
- Lorsquon appuie sur STOP le clignotement sarrte.
ABBOU 79
EXERCICES

Exercice 11 : BCD 7 segments

On branche un bouton poussoir sur la broche RA4 de


sorte que celle-ci passe 0 quand on appuie

On branche un afficheur 7 segments cathode commune


sur le port C

Chaque fois quon appuie sur le bouton poussoir, le


contenu de lafficheur doit sincrmenter

Indication : Le dcodage BCD-7 segment sera fait par le


programme.

ABBOU 80
LES TIMERS

Les processeurs de la famille PIC16


Peuvent avoir trois timers:

- Le timer 0 - TMR0 - 8 bits


- Le timer 1 - TMR1 - 16 bits
- Le timer 2 - TMR2 - 8 bits
TMR0 et TMR1 sont des timers compteur
TMR2 est seulement un timer (pas d'entre externe)
TMR1 et TMR2 sont utiliss par la fonction CCP
(Capture Compare Pwm)

ABBOU 81
Le Timer 0 - TMR0

TMR0 est un compteur 8 bits


On peut lire ou crire le registre TMR0
Il gnre une interruption au passage de FFh
00h (overflow)
Il possde un prdiviseur 8 bits qu'il partage avec
le Watchdog
Il peut tre pilot par une horloge externe
appliqu la broche RA4 (mode compteur) ou par
lhorloge interne Fosc/4 (mode timer)
On peut slectionner le front actif de l'horloge
externe ABBOU 82
Schma fonctionnel du Timer 0

0
1
1
0

ABBOU 83
Registres utiliss par le timer TMR0

ABBOU 84
Le Timer 0

Cest un compteur 8 bits ayant les caractristiques


suivantes :

Il est incrment en permanence soit par lhorloge interne Fosc/4


(mode timer) soit par une horloge externe applique la broche RA4
du port A (mode compteur).
La slection de mode de fonctionnement seffectue par le bit 5 du registre
OPTION : T0CS pour Tmr0 Clock Source select bit.
T0CS = 1 : Fonctionnement en mode compteur
T0CS = 0 : Fonctionnement en mode timer

ABBOU 85
Le Timer 0
* Si on dcide de travailler en mode compteur, on doit prciser lors de
quelle transition de niveau le comptage est effectu. Ceci est prcis grce
au bit 4 du registre OPTION : T0SE pour Timer0 Source Edge select bit.
T0SE = 1 : comptage si lentre RA4/TOKI passe de 1 0
T0SE = 0 : comptage si lentre RA4/TOKI passe de 0 1

* A son dbordement (FFh 00h) le drapeau T0IF est positionn ce qui


peut dclencher l'interruption si elle est valide (GIE=1 et T0IE=1 ).
Lorsque T0IE est positionn dans le registre INTCON, chaque fois que le
flag T0IF passe 1, une interruption est gnre,

il faut repositionner T0IF 0 aprs traitement de l'interruption

ABBOU 86
Le Timer 0: Le mode dinterruption

Supposons que nous travaillons avec un quartz de 4MHz. Nous avons


donc dans ce cas (4 000 000/4) = 1.000.000 de cycles par seconde.
Chaque cycle dhorloge dure donc 1/1000000me de seconde, soit 1s.
Nous avons donc une interruption toutes les 256s.
Si nous dsirons raliser une LED clignotante une frquence de 1Hz,
nous aurons besoin dune temporisation de 500ms, soit 2000 fois plus.
Ce nest donc pas pratique.

ABBOU 87
Le Timer 0: Le prdiviseur
Quelque soit l'horloge choisie, on peut la passer dans un diviseur de
frquence programmable (prescaler) dont le rapport est fixs par les
bits PS0, PS1 et PS2 du registre OPTION_REG.

L'affectation ou non du prdiviseur se fait


l'aide du bit PSA du registre OPTION_REG
o PSA = 0 on utilise le prdiviseur
o PSA = 1 pas de prdiviseur
(affect au chien de garde)

ABBOU 88
Le Timer 0: Le prdiviseur

Le prdiviseur est un diviseur dvnements situ


AVANT lentre de comptage du timer0.

PS2 PS1 PS0 /TIMER0 Temps Timer0 Temps Timer0


Qz = 4Mhz Qz = 8Mhz
0 0 0 2 512 s 256 s
0 0 1 4 1024 s 512 s
0 1 0 8 2048 s 1024 s
0 1 1 16 4096 s 2048 s
1 0 0 32 8192 s 4096 s
1 0 1 64 16384 s 8192 s
1 1 0 128 32768 s 16384 s
1 1 1 256 65536 s 32768 s

ABBOU 89
Le Timer 0:Programme mikroC

void main ()
{ void interrupt ( )
INTCON.GIE = 1 ; {

OPTION_Reg = ? ; if (INTCON. T0IF == 1)


INTCON.T0IE = 1; {
..
..
while (1)
{ INTCON.T0IF = 0;
}

}
}
}
ABBOU 90
APPLICATIONS

Exercice : Clignoter LED / TMR0

Clignoter une LED branche sur RB0, delay voisin


de 0.5s l'aide de TMR0

a) Par scrutation du drapeau T0IF (pas d'interruption)

b) En utilisant l'interruption T0I

ABBOU 91
INTERRUPTIONS
Une interruption est un signal demandant au processeur de
suspendre temporairement lexcution du programme courant afin
deffectuer des oprations particulires.

Intrt: Ce mcanisme permet dimplmenter une raction une


sollicitation
offrant un dlai de rponse trs bref,
programme de faon indpendante du code en cours
dexcution.

Les interruptions peuvent tre dclenches soit par un composant


extrieur au processeur:
changement de valeur logique une entre dsigne
soit par le processeur lui-mme:
chance dune temporisation,
interruption logicielle,
ABBOU 92
...
INTERRUPTIONS
Une interruption provoque larrt du programme principal pour
aller excuter une procdure d'interruption.

A la fin de cette procdure, le microcontrleur reprend le


programme principale lendroit o il la laiss.

A chaque interruption sont associs deux bits, un bit de


validation et un drapeau.

Le premier permet d'autoriser ou non l'interruption, le second


permet au programmeur de savoir de quelle interruption il
s'agit.
Les interruptions sont classes en deux catgories:
- les interruptions primaires
- les interruptions priphriques.
ABBOU 93
INTERRUPTIONS PRIMAIRES
Quelques sources dinterruption

..
.

ABBOU 94
INTERRUPTIONS

Toutes les interruptions peuvent tre


valides/interdites par le bit INTCON.GIE

Toutes les interruptions priphriques peuvent


tre valides/interdites par le bit INTCON.PEIE

Chaque interruption peut tre valide/interdite par


son bit de validation individuel

En rsum, pour valider une interruption


primaires, il faut positionner 3 bits, GIE, PEIE et le
bit individuel de linterruption.

ABBOU 95
INTERRUPTIONS

Elles sont gres par les registres :

ABBOU 96
INTERRUPTIONS

Le registre OPTION permet de choisir le type de front


pour linterruption INT/RB0

- Le registre INTCON

ABBOU 97
Droulement d'une interruption

Lorsque l'vnement dclencheur d'une interruption


intervient, alors :
- son drapeau est positionn 1 (lev).
- Si l'interruption a t valide (bit de validation = 1),
elle est alors dclenche :
le programme arrte ce qu'il est en train de faire et va
excuter la procdure d'interruption qui se trouve
l'adresse 4 en excutant les tapes suivantes :

ABBOU 98
Droulement d'une interruption

l'adresse contenue dans le PC (Program Counter)


est sauvegarde dans la pile, puis remplace par la
valeur 0004

Le bit GIE est plac "0" pour inhiber toutes les


interruptions (afin que le PIC ne soit pas drang
pendant l'excution de la procdure d'interruption).

A la fin de la procdure d'interruption

le bit GIE est remis 1(autorisant ainsi un autre


vnement)

le contenu du PC est recharg partir de la pile


ABBOU 99
Droulement d'une interruption

ABBOU 100
Droulement d'une interruption
Deux remarques importantes sont faire :

Le drapeau reste ltat haut mme aprs le traitement


de linterruption. Par consquent, il faut toujours le
remettre "0" la fin de la routine d'interruption sinon
l'interruption sera dclenche de nouveau

Seul le PC est empil automatiquement. Si cela est


ncessaire, les registres W et STATUS doivent tre
sauvegards en RAM puis restaurs la fin de la routine
pour que le microcontrleur puisse reprendre le
programme principal dans les mmes conditions o il l'a
laiss.
ABBOU 101
Fonction dinterruption
Comme le PIC na quun seul programme de traitement
dinterruption, il faut absolument commencer par rechercher la
source de linterruption, lorsque plusieurs sources sont possibles.

Ceci seffectue en testant les drapeaux (bits dtat). Une


interruption provoque une mise 1 du drapeau correspondant.

A la fin de linterruption, on remet le drapeau 0. Cela permet de


prendre en compte la prochaine interruption.

Exemple : void interrupt()


{ if (INTCON. INTF)
{
.

INTCON. INTF = 0;
}
ABBOU 102
}
Application

Exercice (int.asm)

Programme qui utilise linterruption INT comme suit :


Chaque fois que lentre RB0 passe de 1 0, la LED
branche sur RB1 clignote 4 fois au rythme de la
seconde

ABBOU 103
CONVERTISSEUR ANALOGIQUE NUMERIQUE

Le convertisseur analogique numrique est approximations


successives.

Il possde une rsolution de 10 bits.

Il est compos de :

Un multiplexeur analogique 5 voies (PIC16F876) ou


8 voies PIC16F877).

Un chantillonneur bloqueur.

Un Convertisseur Analogique Numrique de 10 bits.


ABBOU 104
Organisation interne

ABBOU 105
CONVERTISSEUR ANALOGIQUE NUMERIQUE

La conversion se passe en 2 temps :


- 1er temps le signal convertir est appliqu sur lentre
convertir, ce signal doit tre prsent au moins pendant
le temps Tacq (temps dacquisition environ 12S pour
5V).
- 2me temps la conversion, approximations
successives.

Une conversion commence toujours par la mise 1 du bit


GO/DONE du registre ADCON0. Lorsque la conversion
est termine se bit repasse 0.

Donc pour pouvoir lire le rsultat dans les registres


ADRESL et ADRESH il suffit dattendre que le bit
GO/DONE passe 0. ABBOU 106
CONVERTISSEUR ANALOGIQUE NUMERIQUE

La valeur rsultante N de la conversion


ADRSH:ADRESL est gale :

N = ((VIN - VREF-) / (VREF+ - VREF-)) * 1023)

Si VREF+ = VDD = 5V et VREF- = VSS = 0V alors

N (valeur numrise) = 1023 * (VIN / 5 )

ABBOU 107
CONVERTISSEUR ANALOGIQUE NUMERIQUE

Mais avant de raliser une conversion il faut dfinir la


configuration du convertisseur :
- Le nombre dentres analogiques.
- Le nombre dentres logiques.
- Le type de tension de rfrence :
- Interne VREF =VDD-VSS.
-Externe, soit VREF= VREF+ - VSS ou
VREF= VREF+ - VREF-.
Cette configuration ce fait travers le registre ADCON1

ABBOU 108
CONVERTISSEUR ANALOGIQUE NUMERIQUE
Le registre ADCON1
Il permet de choisir une configuration parmi les 16 proposes
Remarque : La configuration de ce registre ADCON1 ne
dispense pas de configurer les registres de directions des
PPORTA et PORTE respectivement TRISA et TRISE.

ABBOU 109
CONVERTISSEUR ANALOGIQUE NUMERIQUE

ABBOU 110
CONVERTISSEUR ANALOGIQUE NUMERIQUE
De plus le bit ADFM permet de choisir entre deux types de
justification pour le rsultat.

Si ADFM=1 alors le rsultat sera justifi droite


dans les registre ADRESH et ADRESL

Si ADFM=0 alors le rsultat sera justifi gauche

ABBOU 111
CONVERTISSEUR ANALOGIQUE NUMERIQUE
Le registre ADCON0
Ce registre permet de dfinir lhorloge de conversion (bit
ADCS1 et ADCS0), le canal convertir (CHS2, CHS1 et
CHS0) et ADON bit de mise en fonctionnement

ABBOU 112
Le registre ADCON0

ABBOU 113

You might also like