68
Introduction L'activité pratique de l'enseignement de microprocesseur EN105 porte sur l'étude des microcontrôleurs PICs de la firme MICROCHIP. Ce choix s'explique par la simplicité du processeur ce qui le rend abordable avec peu de connaissances. De plus, les PICs sont très utilisés dans l'industrie et on les retrouve beaucoup sur le marché principalement dans les appareils grands publics (appareils électroménagers, …). Ce sont donc des microcontrôleurs utiles à connaître pour un ingénieur en électronique. Les connaissances nécessaires à la compréhension de ce document sont enseignées dans le cours générale du même module. Un résumé des concepts les plus importants est donné en annexe 1, extrait du cours synthétique mais complet de Thierry DUMARTIN (on pourra en consulter l'intégralité sur le net : http://www.geea.org/IMG/pdf/Cours_II.pdf) Ce document présente tout d'abord les différentes familles de PICs en insistant sur leur architecture commune. On se focalisera ensuite sur l'étude du PIC 16F84 qui est un grand standard dans la gamme des PICs car disposant des ressources essentielles pour un coût modique. C'est cette référence qui sera étudié en TP pour la phase d'initiation. Un autre PIC plus évolué (16F877) sera étudié dans le projet qui s'en suivra.

Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Embed Size (px)

Citation preview

Page 1: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Introduction

L'activité pratique de l'enseignement de microprocesseur EN105 porte sur l'étude des microcontrôleurs PICs de la firme MICROCHIP. Ce choix s'explique par la simplicité du processeur ce qui le rend abordable avec peu de connaissances. De plus, les PICs sont très utilisés dans l'industrie et on les retrouve beaucoup sur le marché principalement dans les appareils grands publics (appareils électroménagers, …). Ce sont donc des microcontrôleurs utiles à connaître pour un ingénieur en électronique.

Les connaissances nécessaires à la compréhension de ce document sont enseignées

dans le cours générale du même module. Un résumé des concepts les plus importants est donné en annexe 1, extrait du cours synthétique mais complet de Thierry DUMARTIN (on pourra en consulter l'intégralité sur le net : http://www.geea.org/IMG/pdf/Cours_II.pdf) Ce document présente tout d'abord les différentes familles de PICs en insistant sur leur architecture commune. On se focalisera ensuite sur l'étude du PIC 16F84 qui est un grand standard dans la gamme des PICs car disposant des ressources essentielles pour un coût modique. C'est cette référence qui sera étudié en TP pour la phase d'initiation. Un autre PIC plus évolué (16F877) sera étudié dans le projet qui s'en suivra.

Page 2: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu
Page 3: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

SOMMAIRE

I) DESCRIPTION 1) Architecture 2 2) Différentes familles 2 3) Espace mémoire 4

II) PROGRAMMER AVEC LES PICS 1) Principaux registres 7 2) Modes d'adressage 10 3) Types d'instruction 11 4) Jeu d'instructions 12 5) Déroulement d'une instruction 13

III) ETUDE DU PIC 16F84 1) Description rapide 15 2) Registres SFR 16 3) Architecture interne 17 4) Les ports d'entrée / sortie A et B 17 5) Le timer TIMER 0 18 6) Les interruptions 21 7) Le chien de garde 27 8) Le mode SLEEP 28 9) Les accès en mémoire EEPROM 29 ANNEXE 1 : Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2 : Jeu d'instructions des PICs ANNEXE 3 : Complément doc du 16F84

Page 4: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Le fabricant de circuits intégrés MICROCHIP propose une gamme importante de microcontrôleurs sous l'appellation "PIC", depuis le début des années 90. Il a battit son succès grâce à son PIC 8 bits, disponible en 3 gammes avec de multiples versions (environ 200 !), permettant ainsi à l'utilisateur de disposer d'un petit microcontrôleur RISC avec des ressources internes répondant au mieux à son application, pour un prix taillé au plus juste (à partir de 0,4 $ !). On trouve ainsi des PICs incorporant une EEPROM, des timers, des contrôleurs de bus, un module de débuggage… mais aussi des fonctions analogiques telles que CAN, ampli OP, référence de tension, oscillateurs… Il n'est donc pas étonnant de retrouver ses produits dans bon nombre de systèmes embarqués grand public. MICROCHIP a plus récemment complété sa gamme de produits avec des microcontrôleurs 16 et 32 bits ainsi que des DSP 16 bits. Il fabrique également un grand nombre de circuits intégrés (capteurs de température, ampli à gain programmable…) destinés à être interfacés avec ses microcontrôleurs. Le site du constructeur www.microchip.com illustre bien la diversité de ses produits et la volonté de proposer des solutions "clés en main" dans un domaine d'application donné. Nous nous intéresserons dans le cadre de l'activité pratique du module EN105 aux PICs 8 bits 16F84 pour la partie initiation, et 16F877 en ce qui concerne le projet.

1

Page 5: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

I) DESCRIPTION

1) Architecture

Les PICs les plus répandus, dits "8 bits", sont bâtis autour d'un processeur 8 bits, c'est-à-dire que les registres et le bus de données internes ont un format de 8 bits. Ils ont une architecture Harvard et possèdent donc un bus "programme" distinct du bus de données ce qui leur permet d'accéder et manipuler une donnée et simultanément aller lire l'instruction suivante. Ce parallélisme est possible grâce à un pipeline à 2 niveaux (voir section III-5 "déroulement d'une instruction").

Le processeur est de type RISC (Reduced Instruction Set Computer) et ne possède

donc que peu d'instructions (35 pour les 2 PICs que nous utiliserons). Cette caractéristique permet de les coder dans un seul emplacement mémoire pour chaque instruction, ce qui permet un accès et un décodage plus rapide. Une instruction s'exécute ainsi en 1 cycle d'horloge soit 4 périodes de celle-ci. Les PICs permettent ainsi une cadence de plusieurs MIPS (Million Instructions Per Second), jusqu'à 5 MIPS pour la série PIC16 que nous utiliserons. La contrepartie de ce gain de rapidité se situe au niveau de la simplicité des instructions qui nécessite d'en associer souvent plusieurs pour réaliser une opération même basique. Un autre inconvénient concerne l'accès aux registres plus complexe puisqu'on ne code qu'une partie de leur adresse dans le champ de l'instruction afin de limiter la taille des emplacements de la mémoire programme, l'autre partie définissant une page mémoire ("banque") sélectionnée au moyen d'un registre spécifique.

2) Différentes familles Les PICs sont aujourd'hui découpés en 4 séries (PIC10, PIC12, PIC16 et PIC18) classées par "puissance" en termes de ressources internes, d'entrées/sorties et, ce qui est étroitement lié, en capacité de mémoire programme d'autant plus étendue qu'il y aura de ressources à contrôler. Certains PICs ont aujourd'hui disparu (PIC14, PIC16C5 en voie d'obsolescence…) et il faut être conscient que les PICs sont en constante évolution avec une pérennité donc réduite, mais les références supprimées du catalogue sont en général remplacées par de nouvelles généralement compatibles et plus performantes. Il est bien clair que les PICs sont avant tout destinés aux produits grands publics à faible durée de vie plutôt qu'aux applications militaires…

2

Page 6: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

MICROCHIP a dès le départ défini 3 classes d'architecture pour ses PICs, qui se distinguent par la taille des instructions :

Baseline : instructions codées sur 12 bits Mid-Range : instructions codées sur 14 bits High performance (ou high end) : instructions codées sur 16 bits Une taille plus élevée permet un plus grand nombre d'instructions mais surtout d'augmenter le champ alloué à l'adresse du registre à manipuler et donc de disposer de plus de registres. Ceux-ci sont effet d'autant plus nombreux qu'il y a de ressources (entrées/sorties, timer…) à contrôler.

Une 4e classe intermédiaire entre la Mid-Range et la High performance a récemment vu le jour : la classe Enhanced Midrandge, de même gabarit que la midrange mais offrant plus de possibilité et de performance au niveau de la programmation.

.

3

Page 7: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Les 2 PICs étudiés dans le module EN105 font partie de la famille intermédiaire mid-range qui est la plus étoffée en nombre de références et donc la plus répandue. Nous nous limiterons à l'exemple du PIC16F84 pour définir l'espace mémoire de programme et de données, les autres références étant calquées sur la même organisation, avec plus ou moins d'emplacements.

3) Espace mémoire a) Mémoire code programme

Il s'agit d'une mémoire de type FLASH (= EEPROM à accès rapide) sur les PICs de type F tel que le 16F84, c'est-à-dire sur les PICs les plus récents. On trouve encore des versions OTPROM (One Time Programming ROM) pour les PICs de type C tel que le 16C84 devenu obsolète, et des versions ROM (type CR) programmé en usine par MICROCHIP.

Mémoire programme PIC 16F84

4

Page 8: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Le PIC 16F84 possède une mémoire FLASH de 1 Kmots (= 1024 mots !) de 14 bits et l'espace maximum adressable pour la famille midrange est de 8 Kmots (cas du 16F877). Le compteur programme PC (Program Counter) est donc un registre de 13 bits dont seuls les 10 bits de poids faibles sont utiles sur le 16F84. Le registre PC contient à tout instant l'adresse de l'instruction qui sera exécutée au prochain cycle d'horloge.

La pile ("Stack") est une zone mémoire qui sert à stocker des adresses utiles au déroulement du programme. Par exemple lorsqu'on effectue un appel de sous-programme (appel de fonction en langage C) l'adresse de l'instruction courante est stockée automatiquement dans la pile permettant ainsi de reprendre le déroulement du programme après cette instruction une fois le sous-programme exécuté. Le processeur effectue pour cela des copies PC→pile (appel) ou pile→PC (retour). La pile est une mémoire à accès séquentiel de type LIFO (Last In First Out) dont le nom fait référence à une pile d'assiette : la dernière posée sera la première à être reprise. Cette zone mémoire n'est pas accessible par l'utilisateur sur les PICs, et ne contient que 8 emplacements ce qui est très peu. Toute récursivité est pour cela interdite par les compilateurs C. La pile étant ici circulaire, la 9e écriture écrase la 1ère définitivement perdue. 2 adresses sont particulières pour tous les PICs :

0000h : adresse de l'instruction qui sera exécutée à la mise sous tension ou après un RESET 0004h : adresse de l'instruction qui sera exécutée si une interruption survient (voir partie …) Remarque : Microchip utilise ici le terme "vecteur" ce qui est un abus de langage car un

vecteur est en principe un pointeur en microinformatique c'est-à-dire qu'il contient l'adresse de la case mémoire qu'il pointe. Les PICs accèdent à cette adresse de la même manière que pour tout autre emplacement en mémoire programme, c'est-à-dire qu'il décode la valeur lue pour obtenir une instruction. En pratique, on place à ses 2 adresses une instruction GOTO add où add désigne l'adresse de la routine RESET ou ISR (Interrupt Service Routine).

Certains PICs (famille High performance) possèdent une table de vecteurs, c'est-à-dire qu'ils disposent de plusieurs vecteurs utilisés pour les interruptions (cf doc MICROCHIP)

5

Page 9: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

b) Mémoire données (8 bits)

RAM Mémoire données PIC 16F84

Elle contient les registres à fonction dédiée (SFR). Attention, ces registres sont divisés

en 2 banques (voire 4 sur certains PICs) sélectionnables par le bit RP0 (+RP1) du registre STATUS) ou directement par un registre dédié (BANK REGISTER sur les PICs de la famille High performance).

A la suite de ces registres se trouve de la RAM utilisable pour stocker des variables "GPR" (General Purpose Registers). Attention : souvent banque 1 = banque 0 mais pas toujours !.

PIC 16F84 : La RAM s'étend jusqu'à 0x4F → 68 octets de libre pour les GPR.

6

Page 10: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

EEPROM (selon circuit)

Certains PICs disposent d'une mémoire EEPROM pour stocker des constantes accessibles au moment de la programmation mais aussi par le programme. Attention, cette dernière procédure est assez lourde (surtout en écriture) et le temps d'accès en écriture est relativement long (10 ms). Ces octets ne sont donc pas à utiliser pour stocker des variables temporaires évoluant souvent dans le programme.

Pour le PIC 16F84, on trouve 64 octets à partir de l'adresse 0x2100

II) PROGRAMMER AVEC LES PICS

1) Principaux registres Certains registres sont indispensables au déroulement du programme. En voici une description rapide. a) Le registre de travail W (Working)

Le processeur ne peut déplacer une donnée ou effectuer une opération arithmétique ou logique sur un registre (SFR ou GPR) qu'en utilisant le registre de travail W (Work). C'est un registre 8 bits indépendant des registres SFR et qui est directement associé à l'ALU (Arithmetic Logic Unit) comme on peut le voir sur le schéma interne du PIC (cf section IV-2). b) Le registre d'état STATUS (0x03/0x83)

