32
****** Samuel Bachelier Informatique & Systèmes 2013 page 1 de 32 IEPSCF UCCLE MICROCONTROLEUR RAPPORT FINAL

Rapport MicroControlleurs 2013[MagMha]-Online

Embed Size (px)

Citation preview

****** Samuel Bachelier Informatique & Systèmes 2013

page 1 de 32

IEPSCF UCCLE

MICROCONTROLEUR RAPPORT FINAL

Table des matières

Introduction et description ...................................................................................................... p.3

1. Qu'est-ce qu'un microcontrôleur : ........................................................................................p.3 1.1 - Structure interne d'un microcontrôleur ............................................................. p.3 1.2 - Structure d'un système à microprocesseur .......................................................... p.4

1.3 - Du microprocesseur au microcontrôleur ............................................................. p.4

2. Étude du microcontrôleur PIC 16F84A .................................................................................. p.5

2.1 - Schéma des blocs internes et brochage ............................................................... p.5

2.2 - Jeu d'instructions du PIC 16F84A ........................................................................ p.6

2.3 - Les Registres ......................................................................................................... p.11

2.4 - Organisation de la mémoire ................................................................................. p.21

2.5 - Modes d'adressages ............................................................................................. p.23

2.6 - Ports d'entrées/Sorties ......................................................................................... p.24

2.7 - Interruptions ......................................................................................................... p.26

2.8 - Timers .................................................................................................................. p.27

2.9 - Horloge ................................................................................................................. p.29

3. Réalisation d'un cas pratique ........................................................................................... p.30

3.1 - Brève description .................................................................................................. p.30

3.2 - Schéma Proteus Pro 8 ........................................................................................... p.30

3.3 – Programme en C développé avec mikroC Pro 4.15 .............................................. p.31

4. Conclusion ........................................................................................................................... p.32

5. Bibliographie .............................................................................................................. p.32

page 2 de 32

Introduction

1- Qu'est-ce qu'un microcontrôleur :

Un microcontrôleur est un circuit intégré rassemblant dans un même boitier, un microprocesseur, plusieurs types de mémoires et des périphériques de communication (Entrées-Sorties).

Selon un arrêté français du 14 septembre 1990 relatif à la terminologie des composants électroniques: "Circuit intégré comprenant essentiellement un microprocesseur, ses mémoires, et des éléments personnalisés selon l'application".

1.1 - Structure interne d'un microcontrôleur :

Exemples de microcontrôleurs : Ces boitiers sont composés de :

1. Un microprocesseur 2. Mémoires mortes 3. Mémoires vives 4. Bus (de contrôle, d’adresses et de données) 5. Un oscillateur 6. Circuits d'interfaces d’entrées / sorties 7. Périphériques intégrés

page 3 de 32

1.2 - Structure d'un système à microprocesseur :

Un microprocesseur a besoin de certains éléments pour fonctionner :

• de la mémoire morte dite ROM (principalement pour stocker le programme). • de la mémoire vive dite RAM (principalement pour stocker les variables). • des périphériques (principalement pour interagir avec le monde extérieur). • une horloge pour le cadencer (principalement à quartz)

Ces différents blocs sont reliés par 3 bus :

• le bus d'adresse qui permet au microprocesseur de sélectionner la case mémoire ou le périphérique auquel il veut accéder pour lire ou écrire une information (instruction ou donnée).

• le bus de données qui permet le transfert des informations entre les différents blocs. Ces informations seront soit des instructions soit des données en provenance ou à destination de la mémoire ou des périphériques.

• le bus de contrôle qui indique si l'opération en cours est une lecture ou une écriture, si un périphérique demande une interruption etc.

1.3 - Du microprocesseur au microcontrôleur :

Le développement d'un système à base de microprocesseur se trouve pénalisé par (entre autres) :

La nécessité de prévoir l'interconnexion de ces composants (bus, câblage, nappes de connexion).

• la place occupée physiquement par les composants et les moyens d'interconnexion.; • la consommation énergétique. • la chaleur dégagée. • le coût financier.

page 4 de 32

Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de microprocesseur en rassemblant ces éléments essentiels dans un seul circuit intégré. Un microcontrôleur est donc un composant autonome, capable d'exécuter le programme contenu dans sa mémoire morte dès qu'il est mis sous tension. Selon les modèles et les conditions de fonctionnement, les microcontrôleurs peuvent avoir besoin de quelques composants externes (quartz, quelques condensateurs, parfois une ROM), mais ceci reste très limité.

Lorsque toutes les fonctions du système informatique sont regroupées dans un unique circuit intégré, y compris les fonctions logiques, analogiques, radiofréquence, d'interface (USB, Ethernet, etc.), on parle alors de System on Chip (système sur puce ou système mono-puce). Ces composants sont basés sur un ou plusieurs cœurs de microcontrôleur, de microprocesseur ou de DSP.

2 - Étude du microcontrôleur PIC 16F84A :

La famille des PICs est subdivisée en 3 grandes familles : La famille Base-Line, qui utilise des mots d’instructions de 12 bits, la famille Mid-Range, qui utilise des mots de 14 bits (et dont font partie la 16F84 et 16F876), et la famille High-End, qui utilise des mots de 16 bits.

