Vous êtes sur la page 1sur 13

Microcontrleur 16F876

1/13
LE MICROCONTRLEUR PIC 16F876

I INTRODUCTION

Les microcontrleurs PIC utilisent un jeu d'instructions rduit, d'o leur nom darchitecture :
RISC (Reduced Instructions Set Computer).

Les instructions sont codes sur un nombre rduit de bits, ce qui acclre l'excution du
programme (1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles).

En revanche, le nombre limit dinstructions oblige se restreindre des instructions basi-
ques, contrairement aux systmes d'architecture CISC (Complete Instructions Set Computer)
qui proposent plus d'instructions, donc codes sur plus de bits, mais ralisant des traite-
ments plus complexes.

Il existe trois familles de PIC :

Base-Line : les instructions sont codes sur 12 bits.

Mid-Line : les instructions sont codes sur 14 bits.

High-End : les instructions sont codes sur 16 bits.

Ils ne communiquent avec l'extrieur que par des ports dentres/sorties (ils ne possdent
pas de bus d'adresses, de bus de donnes et de bus de contrle comme la plupart des mi-
croprocesseurs).

Ces microcontrleurs mritent bien une introduction.
En effet, ils ont t conus sur une architecture dite HARVARD (RISC) et non sur un
modle VON NEUMANN (CISC).

Larchitecture VON NEUMANN employe par la plupart des microcontrleurs actuels
(INTEL80XX, motorola HC05, HC08 et HC12, ou ZILOG Z80) est base sur un bus de don-
nes unique.

Celui-ci vhicule les instructions (du programme) et les donnes.

Larchitecture HARVARD utilise par les microcontrleurs PIC est base sur deux bus de
donnes.

Un bus est utilis pour les donnes et un autre pour les instructions (du programme).


CPU Mmoires
programme
et donnes
8
CPU Mmoire
programme
14 8
Mmoire
donnes
Microcontrleur 16F876
2/13
Avantages et inconvnients des deux architectures :

Architecture VON NEUMANN
(MOTOROLA, INTEL, ZILOG, ..)
Architecture HARVARD (RISC)
(MICROCHIP PIC)
Avantages
Jeu dinstructions riches.
Accs la mmoire facile.
Jeu dinstructions pauvre, mais fa-
cile mmoriser.
Le codage des instructions est fa-
cile, chaque instruction est code
sur un mot et dure un cycle machi-
ne.
Le code est plus compact.
Inconvnients
Le temps pour excuter une ins-
truction est variable.
Le codage des instructions se fait
sur plusieurs octets.

Le jeu dinstructions est trs pau-
vre, par exemple pour effectuer une
comparaison il faut faire une sous-
traction.
Les accs aux registres internes
et la mmoire sont trs dlicats.

Remarque :

Le format des instructions du programme spcifi pour un PICs sexprime en Kilo Mots (14
bits pour la famille 16F87X) et non en kilo octets.

Comme chaque instruction est code par un mot de 14 bits, compares aux microcontr-
leurs classiques (1, 2 ou 3 octets par instruction), les PICs ont des codes instruction plus
compacts et utilisent moins de mmoire.

II - CARACTRISTIQUES DU 16F876-20

Que signifie 16F876-20 :
16 : le circuit appartient la srie Mid-Line.
F : la mmoire programme est de type FLASH.
876 : type.
20 : Quartz 20MHz au maximum.

Caractristiques de quelques PICs Extrait du document constructeur :

Microcontrleur 16F876
3/13
III - ARCHITECTURE INTERNE DU 16F876

1 - Unit Arithmtique et logique ALU

Comme son nom lindique, lunit arithmtique et logique (ALU) effectue au sein du micro-
contrleur PIC toutes les oprations arithmtiques et logiques dans un format de donnes 8
bits (addition, soustraction, comparaison logique, ET logique, etc).
Microcontrleur 16F876
4/13
Ces oprations sont effectues entre
le registre de travail W et une oprande
provenant dun registre de la RAM.

Les trois bits de poids faible du registre
STATUS sont affects par le rsultat
de lopration effectue par lALU .

Registre STATUS :

Z DC C
D7 D6 D5 D4 D3 D2 D1 D0

Z (Zro) : ce bit est mis ltat logi-
que 1 si le rsultat de lopration ef-
fectue est nul.