C’est un registre qui fournit des indications liées à l'exécution de la dernière instruction par le processeur. On y trouve en particulier les bits d'état qui renseignent sur la valeur de la dernière opérande (=donnée manipulée par une instruction). Ce registre contient également les bits qui permettent de sélectionner les différentes pages mémoires en RAM ("banques").

7

Page 11: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

C (b0) : Carry (report). Ce bit est en fait le 9ème bit d’une opération. Par exemple, si une

addition de 2 octets donne une valeur > 255 (FFh), ce bit sera positionné.

DC (b1) : Digit Carry. Ce bit est utilisé principalement lorsque l’on travaille avec des

nombres BCD : il indique un report du bit 3 vers le bit 4 dans une opération.

Z (b2) : Zero. Ce bit est positionné à 1 si le résultat de la dernière opération

vaut 0. /PD (b3) : Power down Indique quel événement a entraîné le dernier arrêt du PIC

(instruction sleep ou dépassement du temps du watchdog). /TO (b4) : Time-Out bit Ce bit indique (si 0), que la mise en service suit un arrêt

provoqué par un dépassement de temps ou une mise en sommeil. Dans ce cas, /PD effectue la distinction.

RP0 (b5) : Register Bank Select 0 Permet d’indiquer dans quelle banque de RAM on

travaille (0 = banque 0). RP1 (b6) : Register Bank Select 1 Permet la sélection des banques 2 et 3. Inutilisé pour le

16F84, doit être laissé à 0 pour garantir la compatibilité ascendante (portabilité du programme).

IRP (b7) : Indirect RP Permet de décider quelle banque on adresse dans le cas

de l’adressage indirect pour les PICs disposant de plus de 2 banques (inutile pour le 16F84).

8

Page 12: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

c) Le compteur programme Il pointe sur la prochaine instruction à exécuter. Comme il est codé sur 13 bits (accès à toute la mémoire de codes programmes) il nécessite d'être représenté par 2 registres : PCL (PC Low) (0x02/0x82) : 8 bits de poids faible PCLATH (PC LATch counter High) (0x0A/0x8A) : 5 bits de poids fort b4 à b0 NB : pour le 16F84, 1Kmot de mémoire programme ⇒ b4, b3, b2 de PCLATH non utilisés.

Chargement du PC dans différentes situations

9

Page 13: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

2) Modes d'adressage Le mode d'adressage désigne la manière de désigner la donnée à manipuler (opérande). Il n'existe que 3 modes d'adressage sur les PICs, qui sont les plus usuels sur les processeurs :

literal (= immédiat) : la valeur de l'opérande est directement donnée dans l'instruction ex : MOVLW k charge la valeur k dans W

direct : l'opérande est le contenu de l'adresse (registre) spécifié ex : MOVWF 0x05 charge le contenu de W dans l'adresse 05h

(registre PORTA)

indirect : l'opérande est le contenu de la case mémoire dont l'adresse est elle-même contenue dans le registre spécifié (= pointeur en langage C). Sur les PICs l'utilisation de ce mode d'adressage est particulier : le pointeur est unique, il s'agit du registre FSR (0x04/0x84). Pour utiliser ce mode d'adressage on fait appel dans l'instruction à un registre spécial, le registre INDF (0x00/0x80) qui n'existe pas vraiment.

ex : MOVLW 0x05 charge la valeur 05h (adresse de PORTA) dans W

MOVWF 0x04 charge la valeur 05h dans le registre FSR MOVF INDF,W charge le contenu de PORTA dans W

10

Page 14: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

3) Types d'instruction a) Instruction qui porte sur 1 octet : manipule l'octet contenu dans un registre

NB : le 8e bit de l'adresse du registre est le bit RP0 (b5 de STATUS) qui permet donc de changer de banque.

b) Instruction qui porte sur un bit : manipule directement un des 8 bits d'un registre c) Instruction literal : manipule des données codées dans l'instruction même (adressage

immédiat) d) Sauts et appel de sous-programme : 3 bits pour coder l'instruction, les 11 bits restant pour

coder l'adresse de destination. Si la mémoire programme est supérieure 2 Kmots (16F877…) on positionne les bits 3, 4 de PCLATH.

11

Page 15: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

4) Jeu d'instructions (exemple de la famille mid-range avec 35 instructions, détaillées en annexe 2)

12

Page 16: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

5) Déroulement d'une instruction Le signal d'horloge externe est divisé par 4 à l'intérieur du PIC pour obtenir 4 horloges internes en quadrature nommées Q1, Q2, Q3 et Q4. Le PC est incrémenté par Q1 et l'instruction est chargée dans le registre instruction par Q4 (délai nécessaire à cause du temps d'accès de la mémoire programme). Le cycle suivant effectue l'exécution de l'instruction avec, dans le cas le plus fréquent : Q1 : décodage de l'instruction Q2 : lire l'opérande (W, registre en RAM, donnée immédiate…) Q3 : effectuer un éventuel traitement (addition, …) Q4 : stocker le résultat (dans l'opérande source, W…)

Une instruction nécessite 1 cycle pour que le PIC aller la chercher en mémoire

programme et un autre pour l'exécuter. Un pipeline à 2 niveaux permet de mener ces 2 types d'opération en parallèle : dans un même cycle de 4 périodes d'horloge, le PIC va chercher l'instruction n tout en exécutant l'instruction n+1. Une instruction s'exécute donc en un seul cycle, sauf lorsqu'il y a déroutement (changement du PC par une instruction, cf exemple ci-dessous) où il faut rajouter un cycle "mort" pour charger la nouvelle instruction avant son exécution.

13

Page 17: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

III) ETUDE DU PIC 16F84

14

Page 18: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

1) Description rapide

Le PIC 16F84 est aujourd'hui remplacé par le 16F84A qui lui est complètement équivalent (mémoire FLASH améliorée avec 10000 écritures possibles au lieu de 1000). Résumé des caractéristiques du PIC 16F84 (A) - Boitier 18 broches (DIP ou SOIC) - Alimentation : (2 V < < 5,5 V) - Fréquence d'horloge ≤ 20 MHz (quartz ou circuit RC selon programmation) (1 cycle d'horloge = 4 périodes d'horloge) - Mémoire programme : 1 Kmots de 14 bits (bit 3 et 4 de PCLATH inutilisés)

de type FLASH (16F84) ou EEPROM (16C84)

- Mémoire de données : RAM : 2 banques de 64 octets dont certains sont identiques (!) et d'autres inutilisables.

→ 15 registres SFR → 68 octets libres pour stocker des variables

EEPROM : 64 octets

- Périphériques : 2 ports d'entrée/sortie A (5 bits) B (8 bits) 1 timer (avec prédiviseur 8 bits programmable) 1 chien de garde - 4 sources d'interruption (1 seul vecteur) - pile à 8 niveaux - mode standby …

15

Page 19: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

2) Registres SFR En plus des registres principaux décrits dans la section II-1, on trouve des registres dédiés à la gestion des périphériques internes associés au processeur (cf schéma architecture interne section III-3).

Le tableau ci-dessous récapitule tous les registres du PIC16F84 (A), avec la désignation de chacun de leurs 8 bits ainsi que leur état au démarrage et après un reset. Ces différents registres vont être décrits dans les sections suivantes.

16

Page 20: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

3) Architecture interne

4) Les ports d'entrée/sortie A et B

Chaque port est géré par les registres :

PORT (A:0x05 , B:0x06) qui est le "contenu" du port correspondant (= image de l'état des bits du port).

TRIS (A:0x85 , B:0x86) qui configure indépendamment les bits du port en entrée (1) ou en sortie (0).

ex : TRISB = 0x0F PB7, PB6, PB5, PB4 en sortie PB3, PB2, PB1, PB0 en entrée

le registre commun OPTION (0x81) qui permet grâce au bit RPU (b7) de mettre en service (si RPU = 0) les résistances de rappel à + 5V (pull up) sur tous les bits du port B.

17

Page 21: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

NB : - Certaines broches de ces ports ont une double fonction. Par exemple RB0/INT peut aussi servir pour provoquer une interruption externe (matérielle).

- Tous les bits des ports sont compatibles avec les niveaux TTL (sorties push-pull). Attention RA4 a une sortie en drain ouvert (nécessité de placer une résistance de pull up en externe)

- courant max de sortie : 25 mA / broche avec un total de 50 mA (port A) 100 mA (port B)

5) Le timer TIMER 0 C'est un compteur 8 bits dont la valeur en sortie est accessible par l'intermédiaire du registre TMR0 (0x01) en lecture mais aussi en écriture. Il peut être incrémenté de 2 façons :

par les cycles d'horloge du PIC (attention 1 cycle = 4 périodes de H) : c'est le mode TIMER par les impulsions reçues sur la broche RA4/TOCKI : c'est le mode COMPTEUR

18

Page 22: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Le TIMER 0 est lui aussi géré par le registre OPTION (0x81) :

le bit TOCS (b5) permet de choisir le mode : - TOCS = 0 → mode TIMER - TOCS = 1 → mode COMPTEUR

le bit TOSE (b4) permet de choisir sue quelle transition de la broche RA4/TOCKI le comptage est effectué en mode COMPTEUR :

- TOSE = 0 : comptage si l'entrée RA4/TOCKI passe de 0 à 1 - TOSE = 1 : comptage si l'entrée RA4/TOCKI passe de 1 à 0

les bits PS2 (b2), PS1 (b1), PS0 (b0) permettent de définir le rapport de division du prédiviseur (prescaler)

NB : Le prescaler peut aussi être utilisé pour le chien de garde (voir plus loin) mais il ne peut

plus alors être utilisé par le TIMER 0.

le bit PSA (b3) permet d'affecter le prescaler : - au TIMER 0 (PSA = 0) - ou au chien de garde (PSA = 1) NB : - Pour désactiver le prescaler il faut l'affecter au chien de garde avec un rapport 1 : 1

(PS2=PS1=PS0=0) - Les 8 bits du prescaler ne sont pas accessibles en lecture ni en écriture ex : fhorloge = 4 MHz cycle d'horloge de durée = 1 μs TOSC = 0 mode TIMER PSA = 0 prescaler affecté au TIMER 0 (PS2, PS1, PS0) = 010 : 8 ⇒ TIMER 0 incrémenté toutes les 8 μs

19

Page 23: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Utilisation du TIMER 0 Le TIMER 0 peut être utilisé de 2 façons :

Par scrutation du flag TOIF

Lorsque le TIMER 0 déborde (passage de la valeur 255 à 0) le bit TOIF (b2) du registre INTCON (0x0B, 0x8B) passe à 1 (et reste à 1 tant qu'il n'a pas été remis à 0 par le programme !). Il suffit donc de scruter le bit TOIF pour savoir si 256 incrémentations ont eu lieu. Inconvénient de cette méthode : on perd du temps à attendre et tester le TIMER 0. De plus, le

programme risque de ne pas réagir assez rapidement (si la fréquence des tests est inférieure à celle de l'incrémentation de TMR0)

NB : Si l'on souhaite tester un nombre d'incrémentation N < 256 : on préférera initialiser le registre TMR0 à la valeur de N codée en

complément à 2 plutôt que de scruter la valeur de TMR0 et de la comparer à N (test plus rapide)

N ≥ 256 : on utilise une ou plusieurs boucles incrémentées par le débordement du TIMER 0

Par interruption Cette méthode résoud le problème posé par la précédente car le programme principal n'a pas à tester le TIMER 0 : le débordement du TIMER 0 génère une interruption (si le registre INTCON est bien configuré…) qui déroute "aussitôt" le PIC du programme principal pour traiter un sous-programme prévu. C'est donc cette méthode qui est de loin la plus utilisée.

20

Page 24: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

6) Les interruptions

a) Principe On parle d'interruption lorsqu'un événement survient et interrompt le déroulement normal du programme afin de pouvoir traiter immédiatement l'événement. Une fois l'événement traité (routine d'interruption terminée) le programme principal reprend à l'endroit où il avait été interrompu, comme si l'interruption n'avait pas eu lieu. Le déroulement classique d'une procédure d'interruption a lieu selon le schéma :

Instruction n-1

Instruction n

Instruction n+1

Sauvegarde du contexte dans la pile

Traitement du sous-programme d'interruption

Restauration du contexte

événement

(figurant dans la liste des sources d'interruption autorisées et prioritaire devant l'éventuelle interruption en cours de traitement)

- PC (instruction suivante) - registre d'état - autres registres…

selon le vecteur associé à la source d'interruption

b) Mécanisme d'interruption sur les PICs - Tout d’abord, l’adresse de début de toute interruption est fixe (un seul vecteur). Il s’agit

