Formation PIC

48
Centre de Formation **HBM Corporation** Formation sur les μC PIC 16Fxxx chez Microchip d’Arizona Support de formation première partie (ver 1.01) Pour les spécialités : Electronique & Micro-Informatique. Informatique industrielle. Par : M er ATOUI Hamza Magistère en TELECOM & Traitement numérique, Ingénieur en électronique option contrôle industriel. Email : [email protected] 2009-2010

description

by khaled

Transcript of Formation PIC

Page 1: Formation PIC

Centre de Formation **HBM Corporation**

Formation sur les µC PIC 16Fxxx chez Microchip d’Arizona

Support de formation première partie (ver 1.01)

Pour les spécialités : Electronique & Micro-Informatique. Informatique industrielle.

Par : Mer ATOUI Hamza Magistère en TELECOM & Traitement numérique, Ingénieur en électronique option contrôle industriel.

Email : [email protected]

2009-2010

Page 2: Formation PIC

Sommaire de la formation

- Un peu d’historique. - Définition d’un µP. - Le séquenceur de µP. - Le Micro-ordinateur. - Les µC PIC chez Microchip. - Architecture de la CPU « MID-RANGE ». - Les modes d’adressage. - Jeu d’instructions et leur codage. - Organisation de la zone CODE, STACK & gestion des interruptions. - La structure d’un fichier source en assembleur chez Microchip. - Le PIC 16F84A. - Synoptique de l’architecture PIC 16F84A. - Brochage de circuit. - Organisation de la zone DATA. - Registres spéciaux. - Périphériques de PIC 16F84A.

o Les ports E/S (PORTA et PORTB). o L’EEPROM de 64 bytes. o Le TIMER (TMR0) o Le WDT et le mode mise en veille.

Page 3: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Un peu d’historique : L’apparition du µP est due à l’évolution de l’industrie électronique. Elle répond au besoin d’un circuit intégré LSI (Large Scale Integration) ou VLSI (Very LSI). En effet, la technologie permet d’intégrer des centaines de milliers de transistors sur une puce de silicium de quelques mm2. Le concept du µP a été créé par la société INTEL. Cette société créée en 1968, était spécialisée dans la conception et la fabrication des puces mémoires. A la demande de deux ses clients, fabricants des calculatrices et de terminaux. INTEL étudia une unité de calcul implémentée sur une seule puce. Ceci donna naissance en 1971 au premier µP le 4004 qui était une unité de calcul de 4 bits fonctionnant à 108 KHz. Il résultait de l’intégration d’environ de 2300 transistors. Définition d’un µP : Le µP est un ou plusieurs circuits LSI/VLSI qui réalisent des fonctions de traitement. Dont le noyau de µP est le séquenceur. Le séquenceur de µP :

C’est en ensemble de circuits logique séquentiel pour décoder une instruction puis générer les différents signaux nécessaires pour exécuter cette dernière. Dans ce qui suit, on va réaliser un séquenceur qui exécute l’opération de transfert entre 2 registres de N bits. Synoptique des registres :

CS\

WR\

RD\

CS\ WR\

RD\Reg B

Reg A N bits Description des signaux : RD\ : signal de lecture. WR\ : signal d’écriture. CS\ : signal de sélection registre. On appel ses signaux, les signaux du contrôle, ainsi que un bus commun entre le REGA et REGB de N bits pour le transfert de données.

1

Page 4: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

La question qui se pose est comment réaliser une logique de contrôle pour transférer le contenue du REGA vers le REGB ? Pour réaliser cette logique, il faut d’abord suivre l’évolution des signaux du contrôle de chaque registre pour le transfert. On donne la table suivante :

Reg A Reg B Temps CS\ RD\ WR\ CS\ RD\ WR\

Commentaires

T 1 1 1 1 1 1 Etat de repos T+1 0 1 1 1 1 1 Activer le reg A T+2 0 0 1 1 1 1 Lecture de reg A T+3 0 0 1 0 1 1 Activer le reg B T+4 0 0 1 0 1 0 Ecriture dans le reg B

D’après cette table, l’opération de transfert se fait sur 4 étapes. Donc la réalisation de ce séquenceur nécessite un compteur. A chaque incrémentation, on exécute une ligne de la table des signaux du contrôle.

Vcc Le circuit de séquenceur : R

WR\

RD\

CS\

Point de Connexion Entre la Ligne et La colonne WR\

RD\

CS\

D E C O D E U R

Compteur

Horloge

Vers les signaux

de contrôle de Reg A Vers les signaux de contrôle de Reg B

A chaque incrémentation, le décodeur sélectionne une ligne de contrôle. On appel l’ensemble de lignes de contrôle le micro code de l’instruction de transfert de REGA vers REGB.

2

Page 5: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

On conclure que le µP est un élément très important dans le développement Soft/Hard. Dont la domaine d’application est illimité. Question : est ce que le µP tout seule résoudre un problème ? Réponse : tout simplement, c’est impossible par ce que le µP est un composent qui sert à réaliser un micro-ordinateur. Le micro-ordinateur : C’est une carte électronique composée de µP ou plusieurs, de circuits mémoires, et des circuits E/S.

- le µP ou la CPU pour exécuter un traitement. - Les circuits mémoires pour le stockage de données (Code, Data). - Les circuits E/S pour réaliser des interfaces de manipulation du monde externe (HDD,

Clavier, Ecran, Souris, …). Regardez l’architecture en général d’un micro-ordinateur de type VON NEUMAN dans la figure suivante. Horloge On général les micro-ordinateur sont fabriqués pour résoudre des problèmes de grandes complexités, mais pour des problèmes de moyennes et faibles complexités comment faire ? Est ce que c’est pratique d’utiliser un micro-ordinateur pour les résoudre ? Eh bien, ou est la solution ? La solution est de réaliser des micro-ordinateurs de taille réduite dans un seul boîtier, qu’on appel mono-chip, constitué de CPU, de mémoires, et des E/S du faible capacité. Ce mono-chip est appelé dans l’industrie par le nom « microcontrôleur ». Les microcontrôleurs sont des micro-ordinateurs en version compactée très utilisée dans l’industrie, ces circuits sont fabriqués par plusieurs sociétés comme INTEL, MOTOROLA, ST, ATMEL, PHELIPS, PARALAXE et Microchip… D’après cette introduction sur les µP et les micro-ordinateurs (µC), on va étudier seulement les µC chez Microchip d’Arizona.

Bus système

µP (CPU)

CODE

DATA

E/S

3

Page 6: Formation PIC

Form

ation sur les PIC 16Fxxx par : ATOUI Hamza

4

MICROCHIP est un fabricant de semi-conducteurs fondé en 1989 à partir d’une division de GENEREL INSTRUMENTS. Microchip produit les microcontrôleurs PIC, des composants radiofréquences, de gestion des batteries, des interfaces analogiques etc.