2.1 - Schéma des blocs internes et brochage :

page 5 de 32

Le 16F84A est un circuit intégré de 18 broches, que l'on peut trouver dans un boîtier PDIP.

Le 16F84A possède 13 entrées/sorties (5 dans le port A et 8 dans le port B). Chaque entrée/sortie est configurable individuellement (en entrée ou bien en sortie).

On peut par exemple configurer les broches RB0, RA2 et RA3 en entrée et les broches RB1, RB2, RB3, RA0 et RA1 en sortie.

Le choix de la configuration des entrées/sorties non utilisées n'a évidemment aucune importance.

Cas particulier de la broche RA4 configurée en sortie :

La broche RA4 possède une sortie de type drain ouvert.

Cela veut dire qu'elle ne peut pas fournir de courant.

Par contre, elle peut en consommer :

page 6 de 32

Broches Description

VDD Alimentation (2,0 V à 5,5 V DC)

VSS Masse (0 V)

/MCLR Reset (actif au niveau bas)

OSC1/CLKIN,

OSC2/CLKOUTCircuit d'horloge

RA0, RA1, RA2, RA3, RA4/T0CKI Port A (5 bits)

RB0/INT, RB1, RB2, RB3, RB4, RB5, RB6, RB7 Port B (8 bits)

2.2 - Jeu d'instructions du PIC 16F84A :

Les PICs sont conçus selon une architecture RISC. Programmer avec un nombre d'instructionsréduit permet de limiter la taille de leur codage et donc de la place mémoire et du temps d'exécution. Le PIC 16F84A a un jeu d'instructions constitué de seulement 35 instructions (architecture RISC : Reduced Instruction-Set Computer).

Une instruction est codée par un mot de 14 bits.

La mémoire programme (de type Flash) a une taille de 1792 octets, ce qui permet de stocker un programme de 1024 instructions (16F84A).

Une instruction nécessite 1 cycle, ou bien 2 cycles dans le cas d'une instruction de branchement (GOTO, CALL ...).Avec une horloge à quartz de 20 MHz, un cycle correspond à 4/(20.106) = 200 nanosecondes.

Le microcontrôleur peut donc exécuter jusqu'à 5 millions d'instructions par seconde (5 MIPS) !

W : registre de travail (accumulateur), taille 8 bits.

k : valeur littérale, taille 8 bits.

Mnémonique , opérande Description Bit du registre STATUS

affecté Nombre de cycles

MOVLW k k (8 bits) est chargé dans (W)

- 1

ADDLW k Additionne k (8 bits) et (W) et place le résultat dans (W)

C, DC , Z 1

SUBLW k

Soustrait W de k (8bits) et place le résultat dans (W) k - (W) -> (W) C, DC , Z 1

page 7 de 32

ANDLW k

Réalise un ET logique entre k (8 bits) et (W), et place le résultat dans (W)

Z 1

IORLW k

Réalise un OU logique (inclusif) entre k (8 bits) et (W), et place le résultat dans (W)

Z 1

XORLW k

Réalise un OU exclusif entre k (8 bits) et (W), et place le résultat dans (W)

Z 1

L : label (étiquette)

Mnémonique , opérande

Description Bit du registre STATUS affecté

Nombre de cycles

GOTO L Branchement à l'adresse L - 2

CALL L Appelle un sous-programme (subroutine) situé à l'adresse L

- 2

RETURN Retour de sous-programme

- 2

RETLW k

Retour de sous-programme, avec chargement de la valeur littérale k (8 bits) dans (W)

- 2

RETFIE Retour de sous-programme d'interruption

- 2

CLRWDT Efface le Watchdog /TO, /PD 1

SLEEP Place le microcontrôleur en mode sommeil /TO, /PD 1

page 8 de 32

F : registre (spécial ou d'usage général)

b : position du bit (0 à 7)

Mnémonique , opérande Description Bit du registre

STATUS affecté Nombre de cycles

BCF f , b Mise à 0 du b ème bit du registre f

- 1

BSF f , b Mise à 1 du b ème bit du registre f - 1

BTFSC f , b

Si le b ème bit du registre f est égal à 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles)

- 1 ou 2

BTFSS f , b

Si le b ème bit du registre f est égal à 1, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles)

- 1 ou 2

f : registre (spécial ou d'usage général)

d : registre de destination (on peut choisir entre le registre de travail W et le registre f ).

Mnémonique , opérande Description Bit du registre

STATUS affecté

Nombre de

cycles

MOVWF f (W) est chargé dans (f) - 1

MOVF f , d (f) (8 bits) est chargé dans (destination) Z 1

ADDWF f , d Additionne le contenu du registre f (8 bits) et (W), et place le résultat dans (destination)

C,DC,Z 1

SUBWF f , d

Soustrait (W) de (f) (8 bits) et place le résultat dans (destination).

(f) - (W) ->(destination)C,DC,Z 1

page 9 de 32

ANDWF f , d Réalise un ET logique entre (f) (8 bits) et (W), et place le résultat dans (destination) Z 1

IORWF f , d Réalise un OU logique (inclusif) entre (f) (8 bits) et (W), et place le résultat dans (destination)

Z 1

XORWF f , d Réalise un OU exclusif entre (f) (8 bits) et (W), et place le résultat dans (destination)

Z 1

COMF f , d Réalise le complément logique de (f) (8 bits), et place le résultat dans (destination) Z 1

DECF f , d

Décrémente (f) et place le résultat dans (destination).

(f) - 1 -> (destination)Z 1

DECFSZ f , d

Décrémente (f) et place le résultat dans (destination).

Si le résultat est 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles)