toujours de l’adresse 0x04. Toute interruption provoquera le saut du programme vers cette adresse.

- Toutes les sources d’interruption arrivant à cette adresse, si le programmeur utilise plusieurs sources d’interruptions, il lui faudra déterminer lui-même laquelle il va devoir traiter.

- Les PICs en se connectant à cette adresse, ne sauvent rien automatiquement, hormis le contenu du PC, qui servira à connaître l’adresse du retour de l’interruption. C’est donc à l’utilisateur de se charger de la sauvegarde des registres. (ceci n'est plus nécessaire sur la toute dernière classe d'architecture Enhanced Midrandge et bein sûr avec la High performance)

21

Page 25: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

- Le contenu du PC est sauvé sur la pile interne (8 niveaux). Donc, si on utilise des interruptions, on ne dispose plus que de 7 niveaux d’imbrication pour les sous-programmes (moins si on utilise des sous-programmes dans les interruptions).

- Le temps de réaction d’une interruption est calculé de la manière suivante : le cycle courant de l’instruction est terminé, le flag d’interruption est lu au début du cycle suivant. Celui-ci est achevé, puis le processeur s’arrête un cycle pour charger l’adresse 0x04 dans PC. Le processeur se connecte alors à l’adresse 0x04 où il lui faudra un cycle supplémentaire pour charger l’instruction à exécuter. Le temps mort total sera donc compris entre 3 et 4 cycles.

- Une interruption ne peut pas être interrompue par une autre interruption. Les interruptions sont donc invalidées automatiquement lors du saut à l’adresse 0x04 par l’effacement du bit GIE (voir plus loin).

- Les interruptions sont remises en service automatiquement lors du retour de l’interruption. L’instruction RETFIE agit donc exactement comme l’instruction RETURN, mais elle repositionne en même temps le bit GIE.

Les interruptions sur les PICs :

Restaurerle contexte

Sauvegarder le contexte

22

Page 26: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Exemple du déclenchement d'une interruption par le débordement du TIMER0 c) Les interruptions avec le PIC 16F84 Le 16F84 est très pauvre à ce niveau, puisqu’il ne dispose que de 4 sources d’interruptions possibles (contre 13 pour le 16F877 par exemple). Les événements susceptibles de déclencher une interruption sont les suivants : - TIMER0 : Débordement du TIMER 0. Une fois que le contenu de TMR0 passe de 0xFF à

0x00, une interruption peut être générée.

- EEPROM : Cette interruption peut être générée lorsque l’écriture dans une case EEPROM interne est terminée.

- RB0/INT : Une interruption peut être générée lorsque la broche RB0, encore appelée INTerrupt pin, étant configurée en entrée, celle-ci reçoit un front. Le front actif est défini par le bit INTEDG (b6) du registre OPTION (0x81) :

INTEDG = 1 → front montant INTEDG = 0 → front descendant

23

Page 27: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

- PORTB : De la même manière, une interruption peut être générée si un changement de

niveau (front montant ou descendant) se produit sur une des broches RB4 à RB7. Il n’est pas possible de limiter l’interruption à une seule de ces broches. L’interruption sera effective pour les 4 broches ou pour aucune.

Les interruptions sont gérées par le registre INTCON (0x0B, 0x8B) :

GIE (b7) : Global Interrupt Enable bit. Il permet de valider ou d’invalider toutes les interruptions en une seule fois.

EEIE (b6) : EEprom write complete Interrupt Enable bit. Ce bit permet de valider

l’interruption de fin d’écriture en EEPROM (voir paragraphe 7). T0IE (b5) : Tmr0 Interrupt Enable bit : Valide l’interruption générée par le débordement du

TIMER 0. INTE (b4) : INTerrupt pin Enable bit : Valide l’interruption dans le cas où un front actif se

présente sur la broche RB0. RBIE (b3) : RB port change Interrupt Enable bit : Valide les interruptions si il y a un

changement de niveau sur une des entrées RB4 à RB7. T0IF (b2) : Tmr0 Interrupt Flag bit : C’est un Flag (indicateur), donc il signale. Ici c’est le

débordement du TIMER 0. INTF (b1) : INTerrupt pin Flag bit : signale une transition sur la pin RB0 dans le sens

déterminé par INTEDG (b6) du registre OPTION. RBIF (b0) : RB port Interrupt Flag bit : signale qu’une des entrées RB4 à RB7 a été modifiée.

24

Page 28: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

La validation des sources d'interruption peut être représentée par le schéma :

dévalidation de toutes les l'interruptions

validation de l'interruption

Flag

source d'interruption

Remarques : - Les indicateurs (flags) permettent de connaître la source qui a provoqué l'interruption

(attention ils doivent être remis à 0 par le sous-programme d'IT). - Les bits EEIF, TOIE, RBIE, INTE permettent de valider la source d'IT correspondante. - Le bit GIE permet de dévalider toutes les sources d'IT. Comme les PICs ne peuvent traiter

qu'une seule IT à la fois, le bit GIE est automatiquement mis à 0 au début du traitement de l'IT (il est restauré à 1 automatiquement par l'instruction RETFIE)

- Le bit EEIF (indicateur de fin d'écriture en EEPROM) est le bit 4 du registre EECON1

(0x88) d) Sauvegarde et restauration du contexte Le PC est sauvegardé dans la pile et restauré automatiquement à la fin de l'IT. Le sous-programme d'IT doit donc gérer la sauvegarde des registres STATUS et W. On ne peut, comme on le fait en général pour stocker ces registres, utiliser la pile car elle n'est pas accessible. On utilise donc 2 emplacements en RAM.

25

Page 29: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Problème : l'instruction permettant de sauvegarder le STATUS ne doit pas le modifier en effectuant l'opération !

MOVF (F → d) affecte le STATUS mais MOVWF (W → F) et SWAPF (interchange les 4 bits de poids faible avec ceux de poids fort et stocke

le résultat dans d) ne l'affecte pas.

En conséquence, le corps de la routine d'IT incluant les procédures de sauvegarde et restauration de W et STATUS pourra être le suivant :

;sauvegarde des registres

;--------------------------

movwf w_temp ; sauver registre W

swapf STATUS,w ; swap status avec résultat dans w

movwf status_temp ; sauver status swappé

; "switch" vers différentes interruptions

; ----------------------------------------

; ici, on teste éventuellement de quelle interruption il s’agit

; traitement des interruptions

; ----------------------------------

; ici, on peut traiter l'interruption puis effacer son flag

;restauration des registres

;----------------------

swapf status_temp,w ; swap ancien status, résultat dans w

movwf STATUS ; restaurer status

swapf w_temp,f ; Inversion L et H de l'ancien W

; sans modifier Z

swapf w_temp,w ; Ré-inversion de L et H dans W

; W restauré sans modifier status

retfie ; retour de l'interruption

26

Page 30: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

7) Le chien de garde (Watch Dog) C'est un mécanisme de protection du programme qui en théorie ne doit pas servir mais qui en pratique peut permettre de sortir d'une boucle d'attente infinie (événement attendu qui ne se produit pas…) et de vérifier si le programme ne s'est pas égaré. Le Watch-Dog (WD) sert également à réveiller un PIC placé en mode SLEEP (voir paragraphe 6). a) Description Il s'agit en fait d'un timer ("WDT") qui possède sa propre horloge dont la fréquence dépend de la température et de la tension d'alimentation (mais pas de fhorloge !). Le constructeur donne :

7 ms ≤ périodicité du débordement du timer WD = 18 ms typique ≤ 33 ms Le temps de débordement peut être allongé grâce au prescaler (qui fonctionne ici en post-diviseur), si PSA = 1, qui peut multiplier ce temps au maximum × 128 : b) Principe Chaque fois que l'instruction CLRWDT est exécutée par le PIC, le WDT est remis à 0 ainsi que la valeur contenue dans le prédiviseur. Si, pour une raison anormale, cette instruction n'est pas exécutée avant le débordement du WDT, le PIC est redémarré à l'adresse 0x00 et le bit /TO (b4) de STATUS est mis à 0. En lisant ce bit en début de programme il est de plus possible de détecter si le PIC vient d'être mis sous tension ou si ce démarrage est dû à un "plantage" du programme.

27

Page 31: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

c) Utilisation Le WDT est donc une protection intéressante mais qu'il faut gérer par le programme. Pour cela il suffit de placer des instructions CLRWDT à intervalle inférieure au temps de débordement du WD.

Δ Tmax = rapport prescaler (d'après PS2 ,PS1, PS0) × 7 ms (cas le plus défavorable) Il est à choisir en fonction de l'application selon le compromis :

ΔTmax faible (réaction rapide face au plantage) ↔ peu d'instructions CLRWDT à insérer NB : - Le WD est mis en service par la directive CONFIG _WDT _ON à préciser au moment

de la programmation (met le bit WDTE à 1, voir annexe 3) et ne peut être désactivé par le programme.

- Ne jamais placer un CLRWDT dans une routine d'IT sinon l'IT risque de neutraliser la protection offerte par le WD sans pour autant bien sûr réinitialiser le PIC.

8) Le mode SLEEP L'instruction SLEEP permet de placer le PIC en mode SLEEP (ou Standby), c'est-à-dire que le PIC s'arrête juste après l'instruction en attendant d'être réveillé. L'intérêt de ce mode est de diminuer la consommation du PIC (Icc < 0,5 µA). Pour profiter au maximum de la chute de consommation, Microchip recommande que les broches en sortie des ports soient traversées par un courant minimal ce qui peut être obtenu en choisissant convenablement les niveaux logiques programmée compte tenu de l'électronique reliée. Principe

Lorsque l'instruction SLEEP est exécutée :

- Le WDT est remis à 0, exactement comme le ferait une instruction CLRWDT.

- Le bit /TO du registre STATUS est mis à 1.

- Le bit /PD du registre STATUS est mis à 0.

- L’oscillateur est mis à l’arrêt, le PIC n’exécute plus aucune instruction.

28

Page 32: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Une fois dans cet état, le PIC est à l’arrêt. La consommation du circuit est réduite au minimum. Si le TIMER 0 est synchronisé par l’horloge interne, il est également mis dans l’incapacité de compter. Par contre, il est très important de se rappeler que le timer du watchdog possède son propre circuit d’horloge; il continue donc de compter comme normalement. Plusieurs événements peuvent faire sortir le PIC du mode SLEEP :

- Application d’un niveau 0 sur la broche /MCLR. Le PIC effectuera un reset classique à l’adresse 0x00. L’utilisateur pourra tester les bits /TO et /PD lors du démarrage pour vérifier l’événement concerné (reset, watch-dog, ou mise sous tension).

- Ecoulement du temps du timer du watchdog. Pour que cet événement réveille le PIC, il faut que le watchdog ait été mis en service dans les bits de configuration. Dans ce cas particulier, le débordement du WDT ne provoque pas un reset du PIC, il se contente de le réveiller. L’instruction qui suit est alors exécutée au réveil.

- Une interruption RB0/INT, RB, ou EEPROM est survenue. Pour qu’une telle interruption puisse réveiller le processeur, il faut que les bits de mise en service de l’interruption aient été positionnés. Le PIC se réveille et exécute l'instruction suivant SLEEP. On peut noter que si le bit GIE = 1 (interruptions activées) le PIC traite en plus l'IT qui l'a réveillé, sinon il continue.

9) Les accès en mémoire EEPROM a) Ecriture lors de la programmation Le PIC 16F84 dispose de 64 octets implantés à partir de l'adresse 0x2100 accessibles directement uniquement lors de la programmation à l'aide de la directive DE (Data Eeprom) du logiciel MPLAB (voir TP). ex : ORG 0x2100 DE 0x10 écrit la valeur 10h dans la 1ère adresse de l'EEPROM

29

Page 33: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

b) Accès par le programme L'EEPROM est gérée par les registres : - EEDATA (0x08) : C’est dans ce registre que va transiter la donnée à écrire vers, ou la

donnée lue en provenance de l’Eeprom.