DC (Digit Carry) : ce bit de demi-rete-
nue est mis ltat logique 1 si lop-
ration effectue entrane la mise ltat
logique 1 du bit n4 du rsultat.

C (Carry) : ce bit de retenue est mis
ltat logique 1 si lopration effectue
entrane un rsultat dont le format est
suprieur 8 bits.

2 - Description des autres lments

une mmoire morte de type FLASH de 8 Kmots (1mot = 14 bits).

une mmoire vive RAM de 368 octets.

une mmoire EEPROM de 256 octets pour sauvegarder des paramtres.

un chien de garde WDT (Watch Dog Timer), dispositif permettant une initialisation du PIC
lorsque le programme sexcute en dehors du temps imparti (erreur programme).

une surveillance de la tension dalimentation BOR (Reset si chute de tension VDD).

22 lignes dentres/sorties (chaque sortie peut supporter un courant maximum de 25mA).

3 Temporisateurs (TIMERs) qui permettent de compter des impulsions reues sur le mi-
crocontrleur PIC ou de compter les cycles dhorloge du microcontrleur PIC (afin de pro-
grammer des temporisations).

un module de dbuggage in-situs ICD ( In Circuit Debugger ).

2 modules CCP1-2 (Capture Compare PWM) fonctionnant dans lun des trois modes sui-
vants :

Mode capture (CAPTURE) : ce mode permet en outre deffectuer des mesures de
temps.

Mode comparaison (COMPARE) : ce mode permet en outre de gnrer des vne-
ments priodiques.

Mode PWM (PULSE WIDTH MODULATION) : ce mode permet de gnrer des si-
gnaux dont le rapport cyclique est variable.

Microcontrleur 16F876
5/13
un convertisseur analogique/numrique 10 bits avec 5 entres analogiques multiplexes
du port A.

une interface de communication USART/SCI (Universal Synchronous & Asynchronous
Receiver Transmitter).

une interface de communication srie synchrone SSP/SPI et I2C.

un oscillateur interne qui permet une frquence maximale doscillation f leve de 20 Mhz.
La frquence de fonctionnement relle du microcontrleur PIC est gale la frquence de
loscillateur divise par 4, soit 5 Mhz.
Une instruction standard dure donc une priode dhorloge, soit 200 ns.

Une seule tension d'alimentation comprise entre 4V et 5,5V.

IV - DESCRIPTION DES DIFFRENTES BROCHES DU 16F876


Voir tableau page suivante.

a - MCLR : cette broche sert initialiser le microcontrleur PIC :

la mise sous tension par un front montant (min 72 ms, max 72 ms +1024 x Tosc).
Cette initialisation est appele POR (POWER ON RESET).
Cette broche peut tre simplement relie lalimentation VDD si on na pas besoin de
RESET externe.

par la mise ltat bas de cette broche, reset externe (EXTERNAL RESET).
Si on souhaite implanter un bouton de remise zro, on pourra cbler un simple rseau
RC sur la broche MCLR.

Remarque importante :

On peut se passer de circuit RC la seule condition que le temps de mont de la tension
dalimentation VDD soit suffisamment rapide (au minimum 50 mV/ms).

Le microcontrleur PIC possde dautres sources de reset mais cette fois-ci internes (WDT
et BOR vues prcdemment).

b - OSC1 et OSC2 : ces broches permettent de faire fonctionner loscillateur interne du mi-
crocontrleur PIC de trois faons diffrentes.

Microcontrleur 16F876
6/13
Un quartz ou rsonateur cramique
permet dobtenir une frquence de
fonctionnement trs prcise (voir
document constructeur pour les va-
leurs des condensateurs C1, C2 et
de la rsistance R
S
).

Un oscillateur externe permet une
synchronisation avec un autre circuit.




Un simple rseau RC peut suffire,
loscillateur est peu prcis mais
conomique.







c - VDD et VSS : broches dalimentation du circuit (la tension VDD peut tre comprise entre
4V 5,5V).