- 1 ou 2

INCF f , d

Incrémente (f) et place le résultat dans (destination).

(f) + 1 -> (destination)Z 1

INCFSZ f , d

Incrémente (f) et place le résultat dans (destination). Si le résultat est 0, alors l'instruction suivante est ignorée, et une instruction NOP est exécutée à la place (soit 2 cycles)

- 1 ou 2

CLRF f Efface le contenu du registre (f). Remarque : le bit Z est donc mis à 1. Z 1

CLRW Efface le contenu de l'accumulateur (W). Remarque : le bit Z est donc mis à 1. Z 1

page 10 de 32

RLF f , d

Réalise une rotation circulaire à gauche :

Le résultat est placé dans (destination).

C 1

RRF f , d

Réalise une rotation circulaire à droite :

Le résultat est placé dans (destination).

C 1

SWAPF f , d

Les 4 bits de poids forts et les 4 bits de poids faibles de (f) sont échangés.

Le résultat est placé dans (destination).- 1

NOP Cette instruction ne fait rien (1 cycle). - 1

2.3 – Les Registres :

A - Registres d'usage général :

Le PIC 16F84A possède 68 registres d'usage général situés dans la mémoire des données (Data RAM).

Les registres d'usage général sont indifféremment accessibles en banque 0 ou en banque 1.

• Banque 0 (adresses 0x0C à 0x4F) • Banque 1 (adresses 0x8C à 0xCF)

B – Registres spéciaux :

Le PIC 16F84A a 15 registres spéciaux situés dans la mémoire des données (Data RAM).

La mémoire des données est divisée en 2 banques :

• Banque 0 (adresses 0x00 à 0x7F) • Banque 1 (adresses 0x80 à 0xFF)

Les registres :• TMR0 • PORTA • PORTB • EEDATA • EEADR

sont situés en banque 0.

page 11 de 32

Les registres :• OPTION_REG • TRISA • TRISB • EECON1 • EECON2

Sont situés en banque 1.

Les autres registres spéciaux sont indifféremment accessibles en banque 0 ou en banque 1.• STATUS • INTCON • FSR , INDF • PCL • PCLATH

Registre TMR0 (Timer 0)

Il s'agit d'un registre spécial situé à l'adresse 0x01 (banque 0) de la mémoire des données (Data RAM).

Ce registre contient un nombre de 8 bits (0 à 255 en numération décimale).

Le module TMR0 (Timer 0) possède deux modes de fonctionnement :

• 1- Le mode timer• 2- Le mode compteur

1- Le mode timer.

Pour configurer le module TMR0 en mode timer, il faut au préalable que :

T0CS = 0 (bit 5 du registre OPTION_REG)

Le contenu du registre TMR0 est alors incrémenté à chaque cycle de l'horloge interne.

1 cycle correspond à une durée de 1 µs pour un oscillateur à quartz de 4 MHz (1 cycle = 4 / F OSC).

En conclusion, le mode timer est utilisé pour mesurer des durées.

2- Le mode compteur.

Pour configurer le module TMR0 en mode compteur, il faut au préalable que :

T0CS = 1 (bit 5 du registre OPTION_REG)

Le contenu du registre TMR0 est alors incrémenté à chaque front du signal présent sur la broche RA4/T0CKI :

• front montant si T0SE = 0 (bit 4 du registre OPTION_REG)• front descendant si T0SE = 1

3 – Interruption.

On peut activer une interruption quand le registre TMR0 déborde (passage de 0xFF à 0x00).

page 12 de 32

Registre PORTA

Il s'agit d'un registre spécial situé à l'adresse H'05' (banque 0) de la mémoire des données (Data RAM). Ce registre donne un accès en lecture ou en écriture aux 5 bits du port A.

Description

bit 7 Non utilisé

bit 6 Non utilisé

bit 5 Non utilisé

bit 4 Niveau logique de la broche RA4/T0CKI du port A

bit 3 Niveau logique de la broche RA3 du port A

bit 2 Niveau logique de la broche RA2 du port A

bit 1 Niveau logique de la broche RA1 du port A

bit 0 Niveau logique de la broche RA0 du port A

Registre PORTB

Il s'agit d'un registre spécial situé à l'adresse H'06' (banque 0) de la mémoire des données (Data RAM). Ce registre donne un accès en lecture ou en écriture aux 8 bits du port B.

Description

bit 7 Niveau logique de la broche RB7 du port B

bit 6 Niveau logique de la broche RB6 du port B

bit 5 Niveau logique de la broche RB5 du port B

bit 4 Niveau logique de la broche RB4 du port B

bit 3 Niveau logique de la broche RB3 du port B

bit 2 Niveau logique de la broche RB2 du port B