- EEADR (0x09): Dans ce registre doit être précisée sur 8 bits l’adresse concernée par l’opération de lecture ou d’écriture en EEPROM. On voit déjà que pour cette famille de PICs, on ne peut pas dépasser 256 emplacements d’EEPROM. Pour le 16F84, la zone admissible va de 0x00 à 0x3F (codé en relatif par rapport à l'adresse de début de zone physique 0x2100), soit 64 emplacements.

EECON1 (0x88) : Ce registre contient 5 bits qui définissent ou indiquent le fonctionnement des cycles de lecture/écriture en EEPROM :

bits 7/6/5 : non utilisés EEIF (b4) : EEprom write operation Interrupt Flag bit. C’est le flag qui est en liaison avec

l’interruption EEPROM. Il passe à 1 une fois l’écriture en EEPROM terminée. Si le bit EEIE du registre INTCON est à 1, une interruption sera générée.

WRERR (b3) : WRite Error. C’est un bit d’erreur. Il passe à 1 si une opération d’écriture

en EEPROM a été interrompue, par exemple par un reset.

WREN (b2) : WRite ENable. Autorisation de démarrage du cycle d’écriture

WR (b1) : WRite. Démarrage du cycle d’écriture. Est remis à 0 automatiquement une fois l’écriture terminée.

RD : ReaD. Démarrage d’un cycle de lecture. Reste à 1 durant un cycle, puis est remis à

0 automatiquement.

NB : Dans le cas où le cycle d’écriture serait interrompu suite au dépassement du watchdog ou à un reset, il est possible de s'en apercevoir en lisant le bit WRERR. Dans ce cas les registres EEDATA et EEADR demeurent inchangés et on peut relancer le cycle d’écriture. Ceci ne fonctionne évidemment pas pour une coupure de tension.

30

Page 34: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

EECON2 (0x89): Il s’agit tout simplement d’une adresse, qui sert à envoyer des commandes au PIC concernant les procédures d'écriture en EEPROM. On ne peut l’utiliser qu’en respectant la routine donnée par le constructeur (voir ).

Lecture

Pour lire une donnée en EEPROM, il suffit de placer l'adresse concernée dans le registre EEADR, puis de positionner le bit RD à 1. On peut ensuite récupérer la donnée lue dans le registre EEDATA. (Ne pas oublier d'effectuer les différents changements de banque !) ex : movlw adeeprom ; charger adresse eeprom movwf EEADR ; adresse à lire dans registre EEADR bsf STATUS , RP0 ; passer en banque1

bsf EECON1 , RD ; lancer la lecture EEPROM bcf STATUS , RP0 ; repasser en banque 0 movf EEDATA , w ; charger valeur lue dans W

Ecriture

La procédure à suivre consiste d’abord à placer la donnée dans le registre EEDATA et l’adresse dans EEADR. Ensuite une séquence spécifique imposée par le constructeur (voir ligne de codes en gras dans l'exemple suivant) doit être chargée dans le registre EECON2. Remarques

- Microchip recommande que cette procédure spécifique ne soit pas interrompue par une interruption, donc il vaut mieux couper les interruptions durant cette phase.

- A la fin de la procédure d’écriture, la donnée n’est pas encore enregistrée dans

l’EEPROM. Elle le sera approximativement 10 ms plus tard (ce qui représente tout de même pas loin de 10.000 instructions !). On ne peut donc pas écrire une nouvelle valeur en EEPROM, ou lire cette valeur avant d’avoir vérifié la fin de l’écriture précédente.

- La fin de l’écriture peut être constatée par la génération d’une interruption (si le bit

EEIE est positionné), ou par la lecture du flag EEIF (s’il avait été remis à 0 avant l’écriture), ou encore par consultation du bit WR qui est à 1 durant tout le cycle d’écriture.

31

Page 35: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Voici un exemple d'écriture (en gras ce qu'il est impératif de respecter selon MICROCHIP) : movlw data ; charger la donnée à écrire dans W movwf EEDATA ; placer data dans registre movlw addwrite ; charger adresse d'écriture dans W movwf EEADR ; placer dans registre bsf STATUS , RP0 ; passer en banque1 bcf EECON1 , EEIF ; effacer flag de fin d'écriture bsf EECON1 , WREN ; autoriser accès écriture movlw 0x55 ; charger 0x55 movwf EECON2 ; envoyer commande movlw 0xAA ; charger 0xAA movwf EECON2 ; envoyer commande bsf EECON1 , WR ; lancer cycle d'écriture bcf EECON1 , WREN ; verrouiller prochaine écriture

bsf INTCON , GIE ; réautoriser interruptions bcf STATUS , RP0 ; repasser en banque0 NB : Avant d'écrire dans l'EEPROM il faut vérifier qu'une autre écriture n'est pas en cours en

s'assurant que le bit WR du registre EECON1 est bien à 0

32

Page 36: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

ANNEXE 1

extrait du cours "architecture des ordinateurs"

de T. DUMARTIN

Page 37: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

(1) Moore (un des co-fondateurs de la société Intel) a émis l'hypothèse que les capacités technologiques permettraient de multiplier par 2 tous les 18 mois le nombre de transistors intégrés sur les circuits.

4 Le microprocesseur Un microprocesseur est un circuit intégré complexe caractérisé par une très

grande intégration et doté des facultés d'interprétation et d'exécution des instructions d'un programme. Il est chargé d’organiser les tâches précisées par le programme et d’assurer leur exécution. Il doit aussi prendre en compte les informations extérieures au système et assurer leur traitement. C’est le cerveau du système. A l’heure actuelle, un microprocesseur regroupe sur quelques millimètre carré des fonctionnalités toujours plus complexes. Leur puissance continue de s’accroître et leur encombrement diminue régulièrement respectant toujours, pour le moment, la fameuse loi de Moore (1).

4.1 Architecture de base d’un microprocesseur Un microprocesseur est construit autour de deux éléments principaux :

Une unité de commandeUne unité de traitement

associés à des registres chargées de stocker les différentes informations à traiter. Ces trois éléments sont reliés entre eux par des bus interne permettant les échanges d’informations.

Remarques :Il existe deux types de registres :

les registres d'usage général permettent à l'unité de traitement de manipuler des données à vitesse élevée. Ils sont connectés au bus données interne au microprocesseur.les registres d'adresses (pointeurs) connectés sur le bus adresses.

4.1.1 L’unité de commande Elle permet de séquencer le déroulement des instructions. Elle effectue la recherche en

mémoire de l'instruction. Comme chaque instruction est codée sous forme binaire, elle en assure le décodage pour enfin réaliser son exécution puis effectue la préparation de l'instruction suivante. Pour cela, elle est composée par :

le compteur de programme constitué par un registre dont le contenu est initialisé avec l'adresse de la première instruction du programme. Il contient toujours l’adresse de l’instruction à exécuter.

Chapitre

4

Unité de traitement

Unité de commande

@

D

Programme

Données

Bus d’adresses

Bus de données

Page 38: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

le registre d'instruction et le décodeur d'instruction : chacune des instructions à exécuter est rangée dans le registre instruction puis est décodée par le décodeur d’instruction.

Bloc logique de commande (ou séquenceur) : Il organise l'exécution des instructions au rythme d’une horloge. Il élabore tous les signaux de synchronisation internes ou externes (bus de commande) du microprocesseur en fonction des divers signaux de commande provenant du décodeur d’instruction ou du registre d’état par exemple. Il s'agit d'un automate réalisé soit de façon câblée (obsolète), soit de façon micro-programmée, on parle alors de micro-microprocesseur.

4.1.2 L’unité de traitement C’est le cœur du microprocesseur. Elle regroupe les circuits qui assurent les traitements nécessaires à l'exécution des instructions :

L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions logiques (ET, OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).

Le registre d'état est généralement composé de 8 bits à considérer individuellement. Chacun de ces bits est un indicateur dont l'état dépend du résultat de la dernière opération effectuée par l’UAL. On les appelle indicateur d’état ou flag ou drapeaux. Dans un programme le résultat du test de leur état conditionne souvent le déroulement de la suite du programme. On peut citer par exemple les indicateurs de :

o retenue (carry : C)o retenue intermédiaire (Auxiliary-Carry : AC)o signe (Sign : S)o débordement (overflow : OV ou V)o zéro (Z)o parité (Parity : P)

Les accumulateurs sont des registres de travail qui servent à stocker une opérande au début d'une opération arithmétique et le résultat à la fin de l'opération.

4.1.3 Schéma fonctionnel

Programme

Données

Bus d’adresses

Bus de données

UAL

Acc.

Registred’états

Bus de commande

Registre d’@

Registre Données

PC

Registred’instruction

Décodeurd’instruction

Bloc logique de commande

H

Page 39: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

4.2 Cycle d’exécution d’une instruction

Le microprocesseur ne comprend qu’un certain nombre d’instructions qui sont codées en binaire. Le traitement d’une instruction peut être décomposé en trois phases.

Phase 1: Recherche de l'instruction à traiter

1. Le PC contient l'adresse de l'instruction suivante du programme. Cette valeur est placée sur le bus d'adresses par l'unité de commande qui émet un ordre de lecture.

2. Au bout d'un certain temps (temps d'accès à la mémoire), le contenu de la case mémoire sélectionnée est disponible sur le bus des données.

3. L'instruction est stockée dans le registre instruction du processeur.

Phase 2 : Décodage de l’instruction et recherche de l'opérande

Le registre d'instruction contient maintenant le premier mot de l'instruction qui peut être codée sur plusieurs mots. Ce premier mot contient le code opératoire qui définit la nature de l'opération à effectuer (addition, rotation,...) et le nombre de mots de l'instruction.

1. L'unité de commande transforme l'instruction en une suite de commandes élémentaires nécessaires au traitement de l'instruction.

2. Si l'instruction nécessite une donnée en provenance de la mémoire, l'unité de commande récupère sa valeur sur le bus de données.

3. L’opérande est stockée dans un registre.

Instr. 1

Opér. 1

Instr. 2

Instr. 3

$2000

$2001

$2003

$2002

$2004

$FFFF

mémoire$2000

Instr. 1

Décodeurd’instruction

microprocesseur

Inst. 1

@ $2000

PC

1

2

RI

3

Page 40: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Phase 3 : Exécution de l'instruction

1. Le micro-programme réalisant l'instruction est exécuté. 2. Les drapeaux sont positionnés (registre d'état).3. L'unité de commande positionne le PC pour l'instruction suivante.

Instr. 1

Opér. 1

Instr. 2

Instr. 3

$2000

$2001

$2003

$2002

$2004

$FFFF

mémoire

UAL

Opér. 2 Opér. 1

$2000

Instr. 1

Décodeurd’instruction

microprocesseur

Opér. 1

@ $2001

PC

RI

Bloclogique de commande

1

2

3

Instr. 1

Opér. 1

Instr. 2

Instr. 3

$2000

$2001

$2003

$2002

$2004

$FFFF

mémoire

UAL

Result. Opér. 1

$2002

Instr. 1

Décodeurd’instruction

microprocesseur PC

RI

Bloclogique de commande

1 2

3

Z=1 C=0 …

Page 41: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

4.3 Jeu d’instructions

4.3.1 Définition La première étape de la conception d’un microprocesseur est la définition de son jeu

d’instructions. Le jeu d’instructions décrit l’ensemble des opérations élémentaires que le microprocesseur pourra exécuter. Il va donc en partie déterminer l’architecture du microprocesseur à réaliser et notamment celle du séquenceur. A un même jeu d’instructions peut correspondre un grand nombre d’implémentations différentes du microprocesseur.

4.3.2 Type d’instructions Les instructions que l’on retrouve dans chaque microprocesseur peuvent être classées en 4

groupes : Transfert de données pour charger ou sauver en mémoire, effectuer des transferts de registre à registre, etc… Opérations arithmétiques : addition, soustraction, division, multiplicationOpérations logiques : ET, OU, NON, NAND, comparaison, test, etc…Contrôle de séquence : branchement, test, etc…

4.3.3 Codage Les instructions et leurs opérandes (paramètres) sont stockés en mémoire principale. La taille

totale d’une instruction (nombre de bits nécessaires pour la représenter en mémoire) dépend du type d’instruction et aussi du type d’opérande. Chaque instruction est toujours codée sur un nombre entier d’octets afin de faciliter son décodage par le processeur. Une instruction est composée de deux champs :

le code instruction, qui indique au processeur quelle instruction réaliser le champ opérande qui contient la donnée, ou la référence à une donnée en mémoire (son adresse).

Exemple :Code

instructionCode

opérande

1001 0011 0011 1110

Le nombre d'instructions du jeu d'instructions est directement lié au format du code instruction. Ainsi un octet permet de distinguer au maximum 256 instructions différentes.

4.3.4 Mode d’adressage Un mode d'adressage définit la manière dont le microprocesseur va accéder à l’opérande. Les

différents modes d'adressage dépendent des microprocesseurs mais on retrouve en général :

l'adressage de registre où l’on traite la données contenue dans un registre l'adressage immédiat où l’on définit immédiatement la valeur de la donnée l'adressage direct où l’on traite une données en mémoire

Selon le mode d’adressage de la donnée, une instruction sera codée par 1 ou plusieurs octets.

4.3.5 Temps d’exécution Chaque instruction nécessite un certain nombre de cycles d’horloges pour s’effectuer. Le

nombre de cycles dépend de la complexité de l’instruction et aussi du mode d’adressage. Il est plus long d’accéder à la mémoire principale qu’à un registre du processeur. La durée d’un cycle dépend de la fréquence d’horloge du séquenceur.