Les ports du microcontrleur 16F876 sont coupls diffrents modules (Timers
(ports A et C), convertissseur analogique numrique (port A), plusieurs types de liai-
sons sries (port C).
Cest pour cette raison que le nom de ces broches comportent plusieurs dsigna-
tions (ex : RA0/AN0, broches RA0 couple au convertisseur A/N).

d - RA0 RA5 : 6 broches du port A.
Chaque ligne peut tre configure individuellement en entre ou en sortie.

e - RB0 RB7 : 8 broches du port B.
Chaque ligne peut tre configure individuellement en entre ou en sortie.
Les broches RB6/PGC (ProGramming Clock) et RB7/PGD (ProGramming Data) permettent
la connexion un module ICD (In Circuit Debugger, mise au point de programme sur site).

f - RC0 RC7 : 8 broches du port C.
Chaque ligne peut tre configure individuellement en entre ou en sortie.



Microcontrleur 16F876
7/13
Extrait du document constructeur dcrivant le rle des broches







Microcontrleur 16F876
8/13
V - MMOIRES ET REGISTRES

Comme les microcontrleurs PIC utilisent un bus pour les instructions et un bus pour les
donnes, il faut considrer deux plans mmoire lun pour les instructions et lautre pour les
donnes ainsi que les registres internes.

1 - Plan Mmoire pour les instructions (code programme)

Le plan mmoire est linaire.
Les adresses vont de $0000 $1FFF (8 k mots de 14 bits), par page de 2 K mots.

On peut remarquer, le vecteur dinitialisation (de reset) est fig ladresse $0000.

Les microcontrleurs PIC nont quun seul vecteur dinterruption ladresse $0004.
Lors dune demande dinterruption, le sous programme associ doit dterminer quel pri-
phrique a demand cette interruption.

Les piles utilises par les sous programmes ne sont pas implantes en mmoire de don-
nes comme dans le cas dun microcontrleur classique, mais dans la mmoire programme.
Elles sont utilises lors dappels de sous programmes, on ne peut pas imbriquer plus de 8
sous programmes (ce qui est dj beaucoup).

2 - Plan Mmoire des donnes et des registres internes

Registres internes : SFR (Special Function Register)
Microcontrleur 16F876
9/13
Le plan mmoire des donnes et des registres internes est dcoup en 4 zones ou banks
de 128 octets.
Pour accder une zone, il faut positionner les bits RP0 (bit n5) et RP1 (bit n6) du regis-
tre STATUS.



Microcontrleur 16F876
10/13
VI - JEU DINSTRUCTIONS

Le microcontrleur PIC 16F876 possde 35 instructions de bases.
Chaque instruction ne dure quun cycle machine (4/f
Q
) sauf les instructions de sauts telles
que GOTO, CALL,



Microcontrleur 16F876
11/13
VII - MODES DADRESSAGES

1 - Adressage inhrent ou implicite

Le mnmonique de l'instruction mentionne la donne sur laquelle porte l'opration (contenu
des registres). Aucune donne nest ncessaire.

Exemples : CLRW ; Mise zro de W
NOP ; Aucune opration (temporisation)
SLEEP ; Mise en sommeil du PIC

2 - Adressage immdiat

L'instruction porte sur une valeur constante indique immdiatement aprs le mnmonique.

Syntaxe : MNMONIQUE constante

Exemples : MOVLW 255 ; Charger 0xFF dans W
ADDLW 0x20 ; Additionner 32 avec W et mettre le rsultat dans W

3 - Adressages direct et tendu

Les microcontrleurs PIC ne disposent pas vraiment de modes dadressages DIRECT et
TENDU, ladressage de la mmoire de donnes se fait dans la page slectionne par les
bit n5 (RP0) et n6 (RP1) du registre STATUS :

Registre STATUS :

IRP RP1 RP0 TO PD Z DC C
D7 D6 D5 D4 D3 D2 D1 D0

Syntaxe : MNMONIQUE f,d

Si d = 0 Registre W comme destination (WORKING)
Si d = 1 Registre f comme destination (un des registres SFR)

Exemple : PORTB EQU 0x06
VARIABLE EQU 0x01 : page 0

Sassurer que nous sommes bien en BANK 0
BCF STATUS,5
BCF STATUS,6 ; RP0 = 0 et RP1 = 0 slection de la BANK 0

MOVF VARIABLE,0 ; Transfrer le contenu de VARIABLE dans W
MOVWF PORTB ; Transfrer le contenu de W dans le registre
; PORTB

Si le port B est configur en sortie, tous les bits de ce port sont ltat logique 0 sauf le bit
de plus faible poids.

4 - Adressage relatif

Ce mode d'adressage nexiste pas vraiment, mais des instructions permettent de raliser
des sauts de programme, ceux sont les instructions GOTO et CALL.

Syntaxe : MNMONIQUE Adresse

Exemples : Sauts dans la mme page mmoire ;
CALL TEMPO ; Appeler le sous programme TEMPO
GOTO FIN ; Branchement ltiquette FIN
Microcontrleur 16F876
12/13
5 - Adressage indirect ou index

Les microcontrleurs PIC disposent travers les registres INDF (ou f0) et FSR (ou f4) dun
mode dadressage index.
La structure est un peu particulire, le registre FSR est le registre dindex et le registre INDF
permet daccder son contenu.

Syntaxe : MNMONIQUE INDF,d

Exemple : Rcuprer le 4me lment dune table TAB_VAL : PORTB TAB_VAL[4]

MOVLW TAB_VAL ; W Adresse de TAB_VAL
ADDLW 4 ; W W + 4

MOWF FSR ; Adresse + 4 dans le registre dindex FSR
MOVF INDF,0 ; Transfert du contenu de TABLE[4] dans W
MOVWF PORTB ; Transfert du contenu de W dans le registre PORTB

6 - Manipulation de bits

a - Forage de bits

Il sagit de 2 instructions permettant de mettre ltat logique 0 ou 1 un bit d'un octet de
l'espace mmoire SFR.
Elles sont le plus souvent utilises pour positionner des bits des registres du microcontr-
leur PIC.

Syntaxe : BSF f,b pour mettre ltat logique 1
ou BCF f,b pour mettre ltat logique 0

Exemples : BCF PORTA,2 ; Mise ltat logique 0 du bit n2 du regist re
; PORTA
BSF STATUS,0 ; Mise ltat logique 1du bit n0 du registre STA-
; TUS, c'est--dire la retenue (CARRY)

b - Test de bits.

Il sagit de 2 instructions permettant de tester un bit d'un octet de l'espace mmoire SFR.
Elles sont le plus souvent utilises pour dterminer ltat des bits des registres du microcon-
trleur PIC.

En fonction du rsultat du test :
le programme se poursuit avec l'instruction suivante (rsultat du test faux).
le programme saute linstruction qui suit le test.

Syntaxe : BTFSS f,b
ou BTFSC f,b

Exemple : MOVF CMP,1 ; Transfrer le contenu CMP dans CMP
; Cela permet de tester si le contenu de CMP
; est nul en positionnant le bit Z
BTFSS STATUS,Z ; Tester le bit Z ?
GOTO SINON ; Z = 0 alors excuter le code pour SINON
MOVLW 0xFF ; Alors CMP 0xFF
MOVWF CMP
GOTO FSI ; aller FSI
SINON DECF CMP,1 ; CMP CMP -1 (Dcrmenter CMP)
..
FSI .
Microcontrleur 16F876
13/13
VIII - CONFIGURATION DES PORTS (REGISTRES PORTX ET TRISX)

Tous les ports sont pilots par deux registres :

le registre TRISX.
Cest le registre de direction.
Il dtermine si le port X ou certaines lignes de port fonctionnent en entre ou en sortie.
Lcriture dun 1 logique correspond une entre (1 comme Input) et lcriture dun
0 logique correspond une sortie (0 comme Output).

le registre PORTX.
Il dtermine ltat des lignes configures en sortie par TRISX.

Remarques :
lors de linitialisation (RESET), toutes les lignes des ports sont configures en entres.
les registres TRISX appartiennent la BANQUE 1.
Lors de linitialisation du microcontrleur PIC, il ne faut pas oublier de changer de page
mmoire pour les configurer.

Exemple : On souhaite obtenir la configuration suivante des ports A et B (S :sortie,
E :entre).
Sens NC NC S E S S S E
Port A NC NC RA5 RA4 RA3 RA2 RA1 RA0

Sens E E S S E S S E
Port B RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

Les registres TRISX devront donc avoir le contenu suivant :

TRISA = Bxx010001
TRISB = B11001001

Programme en assembleur

; Accder aux registres TRISX (Banque mmoire 1)
BSF STATUS,RP0 ; RP0 = 1
BCF STATUS,RP1 ; RP1 = 0

; Configurer les registres de direction
MOVLW B11010001
MOVWF TRISA ; TRISA = Bxx010001

MOVLW B11001001
MOVWF TRISB ; TRISB = B11001001

CLRF PORTA ; mettre zro toutes les sorties du port A
BSF PORTB,2 ; mettre 1 le bit n2 du registre PORTB