ICROCHIP est un fabricant de semi-conducteurs fondé en 1989 à partir d’une division de GENEREL INSTRUMENTS. Microchip produit les microcontrôleurs PIC, des composants radiofréquences, de gestion des batteries, des interfaces analogiques etc. Les µC PIC chez Microchip :Les µC PIC chez Microchip : Les µC PIC sont basés sur une architecture de type HARVARD, il y a une séparation entre les bus de la partie mémoire CODE et DATA comme indique cette figure : Et une CPU de type RISC (Reduce Instruction Set Computer). Tous les µC PIC de la série 12C 18C ce base sur 1 de ces 3 CPUs de 8bits « BASE-LINE » « MID-RANGE » « HIGH-END ». Une simple question qui se pose est : pourquoi cette évolution ? Tous simplement, pour des besoins demandés par le marché industriel « Traitement en temps réel, l’intégration d’un RTOS préemptif (Preempted Real Time Operating System)… Dans cette formation, on va étudier la CPU « MID-RANGE » de la série 16Fxxx.

CPU

DATA

CODE

Page 7: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

5

MU X

FSR

IRP

RP0 RP1

CPU

PCL

PCLATH

PCH

Registre d’instruction

Unité de décodage et De contrôle

INTCON

PIE1

PIE2

PIR1, 2

W REG STATUS

DATA

128 bytes

128 bytes

2k x 14bits

STACK

8 level Stack

2k x 14bits

2k x 14bits

2k x 14bits

128 bytes

128 bytes

PC

Registres des interruptions

9

8

2

1

14

8

13

338

9

8

8

7

8

9

U.A.L

CODE

Architecture de la CPU « MID-RANGE » :

Page 8: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

On remarque facilement l’architecture de type HARVARD sur la CPU « MID-RANGE ». La partie CODE a un espace de 8k x 14bits segmentée en 4 pages de 2k chacune ; La partie DATA a un espace de 512 x 8bits segmenté en 4 banques de 128 chacune ; et une PILE « STACK » de 8 niveaux contrôler par la CPU. Un ensemble de registres pour contrôler les interruptions (INTCON, PIE1 & 2, PIR1 & 2…), un accumulateur sur 8bits « W reg », un registre d’état « STATUS »,un registre pointeur « FSR File Select Register » sur 8bits avec un ensemble de 3 bits « RP0, RP1, IRP » pour l’accès DATA, une U.A.L pour réaliser d’opérations logiques & arithmétiques sur 8bits, un compteur programme « PC » sur 13 bits pour balayer un espace de 8k, un buffer PCLATH utilisé pour le mode paginé code (on explique plus tard), et un registre d’instruction sur 14bits pour la réception des instructions à partir de la zone CODE. Les modes d’adressage : Le MID-RANGE utilise 3 modes d’adressage sont :

- Adressage immédiat. - Adressage direct. - Adressage indirect.

Dans l’adressage immédiat le MID-RANGE fait une opération de W reg avec une constante sur 8bits ou le transfert d’une constante sur 11bits vers le PC. Mais dans le cas d’adressage direct & indirect le MID-RANGE fait une opération entre un FILE « case mémoire de l’espace DATA » et le W reg. On distingue à partir de l’architecture MID-RANGE que ce µP utilise un bus d’adresse de 7bits à partir de registre d’instruction avec les 2bits RP0, RP1 de STATUS pour réaliser un bus l’adresse de 9bits d’un FILE dans la zone DATA (adressage direct), et un autre chemin d’adressage par le FSR et le bit IRP de STATUS pour réaliser le même bus de 9bits (adressage indirect). D’après le jeu d’instruction de MID-RANGE, ce µP utilise le mode d’adressage direct, Eh bien, comment sélectionnez l’autre mode ‘indirect’ ? Microchip utilise une simple astuce pour la sélection du mode d’adressage direct ou indirect dans la zone DATA, dont l’algorithme est le suivant :

Si les 7bits d’adresse dans l’instruction ≠ 0 alors Le bus d’adresse FILE de 9bits =

RP1 RP0 7bits d’adresse dans l’inst Sinon (les 7bits d’adresse dans l’instruction = 0) Le bus d’adresse FILE de 9bits =

IRP 8bits de registre FSR Fin-Si.

6

Page 9: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

En résumé : le schéma général pour l’adressage direct et indirect dans la zone DATA

Bank0 Bank1 Bank2 Bank3 7bits d’adresse dans l’instruction

RP0 RP1 1

8

2

7

IRP

FSR

9

1

11100100

0

9

Exemple sur les modes d’adressage : Adressage Immédiat : chargement de W reg par la constante 0x59. Code : MOVLW 0x59 ; W 0x59 Adressage Direct : Exemple 1 : Transfert de contenue de W reg vers le FILE d’adresse (0x30). Code : MOVWF 0x30 ; (0x30) W reg

0x30

W reg Exemple 2 : Transfert de contenue de FILE d’adresse (0x40) vers le W reg. Code : MOVF 0x40,W ; W (0x40)

0x40

W reg

7

Page 10: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Adressage Indirect : charger le FILE d’adresse (0x50) par la valeur 0x55 dont le mode d’adressage est indirect. Cet exercice se fait en 2 étapes :

1- On met l’adresse de FILE dans le registre FSR (pointeur mémoire). 2- On utilise l’adresse 0x00 pour l’opération de transfert ou le registre virtuel « INDF »

indiqué par Microchip par ce que INDF = 0x00. Code : MOVLW 0x50 MOVWF FSR MOVLW 0x55 MOVWF INDF

Etape 1

Etape 2

FSR

W reg

0x55

0x50 N.B: vous remarquez que je n’ai pas utilisé les bits RP1, RP0 et IRP pour l’adressage direct et indirect, tous court, on n’a pas étudié jusqu’à présent le jeu d’instructions et la structure de registre STATUS.

8

Page 11: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Jeu d’instructions & leur codage : Le fonctionnement de MID-RANGE est de type RISC à 35 instructions ; elle est constituée de 3 entités :

- l’U.A.L et le registre STATUS. - Le W reg « Accumulateur ». - La RAM « FILE registers ».

Schéma fonctionnel de l’unité d’exécution de MID-RANGE : La majorité des opérations réalisées par le MID-RANGE passe par le W reg et l’U.A.L affect seulement 3 bits de STATUS sont : (C, DC, Z). La structure de STATUS : ce registre contient les bits d’état de l’U.A.L, les bits de sélection des banques DATA, et les bits d’état de µC. IRP : bit de sélection de banque mémoire dans le mode d’adressage indirect.

- 1 : banque 2, 3. - 0 : banque 0, 1.

RP1 :RP0 : bits de sélection de banque mémoire dans le mode d’adressage direct. - 11 : banque 3. - 10 : banque 2. - 01 : banque 1. - 00 : banque 0.

TO\ : Time-out bit. PD\ : Power-down bit. Z: le flag zéro de l’U.A.L

- 1 : le résultat de l’opération est nul. - 0 : le résultat différent de zéro.

DC : le flag Digit-carry ou demi-retenue. Après une opération d’addition ou soustraction ce flag positionne s’il y a un débordement sur les 4 bits du faible. C : le flag carry ou retenue. Après une opération d’addition ou soustraction ce flag positionne s’il y a un débordement sur 8bits.

9

Page 12: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Chaque instruction de MID-RANGE est codée sur 14bits, ces instructions regroupées en 3 groupes selon le codage :