Page 42: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

4.4 Langage de programmation Le langage machine est le langage

compris par le microprocesseur. Ce langage est difficile à maîtriser puisque chaque instruction est codée par une séquence propre de bits. Afin de faciliter la tâche du programmeur, on a créé différents langages plus ou moins évolués.

Le langage assembleur est le langage le plus « proche » du langage machine. Il est composé par des instructions en général assez rudimentaires que l’on appelle des mnémoniques. Ce sont essentiellement des opérations de transfert de données entre les registres et l'extérieur du microprocesseur (mémoire ou périphérique), ou des opérations arithmétiques ou logiques. Chaque instruction représente un code machine différent. Chaque microprocesseur peut posséder un assembleur différent.

La difficulté de mise en œuvre de ce type de langage, et leur forte dépendance avec la machine a nécessité la conception de langages de haut niveau, plus adaptés à l'homme, et aux applications qu'il cherchait à développer. Faisant abstraction de toute architecture de machine, ces langages permettent l'expression d'algorithmes sous une forme plus facile à apprendre, et à dominer (C, Pascal, Java, etc…). Chaque instruction en langage de haut niveau correspondra à une succession d’instructions en langage assembleur. Une fois développé, le programme en langage de haut niveau n’est donc pas compréhensible par le microprocesseur. Il faut le compiler pour le traduire en assembleur puis l’assembler pour le convertir en code machine compréhensible par le microprocesseur. Ces opérations sont réalisées à partir de logiciels spécialisés appelés compilateur et assembleur.

Exemple de programme :

4.5 Performances d’un microprocesseur On peut caractériser la puissance d’un microprocesseur par le nombre d’instructions qu’il est capable de traiter par seconde. Pour cela, on définit :

le CPI (Cycle Par Instruction) qui représente le nombre moyen de cycles d’horloge nécessaire pour l’exécution d’une instruction pour un microprocesseur donné.

le MIPS (Millions d'Instructions Par Seconde) qui représente la puissance de traitement du microprocesseur.

avec FH en MHz

Code machine ( 68HC11 ) Assembleur ( 68HC11 ) Langage C

@00 C6 64@01 B6 00@03 1B@04 5A@05 26 03

LDAB #100 LDAA #0 ret ABA DECB BNE ret

A=0 ; for ( i=1 ; i<101 ; i++) A=A+i ;

Langage haut niveau (for, if…then, write, etc…)

Langage assembleur (sta, lda, cmp, mov, bra, etc…)

Langage machine (0001 1101, 1111 0110, etc…)

compilation

assemblage

HFMIPS=CPI

Page 43: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

Pour augmenter les performances d’un microprocesseur, on peut donc soit augmenter la fréquence d'horloge (limitation matérielle), soit diminuer le CPI (choix d'un jeu d'instruction adapté).

4.6 Notion d’architecture RISC et CISC Actuellement l’architecture des microprocesseurs se composent de deux grandes familles :

L’ architecture CISC (Complex Instruction Set Computer)L’architecture RISC (Reduced Instruction Set Computer)

4.6.1 L’architecture CISC

4.6.1.1 Pourquoi Par le passé la conception de machines CISC était la seule envisageable. En effet, vue que la

mémoire travaillait très lentement par rapport au processeur, on pensait qu’il était plus intéressant de soumettre au microprocesseur des instructions complexes. Ainsi, plutôt que de coder une opération complexe par plusieurs instructions plus petites (qui demanderaient autant d’accès mémoire très lent), il semblait préférable d’ajouter au jeu d’instructions du microprocesseur une instruction complexe qui se chargerait de réaliser cette opération. De plus, le développement des langages de haut niveau posa de nombreux problèmes quant à la conception de compilateurs. On a donc eu tendance à incorporer au niveau processeur des instructions plus proches de la structure de ces langages.

4.6.1.2 Comment C’est donc une architecture avec un grand nombre d’instructions où le microprocesseur doit

exécuter des tâches complexes par instruction unique. Pour une tâche donnée, une machine CISC exécute ainsi un petit nombre d’instructions mais chacune nécessite un plus grand nombre de cycles d’horloge. Le code machine de ces instructions varie d’une instruction à l’autre et nécessite donc un décodeur complexe (micro-code)

4.6.2 L’architecture RISC

4.6.2.1 Pourquoi Des études statistiques menées au cours des années 70 ont clairement montré que les

programmes générés par les compilateurs se contentaient le plus souvent d'affectations, d'additions et de multiplications par des constantes. Ainsi, 80% des traitements des langages de haut niveau faisaient appel à seulement 20% des instructions du microprocesseur. D’où l’idée de réduire le jeu d’instructions à celles le plus couramment utilisées et d’en améliorer la vitesse de traitement.

4.6.2.2 Comment C’est donc une architecture dans laquelle les instructions sont en nombre réduit (chargement,

branchement, appel sous-programme). Les architectures RISC peuvent donc être réalisées à partir de séquenceur câblé. Leur réalisation libère de la surface permettant d’augmenter le nombres de registres ou d’unités de traitement par exemple. Chacune de ces instructions s’exécutent ainsi en un cycle d’horloge. Bien souvent, ces instructions ne disposent que d’un seul mode d’adressage. Les accès à la mémoire s’effectue seulement à partir de deux instructions (Load et Store). Par contre, les instructions complexes doivent être réalisées à partir de séquences basées sur les instructions élémentaires, ce qui nécessite un compilateur très évolué dans le cas de programmation en langage de haut niveau.

Page 44: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

ANNEXE 2

Jeu d'instructions des PICs (sauf 16C5X)

Page 45: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 55

9.1 Instruction Descriptions

ADDLW Add Literal and W

Syntax: [label] ADDLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) + k → (W)

Status Affected: C, DC, Z

Encoding: 11 111x kkkk kkkk

Description: The contents of the W register are added to the eight bit literal 'k' and the result is placed in the W register.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral 'k'

Processdata

Write to W

Example: ADDLW 0x15

Before InstructionW = 0x10

After InstructionW = 0x25

ADDWF Add W and f

Syntax: [label] ADDWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) + (f) → (destination)

Status Affected: C, DC, Z

Encoding: 00 0111 dfff ffff

Description: Add the contents of the W register with register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example ADDWF FSR, 0

Before InstructionW = 0x17FSR = 0xC2

After InstructionW = 0xD9FSR = 0xC2

ANDLW AND Literal with W

Syntax: [label] ANDLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .AND. (k) → (W)

Status Affected: Z

Encoding: 11 1001 kkkk kkkk

Description: The contents of W register are AND’ed with the eight bit literal 'k'.Theresult is placed in the W register.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral "k"

Processdata

Write to W

Example ANDLW 0x5F

Before InstructionW = 0xA3

After InstructionW = 0x03

ANDWF AND W with f

Syntax: [label] ANDWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) .AND. (f) → (destination)

Status Affected: Z

Encoding: 00 0101 dfff ffff

Description: AND the W register with register 'f'. If 'd' is 0 the result is stored in the W regis-ter. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example ANDWF FSR, 1

Before InstructionW = 0x17FSR = 0xC2

After InstructionW = 0x17FSR = 0x02

Page 46: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 56 © 1998 Microchip Technology Inc.

BCF Bit Clear f

Syntax: [label] BCF f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: 0 → (f<b>)

Status Affected: None

Encoding: 01 00bb bfff ffff

Description: Bit 'b' in register 'f' is cleared.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Writeregister 'f'

Example BCF FLAG_REG, 7

Before InstructionFLAG_REG = 0xC7

After InstructionFLAG_REG = 0x47

BSF Bit Set f

Syntax: [label] BSF f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: 1 → (f<b>)

Status Affected: None

Encoding: 01 01bb bfff ffff

Description: Bit 'b' in register 'f' is set.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Writeregister 'f'

Example BSF FLAG_REG, 7

Before InstructionFLAG_REG = 0x0A

After InstructionFLAG_REG = 0x8A

BTFSC Bit Test, Skip if Clear

Syntax: [label] BTFSC f,b

Operands: 0 ≤ f ≤ 1270 ≤ b ≤ 7

Operation: skip if (f<b>) = 0

Status Affected: None

Encoding: 01 10bb bfff ffff

Description: If bit 'b' in register 'f' is '1' then the nextinstruction is executed.If bit 'b', in register 'f', is '0' then the nextinstruction is discarded, and a NOP is executed instead, making this a 2TCY

instruction.

Words: 1

Cycles: 1(2)

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

No-Operation

If Skip: (2nd Cycle)Q1 Q2 Q3 Q4

No-Operation

No-Operation

No-Operation

No-Operation

Example HEREFALSETRUE

BTFSCGOTO•••

FLAG,1PROCESS_CODE

Before InstructionPC = address HERE

After Instructionif FLAG<1> = 0,PC = address TRUEif FLAG<1>=1,PC = address FALSE

Page 47: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 57

BTFSS Bit Test f, Skip if Set

Syntax: [label] BTFSS f,b

Operands: 0 ≤ f ≤ 1270 ≤ b < 7

Operation: skip if (f<b>) = 1

Status Affected: None

Encoding: 01 11bb bfff ffff

Description: If bit 'b' in register 'f' is '0' then the nextinstruction is executed.If bit 'b' is '1', then the next instruction isdiscarded and a NOP is executedinstead, making this a 2TCY instruction.

Words: 1

Cycles: 1(2)

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

No-Operation

If Skip: (2nd Cycle)Q1 Q2 Q3 Q4

No-Operation

No-Operation

No-Operation

No-Operation

Example HEREFALSETRUE

BTFSCGOTO•••

FLAG,1PROCESS_CODE

Before InstructionPC = address HERE

After Instructionif FLAG<1> = 0,PC = address FALSEif FLAG<1> = 1,PC = address TRUE

CALL Call Subroutine

Syntax: [ label ] CALL k

Operands: 0 ≤ k ≤ 2047

Operation: (PC)+ 1→ TOS,k → PC<10:0>,(PCLATH<4:3>) → PC<12:11>

Status Affected: None

Encoding: 10 0kkk kkkk kkkk

Description: Call Subroutine. First, return address (PC+1) is pushed onto the stack. Theeleven bit immediate address is loaded into PC bits <10:0>. The upper bits of the PC are loaded from PCLATH. CALLis a two cycle instruction.

Words: 1

Cycles: 2

Q Cycle Activity: Q1 Q2 Q3 Q4

1st Cycle Decode Readliteral 'k', Push PC to Stack

Processdata

Write to PC

2nd CycleNo-Opera

tion

No-Operation

No-Operation

No-Operation

Example HERE CALL THERE

Before InstructionPC = Address HERE

After InstructionPC = Address THERETOS = Address HERE+1

Page 48: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 58 © 1998 Microchip Technology Inc.

CLRF Clear f

Syntax: [label] CLRF f

Operands: 0 ≤ f ≤ 127

Operation: 00h → (f)1 → Z

Status Affected: Z

Encoding: 00 0001 1fff ffff

Description: The contents of register 'f' are cleared and the Z bit is set.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Writeregister 'f'

Example CLRF FLAG_REG

Before InstructionFLAG_REG = 0x5A

After InstructionFLAG_REG = 0x00Z = 1

CLRW Clear W

Syntax: [ label ] CLRW

Operands: None

Operation: 00h → (W)1 → Z

Status Affected: Z

Encoding: 00 0001 0xxx xxxx

Description: W register is cleared. Zero bit (Z) is set.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode No-Operation

Processdata

Write to W

Example CLRW

Before InstructionW = 0x5A

After InstructionW = 0x00Z = 1

CLRWDT Clear Watchdog Timer

Syntax: [ label ] CLRWDT

Operands: None

Operation: 00h → WDT0 → WDT prescaler,1 → TO1 → PD

Status Affected: TO, PD

Encoding: 00 0000 0110 0100

Description: CLRWDT instruction resets the Watch-dog Timer. It also resets the prescaler of the WDT. Status bits TO and PD are set.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode No-Operation

Processdata

ClearWDT

Counter

Example CLRWDT

Before InstructionWDT counter = ?

After InstructionWDT counter = 0x00WDT prescaler= 0TO = 1PD = 1

Page 49: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 59

COMF Complement f

Syntax: [ label ] COMF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) → (destination)

Status Affected: Z

Encoding: 00 1001 dfff ffff

Description: The contents of register 'f' are comple-mented. If 'd' is 0 the result is stored in W. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example COMF REG1,0

Before InstructionREG1 = 0x13

After InstructionREG1 = 0x13W = 0xEC

DECF Decrement f

Syntax: [label] DECF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) - 1 → (destination)

Status Affected: Z

Encoding: 00 0011 dfff ffff

Description: Decrement register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example DECF CNT, 1