bit 1 Niveau logique de la broche RB1 du port B

bit 0 Niveau logique de la broche RB0/INT du port B

Le PIC 16F84A dispose de 64 octets (64 x 8 bits) de mémoire EEPROM.

L'EEPROM (Electrically Erasable Programmable Read Only Memory) est une mémoire permanente, c'est à dire que les données sont conservées même si le microcontrôleur est longtemps hors tension (dans le cas de la mémoire RAM, les données sont perdues).

On peut réécrire jusqu'à 10 millions de fois dans la mémoire EEPROM du PIC 16F84A.

L'EEPROM du PIC 16F84A est indirectement accessible à travers les registres EEADR, EEDATA, EECON1 et EECON2.

page 13 de 32

Registre EEADR

Il s'agit d'un registre spécial situé à l'adresse 0x09 (banque 0) de la mémoire des données (Data RAM).

Ce registre contient l'adresse de l'emplacement mémoire que l'on veut manipuler (pour une lecture ou une écriture). Les 64 octets sont situés aux adresses 0x00 à 0x3F.

Registre EEDATA

Il s'agit d'un registre spécial situé à l'adresse 0x08 (banque 0) de la mémoire des données (Data RAM).

Ce registre contient la valeur (8 bits) de l'emplacement mémoire que l'on veut manipuler (pour une lecture ou une écriture).

Registre OPTION_REG

Il s'agit d'un registre spécial situé à l'adresse 0x81 (banque 1) de la mémoire des données (Data RAM).

Nom Description

bit 7 NOT_RBPU "Port B Pull-up Enable"

• Ce bit doit être mis à 0 pour activer les résistances de pull-up du port B

• Ce bit doit être mis à 1 pour désactiver les résistances de pull-up du port B

bit 6 INTEDG "Interrupt edge select"

• Ce bit doit être mis à 0 pour que l'interruption de la broche RB0/INT soit active sur un front descendant

• Ce bit doit être mis à 1 pour que l'interruption de la broche RB0/INT soit active sur un front montant

page 14 de 32

bit 5 T0CS "TMR0 Clock Source Select"

• Ce bit doit être mis à 0 pour que l'horloge du module TMR0 soit l'horloge interne (un quart de la fréquence du signal OSC1/CLKIN)

• Ce bit doit être mis à 1 pour que l'horloge du module TMR0 soit le signal de la broche RA4/T0CKI

bit 4 T0SE "TMR0 Source edge select"

Dans le cas où T0CS = 1, le signal d'horloge de la broche RA4/T0CKI est actif :

• sur front montant quand T0SE = 0

• sur front descendant quand T0SE = 1

bit 3 PSA "Prescaler assignment"

Le pré-diviseur est attribué :

• au module TMR0 quand PSA = 0

• au Watchdog quand PSA = 1

bits 2, 1, 0 PS2, PS1, PS0 "Prescaler rate select" (Cf. tableau ci-dessous)

page 15 de 32

Paramètres du prescaler :

PSA PS2, PS1, PS0 Taux de pré-division

du module TMR0

Taux de pré-division

du Watchdog

0 000 2 1

0 001 4 1

0 010 8 1

0 011 16 1

0 100 32 1

0 101 64 1

0 110 128 1

0 111 256 1

1 000 1 1

1 001 1 2

1 010 1 4

1 011 1 8

1 100 1 16

1 101 1 32

1 110 1 64

1 111 1 128

Registre TRISA

Il s'agit d'un registre spécial situé à l'adresse H'85' (banque 1) de la mémoire des données (Data RAM). Ce registre permet de configurer, en entrée ou en sortie, les 5 bits du port A.

Description

Bit 7 Non utilisé

Bit 6 Non utilisé

Bit 5 Non utilisé

Bit 4• 1 : configure la broche RA4/T0CKI du port A en entrée• 0 : configure la broche RA4/T0CKI du port A en sortie

Bit 3• 1 : configure la broche RA3 du port A en entrée • 0 : configure la broche RA3 du port A en sortie

page 16 de 32

Bit 2• 1 : configure la broche RA2 du port A en entrée • 0 : configure la broche RA2 du port A en sortie

Bit 1• 1 : configure la broche RA1 du port A en entrée • 0 : configure la broche RA1 du port A en sortie

Bit 0• 1 : configure la broche RA0 du port A en entrée• 0 : configure la broche RA0 du port A en sortie

Registre TRISB

Il s'agit d'un registre spécial situé à l'adresse H'86' (banque 1) de la mémoire des données (Data RAM). Ce registre permet de configurer, en entrée ou en sortie, les 8 bits du port B.

Description

Bit 7• 1 : configure la broche RB7 du port B en entrée• 0 : configure la broche RB7 du port B en sortie

Bit 6• 1 : configure la broche RB6 du port B en entrée• 0 : configure la broche RB6 du port B en sortie

Bit 5• 1 : configure la broche RB5 du port B en entrée• 0 : configure la broche RB5 du port B en sortie

Bit 4• 1 : configure la broche RB4 du port B en entrée• 0 : configure la broche RB4 du port B en sortie

Bit 3• 1 : configure la broche RB3 du port B en entrée • 0 : configure la broche RB3 du port B en sortie

