Le microcontrôleur PIC 16F876

Transcription

Le microcontrôleur PIC 16F876
STI2D -SIN
Microcontrôleur 16F876
LE MICROCONTRÔLEUR PIC 16F876
I – INTRODUCTION
Les microcontrôleurs PIC utilisent un jeu d'instructions réduit, d'où leur nom d’architecture :
RISC (Reduced Instructions Set Computer).
Les instructions sont codées sur un nombre réduit de bits, ce qui accélère l'exécution du
programme (1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles).
En revanche, le nombre limité d’instructions oblige à se restreindre à des instructions
basiques, contrairement aux systèmes d'architecture CISC (Complete Instructions Set
Computer) qui proposent plus d'instructions, donc codées sur plus de bits, mais réalisant des
traitements plus complexes.
Il existe trois familles de PIC :
 Base-Line :
 Mid-Line :
 High-End :
les instructions sont codées sur 12 bits.
les instructions sont codées sur 14 bits.
les instructions sont codées sur 16 bits.
Ils ne communiquent avec l'extérieur que par des ports d’entrées/sorties (ils ne possèdent
pas de bus d'adresses, de bus de données et de bus de contrôle comme la plupart des
microprocesseurs).
Ces microcontrôleurs méritent bien une introduction.
En effet, ils ont été conçus sur une architecture dite HARVARD (RISC) et non sur un
modèle VON NEUMANN (CISC).
1 L’architecture VON NEUMANN employée par la plupart des microcontrôleurs actuels
(INTEL80XX, motorola HC05, HC08 et HC12, ou ZILOG Z80) est basée sur un bus de
données unique.
Celui-ci
véhicule
les
instructions
programme) et les données.
(du
CPU
8
Mémoires
programme
et données
2 L’architecture HARVARD utilisée par les microcontrôleurs PIC est basée sur deux bus de
données.
Un bus est utilisé pour les
données et un autre pour les
instructions (du programme).
Mémoire
données
Page 1 / 14
8
CPU
14
Mémoire
programme
STI2D -SIN
Microcontrôleur 16F876
Avantages et inconvénients des deux architectures:
Architecture VON NEUMANN
(MOTOROLA, INTEL, ZILOG, ..)
 Jeu d’instructions riches.
 Accès à la mémoire facile.
Avantages
Inconvénients
Architecture HARVARD (RISC)
(MICROCHIP PIC)
 Jeu d’instructions pauvre, mais
facile à mémoriser.
 Le codage des instructions est
facile, chaque instruction est codée
sur un mot et dure un cycle
machine.
 Le code est plus compact.
 Le temps pour exécuter une  Le jeu d’instructions est très
instruction est variable.
pauvre, par exemple pour effectuer
 Le codage des instructions se fait une comparaison il faut faire une
sur plusieurs octets.
soustraction.
 Les accès aux registres internes
et la mémoire sont très délicats.
Remarque :
Le format des instructions du programme spécifié pour un PICs s’exprime en kilo Mots (14
bits pour la famille 16F87X) et non en kilo octets. Comme chaque instruction est codée
par un mot de 14 bits, comparées aux microcontrôleurs classiques (1, 2 ou 3 octets par
instruction), les PICs ont des codes instruction plus compacts et utilisent moins de mémoire.
II - CARACTÉRISTIQUES DU 16F876-20
Que signifie 16F876-20 :
 16 : le circuit appartient à la série Mid-Line.
 F : la mémoire programme est de type FLASH.
 876 : type.
 20 : Quartz à 20MHz au maximum.
Caractéristiques de quelques PICs – Extrait du document constructeur:
Page 2 / 14
STI2D -SIN
Microcontrôleur 16F876
III - ARCHITECTURE INTERNE DU 16F876
Page 3 / 14
STI2D -SIN
Microcontrôleur 16F876
1 - Unité Arithmétique et logique ALU
Comme son nom l’indique, l’unité arithmétique et logique (ALU) effectue au sein du
microcontrôleur PIC toutes les opérations arithmétiques et logiques dans un format de
données 8 bits (addition, soustraction, comparaison logique, ET logique, etc…).
Ces opérations sont effectuées entre
le registre de travail W et une opérande
provenant d’un registre de la RAM.
Les trois bits de poids faible du registre
STATUS sont affectés par le résultat
de l’opération effectuée par l’ ALU .
Registre STATUS:
Z
DC
C
D7 D6 D5 D4 D3 D2 D1
D0
 Z (Zéro): ce bit est mis à l’état logique
“1” si le résultat de l’opération effectuée
est nul.
 DC (Digit Carry): ce bit de demiretenue est mis à l’état logique “1” si
l’opération effectuée entraîne la mise à
l’état logique “1” du bit n°4 du résultat.
 C (Carry): ce bit de retenue est mis à
l’état logique “1” si l’opération effectuée
entraîne un résultat dont le format est
supérieur à 8 bits.
2 - Description des autres éléments
 une mémoire morte de type FLASH de 8 kMots (1Mot = 14 bits).
 une mémoire vive RAM de 368 octets.
 une mémoire EEPROM de 256 octets pour sauvegarder des paramètres.
 un chien de garde WDT (Watch Dog Timer), dispositif permettant une initialisation du PIC
lorsque le programme s’exécute en dehors du temps imparti (erreur programme).
 une surveillance de la tension d’alimentation BOR (Reset si chute de tension VDD).
 22 lignes d’entrées/sorties (chaque sortie peut supporter un courant maximum de 25mA).
 3 Temporisateurs (TIMERs) qui permettent de compter des impulsions reçues sur le
microcontrôleur PIC ou de compter les cycles d’horloge du microcontrôleur PIC (afin de
programmer des temporisations).
Page 4 / 14
STI2D -SIN
Microcontrôleur 16F876
 un module de débogage in-situ ICD ( In Circuit Debugger ).
 2 modules CCP1-2 (Capture Compare PWM) fonctionnant dans l’un des trois modes
suivants :
 Mode capture (CAPTURE) : ce mode permet en outre d’effectuer des mesures de
temps.
 Mode comparaison (COMPARE) : ce mode permet en outre de générer des
événements périodiques.
 Mode PWM (PULSE WIDTH MODULATION) : ce mode permet de générer des
signaux dont le rapport cyclique est variable.
 un convertisseur analogique/numérique 10 bits avec 5 entrées analogiques multiplexées
du port A.
 une interface de communication USART/SCI (Universal Synchronous & Asynchronous
Receiver Transmitter).
 une interface de communication série synchrone SSP/SPI et I2C.
 un oscillateur interne qui permet une fréquence maximale d’oscillation f élevée de 20 MHz.
La fréquence de fonctionnement réelle du microcontrôleur PIC est égale à la fréquence de
l’oscillateur divisée par 4, soit 5 MHz.
Une instruction standard dure donc une période d’horloge, soit 200 ns. ( nano = 10-9 )
 Une seule tension d'alimentation comprise entre 4V et 5,5V.
Page 5 / 14
STI2D -SIN
Microcontrôleur 16F876
IV - DESCRIPTION DES DIFFÉRENTES BROCHES DU 16F876
Voir tableau page suivante.
a - MCLR : cette broche sert à initialiser le microcontrôleur PIC:
 à la mise sous tension par un front montant (min 72 ms, max 72 ms +1024 x Tosc).
Cette initialisation est appelée POR (POWER ON RESET).
Cette broche peut être simplement reliée à l’alimentation VDD si on n’a pas besoin de
RESET externe.
 par la mise à l’état bas de cette broche, reset externe (EXTERNAL RESET).
Si on souhaite implanter un bouton de remise à zéro, on pourra câbler un simple réseau
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
d’alimentation VDD soit suffisamment rapide (au minimum 50 mV/ms).
Le microcontrôleur PIC possède d’autres sources de reset mais cette fois-ci internes (WDT
et BOR vues précédemment).
b - OSC1 et OSC2: ces broches permettent de faire fonctionner l’oscillateur interne du
microcontrôleur PIC de trois façons différentes.
 Un quartz ou résonateur céramique
permet d’obtenir une fréquence de
fonctionnement très précise (voir
document constructeur pour les
valeurs des condensateurs C1, C2 et
de la résistance RS).
Page 6 / 14
STI2D -SIN
Microcontrôleur 16F876
 Un oscillateur externe permet une
synchronisation avec un autre circuit.
 Un simple réseau RC peut suffire,
l’oscillateur est peu précis mais
économique.
c - VDD et VSS: broches d’alimentation du circuit (la tension VDD peut être comprise entre
4V à 5,5V).
Les ports du microcontrôleur 16F876 sont couplés à différents modules (Timers
(ports A et C), convertisseur analogique numérique (port A), plusieurs types de
liaisons séries (port C).
C’est pour cette raison que le nom de ces broches comportent plusieurs
désignations (ex: RA0/AN0, broches RA0 couplée au convertisseur A/N).
d - RA0 à RA5: 6 broches du port A.
Chaque ligne peut être configurée individuellement en entrée ou en sortie.
e - RB0 à RB7: 8 broches du port B.
Chaque ligne peut être configurée individuellement en entrée 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 configurée individuellement en entrée ou en sortie.
Page 7 / 14
STI2D -SIN
Microcontrôleur 16F876
Extrait du document constructeur décrivant le rôle des broches
Page 8 / 14
STI2D -SIN
Microcontrôleur 16F876
V - MÉMOIRES ET REGISTRES
Comme les microcontrôleurs PIC utilisent un bus pour les instructions et un bus pour les
données, il faut considérer deux plans mémoire l’un pour les instructions et l’autre pour les
données ainsi que les registres internes.
1 - Plan Mémoire pour les instructions (code programme)
Le plan mémoire est linéaire.
Les adresses vont de $0000 à $1FFF (8 k mots de 14 bits), par page de 2 K mots.
On peut remarquer, le vecteur d’initialisation (de reset) est figé à l’adresse $0000.
Les microcontrôleurs PIC n’ont qu’un seul vecteur d’interruption à l’adresse $0004.
Lors d’une demande d’interruption, le sous programme associé doit déterminer quel
périphérique a demandé cette interruption.
Les piles utilisées par les sous programmes ne sont pas implantées en mémoire de
données comme dans le cas d’un microcontrôleur classique, mais dans la mémoire
programme.
Elles sont utilisées lors d’appels de sous programmes, on ne peut pas imbriquer plus de 8
sous programmes (ce qui est déjà beaucoup).
Page 9 / 14
STI2D -SIN
Microcontrôleur 16F876
2 - Plan Mémoire des données et des registres internes
Registres internes : SFR (Special Function Register)
Le plan mémoire des données et des registres internes est découpé en 4 zones ou banks
de 128 octets. Pour accéder à une zone, il faut positionner les bits RP0 (bit n°5) et RP1 (bit
n°6) du registre STATUS.
VI - JEU D’INSTRUCTIONS
Le microcontrôleur PIC 16F876 possède 35 instructions de bases.
Chaque instruction ne dure qu’un cycle machine (4/f Q) sauf les instructions de sauts telles
que GOTO, CALL, …
Page 10 / 14
STI2D -SIN
Microcontrôleur 16F876
VII - MODES D’ADRESSAGES
1 - Adressage inhérent ou implicite
Le mnémonique de l'instruction mentionne la donnée sur laquelle porte l'opération (contenu
des registres). Aucune donnée n’est nécessaire.
Exemples: CLRW
NOP
SLEEP
; Mise à zéro de W
; Aucune opération (temporisation)
; Mise en sommeil du PIC
2 - Adressage immédiat
L'instruction porte sur une valeur constante indiquée immédiatement après le mnémonique.
Syntaxe:
MNÉMONIQUE
Exemples: MOVLW
ADDLW
constante
255
0x20
; Charger 0xFF dans W
; Additionner 32 avec W et mettre le résultat dans W
3 - Adressages direct et étendu
Les microcontrôleurs PIC ne disposent pas vraiment de modes d’adressages DIRECT et
ÉTENDU, l’adressage de la mémoire de données se fait dans la page sélectionnée par les
bit n°5 (RP0) et n°6 (RP1) du registre STATUS:
Registre STATUS:
IRP RP1 RP0 TO PD
D7
Syntaxe:
MNÉMONIQUE
D6
D5
D4
D3
Z
DC
C
D2
D1
D0
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
S’assurer que nous sommes bien en BANK 0
BCF
STATUS,5
BCF
STATUS,6 ; RP0 = 0 et RP1 = 0  sélection de la BANK 0
MOVF
MOVWF
VARIABLE,0 ; Transférer le contenu de VARIABLE dans W
PORTB
; Transférer le contenu de W dans le registre
; PORTB
Si le port B est configuré en sortie, tous les bits de ce port sont à l’état logique “0” sauf le bit
de plus faible poids.
Page 11 / 14
STI2D -SIN
Microcontrôleur 16F876
4 - Adressage relatif
Ce mode d'adressage n’existe pas vraiment, mais des instructions permettent de réaliser
des sauts de programme, ceux sont les instructions GOTO et CALL.
Syntaxe:
MNÉMONIQUE
Adresse
Exemples: Sauts dans la même page mémoire;
CALL
TEMPO
; Appeler le sous programme TEMPO
GOTO
FIN
; Branchement à l’étiquette FIN
5 - Adressage indirect ou indexé
Les microcontrôleurs PIC disposent à travers les registres INDF (ou f0) et FSR (ou f4) d’un
mode d’adressage indexé.
La structure est un peu particulière, le registre FSR est le registre d’index et le registre
INDF permet d’accéder à son contenu.
Syntaxe:
MNÉMONIQUE
INDF,d
Exemple:
Récupérer le 4ème élément d’une table TAB_VAL : PORTB  TAB_VAL[4]
MOVLW
ADDLW
TAB_VAL
4
; W  Adresse de TAB_VAL
;WW+4
MOWF
MOVF
MOVWF
FSR
INDF,0
PORTB
; Adresse + 4 dans le registre d’index FSR
; Transfert du contenu de TABLE[4] dans W
; Transfert du contenu de W dans le registre PORTB
Page 12 / 14
STI2D -SIN
Microcontrôleur 16F876
6 - Manipulation de bits
a - Forçage de bits
Il s’agit de 2 instructions permettant de mettre à l’état logique “0” ou “1” un bit d'un octet de
l'espace mémoire SFR.
Elles sont le plus souvent utilisées pour positionner des bits des registres du
microcontrôleur PIC.
Syntaxe:
ou
Exemples:
BSF f,b
BCF f,b
pour mettre à l’état logique “1”
pour mettre à l’état logique “0”
BCF PORTA,2
BSF STATUS,0
; Mise à l’état logique “0” du bit n°2 du registre
; PORTA
; Mise à l’état logique “1”du bit n°0 du registre STA; TUS, c'est-à-dire la retenue (CARRY)
b - Test de bits.
Il s’agit de 2 instructions permettant de tester un bit d'un octet de l'espace mémoire SFR.
Elles sont le plus souvent utilisées pour déterminer l’état des bits des registres du
microcontrôleur PIC.
En fonction du résultat du test :
 le programme se poursuit avec l'instruction suivante (résultat du test faux).
 le programme saute l’instruction qui suit le test.
Syntaxe:
ou
Exemple:
SINON
FSI
BTFSS
BTFSC
f,b
f,b
MOVF
CMP,1
BTFSS
GOTO
MOVLW
MOVWF
GOTO
DECF
………..
……….
STATUS,Z
SINON
0xFF
CMP
FSI
CMP,1
; Transférer le contenu CMP dans CMP
; Cela permet de tester si le contenu de CMP
; est nul en positionnant le bit Z
; Tester le bit Z ?
; Z = “0” alors exécuter le code pour SINON
; Alors CMP  0xFF
; aller à FSI
; CMP  CMP -1 (Décrémenter CMP)
Page 13 / 14
STI2D -SIN
Microcontrôleur 16F876
VIII - CONFIGURATION DES PORTS (REGISTRES PORTX ET TRISX)
Tous les ports sont pilotés par deux registres :
 le registre TRISX.
C’est le registre de direction.
Il détermine si le port X ou certaines lignes de port fonctionnent en entrée ou en sortie.
L’écriture d’un “1” logique correspond à une entrée (“1” comme Input) et l’écriture d’un
“0” logique correspond à une sortie (“0” comme Output).
 le registre PORTX.
Il détermine l’état des lignes configurées en sortie par TRISX.
Remarques:
 lors de l’initialisation (RESET), toutes les lignes des ports sont configurées en entrées.
 les registres TRISX appartiennent à la BANQUE 1.
Lors de l’initialisation du microcontrôleur PIC, il ne faut pas oublier de changer de page
mémoire pour les configurer.
Exemple : On souhaite obtenir la configuration suivante des ports A et B (S: sortie, E:
entrée).
Sens
NC
NC
Port A
NC
NC RA5 RA4 RA3 RA2 RA1 RA0
Sens
E
Port B
E
S
S
E
S
S
E
S
S
S
S
E
E
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Les registres TRISX devront donc avoir le contenu suivant:
TRISA = B’xx010001’
TRISB = B’11001001’
Programme en assembleur
; Accéder aux registres TRISX (Banque mémoire 1)
BSF
STATUS,RP0
; RP0 = “1”
BCF
STATUS,RP1
; RP1 = “0”
; Configurer les registres de direction
MOVLW
B’11010001’
MOVWF
TRISA
; TRISA = B’xx010001’
MOVLW
MOVWF
B’11001001’
TRISB
; TRISB = B’11001001’
CLRF
BSF
PORTA
PORTB,2
; mettre à zéro toutes les sorties du port A
; mettre à “1” le bit n°2 du registre PORTB
Bernard Lewandowicz 16/05/14 C_BL_Le_microcontroleur_PIC16F876.odt
Page 14 / 14