Before InstructionCNT = 0x01Z = 0

After InstructionCNT = 0x00Z = 1

DECFSZ Decrement f, Skip if 0

Syntax: [ label ] DECFSZ f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) - 1 → (destination);skip if result = 0

Status Affected: None

Encoding: 00 1011 dfff ffff

Description: The contents of register 'f' are decre-mented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'.If the result is 1, the next instruction, isexecuted. If the result is 0, then a NOP is executed instead making it a 2TCY instruc-tion.

Words: 1

Cycles: 1(2)

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

Write to destination

If Skip: (2nd Cycle)Q1 Q2 Q3 Q4

No-Operation

No-Operation

No-Operation

No-Operation

Example HERE DECFSZ CNT, 1 GOTO LOOPCONTINUE •

••

Before InstructionPC = address HERE

After InstructionCNT = CNT - 1if CNT = 0,PC = address CONTINUEif CNT ≠ 0,PC = address HERE+1

Page 50: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 60 © 1998 Microchip Technology Inc.

GOTO Unconditional Branch

Syntax: [ label ] GOTO k

Operands: 0 ≤ k ≤ 2047

Operation: k → PC<10:0>PCLATH<4:3> → PC<12:11>

Status Affected: None

Encoding: 10 1kkk kkkk kkkk

Description: GOTO is an unconditional branch. Theeleven bit immediate value is loaded into PC bits <10:0>. The upper bits of PC are loaded from PCLATH<4:3>.GOTO is a two cycle instruction.

Words: 1

Cycles: 2

Q Cycle Activity: Q1 Q2 Q3 Q4

1st Cycle Decode Readliteral 'k'

Processdata

Write to PC

2nd CycleNo-Operat

ion

No-Operation

No-Operation

No-Operation

Example GOTO THERE

After InstructionPC = Address THERE

INCF Increment f

Syntax: [ label ] INCF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) + 1 → (destination)

Status Affected: Z

Encoding: 00 1010 dfff ffff

Description: The contents of register 'f' are incre-mented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example INCF CNT, 1

Before InstructionCNT = 0xFFZ = 0

After InstructionCNT = 0x00Z = 1

Page 51: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 61

INCFSZ Increment f, Skip if 0

Syntax: [ label ] INCFSZ f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) + 1 → (destination), skip if result = 0

Status Affected: None

Encoding: 00 1111 dfff ffff

Description: The contents of register 'f' are incre-mented. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'.If the result is 1, the next instruction isexecuted. If the result is 0, a NOP is exe-cuted instead making it a 2TCY instruc-tion.

Words: 1

Cycles: 1(2)

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

Write to destination

If Skip: (2nd Cycle)Q1 Q2 Q3 Q4

No-Operation

No-Operation

No-Operation

No-Operation

Example HERE INCFSZ CNT, 1 GOTO LOOPCONTINUE •

• •

Before InstructionPC = address HERE

After InstructionCNT = CNT + 1if CNT= 0,PC = address CONTINUEif CNT≠ 0,PC = address HERE +1

IORLW Inclusive OR Literal with W

Syntax: [ label ] IORLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .OR. k → (W)

Status Affected: Z

Encoding: 11 1000 kkkk kkkk

Description: The contents of the W register is OR’ed with the eight bit literal 'k'. Theresult is placed in the W register.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral 'k'

Processdata

Write to W

Example IORLW 0x35

Before InstructionW = 0x9A

After InstructionW = 0xBFZ = 1

Page 52: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 62 © 1998 Microchip Technology Inc.

IORWF Inclusive OR W with f

Syntax: [ label ] IORWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) .OR. (f) → (destination)

Status Affected: Z

Encoding: 00 0100 dfff ffff

Description: Inclusive OR the W register with regis-ter 'f'. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example IORWF RESULT, 0

Before InstructionRESULT = 0x13W = 0x91

After InstructionRESULT = 0x13W = 0x93Z = 1

MOVF Move f

Syntax: [ label ] MOVF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) → (destination)

Status Affected: Z

Encoding: 00 1000 dfff ffff

Description: The contents of register f is moved to a destination dependant upon the status of d. If d = 0, destination is W register. If d = 1, the destination is file register f itself. d = 1 is useful to test a file regis-ter since status flag Z is affected.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example MOVF FSR, 0

After InstructionW = value in FSR registerZ = 1

MOVLW Move Literal to W

Syntax: [ label ] MOVLW k

Operands: 0 ≤ k ≤ 255

Operation: k → (W)

Status Affected: None

Encoding: 11 00xx kkkk kkkk

Description: The eight bit literal 'k' is loaded into Wregister.The don’t cares will assembleas 0’s.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral 'k'

Processdata

Write to W

Example MOVLW 0x5A

After InstructionW = 0x5A

MOVWF Move W to f

Syntax: [ label ] MOVWF f

Operands: 0 ≤ f ≤ 127

Operation: (W) → (f)

Status Affected: None

Encoding: 00 0000 1fff ffff

Description: Move data from W register to register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Writeregister 'f'

Example MOVWF OPTION_REG

Before InstructionOPTION = 0xFFW = 0x4F

After InstructionOPTION = 0x4FW = 0x4F

Page 53: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 63

NOP No Operation

Syntax: [ label ] NOP

Operands: None

Operation: No operation

Status Affected: None

Encoding: 00 0000 0xx0 0000

Description: No operation.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode No-Operation

No-Operation

No-Operation

Example NOP

OPTION Load Option Register

Syntax: [ label ] OPTION

Operands: None

Operation: (W) → OPTION

Status Affected: None

Encoding: 00 0000 0110 0010

Description: The contents of the W register are loaded in the OPTION register. Thisinstruction is supported for code com-patibility with PIC16C5X products.Since OPTION is a readable/writableregister, the user can directly address it.

Words: 1

Cycles: 1

Example

To maintain upward compatibility with future PIC16CXX products,

do not use this instruction.

RETFIE Return from Interrupt

Syntax: [ label ] RETFIE

Operands: None

Operation: TOS → PC,1 → GIE

Status Affected: None

Encoding: 00 0000 0000 1001

Description: Return from Interrupt. Stack is POPedand Top of Stack (TOS) is loaded in the PC. Interrupts are enabled by setting Global Interrupt Enable bit, GIE (INTCON<7>). This is a two cycle instruction.

Words: 1

Cycles: 2

Q Cycle Activity: Q1 Q2 Q3 Q4

1st Cycle Decode No-Operation

Set the GIE bit

Pop from the Stack

2nd CycleNo-Operat

ion

No-Operation

No-Operation

No-Operation

Example RETFIE

After InterruptPC = TOSGIE = 1

Page 54: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 64 © 1998 Microchip Technology Inc.

RETLW Return with Literal in W

Syntax: [ label ] RETLW k

Operands: 0 ≤ k ≤ 255

Operation: k → (W);TOS → PC

Status Affected: None

Encoding: 11 01xx kkkk kkkk

Description: The W register is loaded with the eight bit literal 'k'. The program counter is loaded from the top of the stack (the return address). This is a two cycle instruction.

Words: 1

Cycles: 2

Q Cycle Activity: Q1 Q2 Q3 Q4

1st Cycle Decode Readliteral 'k'

No-Operation

Write to W,Pop from the Stack

2nd CycleNo-Operat

ion

No-Operation

No-Operation

No-Operation

Example

TABLE

CALL TABLE ;W contains table ;offset value• ;W now has table value••ADDWF PC ;W = offsetRETLW k1 ;Begin tableRETLW k2 ;•••RETLW kn ; End of table

Before InstructionW = 0x07

After InstructionW = value of k8

RETURN Return from Subroutine

Syntax: [ label ] RETURN

Operands: None

Operation: TOS → PC

Status Affected: None

Encoding: 00 0000 0000 1000

Description: Return from subroutine. The stack is POPed and the top of the stack (TOS)is loaded into the program counter.Thisis a two cycle instruction.

Words: 1

Cycles: 2

Q Cycle Activity: Q1 Q2 Q3 Q4

1st Cycle Decode No-Operation

No-Operation

Pop from the Stack

2nd CycleNo-Operat

ion

No-Operation

No-Operation

No-Operation

Example RETURN

After InterruptPC = TOS

Page 55: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 65

RLF Rotate Left f through Carry

Syntax: [ label ] RLF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: See description below

Status Affected: C

Encoding: 00 1101 dfff ffff

Description: The contents of register 'f' are rotated one bit to the left through the CarryFlag. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example RLF REG1,0

Before InstructionREG1 = 1110 0110C = 0

After InstructionREG1 = 1110 0110W = 1100 1100C = 1

Register fC

RRF Rotate Right f through Carry

Syntax: [ label ] RRF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: See description below

Status Affected: C

Encoding: 00 1100 dfff ffff

Description: The contents of register 'f' are rotated one bit to the right through the CarryFlag. If 'd' is 0 the result is placed in the W register. If 'd' is 1 the result is placed back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example RRF REG1,0

Before InstructionREG1 = 1110 0110C = 0

After InstructionREG1 = 1110 0110W = 0111 0011C = 0

Register fC

Page 56: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 66 © 1998 Microchip Technology Inc.

SLEEP

Syntax: [ label ] SLEEP

Operands: None

Operation: 00h → WDT,0 → WDT prescaler,1 → TO,0 → PD

Status Affected: TO, PD

Encoding: 00 0000 0110 0011

Description: The power-down status bit, PD is cleared. Time-out status bit, TO is set.Watchdog Timer and its prescaler are cleared.The processor is put into SLEEP mode with the oscillator stopped. See Section 14.8 for more details.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode No-Operation

No-Operation

Go to Sleep

Example: SLEEP

SUBLW Subtract W from Literal

Syntax: [ label ] SUBLW k

Operands: 0 ≤ k ≤ 255

Operation: k - (W) → (W)

Status Affected: C, DC, Z

Encoding: 11 110x kkkk kkkk

Description: The W register is subtracted (2’s comple-ment method) from the eight bit literal 'k'.The result is placed in the W register.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral 'k'

Processdata

Write to W

Example 1: SUBLW 0x02

Before Instruction

W = 1C = ?Z = ?

After Instruction

W = 1C = 1; result is positiveZ = 0

Example 2: Before Instruction

W = 2C = ?Z = ?

After Instruction

W = 0C = 1; result is zeroZ = 1

Example 3: Before Instruction

W = 3C = ?Z = ?

After Instruction

W = 0xFFC = 0; result is nega-tiveZ = 0

Page 57: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 67

SUBWF Subtract W from f

Syntax: [ label ] SUBWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f) - (W) → (destination)

Status Affected: C, DC, Z

Encoding: 00 0010 dfff ffff

Description: Subtract (2’s complement method) W reg-ister from register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

Write to destination

Example 1: SUBWF REG1,�

Before Instruction

REG1 = 3W = 2C = ?Z = ?

After Instruction

REG1 = 1W = 2C = 1; result is positiveZ = 0

Example 2: Before Instruction

REG1 = 2W = 2C = ?Z = ?

After Instruction

REG1 = 0W = 2C = 1; result is zeroZ = 1

Example 3: Before Instruction

REG1 = 1W = 2C = ?Z = ?

After Instruction

REG1 = 0xFFW = 2C = 0; result is negativeZ = 0

SWAPF Swap Nibbles in f

Syntax: [ label ] SWAPF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (f<3:0>) → (destination<7:4>),(f<7:4>) → (destination<3:0>)

Status Affected: None

Encoding: 00 1110 dfff ffff

Description: The upper and lower nibbles of register 'f' are exchanged. If 'd' is 0 the result is placed in W register. If 'd' is 1 the result is placed in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister 'f'

Processdata

Write to destination

Example SWAPF REG, 0

Before Instruction

REG1 = 0xA5

After Instruction

REG1 = 0xA5W = 0x5A

TRIS Load TRIS Register

Syntax: [label] TRIS f

Operands: 5 ≤ f ≤ 7

Operation: (W) → TRIS register f;

Status Affected: None

Encoding: 00 0000 0110 0fff

Description: The instruction is supported for code compatibility with the PIC16C5X prod-ucts. Since TRIS registers are read-able and writable, the user can directly address them.

Words: 1

Cycles: 1

Example

To maintain upward compatibility with future PIC16CXX products,

do not use this instruction.

Page 58: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 68 © 1998 Microchip Technology Inc.

XORLW Exclusive OR Literal with W

Syntax: [label] XORLW k

Operands: 0 ≤ k ≤ 255

Operation: (W) .XOR. k → (W)

Status Affected: Z

Encoding: 11 1010 kkkk kkkk

Description: The contents of the W register are XOR’ed with the eight bit literal 'k'.The result is placed in the W regis-ter.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readliteral 'k'

Processdata

Write to W

Example: XORLW 0xAF