Bit 2• 1 : configure la broche RB2 du port B en entrée • 0 : configure la broche RB2 du port B en sortie

Bit 1• 1 : configure la broche RB1 du port B en entrée • 0 : configure la broche RB1 du port B en sortie

Bit 0• 1 : configure la broche RB0/INT du port B en entrée• 0 : configure la broche RB0/INT du port B en sortie

Registre EECON1

Il s'agit d'un registre spécial situé à l'adresse 0x88 (banque 1) de la mémoire des données (Data RAM).

page 17 de 32

Registre EECON2

Il s'agit d'un registre spécial situé à l'adresse 0x89 (banque 1) de la mémoire des données (Data RAM). Ce registre n'est pas un registre physique.

Registre STATUS

Il s'agit d'un registre spécial situé à l'adresse 0x03 (banque 0) de la mémoire des données (Data RAM). Ce registre est également accessible en banque 1 (adresse 0x83).

Nom Description

Bit 7 IRP Bit non utilisé (à laisser à 0)

Bit 6 RP1 Bit non utilisé (à laisser à 0)

Bit 5 RP0

Bit de sélection de la banque.

• Il faut mettre ce bit à 0 pour accéder à la banque 0 (bcf STATUS , RP0), et à 1 pour accéder à la banque 1 (bsf STATUS , RP0).

Bit 4/TO

NOT_TO

Bit "Time-out" (en lecture uniquement)

• bit mis à 1 après :• une mise sous tension• une instruction SLEEP• une instruction CLRWDT• un réveil (sortie du mode SLEEP) dû à une interruption

• bit mis à 0 quand la temporisation du watchdog est dépassée

Bit 3/PD

NOT_PD

Bit "Power-down" (en lecture uniquement)

• bit mis à 1 après :• une mise sous tension• une instruction CLRWDT

• bit mis à 0 après une instruction SLEEP

Bit 2 Z

Bit "Zero"

• Cela ne concerne que les instructions qui affectent le bit Z (addwf, andlw, movf ...)

• Ce bit est mis à 1 quand le résultat d'une opération est 0.• Ce bit est mis à 0 quand le résultat d'une opération est différent de

0.

Bit 1 DC Bit "Digit Carry"

• Cela concerne les opérations arithmétiques (instructions : addwf, addlw, subwf et sublw) en système de numération DCB (binary coded decimal).

• Ce bit est mis à 1 quand le résultat d'une opération génère une retenue.

page 18 de 32

Nom Description

• Ce bit est mis à 0 quand le résultat d'une opération ne génère pas de retenue.

Bit 0 C

Bit "Carry"

• Cela concerne les opérations arithmétiques (instructions : addwf, addlw, subwf et sublw) en système de numération binaire en complément à 2.

• Ce bit est mis à 1 quand le résultat d'une opération génère une retenue.

• Ce bit est mis à 0 quand le résultat d'une opération ne génère pas de retenue

Registre INTCON

Il s'agit d'un registre spécial situé à l'adresse H'0B' (banque 0) de la mémoire des données (Data RAM). Ce registre est également accessible en banque 1 (adresse H'8B').

Nom Description

Bit 7 GIE

"Global Interrupt Enable"

• bit à mettre à 0 pour désactiver toutes les interruptions• bit à mettre à 1 pour autoriser toutes les interruptions

Bit 6 EEIE

"EEPROM write complete interrupt enable"

• 1 : si GIE = 1, autorise l'interruption de fin d'écriture de l'EEPROM • 0 : désactive l'interruption de fin d'écriture de l'EEPROM

Bit 5 T0IE

"TMR0 overflow interrupt enable"

• 1 : si GIE = 1, autorise l'interruption de débordement du registre TMR0 (H'FF' -> H'00')

• 0 : désactive l'interruption de débordement du registre TMR0

Bit 4 INTE

Bit "Time-out" (en lecture uniquement)

• bit mis à 1 après :• une mise sous tension• une instruction SLEEP• une instruction CLRWDT• un réveil (sortie du mode SLEEP) dû à une interruption

• bit mis à 0 quand la temporisation du watchdog est dépassée "RB0/INT external interrupt enable"

• 1 : si GIE = 1, autorise l'interruption sur la broche RB0/INT• 0 : désactive l'interruption sur la broche RB0/INT

page 19 de 32

Nom Description

Bit 3 RBIE

"RB port change interrupt enable"

• 1 : si GIE = 1, autorise l'interruption sur les broches RB4, RB5, RB6, RB7 du port B (sur changement du niveau logique d'au moins une de ces broches)

Attention, seules les broches configurées en entrée sont concernées

• 0 : désactive l'interruption "RB"

Bit 2 T0IF

"TMR0 overflow interrupt flag"

• drapeau (flag) mis à 1 lors du débordement du registre TMR0 (H'FF' -> H'00')

• ce drapeau ne peut être effacé que de façon logicielle (bcf INTCON, T0IF)

Bit 1 INTF

"RB0/INT external interrupt flag"

• drapeau (flag) mis à 1 lors d'un front (montant ou descendant selon l'état du bit INTEDG du registre OPTION_REG) sur la broche RB0/INT

