le microcontrôleur pic 16f876 -...

14
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 : les instructions sont codées sur 12 bits. Mid-Line : les instructions sont codées sur 14 bits. High-End : 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 (du programme) et les 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). Page 1 / 14 CPU Mémoires programme et données 8 CPU Mémoire programme 14 8 Mémoire données

Upload: trananh

Post on 07-May-2018

238 views

Category:

Documents


4 download

TRANSCRIPT

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 duprogramme (1 cycle machine par instruction sauf pour les sauts qui requirent 2 cycles).

En revanche, le nombre limité d’instructions oblige à se restreindre à des instructionsbasiques, contrairement aux systèmes d'architecture CISC (Complete Instructions SetComputer) qui proposent plus d'instructions, donc codées sur plus de bits, mais réalisant destraitements plus complexes.

Il existe trois familles de PIC :

Base-Line : les instructions sont codées sur 12 bits. Mid-Line : les instructions sont codées sur 14 bits. High-End : 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èdentpas de bus d'adresses, de bus de données et de bus de contrôle comme la plupart desmicroprocesseurs).

Ces microcontrôleurs méritent bien une introduction. En effet, ils ont été conçus sur une architecture dite HARVARD (RISC) et non sur unmodè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 dedonnées unique.

Celui-ci véhicule les instructions (duprogramme) et les données.

2 L’architecture HARVARD utilisée par les microcontrôleurs PIC est basée sur deux bus dedonnées.

Un bus est utilisé pour lesdonnées et un autre pour lesinstructions (du programme).

Page 1 / 14

CPU Mémoiresprogrammeet données

8

CPU Mémoireprogramme

148Mémoiredonnées

STI2D -SIN Microcontrôleur 16F876

Avantages et inconvénients des deux architectures:

Architecture VON NEUMANN (MOTOROLA, INTEL, ZILOG, ..)

Architecture HARVARD (RISC) (MICROCHIP PIC)

Avantages

Jeu d’instructions riches. Accès à la mémoire facile.

Jeu d’instructions pauvre, maisfacile à mémoriser. Le codage des instructions estfacile, chaque instruction est codéesur un mot et dure un cyclemachine. Le code est plus compact.

Inconvénients

Le temps pour exécuter uneinstruction est variable. Le codage des instructions se faitsur plusieurs octets.

Le jeu d’instructions est trèspauvre, par exemple pour effectuerune comparaison il faut faire unesoustraction. Les accès aux registres interneset 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 (14bits pour la famille 16F87X) et non en kilo octets. Comme chaque instruction est codéepar un mot de 14 bits, comparées aux microcontrôleurs classiques (1, 2 ou 3 octets parinstruction), 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 ALUComme son nom l’indique, l’unité arithmétique et logique (ALU) effectue au sein dumicrocontrôleur PIC toutes les opérations arithmétiques et logiques dans un format dedonnées 8 bits (addition, soustraction, comparaison logique, ET logique, etc…). Ces opérations sont effectuées entrele registre de travail W et une opérandeprovenant d’un registre de la RAM.

Les trois bits de poids faible du registreSTATUS sont affectés par le résultatde 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éeest nul.

DC (Digit Carry): ce bit de demi-retenue est mis à l’état logique “1” sil’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éeentraîne un résultat dont le format estsupé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 PIClorsque 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 lemicrocontrôleur PIC ou de compter les cycles d’horloge du microcontrôleur PIC (afin deprogrammer 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 modessuivants :

Mode capture (CAPTURE) : ce mode permet en outre d’effectuer des mesures detemps.

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 dessignaux dont le rapport cyclique est variable.

un convertisseur analogique/numérique 10 bits avec 5 entrées analogiques multiplexéesdu port A.

une interface de communication USART/SCI (Universal Synchronous & AsynchronousReceiver 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 del’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 (WDTet BOR vues précédemment).

b - OSC1 et OSC2: ces broches permettent de faire fonctionner l’oscillateur interne dumicrocontrôleur PIC de trois façons différentes.

Un quartz ou résonateur céramiquepermet d’obtenir une fréquence defonctionnement très précise (voirdocument constructeur pour lesvaleurs des condensateurs C1, C2 et

de la résistance RS).

Page 6 / 14

STI2D -SIN Microcontrôleur 16F876

Un oscillateur externe permet unesynchronisation 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 entre4V à 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 deliaisons séries (port C). C’est pour cette raison que le nom de ces broches comportent plusieursdé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) permettentla 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 lesdonnées, il faut considérer deux plans mémoire l’un pour les instructions et l’autre pour lesdonné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 quelpériphérique a demandé cette interruption.

Les piles utilisées par les sous programmes ne sont pas implantées en mémoire dedonnées comme dans le cas d’un microcontrôleur classique, mais dans la mémoireprogramme. Elles sont utilisées lors d’appels de sous programmes, on ne peut pas imbriquer plus de 8sous 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 banksde 128 octets. Pour accéder à une zone, il faut positionner les bits RP0 (bit n°5) et RP1 (bitn°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/fQ) sauf les instructions de sauts tellesque 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 (contenudes registres). Aucune donnée n’est nécessaire.

Exemples: CLRW ; Mise à zéro de W NOP ; Aucune opération (temporisation) SLEEP ; 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 constante

Exemples: MOVLW 255 ; Charger 0xFF dans WADDLW 0x20 ; 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 lesbit n°5 (RP0) et n°6 (RP1) du registre STATUS:

Registre STATUS:

IRP RP1 RP0 TO PD Z DC C

D7 D6 D5 D4 D3 D2 D1 D0

Syntaxe: MNÉMONIQUE f,d

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

Exemple: PORTB EQU 0x06VARIABLE 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 VARIABLE,0 ; Transférer le contenu de VARIABLE dans W MOVWF 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 bitde 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éaliserdes 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’unmode d’adressage indexé. La structure est un peu particulière, le registre FSR est le registre d’index et le registreINDF 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 TAB_VAL ; W Adresse de TAB_VAL ADDLW 4 ; W W + 4

MOWF FSR ; Adresse + 4 dans le registre d’index 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 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 del'espace mémoire SFR. Elles sont le plus souvent utilisées pour positionner des bits des registres dumicrocontrôleur PIC.

Syntaxe: BSF f,b pour mettre à l’état logique “1”ou BCF f,b pour mettre à l’état logique “0”

Exemples: BCF PORTA,2 ; Mise à l’état logique “0” du bit n°2 du registre ; PORTA

BSF STATUS,0 ; 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 dumicrocontrô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: BTFSS f,b ou BTFSC f,b

Exemple: MOVF 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

BTFSS STATUS,Z ; Tester le bit Z ? GOTO SINON ; Z = “0” alors exécuter le code pour SINON MOVLW 0xFF ; Alors CMP 0xFF MOVWF CMPGOTO FSI ; aller à FSI

SINON DECF CMP,1 ; CMP CMP -1 (Décrémenter CMP)………..

FSI ……….

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 pagemémoire pour les configurer.

Exemple : On souhaite obtenir la configuration suivante des ports A et B (S: sortie, E:entrée).

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 = 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 B’11001001’ MOVWF TRISB ; TRISB = B’11001001’

CLRF PORTA ; mettre à zéro toutes les sorties du port ABSF PORTB,2 ; mettre à “1” le bit n°2 du registre PORTB

Bernard Lewandowicz 16/05/14 C_BL_Le_microcontroleur_PIC16F876.odt

Page 14 / 14