- Orienté mémoire (FILE). - Orienté bit sur FILE. - Orienté constante (valeur immédiate).

Mais selon la fonction, on a 5 groupes : - Transfert : MOVLW, MOVWF, MOVF. - Arithmétique : ADDLW, ADDWF, SUBLW, SUBWF, DECF, INCF, DECFSZ,

INCFSZ, COMF, CLRW, CLRF. - Logique : ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF, RLF, RRF,

SWAPF. - Orienté bit : BCF, BSF, BTFSC, BTFSS. - Contrôle : GOTO, CALL, RETFIE, RETLW, RETURN, CLRWDT, NOP, SLEEP.

10

Page 13: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Instructions de Transfert : Groupe : MOVLW, MOVWF, MOVF. L’instruction MOVLW : Charge une constante de 8bits dans le registre W reg. Syntaxe : MOVLW k 0≤ k ≤255. Nombre de cycle : 1. STATUS : rien. L’instruction MOVWF : Charge le registre W dans un FILE. Syntaxe : MOWWF FILE FILE est une adresse sur 7 bits (128 emplacements possible –banque-). Nombre de cycle : 1. STATUS : rien. L’instruction MOVF : Copier le FILE dans une destination. Syntaxe : MOVF FILE, D FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE lui même). Nombre de cycle : 1. STATUS : Z. Instructions Arithmétiques : Groupe : ADDLW, ADDWF, SUBLW, SUBWF, DECF, INCF, DECFSZ, INCFSZ, COMF, CLRW, CLRF. L’instruction ADDLW : Additionner le registre W et une valeur immédiate, la somme est stockée en W reg. Syntaxe : ADDLW k 0≤ k ≤255. k + W W. Nombre de cycle : 1. STATUS : C, DC, Z. L’instruction ADDWF : Additionner le registre W reg et un FILE, la somme est stockée dans la destination (le W reg ou le FILE). Syntaxe : ADDWF FILE, D FILE + W Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : C, DC, Z.

11

Page 14: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction SUBLW : Soustraction entre une valeur immédiate et le registre W reg. Syntaxe : SUBLW k 0≤ k ≤255. k - W W. Nombre de cycle : 1. STATUS : C, DC, Z. L’instruction SUBWF : Soustraire le contenu du registre W reg du contenu du FILE, résultat dans la destination (le W reg ou le FILE). Syntaxe : SUBWF FILE, D FILE - W Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : C, DC, Z. L’instruction DECF : Décrémente un FILE et range le résultat dans la destination (le W reg ou le FILE). Syntaxe : DECF FILE, D FILE -1 Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z. L’instruction INCF : Incrémente un FILE et range le résultat dans la destination (le W reg ou le FILE). Syntaxe : INCF FILE, D FILE +1 Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z. L’instruction DECFSZ : Décrémente un FILE et sauter l’instruction suivante si la destination = 0. Syntaxe : DECFSZ FILE, D FILE -1 Destination puis sauter l’instruction suivante si la destination = 0. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1 ou 2. STATUS : rien.

12

Page 15: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction INCFSZ : Incrémente un FILE et sauter l’instruction suivante si la destination = 0. Syntaxe : INCFSZ FILE, D FILE +1 Destination puis sauter l’instruction suivante si la destination = 0. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1 ou 2. STATUS : rien. L’instruction COMF : Stocke dans la destination le complément à 1 de FILE. Syntaxe : COMF FILE, D FILE\ Destination. (Inversion de tous les bits de FILE). FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z. L’instruction CLRW : Efface le contenu du registre W reg. Syntaxe : CLRW 0 W reg. Nombre de cycle : 1. STATUS : Z = 1. L’instruction CLRF : Efface le contenu du FILE. Syntaxe : CLRF FILE 0 FILE. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). Nombre de cycle : 1. STATUS : Z = 1. Instructions Logiques : Groupe : ANDLW, ANDWF, IORLW, IORWF, XORLW, XORWF, RLF, RRF, SWAPF. L’instruction ANDLW : Opération "ET" entre le contenu du registre W reg et une valeur immédiate, le résultat dans W reg. Syntaxe : ANDLW k 0≤ k ≤255. k ‘ET’ W W. Nombre de cycle : 1. STATUS : Z.

13

Page 16: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction ANDWF : Opération "ET" entre le contenu du registre W et un FILE, le résultat dans la destination. Syntaxe : ANDWF FILE, D FILE ‘ET’ W Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z. L’instruction IORLW : Opération logique "OU" entre le registre W reg et une valeur immédiate, le résultat dans le W reg. Syntaxe : IORLW k 0≤ k ≤255. k ‘OU’ W W. Nombre de cycle : 1. STATUS : Z. L’instruction IORWF : Opération "OU" entre le contenu du registre W et un FILE, le résultat dans la destination. Syntaxe : IORWF FILE, D FILE ‘OU’ W Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z. L’instruction XORLW : Opération logique XOR (ou exclusif) entre le contenu de W reg et une valeur immédiate, le résultat dans le W reg. Syntaxe : XORLW k 0≤ k ≤255. k ‘XOR’ W W. Nombre de cycle : 1. STATUS : Z. L’instruction XORWF : Opération "XOR" entre le contenu du registre W et un FILE, le résultat dans la destination. Syntaxe : XORWF FILE, D FILE ‘XOR’ W Destination. FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : Z.

14

Page 17: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’instruction RLF : Rotation à gauche d’un FILE au travers du bit carry, le résultat va dans la destination. Syntaxe : RLF FILE, D FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : C Bit7 du FILE. C 7 0 L’instruction RRF : Rotation à droite d’un FILE au travers du bit carry, le résultat va dans la destination. Syntaxe : RRF FILE, D FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : C Bit0 du FILE.

C 7 0 L’instruction SWAPF : Échange de quartet du poids faible et le quartet du poids fort d’un FILE, le résultat dans la destination. Syntaxe : SWAPF FILE, D FILE est une adresse sur 7 bits (128 emplacements possible –banque-). D est un bit indique la destination (D = 0 la destination est le W reg, D = 1 la destination est le FILE). Nombre de cycle : 1. STATUS : rien.

15

Page 18: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Les instruction Orienté bit : Groupe : BCF, BSF, BTFSC, BTFSS. L’instruction BCF : Efface le bit spécifié d’un FILE. Syntaxe : BCF FILE, Bit FILE est une adresse sur 7 bits (128 emplacements possible –banque-). 0≤ Bit ≤7. FILE {bit} 0. Nombre de cycle : 1. STATUS : rien. L’instruction BSF : Positionne le bit spécifié d’un FILE à 1 Syntaxe : BSF FILE, Bit FILE est une adresse sur 7 bits (128 emplacements possible –banque-). 0≤ Bit ≤7. FILE {bit} 1. Nombre de cycle : 1. STATUS : rien. L’instruction BTFSC : Vérifier l'état du bit spécifié d’un FILE et sauter l'instruction suivante si le bit = 0. Syntaxe : BTFSC FILE, Bit FILE est une adresse sur 7 bits (128 emplacements possible –banque-). 0≤ Bit ≤7. Sauter si (FILE {Bit}=0) l’instruction suivante. Nombre de cycle : 1 ou 2. STATUS : rien. L’instruction BTFSS : Vérifier l'état du bit spécifié d’un FILE et sauter l'instruction suivante si le bit = 1. Syntaxe : BTFSS FILE, Bit FILE est une adresse sur 7 bits (128 emplacements possible –banque-). 0≤ Bit ≤7. Sauter si (FILE {Bit}=1) l’instruction suivante. Nombre de cycle : 1 ou 2. STATUS : rien.