Before Instruction

W = 0xB5

After Instruction

W = 0x1A

XORWF Exclusive OR W with f

Syntax: [label] XORWF f,d

Operands: 0 ≤ f ≤ 127d ∈ [0,1]

Operation: (W) .XOR. (f) → (destination)

Status Affected: Z

Encoding: 00 0110 dfff ffff

Description: Exclusive OR the contents of the Wregister with register 'f'. If 'd' is 0 the result is stored in the W register. If 'd' is 1 the result is stored back in register 'f'.

Words: 1

Cycles: 1

Q Cycle Activity: Q1 Q2 Q3 Q4

Decode Readregister

'f'

Processdata

Write to destination

Example XORWF REG 1

Before Instruction

REG = 0xAFW = 0xB5

After Instruction

REG = 0x1AW = 0xB5

Page 59: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

ANNEXE 3

complément doc du 16F84

Page 60: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 38 © 1998 Microchip Technology Inc.

FIGURE 8-1: CONFIGURATION WORD - PIC16CR83 AND PIC16CR84 ��

FIGURE 8-2: CONFIGURATION WORD - PIC16F83 AND PIC16F84 ��

R-u R-u R-u R-u R-u R-u R/P-u R-u R-u R-u R-u R-u R-u R-u

CP CP CP CP CP CP DP CP CP CP PWRTE WDTE FOSC1 FOSC0

bit13 bit0

R = Readable bitP = Programmable bit- n = Value at POR reset u = unchanged

bit 13:8 CP: Program Memory Code Protection bit1 = Code protection off0 = Program memory is code protected

bit 7 DP: Data Memory Code Protection bit1 = Code protection off0 = Data memory is code protected

bit 6:4 CP: Program Memory Code Protection bit1 = Code protection off0 = Program memory is code protected

bit 3 PWRTE: Power-up Timer Enable bit1 = Power-up timer is disabled0 = Power-up timer is enabled

bit 2 WDTE: Watchdog Timer Enable bit1 = WDT enabled0 = WDT disabled

bit 1:0 FOSC1:FOSC0: Oscillator Selection bits11 = RC oscillator10 = HS oscillator01 = XT oscillator00 = LP oscillator

R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u R/P-u

CP CP CP CP CP CP CP CP CP CP PWRTE WDTE FOSC1 FOSC0

bit13 bit0

R = Readable bitP = Programmable bit- n = Value at POR reset u = unchanged

bit 13:4 CP: Code Protection bit1 = Code protection off0 = All memory is code protected

bit 3 PWRTE: Power-up Timer Enable bit1 = Power-up timer is disabled0 = Power-up timer is enabled

bit 2 WDTE: Watchdog Timer Enable bit1 = WDT enabled0 = WDT disabled

bit 1:0 FOSC1:FOSC0: Oscillator Selection bits11 = RC oscillator10 = HS oscillator01 = XT oscillator00 = LP oscillator

Page 61: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 39

8.2 Oscillator Configurations

8.2.1 OSCILLATOR TYPES

The PIC16F8X can be operated in four differentoscillator modes. The user can program twoconfiguration bits (FOSC1 and FOSC0) to select one ofthese four modes:

• LP Low Power Crystal• XT Crystal/Resonator• HS High Speed Crystal/Resonator• RC Resistor/Capacitor

8.2.2 CRYSTAL OSCILLATOR / CERAMIC RESONATORS

In XT, LP or HS modes a crystal or ceramic resonatoris connected to the OSC1/CLKIN and OSC2/CLKOUTpins to establish oscillation (Figure 8-3).

FIGURE 8-3: CRYSTAL/CERAMICRESONATOR OPERATION (HS, XT OR LP OSC CONFIGURATION)

The PIC16F8X oscillator design requires the use of aparallel cut crystal. Use of a series cut crystal may givea frequency out of the crystal manufacturersspecifications.When in XT, LP or HS modes, the devicecan have an external clock source to drive theOSC1/CLKIN pin (Figure 8-4).

FIGURE 8-4: EXTERNAL CLOCK INPUT OPERATION (HS, XT OR LP OSC CONFIGURATION)

TABLE 8-1 CAPACITOR SELECTION FOR CERAMIC RESONATORS

TABLE 8-2 CAPACITOR SELECTION FOR CRYSTAL OSCILLATOR

Note1: See Table 8-1 for recommended values ofC1 and C2.

2: A series resistor (RS) may be required forAT strip cut crystals.

3: RF varies with the crystal chosen.

C1(1)

C2(1)

XTAL

OSC2

OSC1

RF(3)

SLEEP

To

logic

PIC16FXXRS(2)

internal

OSC1

OSC2Open

Clock fromext. system PIC16FXX

Ranges Tested:

Mode Freq OSC1/C1 OSC2/C2

XT 455 kHz2.0 MHz4.0 MHz

47 - 100 pF15 - 33 pF15 - 33 pF

47 - 100 pF15 - 33 pF15 - 33 pF

HS 8.0 MHz10.0 MHz

15 - 33 pF15 - 33 pF

15 - 33 pF15 - 33 pF

Note : Recommended values of C1 and C2 are identical to the ranges tested table.

Higher capacitance increases the stability of the oscillator but also increases the start-up time.These values are for design guidance only. Since each resonator has its own characteristics, the user should consult the resonator manufacturer for the appropriate values of external components.

Resonators Tested:

455 kHz Panasonic EFO-A455K04B ± 0.3%2.0 MHz Murata Erie CSA2.00MG ± 0.5%4.0 MHz Murata Erie CSA4.00MG ± 0.5%8.0 MHz Murata Erie CSA8.00MT ± 0.5%10.0 MHz Murata Erie CSA10.00MTZ ± 0.5%

None of the resonators had built-in capacitors.

Mode Freq OSC1/C1 OSC2/C2

LP 32 kHz200 kHz

68 - 100 pF15 - 33 pF

68 - 100 pF15 - 33 pF

XT 100 kHz2 MHz4 MHz

100 - 150 pF15 - 33 pF15 - 33 pF

100 - 150 pF15 - 33 pF15 - 33 pF

HS 4 MHz10 MHz

15 - 33 pF15 - 33 pF

15 - 33 pF15 - 33 pF

Note : Higher capacitance increases the stability of oscillator but also increases the start-up time.These values are for design guidance only. Rs maybe required in HS mode as well as XT mode to avoid overdriving crystals with low drive level spec-ification. Since each crystal has its own characteris-tics, the user should consult the crystalmanufacturer for appropriate values of externalcomponents.

For VDD > 4.5V, C1 = C2 ≈ 30 pF is recommended.

Crystals Tested:

32.768 kHz Epson C-001R32.768K-A ± 20 PPM100 kHz Epson C-2 100.00 KC-P ± 20 PPM200 kHz STD XTL 200.000 KHz ± 20 PPM1.0 MHz ECS ECS-10-13-2 ± 50 PPM2.0 MHz ECS ECS-20-S-2 ± 50 PPM4.0 MHz ECS ECS-40-S-4 ± 50 PPM10.0 MHz ECS ECS-100-S-4 ± 50 PPM

Page 62: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 40 © 1998 Microchip Technology Inc.

8.2.3 EXTERNAL CRYSTAL OSCILLATOR CIRCUIT

Either a prepackaged oscillator can be used or a simpleoscillator circuit with TTL gates can be built.Prepackaged oscillators provide a wide operatingrange and better stability. A well-designed crystaloscillator will provide good performance with TTLgates. Two types of crystal oscillator circuits areavailable; one with series resonance, and one withparallel resonance.

Figure 8-5 shows a parallel resonant oscillator circuit.The circuit is designed to use the fundamentalfrequency of the crystal. The 74AS04 inverter performsthe 180-degree phase shift that a parallel oscillatorrequires. The 4.7 kΩ resistor provides negativefeedback for stability. The 10 kΩ potentiometer biasesthe 74AS04 in the linear region. This could be used forexternal oscillator designs.

FIGURE 8-5: EXTERNAL PARALLELRESONANT CRYSTALOSCILLATOR CIRCUIT

Figure 8-6 shows a series resonant oscillator circuit.This circuit is also designed to use the fundamentalfrequency of the crystal. The inverter performs a180-degree phase shift. The 330 kΩ resistors providethe negative feedback to bias the inverters in theirlinear region.

FIGURE 8-6: EXTERNAL SERIES RESONANT CRYSTALOSCILLATOR CIRCUIT

8.2.4 RC OSCILLATOR

For timing insensitive applications the RC device optionoffers additional cost savings. The RC oscillatorfrequency is a function of the supply voltage, theresistor (Rext) values, capacitor (Cext) values, and theoperating temperature. In addition to this, the oscillatorfrequency will vary from unit to unit due to normalprocess parameter variation. Furthermore, thedifference in lead frame capacitance between packagetypes also affects the oscillation frequency, especiallyfor low Cext values. The user needs to take intoaccount variation due to tolerance of the externalR and C components. Figure 8-7 shows how an R/Ccombination is connected to the PIC16F8X. For Rextvalues below 4 kΩ, the oscillator operation maybecome unstable, or stop completely. For very highRext values (e.g., 1 MΩ), the oscillator becomessensitive to noise, humidity and leakage. Thus, werecommend keeping Rext between 5 kΩ and 100 kΩ.

Although the oscillator will operate with no externalcapacitor (Cext = 0 pF), we recommend using valuesabove 20 pF for noise and stability reasons. With littleor no external capacitance, the oscillation frequencycan vary dramatically due to changes in externalcapacitances, such as PCB trace capacitance orpackage lead frame capacitance.

See the electrical specification section for RCfrequency variation from part to part due to normalprocess variation. The variation is larger for larger R(since leakage current variation will affect RCfrequency more for large R) and for smaller C (sincevariation of input capacitance has a greater affect onRC frequency).

See the electrical specification section for variation ofoscillator frequency due to VDD for given Rext/Cextvalues as well as frequency variation due tooperating temperature.

The oscillator frequency, divided by 4, is available onthe OSC2/CLKOUT pin, and can be used for testpurposes or to synchronize other logic (see Figure 3-2for waveform).

FIGURE 8-7: RC OSCILLATOR MODE

20 pF

+5V

20 pF

10k

4.7k

10k

74AS04

XTAL

10k

74AS04

PIC16FXX

CLKIN

To OtherDevices

330 kΩ

74AS04 74AS04

PIC16FXX

CLKIN

To OtherDevices

XTAL

330 kΩ

74AS04

0.1 μF

Note: When the device oscillator is in RC mode,do not drive the OSC1 pin with an externalclock or you may damage the device.

OSC2/CLKOUT

Cext

Rext

PIC16FXX

OSC1

Fosc/4

Internalclock

VDD

VSS

Recommended values: 5 kΩ ≤ Rext ≤ 100 kΩCext > 20pF

Page 63: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 41

8.3 Reset

The PIC16F8X differentiates between various kindsof reset:

• Power-on Reset (POR)• MCLR reset during normal operation• MCLR reset during SLEEP• WDT Reset (during normal operation)• WDT Wake-up (during SLEEP)

Figure 8-8 shows a simplified block diagram of theon-chip reset circuit. The MCLR reset path has a noisefilter to ignore small pulses. The electrical specifica-tions state the pulse width requirements for the MCLRpin.

Some registers are not affected in any reset condition;their status is unknown on a POR reset and unchangedin any other reset. Most other registers are reset to a“reset state” on POR, MCLR or WDT reset duringnormal operation and on MCLR reset during SLEEP.They are not affected by a WDT reset during SLEEP,since this reset is viewed as the resumption of normaloperation.

Table 8-3 gives a description of reset conditions for theprogram counter (PC) and the STATUS register.Table 8-4 gives a full description of reset states for allregisters.

The TO and PD bits are set or cleared differently in dif-ferent reset situations (Section 8.7). These bits areused in software to determine the nature of the reset.

FIGURE 8-8: SIMPLIFIED BLOCK DIAGRAM OF ON-CHIP RESET CIRCUIT

S

R Q

ExternalReset

MCLR

VDD

OSC1/

WDTModule

VDD risedetect

OST/PWRT

On-chipRC OSC(1)

WDTTime_Out

Power_on_Reset

OST

10-bit Ripple counter

PWRT

Chip_Reset

10-bit Ripple counter

Reset

Enable OST

Enable PWRT

SLEEP

CLKIN

Note 1: This is a separate oscillator from the RC oscillator of the CLKIN pin.

See Table 8-5

Page 64: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 42 © 1998 Microchip Technology Inc.

TABLE 8-3 RESET CONDITION FOR PROGRAM COUNTER AND THE STATUS REGISTER

Condition Program Counter STATUS Register

Power-on Reset 000h 0001 1xxx

MCLR Reset during normal operation 000h 000u uuuu

