Vous êtes sur la page 1sur 14

STI2D -SIN Microcontrleur 16F876

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


basiques, contrairement aux systmes d'architecture CISC (Complete Instructions Set
Computer) qui proposent plus d'instructions, donc codes sur plus de bits, mais ralisant des
traitements 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
microprocesseurs).

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

1 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
donnes unique.
Celui-ci vhicule les instructions (du
programme) et les donnes. CPU 8 Mmoires
programme
et donnes

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

Mmoire 8 CPU 14 Mmoire


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

Page 1 / 14
STI2D -SIN Microcontrleur 16F876
Avantages et inconvnients des deux architectures:

Architecture VON NEUMANN Architecture HARVARD (RISC)


(MOTOROLA, INTEL, ZILOG, ..) (MICROCHIP PIC)
Jeu dinstructions riches. Jeu dinstructions pauvre, mais
Accs la mmoire facile. facile mmoriser.
Le codage des instructions est
Avantages facile, chaque instruction est code
sur un mot et dure un cycle
machine.
Le code est plus compact.
Le temps pour excuter une Le jeu dinstructions est trs
instruction est variable. pauvre, par exemple pour effectuer
Le codage des instructions se fait une comparaison il faut faire une
Inconvnients
sur plusieurs octets. soustraction.
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 microcontrleurs 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:

Page 2 / 14
STI2D -SIN Microcontrleur 16F876
III - ARCHITECTURE INTERNE DU 16F876

Page 3 / 14
STI2D -SIN Microcontrleur 16F876
1 - Unit Arithmtique et logique ALU
Comme son nom lindique, lunit arithmtique et logique (ALU) effectue au sein du
microcontrleur PIC toutes les oprations arithmtiques et logiques dans un format de
donnes 8 bits (addition, soustraction, comparaison logique, ET logique, etc).
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 l ALU .
Registre STATUS:

Z DC C
D7 D6 D5 D4 D3 D2 D1 D0
Z (Zro): ce bit est mis ltat logique
1 si le rsultat de lopration effectue
est nul.
DC (Digit Carry): ce bit de demi-
retenue est mis ltat logique 1 si
lopration 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


microcontrleur PIC ou de compter les cycles dhorloge du microcontrleur PIC (afin de
programmer des temporisations).

Page 4 / 14
STI2D -SIN Microcontrleur 16F876

un module de dbogage in-situ ICD ( In Circuit Debugger ).


2 modules CCP1-2 (Capture Compare PWM) fonctionnant dans lun des trois modes
suivants :
Mode capture (CAPTURE) : ce mode permet en outre deffectuer des mesures de
temps.
Mode comparaison (COMPARE) : ce mode permet en outre de gnrer des
vnements priodiques.

Mode PWM (PULSE WIDTH MODULATION) : ce mode permet de gnrer des


signaux dont le rapport cyclique est variable.

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. ( nano = 10-9 )
Une seule tension d'alimentation comprise entre 4V et 5,5V.

Page 5 / 14
STI2D -SIN Microcontrleur 16F876

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


microcontrleur PIC de trois faons diffrentes.

Un quartz ou rsonateur cramique


permet dobtenir une frquence de
fonctionnement trs prcise (voir
document constructeur pour les
valeurs des condensateurs C1, C2 et
de la rsistance RS).

Page 6 / 14
STI2D -SIN Microcontrleur 16F876
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), convertisseur analogique numrique (port A), plusieurs types de
liaisons sries (port C).
Cest pour cette raison que le nom de ces broches comportent plusieurs
dsignations (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.

Page 7 / 14
STI2D -SIN Microcontrleur 16F876
Extrait du document constructeur dcrivant le rle des broches

Page 8 / 14
STI2D -SIN Microcontrleur 16F876
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
priphrique a demand cette interruption.

Les piles utilises par les sous programmes ne sont pas implantes en mmoire de
donnes 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).

Page 9 / 14
STI2D -SIN Microcontrleur 16F876

2 - Plan Mmoire des donnes et des registres internes

Registres internes : SFR (Special Function Register)


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 registre STATUS.

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,

Page 10 / 14
STI2D -SIN Microcontrleur 16F876
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.

Page 11 / 14
STI2D -SIN Microcontrleur 16F876
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

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 ;WW+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

Page 12 / 14
STI2D -SIN Microcontrleur 16F876
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
microcontrleur 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 registre


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

Page 13 / 14
STI2D -SIN Microcontrleur 16F876

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

Bernard Lewandowicz 16/05/14 C_BL_Le_microcontroleur_PIC16F876.odt

Page 14 / 14