16

Page 19: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Les instructions de contrôle : Groupe 1: GOTO, CALL, RETURN, RETLW, RETFIE. Avant d’étudier ce groupe, il faut d’abord parler sur le registre compteur ordinal « PC ». Ce registre de longueur 13 bits (balayage de 8k emplacements), et d’après l’architecture de « MID-RANGE » ce dernier divisé en 2 registres (PCL et PCH) avec le PCL est adressable par le bus interne de la zone DATA (vous pouvez manipuler comme un FILE), mais le PCH est adressable à partir du buffer PCLATH seulement les 5bits du poids faible par ce que le PCH est un registre de 5bits. Dans la manipulation de PCL comme destination le « MID-RANGE » réalise l’opération suivante :

- Transfert du résultat de l’U.A.L vers le PCL et au même temps, charger le PCH par les 5bits du poids faible de PCLATH dans les bits 8 12 du PC.

- N’oublie pas que n’importe quelle modification dans le PC s’implique un changement de chemin d’exécution du programme en cours.

L’instruction GOTO : Branchement inconditionnel à l’adresse présentée par l’instruction. Syntaxe : GOTO ADR ADR est une valeur immédiate sur 11bits. Le PC sera modifie par la façon suivante :

Vous remarquez que ADR est de 11bits un espace de 2k (une page du code), mais pour faire un saut vers une autre page comment faire ? D’après le schéma de la figure au dessus, on distingue le mécanisme réel de l’exécution d’instruction GOTO par : le chargement des bits

17

Page 20: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

0 10 du PC par l’adresse indiquée par l’instruction, et le reste (bits 11 12) par les bits 3 4 de PCLATH. Eh bien, avant de faire un saut vers une adresse, il faut d’abord sélectionner la page du saut par la modification des bit 3 4 de PCLATH (00 : page0, 01 : page1, 10 : page2, 11 :page3). Nombre de cycle : 2. STATUS : rien. L’instruction CALL : appel d’un sous-programme (soit une procédure ou une fonction). Syntaxe : CALL ADR ADR est une valeur immédiate sur 11bits. La modification de PC est identique comme l’instruction GOTO. Mais, dans cette instruction le MID-RANGE exécute les opérations suivantes :

- sauvegarde l’adresse de retour (PC+1) dans le TOS (Top Of Stack) de la pile système de 8 niveaux et le pointeur de la pile incrémente de 1.

- Puis sauter vers l’adresse indiquée par l’instruction. Nombre de cycle : 2. STATUS : rien. Main Program ---------- ---------- ---------- ---------- ---------- PC CALL SOMME

TOS PC+1 L’adresse de retour

SOMME ---------- ---------- ---------- ---------- ---------- ---------- ---------- RETURN

PC+1 ---------- ----------

---------- ---------- Les instructions de retour sous programme RETURN, RETLW: ces instructions sont utilisées pour compléter un sous-programme (ajouter à la fin d’un sous-programme) comme indiquée la figure au dessus. Le mécanisme d’exécution de l’instruction RETURN est le retour vers le programme principal qu’on a quitté précédemment par l’instruction CALL est le chargement du PC par le TOS (Top Of Stack) et décrémente le pointeur de la pile par 1. Mais pour RETLW, le MID-RANGE fait le même travail que RETURN plus renvoyer une valeur immédiate de 8bits présentée par l’instruction dans le W reg. Syntaxe : RETURN RETLW k ; 0≤ k ≤255. Nombre de cycle : 2. STATUS : rien.

18

Page 21: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Main Program ---------- ---------- ---------- ---------- ---------- PC CALL SOMME PC+1 ----------

---------- ---------- ----------

TOS PC+1 L’adresse de retour

SOMME ---------- ---------- ---------- ---------- ---------- ---------- ---------- RETURN

PC TOS L’instruction RETFIE : cette instruction est utilisée pour compléter le ISR (Interrupt Service Routine) (ajouter à la fin de l’ISR). Le travail a réalisé par l’instruction RETFIE est le retour vers le programme principal qu’on a quitté précédemment par :

- Le chargement du PC par le TOS (Top Of Stack). - Décrémente le pointeur de la pile par 1. - Mettre le GIE 1 (Autorisation de la réception d’une nouvelle interruption par ce que

le branchement vers le ISR met le GIE 0 pour ne pas gêner le traitement de l’interruption en cours).

Main Program ---------- ---------- ---------- ---------- ---------- PC SUBLW 0x50 PC+1 ----------

---------- ---------- ----------

2

TOS PC+1 GIE 0

ISR (vecteur 4) ---------- ---------- ---------- ---------- ---------- ---------- ---------- RETFIE 3

PC TOS GIE 1

1

Interruption

Nombre de cycle : 2. STATUS : rien.

19

Page 22: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Groupe 2 : NOP, CLRWDT, SLEEP. L’instruction NOP : aucune opération. Syntaxe : NOP Nombre de cycle : 1. STATUS : rien. L’instruction CLRWDT : Réinitialise le temporisateur du chien de garde. Syntaxe : CLRWDT Nombre de cycle : 1. STATUS : TO\, PD\. Après l’exécution de cette instruction le MID-RANGE fait le travail suivant :

- WDT 0. - Prescaler WDT 0. - TO\ 1. - PD\ 1.

L’instruction SLEEP : Mise en veille du microcontrôleur (Power Down mode). Syntaxe : SLEEP Nombre de cycle : 1. STATUS : TO\, PD\. Après l’exécution de cette instruction le MID-RANGE fait le travail suivant :

- WDT 0. - Prescaler WDT 0. - TO\ 1. - PD\ 0. - Arrête l’oscillateur du microcontrôleur.

20

Page 23: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

La série des exercices N° :1 But : manipulation des modes d’adressage & le jeu d’instructions du MID-RANGE. Exercice 1 : Ecrire un programme qui fait le travail suivant :

- Mettre dans le FILE d’adresse (0x30) la valeur 0x55. - Mettre dans le FILE d’adresse (0x40) la valeur 0x34. - Calculer la somme de ces 2 FILES puis ranger le résultat dans le FILE d’adresse