• ce drapeau ne peut être effacé que de façon logicielle (bcf INTCON, INTF)

Bit 0 RBIF

"RB port change interrupt flag"

• drapeau (flag) mis à 1 lors d'un changement de niveau logique d'au moins une des broches : RB4, RB5, RB6 ou RB7 (cela ne concerne que les broches configurées en entrée)

• ce drapeau ne peut être effacé que de façon logicielle (bcf INTCON, RBIF)

Registres FSR et INDF (adressage indirect)

• FSR est un registre spécial situé à l'adresse 0x04 (en banque 0) de la mémoire des données (Data RAM).

Ce registre est également accessible en banque 1 (à l'adresse 0x84).

Ce registre contient une adresse (de la mémoire des données).

On dit que FSR est un "pointeur".

• Le registre spécial INDF contient la valeur du registre pointé par le registre FSR (on parle d'adressage indirect).

INDF n'est pas un registre physique.

page 20 de 32

2.4 - Organisation de la mémoire :

Le PIC contient de la mémoire de programme et de la mémoire de données. La structure Harvard des PICs fournit un accès séparé à chacune. Ainsi, un accès aux deux est possible pendant le mêmecycle machine.

Note : L’architecture de type Harvard est une conception de microprocesseurs qui sépare physiquement la mémoire de données et la mémoire programme. L’accès à chacune des deux mémoires s’effectue via deux bus distincts.

1. Mémoire de programme :

La figure ci-dessous montre l'organisation de cette mémoire. Elle contient 1k "mots" de 14 bits dans le cas du PIC 16F84A, même si le compteur de programme (PC) de 13 bits peut en adresser 8k. Il faut se méfier des adresses images ! L'adresse 0000h contient le vecteur du reset, l'adresse 0004h, l'unique vecteur d'interruption du PIC.

La pile contient 8 valeurs. Comme le compteur de programme, elle n'a pas d'adresse dans la plagede mémoire. Ce sont des zones réservées par le système.

PIC16F84A

Organisation de la mémoire de programme et de la pile.

page 21 de 32

2.Mémoire de données :

Organisation de la mémoire de données PIC16F84A

Elle se décompose en deux parties de RAM (figure ci-dessus) et une zone EEPROM. La première contient les SFRs (Special Function Registers) qui permettent de contrôler les opérations sur le circuit. La seconde contient des registres généraux, libres pour l'utilisateur. La dernière contient 64octets.

page 22 de 32

2.5 - Modes d'adressages :

On ne peut pas concevoir un programme qui ne manipule pas de données. Il existe trois grands types d'accès à une donnée ou modes d'adressage :

Adressages direct et indirect à la mémoire de données

A. Adressage immédiat :La donnée est contenue dans l'instruction. Exemple : movlw 0xC4 ; Transfert la valeur 0xC4dans W

B. Adressage direct :La donnée est contenue dans un registre. Ce dernier peut être un nom (par exemple W) ou uneadresse mémoire. Exemple : movf 0x2B, 0 ; Transfert dans W la valeur contenue à l'adresse 0x2B.

C. Adressage indirect :L'adresse de la donnée est contenue dans un pointeur. Dans les PIC, un seul pointeur est disponible pour l'adressage indirect : FSR. Contenu à l'adresse 04h dans les deux banques, il est doncaccessible indépendamment du numéro de banque. En utilisant l'adressage direct, on peut écrire dans FSR l'adresse du registre à atteindre. FSR contenant 8bits, on peut atteindre les deux banques du PIC 16F84. Pour les PIC contenant quatre banques, il faut positionner le bit IRP du registre d'état qui sert alors de 9 ème bit d'adresse (figure ci-dessus).

page 23 de 32

2.6 - Ports d'entrées/Sorties :

Le PIC 16F84A est doté de deux ports d'entrées/Sorties appelés PortA et PortB.

Port A

Il comporte 5 pattes d'entrée/sortie bi-directionnelles, notées RAx avec x={0,1,2,3,4} sur le brochage du circuit. Le registre PORTA, d'adresse 05h dans la banque 0, permet d'y accéder en lecture ou en écriture. Le registre TRISA, d'adresse 85h dans la banque 1, permet de choisir le sens de chaque patte (entrée ou sortie) : un bit à 1 positionne le port en entrée, un bit à 0 positionne le port en sortie.

La figure ci-dessous donne le câblage interne d'une patte du port A :

- "Data Latch" : Mémorisation de la valeur écrite quand le port est en sortie. - "TRIS Latch" : Mémorisation du sens (entrée ou sortie) de la patte. - "TTL input buffer" : Buffer de lecture de la valeur du port. La lecture est toujours réalisée

sur la patte, pas à la sortie de la bascule d'écriture. - Tansistor N : En écriture : Saturé ou bloqué suivant la valeur écrite. En lecture : Bloqué. - Transistor P : Permet d'alimenter la sortie.

BLOC DIAGRAMME DES PINS RA3 à RA0 BLOC DIAGRAMME DU PIN RA4

La patte RA4 peut aussi servir d'entrée de comptage pour le timer0.

page 24 de 32

Port B

Il comporte 8 pattes d'entrée/sortie bi-directionnelles, notées RBx avec x={0,1,2,3,4,5,6,7} sur le brochage du circuit (figure ci-dessous). Le registre PORTB, d'adresse 06h dans la banque 0, permet d'y accéder en lecture ou en écriture. Le registre TRISB, d'adresse 86h dans la banque 1, permet de choisir le sens de chaque patte (entrée ou sortie) : un bit à 1 positionne le port en entrée, un bit à 0 positionne le port en sortie.

Le câblage interne d'une porte du port B ressemble beaucoup à celui du port A . On peut noter la fonction particulière pilotée par le bit RBPU (OPTION_REG.7) qui permet d'alimenter (RBPU=0) ou non (RBPU=1) les sorties.

Les quatre bits de poids fort (RB7-RB4) peuvent être utilisés pour déclencher une interruption surchangement d'état.

RB0 peut aussi servir d'entrée d'interruption externe.

BLOC DIAGRAMME DES PINS RB7 à RA4 BLOC DIAGRAMME DES PINS RB3 à RB0

page 25 de 32

2.7 - Interruptions :

Une interruption provoque l’arrêt du programme principal pour aller exécuter une procédure d'interruption. A la fin de cette procédure, le microcontrôleur reprend le programme à l’endroit où il s’était arrêté. Le PIC16F84 possède 4 sources d'interruption. A chaque interruption sont associés 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. Tous ces bits sont dans le registre INTCON à part le drapeau EEIF de l'interruption EEI qui se trouve dans le registre EECON1.

Dans le cas du PIC 16F84, il existe 4 sources d'interruption :

- INT : Interruption externe, broche RB0/INT - TMR0 : Fin de comptage - PORTB : Changement d’état du port B (RB7-RB4) - EEPROM : Fin d'écriture en EEPROM

Lorsque l'événement déclencheur d'une interruption intervient, alors son drapeau est positionné à 1 (levé). Si l'interruption correspondante a été validée, elle est alors déclenchée : le programme arrête ce qu'il est en train de faire et va exécuter la procédure d'interruption qui se trouve à l'adresse 4 en exécutant les étapes suivantes :

• L'adresse contenue dans le PC (Program Counter)est sauvegardée dans la pile, puis remplacée par la valeur 0004 (adresse de la routine d'interruption). • Le bit GIE est placé "0" pour inhiber toutes les interruptions (afin qu'on ne soit pas dérangé pendant l'exécution de la procédure d'interruption). • A la fin de la procédure d'interruption (instruction RETFIE) :

o le bit GIE est replacé à l'état haut (autorisant ainsi un autre événement) o le contenu du PC est rechargé à partir de la pile ce qui permet au programme de reprendre là où il s'est arrêté

Deux remarques importantes sont à faire :

Le drapeau reste à l’état haut même après le traitement de l’interruption. Par conséquent, il faut toujours le remettre à "0" à la fin de la routine d'interruption sinon l'interruption sera déclenchée de nouveau juste après l'instruction RETFI

Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres W et STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la routine pour que le microcontrôleur puisse reprendre le programme dans les mêmes conditions où il l'a laissé.

L'interruption INT (Entrée RB0 du port B)

Cette interruption est provoquée par un changement d'état sur l'entrée RB0 du port B quand elle est programmée en entrée. Elle est gérée par les bits :

- INTE : bit de validation (1 = oui, 0 = non) - INTF : drapeau - INTEDG : front de déclenchement, 1=montant, 0=descendant (registre OPTION_REG)

page 26 de 32

L'interruption RBI (RB4 A RB7 du port B)

Cette interruption est provoquée par un changement d'état sur l'une des entrées RB4 à RB7 du port B, Le front n'a pas d'importance. Les bits associés sont RBIE (validation) et RBIF (drapeau).

L'interruption T0I : Débordement du Timer TMR0

Cette interruption est provoquée par le débordement du timer TMR0. Les bits associés sont T0IE (validation) et T0IF (drapeau).

L'interruption EEI : Fin d'écriture dans l'EEPROM

Cette interruption est déclenchée à la fin d'une écriture réussie dans l'EEPROM. Les bits associés sont EEIE (validation) et EEIF (drapeau).

2.8 - Timers :

A - Le Timer TMR0 :

C’est un compteur 8 bits ayant les caractéristiques suivantes :

• Il est incrémenté en permanence soit par l’horloge interne Fosc/4 (mode timer) soit par une horloge externe appliquée à la broche RA4 du port A (mode compteur). Le chois de l'horloge se fait à l'aide du bit T0CS du registre OPTION_REG.

o TOCS = 0 --> horloge interne. o TOCS = 1 --> horloge externe appliquée à RA4.

• Dans le cas de l'horloge externe, on peut choisir le front sur lequel le TIMER s'incrémente. o TOSE = 0 --> incrémentation sur fronts montants. o TOSE = 1 --> incrémentation sur fronts descendants.

• Quelque soit l'horloge choisie, on peut la passer dans un diviseur de fréquence programmable (prescaler) dont le rapport est fixés par les bits PS0, PS1 et PS2 du registre OPTION_REG (tableau ci-contre). L'affectation ou non du pré-diviseur se fait à l'aide du bit PSA du registre OPTION_REG o PSA = 0 --> on utilise le pré-diviseur o PSA = 1 --> pas de pré-diviseur (affecté au chien de garde)

page 27 de 32

• Le contenu du timer TMR0 est accessible par le registre qui porte le même nom. Il peut être lu ou écrit à n'importe quel moment. Après une écriture, l'incrémentation est inhibée pendant deux cycles instruction.

• Au débordement de TMR0 (FF --> 00), le drapeau T0IF est placé à 1. Ceci peut déclencher l'interruption T0I si celle-ci est validée.

B - Le Watchdog Timer WDT (Chien de garde) :

C’est un compteur 8 bits incrémenté en permanence (même si le µC est en mode sleep) par une horloge RC intégrée indépendante de l'horloge système. Lorsqu’il déborde, (WDT TimeOut), deux situations sont possibles :

• Si le µC est en fonctionnement normal, le WDT time-out provoque un RESET. Ceci permet d’éviter de rester planté en cas de blocage du microcontrôleur par un processus indésirable non contrôlé. • Si le µC est en mode SLEEP, le WDT time-out provoque un WAKE-UP, l'exécution du programme continue normalement là où elle s'est arrêtée avant de rentrer en mode SLEEP. Cette situation est souvent exploitée pour réaliser des temporisations.

L'horloge du WDT est ajustée pour que Le Time-Out arrive toutes les 18 ms. Il est cependant possible d'augmenter cette durée en faisant passer le signal Time-Out dans un pré-diviseur programmable (partagé avec le timer TMR0). L'affectation se fait à l'aide du bit PSA du registre OPTION_REG. o PSA = 1 --> on utilise le pré-diviseur o PSA = 0 --> pas de pré-diviseur (affecté à TMR0)

Le rapport du pré-diviseur est fixé par les bits PS0, PS1 et PS2 du registre OPTION_REG (voir tableau ci-contre)

L'utilisation du WDT doit se faire avec précaution pour éviter la réinitialisation (inattendue) répétée du programme. Pour éviter un WDT TimeOut lors de l'exécution d'un programme, on a deux possibilités :

page 28 de 32

• Inhiber le WDT d'une façon permanente en mettant à 0 le bit WDTE dans l'EEPROM de configuration. • Remettre le WDT à 0 périodiquement dans le programme à l'aide de l'instruction CLRWDT pour éviter qu'il ne déborde.

2.9 - Horloge :

L'horloge peut être soit interne soit externe. L'horloge interne est constituée d'un oscillateur à quartz ou d'un oscillateur RC.

Avec l'oscillateur à Quartz, on peut avoir des fréquences allant jusqu'à 4, 10 ou 20 MHz selon le type de µC. Le filtre passe bas RS, C2 limite les harmoniques dus à l’écrêtage et Réduit l’amplitude de l’oscillation. (Il n'est pas obligatoire).

Avec un oscillateur RC, la fréquence de l'oscillation est fixée par Vdd, Rext et Cext. Elle peut varier légèrement d'un circuit à l'autre.

Dans certains cas, une horloge externe au microcontrôleur peut être utilisée pour synchroniser le PIC sur un processus particulier.

Quelque soit l'oscillateur utilisé, l'horloge système dite aussi horloge instruction est obtenue en divisant la fréquence par 4.

Avec un quartz de 4 MHz, on obtient une horloge instruction de 1 MHz, soit le temps pour exécuter une instruction de 1µs.

page 29 de 32

3 - Réalisation d'un cas pratique.

3.1 - Brève description :

Dans cette réalisation, il s'agira de programmer un PIC 16F84A dans le but de simuler le fonctionnement de 4 feux de signalisation, à un carrefour routier. On pendra bien soin de programmer tous les cas possibles. Enfin, on réalisera une simulation grâce Porteus Pro 8, par importation du programme en C, réalisé avec mikroC Pro v4.15.

3.2 - Schéma Proteus Pro 8 (Feux de signalisation) :

page 30 de 32

3.3 - Programme en C développé avec mikroC Pro 4.15 :

page 31 de 32

4 - Conclusions

Comme nous avons pu le voir tout au long de ces chapitres, le PIC16F84A, bien que vieillissant un peu, dispose encore de nombreuses ressources et risque de faire parler de lui encore un certain temps.

Difficile à appréhender au début, celui-ci s’impose comme l’élément indispensable pour de nombreux montages, tant par son rapport qualité/prix, que par ses capacités, son principal handicap étant le nombre limité de ses entrées/sorties.

Il est programmable avec un minimum de difficultés, ce qui fait de lui le microcontrôleur parfait pour les amateurs débutants. Quand aux utilisateurs confirmés, ils apprécient l’ensemble de ses fonctions à leurs justes valeurs, et savent repousser les limites du PIC par de petites astuces, toutes plus ingénieuses les unes que les autres. De même, le matériel de programmation et de test, requiert le minimum de connaissances que l’on peut demander à un amateur.

Pour conclure, nous pouvons dire que dans bien des cas, le PIC 16F84A nous permettra d’arriver à nos fins avec un minimum de difficultés, et un maximum de simplicité.

5 - Bibliographie

PIC16F84A datasheet

page 32 de 32