Vous êtes sur la page 1sur 113

Le PIC16F877

Introduction aux microcontrleurs


Illustration par le PIC16F877

Dr : A. ABBOU
IGA 2013

ABBOU

DEFINITION
Un microcontrleur est un C.I qui rassemble les
lments essentiels d'un ordinateur :
Processeur
Mmoires
Units priphriques et interfaces dE/S

ABBOU

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

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

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

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

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

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

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

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
MOV CX,100
MOV DI,dst
MOV SI,src
REP MOVSB

CISC
MOV CX,100
MOV DI,dst
MOV SI,src
boucle:
MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
DEC CX
JNZ boucle

Pascal

Var
i : integer;
src, dst : array[1..100] of byte;
for i:=1 to 100 do
dst[i]=src[i];

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
d

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

Adresse SFR ou RAM en hexa.

Adresse SFR ou RAM en binaire.

fff ffff

Valeur immdiate sur 8bits ou


Adresse de destination sur 11
bits.

Valeur binaire, elle dtermine le


bit modifier ou tester

bbb

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 cidessous.
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
;affecte labrviation eteindre linstruction
bcf PORTC,5
#DEFINE allumer bsf PORTC,5 ;affecte labrviation allumer linstruction
bsf PORTC,5
#DEFINE eteindre bcf PORTC,5

Allumer
Eteindre

; allume la LED branche sur la broche 5 de PORTC


; 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
66
tous les bits de la case 16Fh sinon mettreABBOU
1 tous les bits de la case 1EFh

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 :
principal
t2 :

; il faut dfinir W dans le programme


movwf AN2
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
69
zro tous les bits de la case 16Fh ABBOU
sinon mettre 1 tous les bits de la case
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
ABBOU
72
La majorit des broches sont
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
ABBOU
77
ce port (RE, WE et CS)

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
Qz = 4Mhz

Temps Timer0
Qz = 8Mhz

512 s

256 s

1024 s

512 s

2048 s

1024 s

16

4096 s

2048 s

32

8192 s

4096 s

64

16384 s

8192 s

128

32768 s

16384 s

256

65536 s

32768 s

ABBOU

89

Le Timer 0:Programme mikroC


void main ()
{
INTCON.GIE = 1 ;

void interrupt ( )
{

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

Vous aimerez peut-être aussi