(0x50). Exercice 2 : Ecrire un programme qui initialise la zone mémoire (0x30 0x40) dans la banque 2 par zéro. Exercice 3 : Ecrire un programme qui calcul la parité arithmétique de FILE (0x55), s’il est pair, mettre dans le FILE (0x30) dans la banque 3 le caractère ‘P’, sinon mettre le caractère ‘I’. Exercice 4 : Ecrire un programme qui calcul la somme de la zone mémoire (0x50 0x60) et mettre le résultat dans le FILE d’adresse (0x10) situé à la banque 1. Exercice 5 : Ecrire un programme qui fait la multiplication par 2 de tous les FILES de (0x25 0x35) dans la banque2. Exercice 6 : Ecrire un programme qui fait la recherche de la première occurrence de la valeur 0x00 dans la zone mémoire (0x60 0x70) et mettre l’adresse dans le FILE (0x10). Exercice 7 : Ecrire un sous programme qui réalise la multiplication de 2 FILES (M1 et M2) et mettre le résultat dans les 2 FILES (H et L) par ce que la multiplication de 2 FILES de 8bits donne un résultat sur 16bits. M1*M2 (HL) Avec M1 : le FILE1, M2 : le FILE2, HL : 2 FILES de résultat, dont l’algorithme est le suivant :

H 0 ; L M1 ; Compteur 8 ; Tant que (Compteur >0) Début Si ( L {0} = 1 ) alors H H+M2 ; FinSi. Décalage à droite de la paire (HL) ; Compteur Compteur -1 ; FinTantQue.

21

Page 24: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Exercice 8 : Ecrire un sous programme qui réalise la division entre 2 FILES et mettre le quotient dans un FILE et le reste dans un autre FILE.

Q

A B

R

R 0 ; Q A ; Compteur 8 ; Tant que (Compteur > 0) Début Décalage à gauche de la paire (RQ) ; Si (R < B) alors Q {0} 0 ; Sinon R R-B ; Q {0} 1 ; FinSi. Compteur Compteur-1 ; FinTantQue.

22

Page 25: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Organisation de la zone CODE, STACK & gestion des interruptions : Si on rappel bien l’architecture de MID-RANGE, la zone CODE est un bloc mémoire relié à la CPU par un bus d’adresse de 13bits et un bus de données de 14bits (la taille d’une instruction), et le zone STACK (la pile) est une mémoire de 8 niveaux, chaque niveau a une taille de 13bits, la CPU utilise cette pile pour empiler et dépiler les adresses de retour a chaque fois qu’on a un appel d’un sous programme ou un traitement d’une interruption, cette zone est contrôler par la CPU seulement, on n’a pas d’instructions de manipulation de pile comme le µP 8086 chez INTEL (PUSH, POP). Microchip appel un emplacement mémoire dans la zone CODE par le nom « vecteur », un vecteur porte une instruction complète (OPCODE & OPERANDES). Cette zone est configurée par 2 vecteurs essentiels, le vecteur de RESET à l’adresse 0x000 (le premier emplacement), et le vecteur d’interruption à l’adresse 0x004 (vecteur numéro 4).

23

Page 26: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Gestion des interruptions : le MID-RANGE gère les interruptions générées par leurs périphériques. La gestion d’une interruption sous MID-RANGE se fait par :

- compléter l’exécution de l’instruction en cours. - Vérifier si GIE = 1 (Global Interrupt Enable). - Si le cas, empiler l’adresse de retour dans le TOS. - Mettre GIE 0 pour ne pas gêner le traitement de l’interruption en cours. - Brancher vers le vecteur numéro 4 (0x004), dans cette adresse en trouve le début de

l’ISR. Le retour vers le programme interrompu précédemment se fait par l’instruction RETFIE située à la fin de l’ ISR, cette instruction exécute le travail suivant :

- mettre GIE 1 pour donne la main à une autre demande d’interruption. - Dépiler l’adresse de retour à partir du TOS dans le PC.

Comme indique la figure suivante : Main Program ---------- ---------- ---------- ---------- ---------- PC SUBLW 0x50 PC+1 ----------

---------- ---------- ----------

2

TOS PC+1 GIE 0

ISR (vecteur 4) ---------- ---------- ---------- ---------- ---------- ---------- ---------- RETFIE 3

PC TOS GIE 1

1

Interruption Si GIE=1

Remarque : vous remarquez que à chaque fois si on a une demande d’interruption le MID-RANGE branche toujours vers le même vecteur (vecteur 4) à l’adresse CODE 0x004. Comment identifiez le périphérique qui génère cette demande d’interruption et exécutez le ISR correspondant ? Pour répondre à cette question, on revient à l’ensemble de registres d’interruptions dans le MID-RANGE, leur nombre augmente et diminue selon le nombre de périphériques intégrés dans le µC, ces registres contient les bits d’autorisation de la demande d’interruption et les bits indicateurs d’interruptions (flag). Le registre le plus important est le INTCON, la structure de ce dernier différent d’un µC à l’autre, et le bit le plus important dans ce registre est le bit 7 GIE (Global Interrupt Enable).

24

Page 27: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

On prend l’exemple de PIC16F84, ce µC gère 4 sources d’interruptions sont :

- débordement du TIMER0. - Changement de l’état de la ligne RB0/INT. - Fin de l’écriture dans l’EEPROM. - Changement d’état des pins RB4 RB7.

Les 2 registres responsables sur les bits d’autorisation et flag sont : INTCON, EECON1. Dont la synoptique de génération d’une demande d’interruption est la suivante : Pour exécuter le ISR correspondant à la demande d’interruption d’un périphérique, on fait le test des bits flag après le branchement vers le vecteur d’interruption (vecteur 4). Le premier flag q’on va tester, c’est l’interruption de la plus haute priorité, la priorité sera fixée par le programmeur lui-même, on appel cette gestion par la méthode de SOFTWARE POLLING. Organigramme de gestion SOFTWARE POLLING pour le PIC16F84 :

T0IF=1

RBIF=1

INTF=1

EEIF=1

Yes

Yes

Yes

Yes

ISR TIMER

ISR RB

ISR INT

ISR EEPROM

End ISR

Begin ISR No

No No

No

25

Page 28: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

La structure d’un fichier source en assembleur chez Microchip : Dans cette partie du cours, on va étudier comment créer un projet sous

l’environnement MPLAB IDE de Microchip (ver 7.6 8.03) ? Avant de commencer, il faut connue la structure d’un fichier source en assembleur. Microchip propose une structure simple pour écrire un fichier source, on commence par :

- Déclaration de µC. - Inclusion des bibliothèques. - Configuration des fusibles de µC. - Définitions des constantes & les macro codes s’il existe. - Déclaration des variables - Rédaction de la partie CODE. - Et finir le fichier source par l’étiquette « END ».

Exemple sur le PIC16F84 :

LIST P=16F84 ; déclaration de µC #include <P16F84.INC> ; inclusion des bibliothèques __CONFIG _CP_OFF & _PWRTE_OFF & … ; Config des fusibles ; Définition des constantes #define ISR 0x004 #define Reset 0x000 ; Déclaration des variables CBLOCK 0x0C Var1 :1 Var2 :1 Tab1 :5 ENDC ; partie CODE ORG Reset GOTO MAIN ORG ISR RETFIE MAIN ------ ------ ------

END

Maintenant, on passe vers la création d’un projet sous MPLAB IDE. A partir de la version 6.xx les choses sont simplifiées, on suit les étapes suivantes pour le créer (ver 8.02):