MCLR Reset during SLEEP 000h 0001 0uuu

WDT Reset (during normal operation) 000h 0000 1uuu

WDT Wake-up PC + 1 uuu0 0uuu

Interrupt wake-up from SLEEP PC + 1 (1) uuu1 0uuu

Legend: u = unchanged, x = unknown.Note 1: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector

(0004h).

TABLE 8-4 RESET CONDITIONS FOR ALL REGISTERS

Register Address Power-on Reset

MCLR Reset during:– normal operation– SLEEPWDT Reset during nor-mal operation

Wake-up from SLEEP:– through interrupt– through WDT Time-out

W — xxxx xxxx uuuu uuuu uuuu uuuu

INDF 00h ---- ---- ---- ---- ---- ----

TMR0 01h xxxx xxxx uuuu uuuu uuuu uuuu

PCL 02h 0000h 0000h PC + 1(2)

STATUS 03h 0001 1xxx 000q quuu(3) uuuq quuu(3)

FSR 04h xxxx xxxx uuuu uuuu uuuu uuuu

PORTA 05h ---x xxxx ---u uuuu ---u uuuu

PORTB 06h xxxx xxxx uuuu uuuu uuuu uuuu

EEDATA 08h xxxx xxxx uuuu uuuu uuuu uuuu

EEADR 09h xxxx xxxx uuuu uuuu uuuu uuuu

PCLATH 0Ah ---0 0000 ---0 0000 ---u uuuu

INTCON 0Bh 0000 000x 0000 000u uuuu uuuu(1)

INDF 80h ---- ---- ---- ---- ---- ----

OPTION_REG 81h 1111 1111 1111 1111 uuuu uuuu

PCL 82h 0000h 0000h PC + 1

STATUS 83h 0001 1xxx 000q quuu(3) uuuq quuu(3)

FSR 84h xxxx xxxx uuuu uuuu uuuu uuuu

TRISA 85h ---1 1111 ---1 1111 ---u uuuu

TRISB 86h 1111 1111 1111 1111 uuuu uuuu

EECON1 88h ---0 x000 ---0 q000 ---0 uuuu

EECON2 89h ---- ---- ---- ---- ---- ----

PCLATH 8Ah ---0 0000 ---0 0000 ---u uuuu

INTCON 8Bh 0000 000x 0000 000u uuuu uuuu(1)

Legend: u = unchanged, x = unknown, - = unimplemented bit read as '0',q = value depends on condition.

Note 1: One or more bits in INTCON will be affected (to cause wake-up).2: When the wake-up is due to an interrupt and the GIE bit is set, the PC is loaded with the interrupt vector

(0004h).3: Table 8-3 lists the reset value for each specific condition.

Page 65: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 43

8.4 Power-on Reset (POR)

A Power-on Reset pulse is generated on-chip whenVDD rise is detected (in the range of 1.2V - 1.7V). Totake advantage of the POR, just tie the MCLR pindirectly (or through a resistor) to VDD.This will eliminateexternal RC components usually needed to createPower-on Reset. A minimum rise time for VDD must bemet for this to operate properly. See Electrical Specifi-cations for details.

When the device starts normal operation (exits thereset condition), device operating parameters (voltage,frequency, temperature, ...) must be meet to ensureoperation. If these conditions are not met, the devicemust be held in reset until the operating conditionsare met.

For additional information, refer to Application NoteAN607, "Power-up Trouble Shooting."

The POR circuit does not produce an internal resetwhen VDD declines.

8.5 Power-up Timer (PWRT)

The Power-up Timer (PWRT) provides a fixed 72 msnominal time-out (TPWRT) from POR (Figure 8-10,Figure 8-11, Figure 8-12 and Figure 8-13). ThePower-up Timer operates on an internal RC oscillator.The chip is kept in reset as long as the PWRT is active.The PWRT delay allows the VDD to rise to an accept-able level (Possible exception shown in Figure 8-13).

A configuration bit, PWRTE, can enable/disable thePWRT. See either Figure 8-1 or Figure 8-2 for the oper-ation of the PWRTE bit for a particular device.

The power-up time delay TPWRT will vary from chip tochip due to VDD, temperature, and process variation.See DC parameters for details.

8.6 Oscillator Start-up Timer (OST)

The Oscillator Start-up Timer (OST) provides a 1024oscillator cycle delay (from OSC1 input) after thePWRT delay ends (Figure 8-10, Figure 8-11,Figure 8-12 and Figure 8-13). This ensures the crystaloscillator or resonator has started and stabilized.

The OST time-out (TOST) is invoked only for XT, LP andHS modes and only on Power-on Reset or wake-upfrom SLEEP.

When VDD rises very slowly, it is possible that theTPWRT time-out and TOST time-out will expire beforeVDD has reached its final value. In this case(Figure 8-13), an external power-on reset circuit maybe necessary (Figure 8-9).

FIGURE 8-9: EXTERNAL POWER-ONRESET CIRCUIT (FOR SLOWVDD POWER-UP)

Note 1: External Power-on Reset circuit is required only if VDD power-up rate is too slow. Thediode D helps discharge the capacitor quickly when VDD powers down.

2: R < 40 kΩ is recommended to make sure that voltage drop across R does not exceed0.2V (max leakage current spec on MCLRpin is 5 μA). A larger voltage drop will degrade VIH level on the MCLR pin.

3: R1 = 100Ω to 1 kΩ will limit any current flowing into MCLR from externalcapacitor C in the event of an MCLR pin breakdown due to ESD or EOS.

C

R1

RD

VDD

MCLR

PIC16FXX

VDD

Page 66: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 15

4.2.2.1 STATUS REGISTER

The STATUS register contains the arithmetic status ofthe ALU, the RESET status and the bank select bit fordata memory.

As with any register, the STATUS register can be thedestination for any instruction. If the STATUS register isthe destination for an instruction that affects the Z, DCor C bits, then the write to these three bits is disabled.These bits are set or cleared according to device logic.Furthermore, the TO and PD bits are not writable.Therefore, the result of an instruction with the STATUSregister as destination may be different than intended.

For example, CLRF STATUS will clear the upper-threebits and set the Z bit. This leaves the STATUS registeras 000u u1uu (where u = unchanged).

Only the BCF, BSF, SWAPF and MOVWF instructionsshould be used to alter the STATUS register (Table 9-2)because these instructions do not affect any status bit.

FIGURE 4-1: STATUS REGISTER (ADDRESS 03h, 83h)

Note 1: The IRP and RP1 bits (STATUS<7:6>) arenot used by the PIC16F8X and should beprogrammed as cleared. Use of these bitsas general purpose R/W bits is NOTrecommended, since this may affectupward compatibility with future products.

Note 2: The C and DC bits operate as a borrowand digit borrow out bit, respectively, insubtraction. See the SUBLW and SUBWFinstructions for examples.

Note 3: When the STATUS register is thedestination for an instruction that affectsthe Z, DC or C bits, then the write to thesethree bits is disabled. The specified bit(s)will be updated according to device logic

R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-xIRP RP1 RP0 TO PD Z DC C R = Readable bit

W = Writable bitU = Unimplemented bit,

read as ‘0’- n = Value at POR reset

bit7 bit0

bit 7: IRP: Register Bank Select bit (used for indirect addressing)0 = Bank 0, 1 (00h - FFh)1 = Bank 2, 3 (100h - 1FFh)The IRP bit is not used by the PIC16F8X. IRP should be maintained clear.

bit 6-5: RP1:RP0: Register Bank Select bits (used for direct addressing)00 = Bank 0 (00h - 7Fh)01 = Bank 1 (80h - FFh)10 = Bank 2 (100h - 17Fh)11 = Bank 3 (180h - 1FFh)Each bank is 128 bytes. Only bit RP0 is used by the PIC16F8X. RP1 should be maintained clear.

bit 4: TO: Time-out bit1 = After power-up, CLRWDT instruction, or SLEEP instruction0 = A WDT time-out occurred

bit 3: PD: Power-down bit1 = After power-up or by the CLRWDT instruction0 = By execution of the SLEEP instruction

bit 2: Z: Zero bit1 = The result of an arithmetic or logic operation is zero0 = The result of an arithmetic or logic operation is not zero

bit 1: DC: Digit carry/borrow bit (for ADDWF and ADDLW instructions) (For borrow the polarity is reversed)1 = A carry-out from the 4th low order bit of the result occurred0 = No carry-out from the 4th low order bit of the result

bit 0: C: Carry/borrow bit (for ADDWF and ADDLW instructions)1 = A carry-out from the most significant bit of the result occurred0 = No carry-out from the most significant bit of the result occurredNote:For borrow the polarity is reversed. A subtraction is executed by adding the two’s complement of

the second operand. For rotate (RRF, RLF) instructions, this bit is loaded with either the high or loworder bit of the source register.

Page 67: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

DS30430C-page 16 © 1998 Microchip Technology Inc.

4.2.2.2 OPTION_REG REGISTER

The OPTION_REG register is a readable and writableregister which contains various control bits to configurethe TMR0/WDT prescaler, the external INT interrupt,TMR0, and the weak pull-ups on PORTB.

FIGURE 4-1: OPTION_REG REGISTER (ADDRESS 81h)

Note: When the prescaler is assigned tothe WDT (PSA = '1'), TMR0 has a 1:1prescaler assignment.

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 R = Readable bit

W = Writable bitU = Unimplemented bit,

read as ‘0’- n = Value at POR reset

bit7 bit0

bit 7: RBPU: PORTB Pull-up Enable bit1 = PORTB pull-ups are disabled0 = PORTB pull-ups are enabled (by individual port latch values)

bit 6: INTEDG: Interrupt Edge Select bit1 = Interrupt on rising edge of RB0/INT pin0 = Interrupt on falling edge of RB0/INT pin

bit 5: T0CS: TMR0 Clock Source Select bit1 = Transition on RA4/T0CKI pin0 = Internal instruction cycle clock (CLKOUT)

bit 4: T0SE: TMR0 Source Edge Select bit1 = Increment on high-to-low transition on RA4/T0CKI pin0 = Increment on low-to-high transition on RA4/T0CKI pin

bit 3: PSA: Prescaler Assignment bit1 = Prescaler assigned to the WDT0 = Prescaler assigned to TMR0

bit 2-0: PS2:PS0: Prescaler Rate Select bits

000001010011100101110111

1 : 21 : 41 : 81 : 161 : 321 : 641 : 1281 : 256

1 : 11 : 21 : 41 : 81 : 161 : 321 : 641 : 128

Bit Value TMR0 Rate WDT Rate

Page 68: Introduction - CAO ENSEIRBbedenes.vvv.enseirb-matmeca.fr/Microchip/presentation_PICs.pdf · ANNEXE 1: Extrait du cours "architecture des ordinateurs" de T. DUMARTIN ANNEXE 2: Jeu

PIC16F8X

© 1998 Microchip Technology Inc. DS30430C-page 17

4.2.2.3 INTCON REGISTER

The INTCON register is a readable and writableregister which contains the various enable bits for allinterrupt sources.

FIGURE 4-1: INTCON REGISTER (ADDRESS 0Bh, 8Bh)

Note: Interrupt flag bits get set when an interruptcondition occurs regardless of the state ofits corresponding enable bit or the globalenable bit, GIE (INTCON<7>).

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-xGIE EEIE T0IE INTE RBIE T0IF INTF RBIF R = Readable bit

W = Writable bitU = Unimplemented bit,

read as ‘0’- n = Value at POR reset

bit7 bit0

bit 7: GIE: Global Interrupt Enable bit1 = Enables all un-masked interrupts0 = Disables all interrupts

Note: For the operation of the interrupt structure, please refer to Section 8.5.

bit 6: EEIE: EE Write Complete Interrupt Enable bit1 = Enables the EE write complete interrupt0 = Disables the EE write complete interrupt

bit 5: T0IE: TMR0 Overflow Interrupt Enable bit1 = Enables the TMR0 interrupt0 = Disables the TMR0 interrupt

bit 4: INTE: RB0/INT Interrupt Enable bit1 = Enables the RB0/INT interrupt0 = Disables the RB0/INT interrupt

bit 3: RBIE: RB Port Change Interrupt Enable bit1 = Enables the RB port change interrupt0 = Disables the RB port change interrupt

bit 2: T0IF: TMR0 overflow interrupt flag bit1 = TMR0 has overflowed (must be cleared in software)0 = TMR0 did not overflow

bit 1: INTF: RB0/INT Interrupt Flag bit1 = The RB0/INT interrupt occurred0 = The RB0/INT interrupt did not occur

bit 0: RBIF: RB Port Change Interrupt Flag bit1 = When at least one of the RB7:RB4 pins changed state (must be cleared in software)0 = None of the RB7:RB4 pins have changed state