- double click sur l’icône de logiciel MPLAB IDE sur votre bureau. - Aller vers le menu Project Project Wizard… - elle apparaisse la fenêtre « Project Wizard » puis cliquer sur le bouton « suivant ». - Sélectionner le µC « par exemple le PIC16F84 » puis cliquer sur le bouton « suivant ». - Sélectionner le langage de programmation « dans ce cas, on choisi Microchip

MPASM Toolsuite » puis cliquer sur le bouton « suivant ».

26

Page 29: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

- Cliquer sur le bouton « Browse… », nommer votre projet, puis cliquer sur le bouton « suivant ».

- Cliquer sur le bouton « suivant ». - Cliquer sur le bouton « Terminer ». - Aller vers le menu View Project (elle apparaisse la fenêtre de votre projet dans

l’interface principale de MPLAB IDE). - Aller vers le menu File New (elle apparaisse une fenêtre blanche pour écrire le

fichier source en assembleur MPASM). - Après l’écriture du code source, sauvegarder ce dernier sous l’extension « .asm » dans

le même répertoire que le projet. - Aller vers la fenêtre de votre projet puis cliquer sur menu « Source Files » par le click

droite de la souris. - Il apparaisse un sous menu, cliquer sur « Add Files… ». - Sélectionner votre source sous l’extension « .asm ». - Sauvegarder le projet par le menu Project Save Project. - Compiler le projet par le menu Project Build All. - S’il y a des erreurs, corriger les puis répéter l’étape de compilation.

27

Page 30: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Le PIC 16F84A : C’est un µC de la série 16Fxxx avec un noyau de type MID-RANGE, et des fonctionnalités E/S qui permettent de réaliser des montages avec un minimum de composants externes. D’après le DATA SHEET, on distingue particulièrement :

- une CPU de type MID-RANGE (35 instructions, codage sur 14bits). - Partie CODE de 1Kx14bits (1024 instructions = ½ page). - Partie DATA composée de 2 banques, seulement 68 bytes sont utilisées comme RAM. - Un ensemble de périphériques sont :

o 2 ports E/S (PORTA de 5 lignes, PORTB de 8 lignes). o TIMER de 8 bits. o EEPROM de 64 bytes. o Un chien de garde (WDT).

- compatible avec les PIC 16CR84, 16C84, 16F84. Synoptique de l’architecture PIC 16F84A :

P O R T A

P O R T B

TMR0 (8bits)

WDT

EEPROM 64 bytes 5 8

RAM

68 bytes

CPU

MID-RANGE

CODE

1Kx14bits

Brochage de circuit :

28

Page 31: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Organisation de la zone DATA : La zone DATA du PIC 16F84A est divisée en 2 banques, composée de l’espace RAM (68 bytes) et les registres spéciaux de configuration et de manipulation de périphériques et le µC lui-même.

29

Page 32: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

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

30

Page 33: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Périphériques de PIC 16F84A : Les ports d’E/S : Le 16F84A possède 13 entrées/sorties (5 dans le port A et 8 dans le port B). Chaque E/S est configurable individuellement (en entrée ou bien en sortie). Le PORTA : est port d’E/S possède 5 lignes, configurable par le registre spécial « TRISA », ce dernier responsable sur la direction des lignes (TRISA {i} = 1 la ligne en entrée, TRISA {i} = 0 la ligne en sortie), seule les 5bits du poids faible sont utilisés. Exemple de configuration : RA0 RA1 en sortie. RA2 RA4 en entrée. Dans ce cas le TRISA sera effectué par la valeur 0x1C. N.B : à partir de la table des registres spéciaux, le TRISA situé à la banque1 il faut passer vers cette banque avant d’effectuer ce registre. Code :

; Passage vers la banque 1 BSF STATUS, RP0 ; Chargement de TRISA par la valeur 0x1C MOVLW 0x1C MOVWF TRISA

Vous pouvez configurer les pins RA0 RA3 soit en entrée ou en sortie sans aucun problème à la particularité de la pin RA4, par ce que cette ligne est configurée en drain ouvert et en plus utilisée comme entrée horloge externe de module TMR0, comme indique la figure suivante :

Schéma des pins RA0 RA3 Schéma de la pin RA4/T0CKI

31

Page 34: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

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 : Les registres responsables de manipulation/configuration du PORTA sont :

- Le registre PORTA situé dans la banque 0, utilisé pour la lecture et l’écriture vers leurs pins.

- Le registre TRISA situé dans la banque 1, utilisé pour la configuration de la direction des pins.

Le PORTB : est port d’E/S possède 8 lignes, configurable par le registre spécial « TRISB », ce dernier responsable sur la direction des lignes (TRISB {i} = 1 la ligne en entrée, TRISB {i} = 0 la ligne en sortie), avec une résistance de PULL-UP à chaque ligne du PORTB et activable par le bit7 « RBPU\ » de registre « OPTION_REG », ces résistances de PULL-UP sont désactivées si les lignes en sortie. Ces dernières sont désactivées automatiquement l’or d’un Power-On Reset.

Schéma des pins RB0 RB3 Schéma des pins RB4 RB7

32

Page 35: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Les pins RB4 RB7 génère une interruption l’or d’un changement d’état d’une de ces lignes par rapport à la dernière lecture du PORTB, le flag qui indique cette interruption est le bit0 « RBIF » de registre « INTCON ». Cette interruption est générée si ces lignes configurées en entrée, avec une activation des résistances de PULL-UP pour la stabilité de l’état des lignes. La pin RB0/INT est une autre source d’interruption, déclanche sur front mentant ou descendant selon le bit6 « INTEDG » de registre « OPTION_REG », le flag qui indique cette interruption est le bit1 « INTF » de registre « INTCON ». Toujours si la ligne est configurée en entrée. Les registres responsables sur la manipulation/configuration du PORTB sont :

- Le registre PORTB situé dans la banque 0, pour la lecture et l’écriture. - Le registre TRISB situé dans la banque 1, pour la configuration de la direction des

lignes. - Le registre OPTION_REG situé dans la banque 1 (bit7 RBPU\ et bit6 INTEDG), pour

l’activation de PULL-UP et le type front (INTEDG 1 sur ↑, INTEDG 0 sur ↓). - Le registre INTCON situé dans la banque 0 ou la banque 1(bit4 INTE, bit3 RBIE, bit1

INTF et bit0 RBIF), pour autoriser et indiquer les interruptions (INT, RB).

33

Page 36: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

L’ EEPROM de 64 bytes : C’est une mémoire accessible en lecture/écriture. Cette mémoire est implantée en d’hors de la zone DATA RAM et adresser séparément par leurs registres spéciaux. Ces registres sont :

- Le registre « EECON1 » situé à la banque 1. - Le registre « EECON2 » situé à la banque 1 (registre virtuel). - Le registre « EEADR » situé à la banque 0. - Le registre « EEDATA » situé à la banque 0.

Le registre « EEDATA » est de 8bits utilisé pour la lecture/écriture de données dans l’EEPROM. Le registre « EEADR » est de 8bits utilisé pour adresser un emplacement dans l’EEPROM parmi 64 emplacements (seulement les 6bits du poids faible sont utilisés). L’opération de l’écriture se fait après une opération d’effacement automatique de l’emplacement à écrire par la logique du contrôle. Le temps d’écriture dépend de la tension d’alimentation (Vdd) et la température de CI, en général est une opération lente dépasse 4ms. Synoptique de l’EEPROM :

EECON2 EECON1

Logique du contrôle de l’EEPROM

E E A D R

E E D A T A

6

8

8

Bus interne de la zone DATA

Bloc de 64 bytes.

De l’adresse 0x00 0x3F.

34

Page 37: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

La structure de registre EECON1 : c’est le registre de contrôle/état de l’EEPROM (seulement les 5bits du poids faible sont utilisés).

Les bits 7 5 : non utilisés. EEIF : flag d’interruption pour l’opération d’écriture dans l’EEPROM.

- EEIF = 1 indique le fin de l’écriture dans l’EEPROM (Effacement Soft). - EEIF = 0 l’opération de l’écriture n’est pas fini ou on a pas lancé.

WRERR : flag d’indication d’une erreur l’or d’une opération d’écriture. - WRERR = 1 arrêt prématuré sur l’opération d’écriture (MCLR\, Time-out WDT). - WRERR = 0 l’opération de l’écriture est terminé sans aucun problème.

WREN : bit d’autorisation de l’écriture dans l’EEPROM. - WREN = 1 Ecriture autorisée. - WREN = 1 Ecriture non autorisée.

WR : bit de contrôle de l’écriture. - WR = 1 initialisation de cycle d’écriture, ce bit est effacé par le HARDWARE si

l’opération de l’écrite est terminée. - WR = 0 l’opération de l’écriture dans l’EEPROM est terminée.

RD : bit de contrôle de la lecture. - RD = 1 initialisation de cycle de lecture, ce bit est effacé par le HARDWARE si

l’opération de la lecture est terminée. - RD = 0 rien.

Opération de lecture d’un byte de l’EEPROM : pour lire un emplacement EEPROM, il faut passer par les étapes suivantes :

- mettre l’adresse à lire dans le registre « EEADR ». - activer la lecture par RD 1. - Finalement le contenue de cette case est située dans le registre « EEDATA ».

Exemple : mettre le contenue de l’adresse 0x10 dans l’EEPROM vers le PORTB. N.B : n’oublie pas le basculement vers la banque de chaque registre à chaque accès. Code :

; Basculer vers la banque 0 BCF STATUS, RP0 ; mettre l’adresse 0x10 dans EEADR MOVLW 0x10 MOVWF EEADR ; Basculer vers la banque 1 (EECON1) BSF STATUS, RP0 ; Lancer l’opération de lecture BSF EECON1, RD ; Basculer vers la banque 0 (EEDATA & PORTB) BCF STATUS, RP0 ; PORTB EEDATA MOVF EEDATA, W MOVWF PORTB

35

Page 38: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Opération d’écriture d’un byte dans l’EEPROM : toujours, il faut passer par un ensemble des étapes pour la faire.

- Mettre l’adresse à écrire dans EEADR. - Mettre la donnée à écrire dans EEDATA. - Désactiver les interruptions GIE 0 (si le programme fonctionne sous interruption). - Autoriser l’écriture par WREN 1. - Ecrire la valeur 0x55 dans EECON2 puis la valeur 0xAA dans le même registre. - Activer l’opération d’écriture par WR 1. - Activer les interruptions GIE 1 (si le programme fonctionne sous interruption).

Exemple : mettre le contenue du PORTB dans l’adresse 0x20 EEPROM.

; Basculer vers la banque 0 BCF STATUS, RP0 ; mettre l’adresse 0x20 dans EEADR MOVLW 0x20 MOVWF EEADR ; mettre PORTB EEDATA MOVF PORTB, W MOVWF EEDATA ; Basculer vers la banque 1 (EECON1) BSF STATUS, RP0 ; Désactiver les interruptions BCF INTCON, GIE ; Autoriser l’écriture BSF EECON1, WREN ; Ecriture de la séquence 0x55, 0xAA dans EECON2 MOVLW 0x55 MOVWF EECON2 MOVLW 0xAA MOVWF EECON2 ; Activer l’écriture par WR 1 BSF EECON1, WR ; Basculer vers la banque 0 BCF STATUS, RP0

36

Page 39: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Le TIMER de 8bits (TMR0): est un TIMER libre (Free Timer) contient les caractéristiques suivantes :

- 8 bits Temporisateur/Compteur. - Accessible en Lecture/Ecriture. - Pré-diviseur (PRESCALER) programmable sur 8 bits. - Source horloge sélective Interne/Externe. - Génère une interruption l’or de débordement, passage de 0xFF vers 0x00. - Front d’incrémentation sélectif pour la source externe.

Synoptique du TMR0 :

Vous remarquez que ce module constitué de 3 entités sont :

- La logique de génération de l’horloge TMR0. - Le registre TMR0. - Le flag T0IF, indicateur de débordement.

Modes de fonctionnement : Le module TME0 fonctionne en 2 modes, mode Temporisateur et mode Compteur. Mode Temporisateur : Pour configurer ce mode, il faut mettre T0CS 0 le bit5 de OPTION_REG. Dans ce mode le TMR0 compte les impulsions de l’horloge système (Fosc/4). Mode Compteur : Pour configurer ce mode, il faut mettre T0CS 1, ce mode utilise la ligne RA4/T0CKI comme source (il faut configurer cette ligne en entrée dans TRISA). Le Pré-diviseur (PRESCALER) : est une logique de division de fréquence constitué par un compteur de 8 bascules et un MUX 8 1 sélectionner par les bits PS2 PS0 dans OPTION_REG, avec un autre bit PSA situé dans le même registre pour sélectionner l’attaque du TMR0 (la source en direct, ou par le Pré-diviseur). On distingue que, je peut diviser la fréquence source sur 2, 4, 8, 16, 32, 64, 128 et 256, et d’après la synoptique du module TMR0, on remarque que ce pré-diviseur n’est pas accessible soit en lecture ou en écriture, la CPU toute seule fait un effacement automatique du pré-diviseur dans le cas si le registre TMR0 est une destination par l’UAL (cette limite va créer un problème par la suite), ce pré-diviseur est composant commun entre le TMR0 et le WDT.

37

Page 40: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Compteur de 8 bascules

Mux 8 1 PS2/PS0

3

8

1 0

Source

PSA Les registres responsables à la manipulation/configuration du module TMR0 sont :

- Le registre « TMR0 » situé à la banque 0. - Le registre « INTCON » contient les bits T0IE, T0IF. - Le registre « OPTION_REG » situé à la banque 1, pour configurer le TMR0. - Le registre « TRISA » pour mettre la ligne RA4 en entrée si le module fonctionne en

mode compteur (situé à la banque 1). Structure de registre « OPTION_REG » : c’est le registre de configuration du mode TMR0 responsable à la sélection du mode de fonctionnement, type du front pour la source externe et la configuration de pré-diviseur.

38

Page 41: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Le chien de garde (WDT) et le mode mise en vielle : Le chien de garde (WDT) : est un TIMER libre démarre à l’instant de l’alimentation de µC si le module est en service par le mot de configuration du µC. A cause de l’horloge RC séparer de l’horloge système, le WDT après son débordement soit fait un reset de µC ou réveille le µC après l’exécution de l’instruction « SLEEP », j’ai indiqué précédemment que le pré-diviseur est un module commun entre le TMR0 et le WDT, pour associer le pré-diviseur au WDT, on met PSA = 1, et le pré-diviseur devient un post-diviseur pour le WDT. Le post-diviseur et le WDT sont effacés après l’exécution de l’instruction « CLRWDT », la période de WDT est 18ms sans post-diviseur (min 7ms, max 33ms).

39

Page 42: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Le mode mise en vielle : pour entrer dans cette situation, on exécute l’instruction « SLEEP » qui fait le travail suivant :

- WDT 0. - Post-diviseur 0. - TO\ 1. - PD\ 0. - Arrêt l’horloge système.

Cette situation arrête le µC et leurs périphériques fonctionnant sous l’horloge système, et pour sortir de cette situation, il faut réceptionner un événement indépendant de l’horloge système comme :

- Un reset par la ligne MCLR\. - Débordement de WDT. - Déclanchement d’une interruption par un périphérique.

Dans le cas de PIC 16F84A, les interruptions réveillent le µC sont :

- Evénement sur la ligne RB0/INT. - Changement d’état des lignes RB4:RB7. - Fin d’écriture dans l’EEPROM.

Vous remarquez que le débordement de TME0 ne réveille pas le µC, à cause du bloc de synchronisation avant l’attaque de TMR0, par ce que cette partie utilise l’horloge système. J’ai une question, qu’est ce qui se passe après le réveille de µC ? D’après le DATA SHEET la réponse est la suivante :

- après un reset sur la ligne MCLR\, la CPU exécute l’instruction située à l’adresse 0x000.

- Après un TIME-OUT (débordement WDT), la CPU exécute l’instruction qui suit l’instruction « SLEEP ».

- Après une interruption, on a 2 situations : o Si GIE = 0, la CPU exécute l’instruction qui suit l’instruction « SLEEP ». o Si GIE = 1, exécute l’instruction qui suit l’instruction « SLEEP » puis branche

vers le vecteur d’interruption situé à l’adresse 0x004. Remarque très importante : le mode mise en veille est impossible si GIE=0 et tous les flag et autorisateurs d’interruptions égal à 1 avant l’exécution de l’instruction « SLEEP », la CPU exécute « SLEEP » comme « NOP » puis exécute l’instruction qui suit l’instruction « SLEEP ». On résumé, on donne la table suivante : Evénement Branchement TO\ PD\ Mise sous tension 0x000 1 1 MCLR\ 0x000 1 1 MCLR\ (SLEEP) 0x000 1 0 Débordement WDT 0x000 0 1 Débordement WDT (SLEEP) PC+1 0 0 Interruption (SLEEP avec GIE=0) PC+1 U U Interruption (SLEEP avec GIE=1) PC+1 puis 0x004 U U U : il garde la valeur précédente.

40

Page 43: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

La série de TP N° :1 But : manipulation de PIC 16F84A et leurs périphériques. Exercice 1 : Soit le montage suivant :

1- Ecrire un programme qui affiche l’état de DIPSW sur le PORTA dans les 4 Leds relies aux PORTB (RB0:RB3).

2- Ecrire le même programme de la question 1 avec l’affichage de l’état inverse de DIPSW dans le reste du PORTB (RB4:RB7).

41

Page 44: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Exercice 2 : Soit le montage suivant :

Ecrire un programme qui réalise le travail suivant :

- à chaque appuyer sur le BP (impulsion), afficher la séquence suivante les Leds relies aux PORTB (0x81 0x7E 0x55 0xAA 0x3C C3 0x0F 0xF0).

42

Page 45: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Exercice 3 : Soit le montage suivant :

Ecrire un programme qui réalise un compteur M10 chaque appuyer sur BP1 et un décompteur M10 chaque appuyer sur BP2.

43

Page 46: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Exercice 4 : Réaliser le montage & écrire le programme qui fait le travail suivant :

- Initialiser le FILE d’adresse (0x30) par zéro. - A chaque impulsion sur RB0, le ISR incrémente cet FILE puis affiche son contenue

sur les 8 Leds relies aux pins du PIC. Exercice 5 : Réaliser le montage & écrire le programme qui fait le travail suivant :

- Initialiser le TMR0 par la valeur 0xFA. - Compter les impulsions arrivées de la ligne RA4 par le TMR0, et afficher le contenue

du TMR0 sur le PORTB (8 Leds). - A chaque débordement, le ISR initialise le TMR0 par la valeur 0xFA, puis change le

Pré-diviseur par : 1:1 1:2 1:4 1:1 … Exercice 6 : Réaliser un compteur M10 (affichage sur DIGIT) avec une temporisation chaque 200ms se fait par le TMR0. Exercice 7 : On donne le montage de jeu de lumière suivant :

Utiliser le TMR0, l’ EEPROM, & les PORTA, B pour réaliser le menu suivant : DIPSW2 Travail a effectué

00 Clignement de toutes les Leds à chaque 300ms 01 Défilement de droite à gauche à chaque 300ms 10 Basculement 4 Leds par 4 à chaque 300ms 11 Défilement de l’intérieur vers l’extérieur à chaque 300ms

44

Page 47: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Exercice 8 : Réaliser un compteur BCD M10000 (0 9999) avec l’incrémentation se fait chaque impulsion sur RB0 dans l’ ISR (manipulation de l’affichage multiplexé). Exercice 9 : Réaliser un décodeur d’un clavier matriciel 4x4 et afficher la touche décodée sur un ensemble de 4 Leds.

- Dans le mode normal. - Dans le mode économique.

Exercice 10 :

Relais programmable à base de PIC Soit le montage suivant :

Relais programmable À base de PIC

L1

1

2

Mémoriser

Sortie relais

Reprogrammer START

T1

M2

M1

T2

45

Page 48: Formation PIC

Formation sur les PIC 16Fxxx par : ATOUI Hamza

Fonctionnement : - Si le bouton « Reprogrammer » est appuyé le PIC est donc dans le mode

programmation, ce dernier attend une impulsion sur le bouton « Mémoriser » pour sauvegarder la fonction et la temporisation sélectionnées par le clavier (M2M1T2T1), la LED « L1 » doit allumer « 200ms » pour indiquer la mémorisation du mode de relais demandé dans l’ EEPROM de PIC, après la programmation de relais, le PIC attend une impulsion sur le bouton « START » pour déclancher le relais.

- Si le bouton « Reprogrammer » n’est pas appuyé, le PIC déclanche le mode mémorisé dans l’ EEPROM.

Les fonctions et les temporisations possibles par le clavier :

M2M1 Fonction T2T1 Temporisation 00 Minuterie 00 1 s 01 Retardateur 01 2 s 10 Télé- rupteur 10 3 s 11 Générateur 11 4 s

Impulsion START Impulsion START Temporisation

Télé- rupteur

Temporisation Impulsion START

Retardateur

Impulsion START Temporisation

Minuterie

Temporisation Impulsion START

Générateur

Timing de chaque mode avec l’impulsion START

46