Pic 16f84 Fichier1

Embed Size (px)

Citation preview

  • 7/31/2019 Pic 16f84 Fichier1

    1/142

    1

    Pierre LOGLISCI

    Le microcontrleurPIC

    16F84

    Edition de lAuteur

  • 7/31/2019 Pic 16f84 Fichier1

    2/142

    2

    Cet ouvrage est la proprit de lAuteur.

    Il est protg par les Lois sur le Copyright.

    Aucune partie de ce livre ne peut tre reproduite,

    sous aucune forme ou par un quelconque procd(lectronique, photocopie, CD ou autre), sans lautorisationcrite de lAuteur.

    La bible pour dsassembler la main est une nouveat mondiale , ide originale de lAuteur .

    - Le nom et le logo MICROCHIP sont des Marques dposes deMICROCHIP Technology Inc. - Arizona - USA

    - PIC, PICmicro, PICMASTER, PICSTART Plus, PROMATE 2, MPASM,MPLAB, MPLAB-ICE, MPLAB-IDE, MPLIB et MPLINK sont desMarques de MICROCHIP

    - WINDOWS, MICROSOFT et MICROSOFT INTERNET EXPLORER sont des Marques dposes de MICROSOFT

    - PicBASIC est une Marque dpose de Micro Engineering Labs

  • 7/31/2019 Pic 16f84 Fichier1

    3/142

    3

    Ddicace

    Lorsque ce travail ntait quun manuscrit, mon plus grand problme futde savoir comment faire pour lui donner une forme dactylographiqueacceptable pour tre lu par tous.

    Je navais que trs peu de connaissances en ce qui concerne lutilisationdu clavier, des logiciels de traitement de texte et dimages, et du scanner...Je ne savais pas comment crer les indispensables tableaux, ni commentaccder aux caractres spciaux....Je navais aucune exprience de composition et de mise en page...Bref : je ne savais pas comment my prendre pour faire en sorte quun tasde feuilles gribouilles la main deviennent un livre...

    Si jy suis parvenu, cest grce laide spontane et constante que maapporte ma fille Elodie qui - comme un guide de haute montagne - ma

    prcd dans la difficile ascension en mouvrant des chemins faciles et srs,toujours en se mettant ma place, dosant les difficults la mesure deleffort quelle savait que jtais capable de fournir .Sans jamais faire de concessions, elle sest de nombreuses fois oblige chercher - chez elle, sur son propre PC - les solutions pratiques aux

    problmes que je lui soumettais, au fur et mesure quils se prsentaient.

  • 7/31/2019 Pic 16f84 Fichier1

    4/142

    4

    Cest elle que je ddicace ce livre.

    Pour son aide, bien sr ; mais aussi pour les constants encouragementsrpts quelle ma donns, lenthousiasme quelle a partag avec moi

    pendant tout le temps que jai consacr au projet, et son doux sourire, dont

    elle mentoure encore.

  • 7/31/2019 Pic 16f84 Fichier1

    5/142

    5

    Avant-propos

    Bien quil existe une dj abondante littrature sur lesmicrocontrleurs PIC en gnral , lamateur qui veut sattaquer uneralisation personnelle utilisant le modle 16F84 ny arrive quau prix degros efforts.Ceci cause du fait quil y a plusieurs modles de PIC qui, tout en

    possdant la mme philosophie, diffrent sensiblement lun de lautre (par le nombre dinstructions, le nombre de pages mmoire, le nom desregistres, la prsence ou labsence de ressources internes...) et droutentcelui qui en entreprend ltude pour la premire fois.

    Or, si les ouvrages traitant les microcontrleurs PIC en gnral sont nombreux, aucun naborde le 16F84 en particulier .

    Dans ces conditions, le lecteur qui ne sintresse qu ce modleexclusivement, doit se livrer tout un travail pour sparer ce qui estimportant et ncessaire (parce que a concerne le 16F84) de ce qui estsuperflu (parce que a ne concerne pas le 16F84 mais se rfre dautresmodles).

    Aussi jai condens dans cet ouvrage les seules notions pratiquesncessaires pour aborder un montage personnel base de 16F84.

    Il y a plusieurs raisons cela.

    En premier lieu, ce modle possdant une mmoire EEPROMeffaable lectriquement, simpose comme la solution idale pour ceux quiveulent apprendre utiliser un microcontrleur PIC, du fait quil estreprogrammable jusqu plus de 1.000 fois (selon les spcifications dufabricant).

    Associ de simples organes priphriques, il reprsente loutildapprentissage par excellence, car le lecteur peut tester tous les

    programmes avec le mme microcontrleur et revenir sur les erreurs, lescorriger et rapidement re-tester lapplication.

  • 7/31/2019 Pic 16f84 Fichier1

    6/142

    6

    Ce microcontrleur possde un fusible interne, accessible par programmation, quil faudra se garder de laisser intact. Car lorsque cefusible a t brl, le microcontrleur, sil peut encore tre effac etreprogramm, ne peut plus tre lu correctement , car sa mmoire estrestitue compltement dsorganise.Bien utile pour ceux qui mettent au point une application commerciale

    quils veulent protger et mettre labri de copies sauvages, ce fusible doittre ignor pendant la dure de ltude.Cette accessibilit permanente de la mmoire reprsente laspect le

    plus original de tous les microcontrleurs mmoire flash, parmi lesquelstrne le 16F84.

    De plus, la capacit mmoire de ce modle (ni trop petite ni tropgrande) le prdestine comme le compromis idal non seulement pour lauto-apprentissage, mais aussi pour les premires applications

    personnelles que chacun aura envie dinventer.Car, sil est incontestable quon peut parvenir la ralisation dun

    grand nombre de dispositifs en tlchargeant programmes et circuitsimprims partir des nombreux sites consacrs aux microcontrleurs, dansce domaine particulier de la microlectronique seules les capacits

    personnelles comptent.Cest pourquoi ce livre sadresse tout particulirement qui veut

    vraiment prendre ... dans une main le PIC 16F84 ... et dans lautre lesindispensables outils de dveloppement et... le fer souder !

    Les seules connaissances exiges pour en aborder la lecture sontles bases fondamentales de llectronique gnrale et de llectroniquelogique.

    Un avertissement tout de mme - sil tait ncessaire - consiste rappeler que pour matriser la ralisation dun montage incorporant unmicrocontrleur 16F84 il faut disposer dun ordinateur et dun outil dedveloppement (pouvant tre soit une copie de lassembleur MPLAB que

    Microchip distribue gratuitement sur son site Internet, soit un compilateur BASIC). Nous verrons ceci plus loin, dans la section traitant de la

    programmation.

  • 7/31/2019 Pic 16f84 Fichier1

    7/142

    7

    Du contrleur au microcontrleur

    Pour le dire avec des mots simples, un contrleur est un dispositif qui - plac au cur dun processus - surveille lvolution dun vnement etcompare son tat (ou sa valeur) une donne prdtermine, pour intervenir ds que les limites prfixes sont atteintes.

    De ce point de vue, un contrleur nest pas forcment lectronique.Il peut tre mcanique, pneumatique, thermique, etc..

    Son travail consiste surveiller ( lire ) la valeur dune situation, et la comparer en permanence une valeur fixe davance.Lorsquil y a une diffrence entre la valeur lue et celle fixe, le contrleur gnre une commande qui - envoye un endroit appropri du processus -rduit cette diffrence ou ramne les choses la normale.

    Aussi, un thermostat dambiance ou la valve de scurit installesur le couvercle dune cocotte-minute, sont des exemples de contrleurssimples.

    Un contrleur peut accomplir une ou plusieurs tches la suite.

    Les plus souples de tous les contrleurs sont videmment lescontrleurs faisant appel llectronique, et plus particulirement lesmicrocontrleurs .

    La surveillance de la valeur dune situation se fait alors au moyendune ou plusieurs lignes dacquisition de donnes configures en entres ,tandis que lenvoi de commandes se fait au moyen dune ou plusieurslignes configures en sorties .

    Lensemble des tches confies un microcontrleur sappelle programme .

  • 7/31/2019 Pic 16f84 Fichier1

    8/142

    8

    Le microcontrleur 16F84

    Prsentation gnrale

    Ce modle de PIC ( Programmable Interface Controler ) est uncircuit de petite taille, fabriqu par la Socit amricaine ArizonaMICROCHIP Technology.

    En le regardant pour la premire fois, il fait davantage penser un banal circuit intgr logique TTL ou MOS, plutt qu un microcontrleur.Son botier est un DIL ( Dual In Line ) de 2x9 pattes.

    En dpit de sa petite taille, il est caractris par une architectureinterne qui lui confre souplesse et vitesse incomparables.

    Ses principales caractristiques sont :

    - 13 lignes dentres/sorties, rparties en un port de 5 lignes(Port A) et un port de 8 lignes (Port B)- alimentation sous 5 Volts- architecture interne rvolutionnaire lui confrant une extraordinaire

    rapidit- une mmoire de programme pouvant contenir 1.019 instructions de 14

    bits chacune (allant de ladresse 005 ladresse 3FF)- une mmoire RAM utilisateur de 68 emplacements 8 bits (de ladresse

    0C ladresse 4F)- une mmoire RAM de 2x12 emplacements rserve aux registres spciaux- une mmoire EEPROM de 64 emplacements- une horloge interne, avec pr diviseur et chien de garde- possibilit dtre programm in-circuit , cest dire sans quil soit

    ncessaire de le retirer du support de lapplication- vecteur de Reset situ ladresse 000- un vecteur dinterruption, situ ladresse 004- bus dadresses de 13 lignes- prsence dun code de protection permettant den empcher la duplication- facilit de programmation- simplicit- faible prix .

  • 7/31/2019 Pic 16f84 Fichier1

    9/142

    9

    Brochage du PIC 16F84(C vu de dessus)

  • 7/31/2019 Pic 16f84 Fichier1

    10/142

    10

    Le cortge des invariants

    Indpendamment de ce quon veut faire de ses 13 lignes (que londfinit par lignes dentre/sortie) et quelle que soit lapplication laquelleon le destine, un microcontrleur PIC 16F84, pour pouvoir fonctionner, ancessairement besoin de :

    - une alimentation de 5 Volts ;- un quartz et deux condensateurs (si un pilotage prcis par base de

    temps quartz est ncessaire), ou une rsistance et un condensateur (pour une base de temps de type RC, conomique, utilisable dans les cas nedemandant pas une extrme prcision de cadencement) ;

    - un condensateur de dcouplage (pour rduire les transitoires seformant invitablement dans tout systme impulsionnel) ;

    - un bouton poussoir et une rsistance, pour la mise en place dunecommande de Reset.

    Ces lments - quil convient de considrer comme des invariantsdevant ncessairement figurer dans tout montage - reprsentent le cortgeobligatoire de tout microcontrleur PIC 16F84, de la mme faon -

    pourrais-je dire - quun transistor demande, pour fonctionner, une rsistancede Base et une rsistance de Collecteur.

    Les applications type sont celles des deux pages suivantes :

  • 7/31/2019 Pic 16f84 Fichier1

    11/142

    11

    1) Pilotage par quartz

  • 7/31/2019 Pic 16f84 Fichier1

    12/142

    12

    2) Pilotage par oscillateur RC

  • 7/31/2019 Pic 16f84 Fichier1

    13/142

    13

    Les Entres/Sorties

    A part les cinq pins rserves au cortge des invariants devantncessairement figurer dans tout montage, les treize autres pins du 16F84servent d entres/sorties .

    Elles sont regroupes en deux ports : Port A et Port B .

    Le Port A possde 5 lignes, nommes:RA0.......... pin 17RA1.......... pin 18RA2.......... pin 1RA3.......... pin 2RA4.......... pin 3 (RA 4/T0CKI)(NB : RA = Register A)

    Le Port B possde 8 lignes, nommes:RB0.......... pin 6 (RB 0/INT)RB1.......... pin 7RB2.......... pin 8RB3.......... pin 9RB4.......... pin 10RB5.......... pin 11RB6.......... pin 12RB7.......... pin 13(NB : RB = Register B)

    A remarquer que RB 0 (pin 6) et RA 4 (pin 3), outre qu pouvoir servir dentres/sorties, selon la faon dont on les programme peuventrespectivement servir lune comme entre dinterruption et lautre commeentre dhorloge externe pour le pilotage du timer (TMR 0).

  • 7/31/2019 Pic 16f84 Fichier1

    14/142

    14

    Organisation de la mmoire du PIC 16F84

    La mmoire du PIC 16F84 est rpartie en trois espaces, logs sur la mme pastille de silicium :

    1) Une mmoire EEPROM de type flash, de 1 K mots de 14 bits,allant de ladresse 000 ladresse 3FF.Cet espace est dnomm mmoire de programme , dont le plan est le

    suivant :

    5 adresses rserves au C 000 Vecteur de Reset(adresses que je 001

    conseille de sauter) 002 003

    004 Vecteur d Interruption

    005 Dbut du programmeutilisateur

    .

    .

    1019 adressesrestantes, .disponibles pour y loger les instructions devotre programme .

    .

    .

    3FF Fin de lespace mmoiredisponible

  • 7/31/2019 Pic 16f84 Fichier1

    15/142

    15

    Cette mmoire est celle dans laquelle le programmateur crit lesinstructions du programme.

    Dans cet espace mmoire, les cinq premires adresses (000, 001,002, 003, et 004) sont rserves au microcontrleur.

    Certaines dentre elles sont particulirement remarquables :

    a) ladresse 000 correspond au vecteur de Reset .A la mise sous tension, ou chaque fois que des instructions spcifiqueslobligent, le Program Counter (PC) se rend cette adresse et cest l que lesystme trouve la premire instruction excuter.Cest une case devant obligatoirement tre remplie et contenir lorigine du

    programme (ORG).Si cette adresse tait vide, le microcontrleur ne ferait rien, car aucun

    programme ne serait excut.

    b) ladresse 004 correspond au vecteur dinterruption .Cest ladresse point de rencontre dfinie par le fabricant, laquelle

    systme et utilisateur se rendent lorsquun problme surgit, pour se dire cequil se passe et quel sont les remdes durgence apporter.

    2) une mmoire de donnes (Data Memory) EEPROM flash, de 64emplacements 8 bits, allant de ladresse 00 ladresse 3F, auxquels onaccde uniquement par lintermdiaire de quatre registres spciaux:

    -EEADR (EEprom ADRess) pour ce qui concerne les adresses- EEDATA (EEprom DATA) pour ce qui concerne les donnes- EECON1 (EEprom CONtrol) permettant de dfinir le

    - EECON 2 mode de fonctionnement de cette mmoire.

    Pour lire dans cette mmoire, les tapes suivre sont les suivantes :1) on crit ladresse dans le registre EEADR ;2) on met 1 le bit 0 (RD : Read Data) du registre EECON 1 (ce qui

    provoque le transfert de la donne dans le registre EEDATA) ;3) on lit la donne dans le registre EEDATA o elle est devenue disponible.

  • 7/31/2019 Pic 16f84 Fichier1

    16/142

    16

    Exemple : on veut lire le contenu de lemplacement mmoire 03 :

    BCF STATUS,RP 0MOVLW 03MOVWF EEADR BSF STATUS,RP 0

    BSF EECON 1,0BCF STATUS,RP 0

    A partir de ce moment, ayant autoris le mode lecture , ladonne contenue ladresse 03 est disponible dans le registre EEDATA, eton peut lutiliser comme on veut.

    Ainsi, par exemple, on veut lire une donne en EEPROM et la porter dans le registre W :

    BCF STATUS,RP 0MOVLW adresse dont on veut lire le contenuMOVWF EEADR

    BSF STATUS,RP 0BSF EECON 1,0BCF STATUS,RP 0MOVF EEDATA,W

    Voyons maintenant comment crire une donne en EEPROM :

    BCF STATUS,RP 0BCF INTCON,7MOVLW donne que lon veut crireMOVWF EEDATA

    MOVLW adresseMOVWF EEADR BSF STATUS,RP 0BCF EECON 1,4BSF EECON 1,2MOVLW 55MOVWF EECON 2MOVLW AAMOVWF EECON 2

  • 7/31/2019 Pic 16f84 Fichier1

    17/142

    17

    BSF EECON 1,1BCF EECON 1,2BSF INTCON,7BCF STATUS,RP 0

    Cette squence montre que pour crire dans cette mmoire, les tapes suivre sont un peu plus complexes, car on est oblig de passer dabord par EECON 2 avant de confirmer la donne par EECON 1 :1) on interdit les interruptions ;2) on crit la donne dans le registre EEDATA ;3) on crit ladresse dans le registre EEADR ;4) on configure le registre EECON 15) on envoie la squence dfinie par Microchip (55 et AA)6) on reconfigure les registres EECON 1, INTCON et STATUS.

    Voyons les choses plus en dtail au moyen dun autre exemplemontrant lcriture dune donne (par exemple : 13) une certaine adresse(par exemple : 1F) :

    EEDATA EQU 08EEADR EQU 09EECON 1 EQU 88EECON 2 EQU 89INTCON EQU 0B

    BCF INTCON,7MOVLW 13MOVWF EEDATAMOVLW 1FMOVWF EEADR BSF STATUS,RP 0BCF EECON 1,4

    BSF EECON 1,2MOVLW 55MOVWF EECON 2MOVLW AAMOVWF EECON 2BSF EECON 1,1BCF EECON 1,2BSF INTCON,7BCF STATUS,RP 0

  • 7/31/2019 Pic 16f84 Fichier1

    18/142

    18

    3) Une mmoire RAM 8 bits, que Microchip appelle Register File ,rserve aux donnes.A plus proprement parler, il sagit dune RAM statique (SRAM).

    Cet espace est son tour rparti en deux zones :

    a) une zone RAM de 24 emplacements 8 bits rserve auxregistres spciaux , dont 12 situs en Page 0 (adresses 00 0B) et 12 situsen Page 1 (adresses 80 8B) selon la mappe suivante :

    Page 0 Page 100 Adressage indirect01 TMR 002 PCL03 STATUS04 FSR 05 PORT A06 PORT B07 08 EEDATA09 EEADR 0A PCLATH0B INTCON

    80 Adressage indirect81 OPTION82 PCL83 STATUS84 FSR 85 TRIS A86 TRIS B87 88 EECON 189 EECON 28A PCLATH8B INTCON

    Ces registres - auxquels on accde en programmant le bit 5 (RP 0) duregistre STATUS - servent contrler le fonctionnement de nombreuxorganes internes au PIC. Nous y reviendrons plus en dtail;

    b) une zone RAM de donnes, constitue de 68 emplacements 8 bits (adresses de 0C 4F) situs juste au dessous des registres spciaux,formant la RAM utilisateur proprement dite, selon la mappe dtaille ci-aprs :

    0C0D0E0F10

  • 7/31/2019 Pic 16f84 Fichier1

    19/142

    19

    111213141516

    1718191A1B1C1D1E1F20212223

    2425262728292A2B2C2D2E2F30

    32333435363738393A

  • 7/31/2019 Pic 16f84 Fichier1

    20/142

    20

    3B3C3D3E3F40

    4142434445464748494A4B4C4D

    4E4F

    Lors de la programmation il faut toujours indiquer ladresse de lazone RAM partir de laquelle le C doit commencer crire, ainsi que lenombre demplacements rserver pour chaque variable.

    Comme ceci, par exemple :

    ORG OCCompteur RES 3

    Ce qui revient dire : rserve trois emplacements la variable Compteur,

    dans lordre suivant :

    Compteur ladresse 0CCompteur+1 ladresse 0DCompteur+2 ladresse 0E .

    Ainsi, par exemple :

    pour effacer les donnes de ladresse OE, on crira :CLRF Compteur+2.

  • 7/31/2019 Pic 16f84 Fichier1

    21/142

    21

    4) et enfin une toute petite mmoire EEPROM, contenant seulement 8cases, de ladresse 2000 ladresse 2007, rserves au microcontrleur.

    Les adresses 2000, 2001, 2002 et 2003 correspondent auxemplacements dans lesquels lutilisateur peut stocker un codedidentification (en nutilisant que les quatre bits de poids faible de chacun

    de ces mots 14 bits).

    Ladresse 2007 correspond au registre de configuration dumicrocontrleur.

    Lui aussi mot de 14 bits, dont les cinq premiers seulement sont utilisables :

    4 3 2 1 0CP PWRTE WDTE FOSC 1 FOSC 0

    - Bit 0 - FOSC 0 (OSCillateur zro) et- Bit 1 - FOSC 1 (OSCillateur un)

    sont programmer en fonction du type doscillateur utilis,

    conformment aux spcifications du tableau suivant:

    FOSC 1 FOSC 0 Type doscillateur Caractristiques0 0 LP (Low Power) Quartz

    jusqu 200 KHz0 1 XT Quartz (XT ou 4)

    MHz1 0 HS (High Speed) jusqu

    20 MHz1 1 RC RC jusqu 4 MHz

    - Bit 2 - WDTE (Watch-Dog Timer Enable)1 = autorise le chien de garde0 = nautorise pas le chien de garde

    - Bit 3 - PWRTE (PoWeR Timer Enable)Le C possde un timer permettant de retarder de 72 ms lelancement du programme aprs la mise sous tension du circuit.1 = le C attend 72 ms0 = le C dmarre tout de suite

  • 7/31/2019 Pic 16f84 Fichier1

    22/142

    22

    - Bit 4 - CP (Code Protection)1 = pas de protection (le C pourra tre lu correctement)0 = avec protection (le C ne pourra plus tre lu correctement.

    Le contenu de la mmoire sera dsorganis).

  • 7/31/2019 Pic 16f84 Fichier1

    23/142

    23

    Les registres spciaux

    Nous avons dit que dans lespace mmoire RAM que Microchipappelle Register File, une zone est rserve aux registres spciaux .

    Le mot registre est utilis ici pour dsigner un emplacementmmoire, tandis que le mot file signifie groupement.

    Certains de ces registres sont situs en Page 0 entre les adresses 00et 0B, et dautres sont situs en Page 1 entre les adresses 80 et 8B.Quelques-uns dentre eux figurent mme dans les deux pages (Page 0 etPage 1) pour en faciliter laccs.

    Ils ont des noms et des usages spcifiques, et servent commander le microcontrleur.

    Il y en a 16 en tout, et sont si importants quils conditionnentvritablement la programmation.

    Ils sont utiliss constamment, et constamment tenus prsents dans la tte du programmeur.

    Celui qui veut crire ne ft-ce quun petit programme de quelqueslignes, ne peut pas les ignorer.

    Cest pourquoi ils doivent tre tudis et connus fond.

    Examinons-les en dtail, un par un, par ordre alphabtique.

  • 7/31/2019 Pic 16f84 Fichier1

    24/142

    24

    EEADR (EEprom ADRess)

    Registre dans lequel on crit ladresse de la mmoire de donnesEEPROM (mmoire flash de 64 octets, allant de ladresse 00 ladresse3F) laquelle on veut accder pour y lire ou pour y crire.

    Contrairement lEEPROM de programme qui - en plus de latension dalimentation du microcontrleur - ncessite une tension externe

    pour la programmation, cette EEPROM fonctionne avec la seule tensiondalimentation, dans toute sa plage.

  • 7/31/2019 Pic 16f84 Fichier1

    25/142

    25

    EECON 1 (EEprom CONtrol 1)

    Registre de contrle permettant de dfinir le mode defonctionnement de la mmoire de donnes EEPROM (mmoire flash de 64octets, allant de ladresse 00 ladresse 3F).Registre 8 bits, mais dont 5 seulement sont utiliss:

    7 6 5 4 3 2 1 0EEIF WRERR WREN WR RD

    Bit 0 : RD (ReaD) Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne peut y crire que un 1.

    Naccepte pas dtre programm zro.

    Bit 1 : WR (WRite) Normalement 0. Il se met dans cet tat de lui-mme. Le programmeur ne peut crire que un 1.

    Naccepte pas dtre programm zro.

    Bit 2 : WREN (WRite ENable)Mis zro, interdit toute criture en mmoire.

    Mis 1, autorise une criture en mmoire.

    Bit 3 : WRERR (WRite ERRor) Flag derreur. Normalement zro.

    Passe 1 pour signaler quune erreur sest produitejuste au moment o une criture tait en cours(Celle-ci na pu aboutir parce quun vnementinopin sest produit ; par exemple un Reset).

    Bit 4 : EEIF (EEprom Interrupt Flag) Flag dinterruption. Il est automatiquement mis 1 lorsque la

    programmation de lEEPROM de donnes est termine. Doit tre mis zro par programmation.

  • 7/31/2019 Pic 16f84 Fichier1

    26/142

    26

    EECON 2 (EEprom CONtrol 2)

    Registre nayant aucune consistance physique, et dont le seul rleconsiste obliger le programmeur vrifier les donnes quil envoie danslEEPROM.

  • 7/31/2019 Pic 16f84 Fichier1

    27/142

    27

    EEDATA (EEprom DATA)

    - Pendant une opration de lecture : registre dans lequel estdisponible la donne quon est all chercher une certaine adresse de lammoire EEPROM.

    - Pendant une opration dcriture : registre dans lequel on place ladonne quon veut y crire.

  • 7/31/2019 Pic 16f84 Fichier1

    28/142

    28

    FSR (File Select Register)

    Sert slectionner la mmoire de donnes, pour pouvoir y accder.

  • 7/31/2019 Pic 16f84 Fichier1

    29/142

    29

    INTCON (INTerrupt CONtrol)

    Est le registre qui prside au fonctionnement des interruptions.

    Dans le 16F84 il y a quatre sources possibles dinterruptions.Chaque fois que lune delles surgit, le microcontrleur (aprs avoir notdans la pile ladresse de retour) abandonne momentanment (interrompt) le

    programme quil avait en cours dexcution et saute ladresse 004(adresse prdfinie par le fabricant, de la mme faon que ladresse 000 at prdfinie pour la fonction Reset).

    En lisant le contenu de ce registre, on peut dterminer la provenance de lademande dinterruption et aiguiller le programme de manire y rpondrede faon adquate.

    Linterruption peut tre commande soit par un flanc montant, soit par unflanc descendant : cela dpend de la faon dont on a pralablement

    programm le bit 6 (INTEDG) du registre OPTION :1 = linterruption est gnre lapparition dun front

    montant ;0 = linterruption est gnre lapparition dun front

    descendant.

    Les quatre sources dinterruption possibles sont :

    1) la fin dune programmation de lEEPROM de donnes ;

    2) le dbordement du timer interne ;

    3) une commande externe applique sur la pin 6 (RB 0/INT) ;

    4) un changement dtat sur lune des pins 10, 11, 12 ou 13(respectivement RB 4, RB5, RB6, RB7).Dans ce cas, seule une configuration des lignes en entre peut donner lieu une ventuelle demande dinterruption.

  • 7/31/2019 Pic 16f84 Fichier1

    30/142

    30

    Examinons un par un chacun des bits de ce registre :

    7 6 5 4 3 2 1 0GIE EEIE TOIE INTE RBIE TOIF INTF RBIF

    Bit 7 : GIE (Global Interrupt Enable) Le chef suprme du registre INTCON.

    Le roi de toutes les interruptions ! Mis 1, il autorise la prise en compte de tous les autresbits de loctet ; tandis que mis zro, il les masque(mme sils sont positionns).Sous laction dun Reset il est automatiquementmis zro.Pour interdire la prise en compte de toute ventuelledemande dinterruption pouvant surgir pendant que lemicrocontrleur est dj occup en traiter une, ce bit

    (GIE) passe automatiquement zro jusqu ce quedans le programme apparat linstruction RETFIE,qui le repositionne 1.Au cas o lutilisation de ce bit soit ncessaire,il ne faut pas oublier que:aprs lavoir activ (pour ouvrir laccs au(x) bit(s) concern(s),

    et aprs linstruction RETFIE, cest dire la fin dun sous-programme dinterruption,lorsque son utilisation nest plus ncessaire,il faut le mettre zro, au risque de placer les demandes dinterruptiondans un cycle qui les ferait revenir continuellement.

    Bit 6 : EEIE (EEprom Interrupt Enable) Mis 1, autorise linterruption que lEEPROM gnre

    la fin de la programmation.

    7 6 5 4 3 2 1 0EEIE

  • 7/31/2019 Pic 16f84 Fichier1

    31/142

    31

    Bit 5 : T0IE (Timer zero Interrupt Enable)

    7 6 5 4 3 2 1 0TOIE

    Mis 1, il autorise les interruptions provoques par le

    dbordement du timer interne (passage de FF 00).

    Bit 4 : INTE (INTerrupt Enable)

    7 6 5 4 3 2 1 0INTE

    Mis 1, il autorise les demandes dinterruptionprovenant de lextrieur, appliques sur la pin 6(RB 0 /INT).

    NB : ces demandes peuvent se dclencher soit lapparition dunFront montant, soit lapparition dun front descendant, selon la faonDont on a programm le bit 6 du registre OPTION (INTEDG)

    1 = sur front montant0 = sur front descendant

    Bit 3 : RBIE (Register B Interrupt Enable)

    7 6 5 4 3 2 1 0RBIE

    Mis 1, il autorise les interruptions provoquespar un changement dtat sur les lignes du port B(RB 4, BR 5, RB6, RB 7).

  • 7/31/2019 Pic 16f84 Fichier1

    32/142

    32

    Bit 2 : T0IF (Timer zero Interrupt Flag)7 6 5 4 3 2 1 0

    TOIF

    Le fonctionnement de ce flag est conditionn par ltat du bit 5. Il ne fonctionne que

    si le bit 5 a pralablement t mis 1.Dans la mesure o le bit 5 est 1, ce flag passe 1chaque fois que le timer TMR 0 dborde (passage deFF 00).

    Bit 1 : INTF (INTerrupt Flag)7 6 5 4 3 2 1 0

    INTF

    Le fonctionnement de ce flag est conditionn par ltat du bit 4. Il ne fonctionne que si le

    bit 4 a pralablement t mis 1.Dans la mesure o le bit 4 est 1, ce flag passe 1chaque fois quune demande dinterruption surgit, pro-venant de lextrieur, applique sur la pin 6 du botier (RB 0/INT).

    Bit 0 : RBIF (Register B Interrupt Flag)

    7 6 5 4 3 2 1 0RBIF

    Le fonctionnement de ce flag est conditionn par ltat du bit 3. Il ne fonctionneque si le bit 3 a pralablement t mis 1.Dans la mesure o le bit 3 est 1, ce bit passe 1chaque fois quil y a un changement dtat sur lunedes lignes du port B (RB 4, RB 5, RB 6 ouRB7) par rapport la dernire opration de lecture duport B (dans la mesure, videmment, o les lignes de ceport sont configures en entre ).

  • 7/31/2019 Pic 16f84 Fichier1

    33/142

    33

    OPTION

    Est le registre qui prside au fonctionnement de lhorloge internedu microcontrleur (TMR 0) :

    7 6 5 4 3 2 1 0RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0

    Bit 7 : RBPU (Register B Pull Up) Mis zro (actif ltat bas) valide les rsistances de

    pull-up prsentes, lintrieur du botier, sur les lignesdu port B.

    Bit 6 : INTEDG (INTerrupt EDGe) Dtermine le front du signal dhorloge sur lequel on veut que

    soit prise en compte une demande dinterruption provenantde lextrieur (commande applique sur la pin 6 : RB 0/INT). Car on peut faire agir une telledemande soit lapparition dun front montant (passagede zro 1), soit lapparition dun frontdescendant (passage de 1 zro).

    1 = interruption programme pour se dclencher

    sur un front montant ( )0 = interruption programme pour se dclencher

    sur un front descendant ( ) .

    Bit 5 : T 0CS (Timer zero Clock Source)

    Sert choisir la provenance du signal quon souhaiteutiliser comme clock pour piloter lhorloge interne.Il existe deux choix possibles : soit utiliser lhorlogeinterne utilisant le quartz pilote du microcontrleur etfournissant un signal dont la frquence est celle du quartzdivise par 4, soit utiliser un signal externe prlev sur la pin RA 4 (bit 4 du port A).

    0 = le timer est pilot par lhorloge interne1 = le timer est pilot par un signal externe.

  • 7/31/2019 Pic 16f84 Fichier1

    34/142

    34

    Bit 4 : T 0SE (Timer zero Signal Edge) Sert dterminer si lhorloge doit avancer sur front

    montant ou sur front descendant.

    0 = lhorloge avance sur front montant ( )

    1 = lhorloge avance sur front descendant ( ) .Bit 3 : PSA (Pre-Scaler Assignment) Sert affecter le prdiviseur soit au timer TMR 0

    soit au Watch-Dog.0 = le pr diviseur est affect au timer TMR 01 = le pr diviseur est affect au Watch-Dog.

    Bits 2 1 0 : PS 2 PS 1 PS 0 (Pre-Scaler rate) Ces trois bits servent programmer le facteur de division

    quon veut assigner au prdiviseur dans le but davoir des signaux plus lents.

    A remarquer que le facteur de division nest pas le mmeselon que le pr diviseur soit affect au TMR 0 (timer)ou au Watch-Dog (chien de garde) :

    Facteur de divisionPS2 PS1 PS0

    Pour le TMR 0 Pour le Watch-Dog0 0 0 2 10 0 1 4 20 1 0 8 40 1 1 16 81 0 0 32 161 0 1 64 321 1 0 128 641 1 1 256 128

    Pour crire dans ce registre on utilise soit linstruction BSF,bitSoit linstruction BCF,bit.

  • 7/31/2019 Pic 16f84 Fichier1

    35/142

    35

    Reprsentation image du fonctionnement du timer TMR 0 et duWatch-Dog (chien de garde) :

  • 7/31/2019 Pic 16f84 Fichier1

    36/142

    36

    PCL (Program Counter Low)

    Il sagit du compteur qui fournit au programme la partie basse deladresse.

    Dans les microcontrleurs de Microchip les lignes dadresses sontrparties en deux bytes : le PCL (fourni par ce registre Program Counter Low), et le PCH (fourni par le registre PCLATH Program Counter LATchHigh).

    Il sagit dun compteur dont la tche est dadresser la mmoiredans laquelle sont loges les instructions du programme.

    Lorganisation de ce type de compteur, dans les microcontrleursPIC, veut que ladresse soit compose de deux parties : la partie basse(fournie par PCL, sur dix lignes dadresse) et la partie haute (fournie par PCLATH).

  • 7/31/2019 Pic 16f84 Fichier1

    37/142

    37

    PCLATH (Program Counter LATch High)

    Ladresse du compteur de programme est obtenue en mettantensemble la partie basse fournie par PCL (Program Counter Low) et la

    partie haute fournie par PCLATH.

    Contrairement ce quon pourrait penser, ce registre ne fournit pasun nombre complmentaire fixe de bits, mais un nombre de bits variable, enfonction des instructions qui sont traites.

  • 7/31/2019 Pic 16f84 Fichier1

    38/142

    38

    PORT A - PORT B

    Alors que TRIS A et TRIS B se limitent dfinir le sens de chaqueligne des ports ( entre ou sortie ), PORT A et PORT B permettentconcrtement au microcontrleur de communiquer avec lextrieur.

    Voici des exemples :

    1) Comment crire un 0 sur une ligne de port (par exemple, sur RA0) :

    MOVLW 11111110 (en binaire, pour que ce soitplus parlant). Octet de confi-guration de port :

    0 = sortie1 = entre

    Dans ce cas : on veut pro-grammer le bit 0 en sortie ,et tous les autres en entre .

    MOVWF TRISA Charge loctet de configura-tion dans le registre TRIS A,mais toutes les lignes sontencore maintenues en hauteimpdance.

    BCF PORTA,0 Met zro (clear) le bit 0du port A. Toutes les autreslignes du port restent haute impdance.

    2) Comment crire un 1 sur une ligne de port (par exemple, sur RA2) :

    MOVLW 11111110 (en binaire, pour que ce soitplus parlant). Octet de confi-guration de port :

    0 = sortie1 = entre

    Dans ce cas : on veut pro-grammer le bit 2 en sortieet tous les autres en entre .

    MOVWF TRISA Charge loctet de configura-tion dans le registre TRIS A.

  • 7/31/2019 Pic 16f84 Fichier1

    39/142

    39

    BSF PORTA,2 Met 1 (set) le bit 2 duport A. Toutes les autreslignes du port restent haute impdance.

    3) Comment lire ltat logique dune ligne de port.Cest dire : comment savoir si une ligne est 0 ou 1 :

    MOVLW 11111111 (en binaire). Octet de configu-tion de port (on veut que tou-tes les lignes du port soientdes entres ).

    MOVWF TRISA Charge loctet de configura-tion dans le registre TRIS A.

    BTFSC PORTA,3 Teste le bit 3 des lignes duport A. Sil est 1, lin-

    struction suivante est excu-te. Si par contre il est 0,linstruction suivante est igno-re et le programme excutelinstruction se trouvant enco-re aprs.NB : Au lieu de BTFSC, onaurait pu utiliser linstructionBTFSS pour, dans ce cas, ex-ter linstruction suivante si lebit test est 0.

    4) Comment lire loctet entier dun port configur en entre :

    MOVF PORTA,W Charge le contenu du port Adans le registre W.

  • 7/31/2019 Pic 16f84 Fichier1

    40/142

    40

    STATUS (Registre dtat)

    Les cinq premiers bits de ce registre (bits 0 4) correspondent des flags que le programmeur peut interroger pour obtenir des informationslui permettant dcrire correctement la suite des instructions de son

    programme ; tandis que les bits 5, 6 et 7 (RP 0, RP 1, RP 2), daprs la faondont on les programme, pourraient slectionner 8 pages de registresinternes (chacune de 128 octets).Comme dans le 16F84 il ny a que deux pages de registres (Page 0 et Page1), seul le bit 5 (RP 0) sert (les bits 6 et 7 sont ignorer purement etsimplement).

    7 6 5 4 3 2 1 0RP0 TO PD Z DC C

    Bit 0 : C (Carry)Flag indiquant si une retenue a eu lieu dans un octet lorsdune addition ou dune soustraction.Si une retenue a t gnre, ce bit passe 1.

    Bit 1 : DC (Digit Carry)Flag fonctionnant comme le bit de Carry, sauf quici lasurveillance de la retenue sexerce non pas sur loctetentier, mais sur le premier demi-octet.Ce flag se positionne 1 si une retenue est gnre du bit3 (bit de poids fort du quartet infrieur) vers le bit 0 duquartet suprieur.Il est utile pour corriger le rsultat doprations effectuesen code BCD.

    Bit 2 : Z (Zero)Ce flag passe 1 si le rsultat dune opration (arithm-tique ou logique) est 0.

    Bit 3 : PD (Power Down)Mise en veilleuse de lalimentation, effectue par linstructionSLEEP.Passe 1 lorsquon utilise linstruction CLWDT, ou la mise soustension.

  • 7/31/2019 Pic 16f84 Fichier1

    41/142

    41

    Bit 4 : TO (Time Out)Dpassement de dlai.

    Passe 0 si le timer du Watch-Dog (chien de garde) dborde.Est mis 1 par les instructions CLWDT et SLEEP, ainsi qu lamise sous tension.

    Bit 5 : RP 0 (Register Page zero)Sert slectionner lune des deux pages de registres (Page 0ou Page 1).

    0 = slectionne la page mmoire 0 (adresses de 00 7F)

    1 = slectionne la page mmoire 1 (adresses de 80 FF).

    Exemples de programmation :

    1) BCF STATUS, RP 0 (Bit Clear File STATUS Register Page 0).Met zro le bit RP 0 du registre

    dtat. Autrement dit : slectionne

    le banc mmoire 0 (adresses 00 7F).

    2) BSF STATUS,RP 0 (Bit Set File STATUS Register Page 0).Met 1 le bit RP 0 du registredtat. Autrement dit : slectionnele banc mmoire 1 (adresses de 80 FF).

  • 7/31/2019 Pic 16f84 Fichier1

    42/142

    42

    TMR 0 (TiMeR zero)

    Est le registre de contrle de lhorloge interne (timer) dumicrocontrleur.Ce timer peut soit fonctionner seul, soit tre prcd par un pr diviseur

    programmable 8 bits dont la programmation se fait par lintermdiaire duregistre OPTION.

    Ce registre peut tre lu et modifi tout moment, soit pour connatre sa position courante, soit pour le dclencher partir dune valeur dtermine.Une quelconque opration dcriture dans ce registre met automatiquement zro le comptage en cours dans le pr diviseur.Se rappeler que le timer compte sur 8 bits, et quune fois que le comptageest arriv FF, celui-ci revient 00 (ce qui provoque le passage 1 du bit 2du registre INTCON appel T 0IF).

    En programmation on peut crire :

    1) pour le lire :MOVF TMR 0 ,W(porte la valeur de TMR 0 dans W)

    2) pour lui donner une valeur de dpart :MOVLW valeur MOVWF TMR 0

    3) pour le mettre zro :CLRF TMR 0

  • 7/31/2019 Pic 16f84 Fichier1

    43/142

    43

    TRIS A - TRIS B

    Ce sont les registres qui dfinissent le sens de chacune des lignesdes ports A et B.

    Toute ligne mise 1 est programme comme entre, tandis que toute lignemise zro est programme comme sortie.

    Il ny a aucune instruction permettant dcrire directement dansces registres : on y accde en transitant par le registre de travail W. En

    programmation, on commence donc par charger loctet de configurationdans le registre W, puis on copie celui-ci dans TRIS A ou TRIS B.

    Exemple :

    MOVLW 00000001 (en binaire, sinon 01 en hexa)MOVWF TRISA

    Le bit 0 du port A est dfini comme entre , tandis que les sept autres lignessont dfinies comme sorties .

  • 7/31/2019 Pic 16f84 Fichier1

    44/142

    44

    La PROGRAMMATION

    Diffrentes faons de programmer

    Il existe plus dun chemin possible pour programmer les PIC.

    Nous en examinerons deux :

    1) la programmation en langage ASSEMBLEUR

    2) la programmation en langage BASIC .

  • 7/31/2019 Pic 16f84 Fichier1

    45/142

    45

    Avantages et inconvnients de la programmation enlangage ASSEMBLEUR

    Avantages :

    La programmation en langage ASSEMBLEUR se fait laide dun outil de programmation entirement gratuit et que lon peut diffuser librement.Cet outil (qui est un magnifique environnement de programmation complet)sappelle MPLAB .Il est disponible en tlchargement gratuit sur le site de Microchip.

    Inconvnients :Pour programmer en langage ASSEMBLEUR, il faut non seulementconnatre le fonctionnement de chaque instruction, mais aussi larchitectureinterne du microcontrleur, la structure de sa mmoire, les adresses desregistres spciaux, le fonctionnement de chacune de ses ressources internes,etc..La programmation en langage ASSEMBLEUR sappuie sur des

    organigrammes plus travaills, et requiert plus de rigueur et de minutie.Le programmeur doit plus faire attention aux impratifs machine qu lafinalit de son programme.Distrait par le impratifs machine, le programmeur commet souvent deserreurs.Ces erreurs sont souvent difficiles dceler et corriger.

  • 7/31/2019 Pic 16f84 Fichier1

    46/142

    46

    Avantages et inconvnients de la programmation enlangage BASIC

    Avantages :

    La programmation en BASIC se fait laide dun langage facile et directqui (bien qutant de langlais) comprend des mots puissants, si bien quun programme crit en BASIC comporte peu de mots.Les erreurs de programmation sont plus rares, et se dclent facilement.Lcriture des programmes prend peu de temps.

    Inconvnients :La programmation en BASIC ncessite un COMPILATEUR expressment conu pour la programmation des PIC.Il sagit dun produit commercial, fruit dun travail dquipe, et donc

    payant.Les programmes en langage BASIC, bien que trs courts pour le

    programmeur qui les crit, demandent plus de place EEPROM car, vus ct

    PIC, ils demandent plus dinstructions lmentaires. A tel point que parfoisun microcontrleur pouvant contenir laise un programme crit enlangage assembleur, savre possder une mmoire insuffisante sil tait

    programm en langage BASIC, pour faire la mme chose.

  • 7/31/2019 Pic 16f84 Fichier1

    47/142

    47

    Les outils ncessaires pour programmer enlangage ASSEMBLEUR

    Pour programmer en langage ASSEMBLEUR il faut :

    1) un PC et une imprimante, pour crire les instructions permettant deconfectionner le fichier extension . asm

    2) un ASSEMBLEUR fourni gratuitement par Microchip ( tlcharger sur INTERNET) permettant de confectionner le fichier extension .hexCet ASSEMBLEUR sappelle MPLAB .Il faut linstaller sur votre PC et apprendre vous en servir.

    3) un PROGRAMMATEUR de PIC.Relativement simple raliser.Il existe des modles pour port srie et des modles pour port parallle.Je vous conseille un modle pour port parallle.Cherchez un schma sur un magazine dElectronique, ou achetez un kit.

    4) un LOGICIEL adapt votre programmateur de PIC.Si vous achetez un kit, il vous sera fourni avec le kit.Si vous copiez le schma dans un magazine, vous devez pouvoir tlcharger le logiciel ladresse cite dans larticle.

    5) Des cbles de liaison et une petite alimentation (un bloc secteur).

  • 7/31/2019 Pic 16f84 Fichier1

    48/142

    48

    Les outils ncessaires pour programmer enlangage BASIC

    Pour programmer en langage BASIC il faut :

    1) un PC et une imprimante, pour crire les instructions permettant deconfectionner le fichier extension .bas

    2) un COMPILATEUR PicBASIC propos par Micro Engineering Labs(dont limportateur exclusif pour la France est SELECTRONIC Lille)permettant de confectionner le fichier extension .hex

    3) un PROGRAMMATEUR de PIC(mmes remarques qu propos des outils pour programmer en langage ASSEMBLEUR)

    4) un LOGICIEL adapt votre programmateur de PIC(idem)

    5) Des cbles de liaison et une petite alimentation (un bloc secteur).

  • 7/31/2019 Pic 16f84 Fichier1

    49/142

    49

    STRUCTURE dun PROGRAMME

    Lcriture dun programme implique llaboration dune vritable

    structure.Cest pourquoi je ne saurais trop vous conseiller dagir avec mthode et prcision.

    Tout programme doit comporter un titre : une sorte de dfinitionsuccincte de ce que fait le programme.

    Ltape suivante consiste mettre ce programme sur papier (listing ).

    Nous y ajouterons des commentaires, ligne par ligne, pour chaque oprationeffectue.Ceux-ci seront clairs et abondants. Ils vous aideront plus tard comprendre les dtails du programme.

    Ils doivent tre tels que si vous repreniez votre feuille plusieurs mois aprs,vous devriez facilement savoir vous relire et comprendre.Mieux encore : si vous travaillez en quipe, nimporte qui de votre quipedevrait tre en mesure de comprendre de quoi il sagit.

    Prenez lhabitude de signer et dater vos programmes.

    Dans la mesure du possible, accompagnez-les dun organigramme.

  • 7/31/2019 Pic 16f84 Fichier1

    50/142

    50

    CANEVAS dun programme

    Tout programme se construit selon un modle, une sorte desquelette ( template , en anglais).

    Voici le squelette dun programme pour PIC 16F84 :

    Processor 16F84Dclarations obligatoires Radix .....

    Include

    Equivalences ..... EQU .....

    Initialisation de la RAMet rservation dun ORG 0Ccertain nombre dadresses RES ...mmoire

    Dbut du programme ORG 00aprs Reset

    Configuration des lignesde port

    Instructions

    Sous programmes

    Fin du programme END

  • 7/31/2019 Pic 16f84 Fichier1

    51/142

    51

    PROGRAMMATIONen langage ASSEMBLEUR

    La programmation en langage ASSEMBLEUR se fait en utilisant

    les 37 instructions formant son dictionnaire.

    En langage ASSEMBLEUR le PIC 16F84 ne comprend que ces 37mots (en fait : 35 instructions communes tous les modles de PIC, plusdeux instructions spcifiques au 16F84 : OPTION et TRIS).

    Ces 37 mots forment ce que lon appelle le set dinstructions du16F84.Il convient de toutes les connatre.

    Ecrire un programme en langage ASSEMBLEUR revient donc dtailler au PIC ce quil doit faire, en le disant exclusivement au moyen deces 37 mots de son vocabulaire : les seuls mots quil est capable decomprendre.

    Examinons-les une par une.

  • 7/31/2019 Pic 16f84 Fichier1

    52/142

    52

    Les INSTRUCTIONS du 16F84

    Le microcontrleur 16F84 possde un set de seulement 37 instructionscodes (en reprsentation binaire) sur 14 bits, selon le modle :

    XX XXXX XXXX XXXX

    bit de poids fort bit de poids faible

    Codes en hexadcimal, elles prennent la forme :

    XXXX

    A remarquer qutant donn que les deux bits de poids fort (bits 12et 13) ne peuvent prendre que seulement quatre valeurs binaires (00 - 01 -10 et 11), il en rsulte que la premire valeur de toute instruction code enhexadcimal ne peut dpasser 3.Autrement dit : eu gard la premire valeur de chaque instruction codeen hexadcimal, les seuls formats possibles sont :

    0XXX...1XXX...2XXX...3XXX...

    avec une tendue comprise entre 0000 et 3FFF.

    La plupart des instructions oprent en utilisant le registre de travailW ( Working register ) comparable laccumulateur des anciensmicroprocesseurs, et soit un registre soit une valeur immdiate code sur 8

    bits appele literal .Le rsultat des oprations peut tre envoy soit dans le registre W(accumulateur) soit dans le registre sollicit (soit dans les deux, aveccertaines instructions).Un petit nombre dinstructions oprent en utilisant uniquement un registre(cest le cas des instructions BCF, BSF, BTFSC, BTFSS, CLRW, CLRWTet SLEEP).

    Les 37 instructions du 16F84 peuvent tre classes comme onveut.

  • 7/31/2019 Pic 16f84 Fichier1

    53/142

    53

    Je vous propose quatre types de classement:

    a) classement par ordre alphabtique b) classement par genrec) classement par typed) classement par ordre croissant dencodage.

    Toutes les instructions sont codes en un seul mot de 14 bits (0 13).

    Elles sont toutes excutes en un seul cycle dhorloge , sauf CALL,GOTO, RETFIE, RETLW et RETURN qui demandent 2 cycles, et BTFSC,BTFSS, DECFSZ, INCFSZ qui selon le cas peuvent demander soit uncycle, soit deux cycles.

    NB : Parmi les 37 instructions constituant le set du 16F84, deux luisont spcifiques (je lai dj dit) et ont un caractre spcial : OPTION etTRIS.Ces deux instructions ne figurent pas dans les autres modles de PIC. Aussi

    Microchip recommande de ne pas les utiliser, dans le but de laisser compatibles les programmes (crits pour ce C) avec ceux crits pour dautres modles de PIC.Il suffit de le savoir.Mais ceci nest pas un obstacle pour nous, du fait que notre intrt estexclusivement tourn vers le 16F84.

  • 7/31/2019 Pic 16f84 Fichier1

    54/142

    54

    a) Classement par lettre alphabtique

    ADDLW ADD Literal to WADDWF ADD W to FileANDLW AND Literal and WANDWF AND W and File

    BCF Bit Clear FileBSF Bit Set FileBTFSC Bit Test File, Skip if Clear BTFSS Bit Test File, Skip if Set

    CALL CALL subroutineCLRF CLeaR FileCLRW CLeaR WCLRWDT CLeaR Wach Dog Timer COMF COMplement File

    DECF DECrement FileDECFSZ DECrement File, Skip if Zero

    GOTO

    INCF INCrement FileINCFSZ INCrement File, Skip if ZeroIORLW Inclusive OR Literal with WIORWF Inclusive OR W with File

    MOVF MOVe FileMOVLW MOVe Literal to WMOVWF MOVe W to File

    NOP No OPeration

    OPTION load OPTION register

    RETFIE RETurn From IntErruptRETLW RETurn from subroutine with Literal in WRETURN RETURN from subroutineRLF Rotate Left File

  • 7/31/2019 Pic 16f84 Fichier1

    55/142

    55

    RRF Rotate Right File

    SLEEPSUBLW SUBtract Literal with WSUBWF SUBtract W from FileSWAPF SWAP File

    TRIS TRIState port

    XORLW eXclusive OR Literal and WXORWF eXclusive OR W and File

  • 7/31/2019 Pic 16f84 Fichier1

    56/142

    56

    b) Classement par genre

    - instructions arithmtiques :ADDLWADDWFSUBLW

    SUBWF

    - instructions dincrmentation :DECFDECFSZINCFINCFSZ

    - instructions deffacement :CLRFCLRWCLRWDT

    - instructions de mouvement :MOVFMOVLWMOVWF

    - instructions de rotation :RLFRRF

    - instructions logiques :ANDLWANDWFCOMFIORLWIORWFXORLWXORWF

  • 7/31/2019 Pic 16f84 Fichier1

    57/142

    57

    - instructions de saut et branchement :CALLGOTORETFIERETLWRETURN

    - instructions agissant sur les bits :BCFBSFBTFSCBTFSS

    - instructions diverses : NOPOPTIONTRIS

    SLEEPSWAPF

  • 7/31/2019 Pic 16f84 Fichier1

    58/142

    58

    c) Classement par type

    - instructions travaillant seules :CLRWCLRWDT

    NOP

    OPTIONRETFIERETURNSLEEP

    - instructions travaillant avec une constante ou une tiquette (k ) :ADDLW k ANDLW k CALL k GOTO k IORLW k MOVLW k RETLW k SUBLW k XORLW k

    - instructions travaillant avec un registre (f ) :CLRF f MOVWF f TRIS f

    - instructions travaillant sur un bit (b) doctet (f ) :BCF f,bBSF f,bBTFSC f,bBTFSS f,b

    Il est vident que b ne peut prendre quunevaleur comprise entre 0 et 7, dsignant la po-sition du bit dans loctet :

    7 6 5 4 3 2 1 0

  • 7/31/2019 Pic 16f84 Fichier1

    59/142

    59

    - instructions travaillant avec un registre (f ) mais proposant unchoix (d) dans la destination du rsultat :

    - d = 0 : le rsultat est plac dans W- d = 1 : le rsultat est plac dans le registre f

    ADDWF f,d

    ANDWF f,dCOMF f,dDECF f,dDECFSZ f,dINCF f,dINCFSZ f,dIORWF f,dMOVF f,dRLF f,dRRF f,dSUBWF f,dSWAPF f,dXORWF f,d

  • 7/31/2019 Pic 16f84 Fichier1

    60/142

    60

    d) Classement par ordre croissantdencodage

    0 1 2 30000 NOP 1xxx BCF 2xxx CALL 30xx MOVLW0008 RETURN 1xxx BSF 2xxx GOTO 34xx RETLW0009 RETFIE 1xxx BTFSC 38xx IORLW0062 OPTION 1xxx BTFSS 39xx ANDLW0063 SLEEP 3Axx XORLW0064 CLWDT 3Cxx SUBLW006x TRIS 3Exx ADDLW00xx MOVWF

    0100 CLRW01xx CLRF02xx SUBWF03xx DECF04xx IORWF05xx ANDWF06xx XORWF07xx ADDWF08xx MOVF09xx COMF0Axx INCF0Bxx DECFSZ0Cxx RRF0Dxx RLF0Exx SWAPF0Fxx INCFSZ

  • 7/31/2019 Pic 16f84 Fichier1

    61/142

    61

    ADDLWADD Literal to W

    - Additionne de manire immdiate le literal au contenu du registreW, et place le rsultat dans W.

    - Le literal est un mot de 8 bits (de 00 FF).

    - Cette instruction affecte 3 bits du registre dtat :le flag C : Carryle flag DC : Digit Carryle flag Z : Zero

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 011 111x kkkk kkkk

    3 E Valeur de loctet quelon veut ajouter W(valeur pouvant aller

    de 00 FF).

    - Exemple de programmation :

    ADDLW 06

    En supposant que W contienne 04 avant linstruction, aprs linstruction ilcontient 0A (en hexa : 06 + 04 = 0A).

  • 7/31/2019 Pic 16f84 Fichier1

    62/142

    62

    ADDWFADD W to File

    - Additionne le contenu du registre W loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F) ; avec deuxvariantes : le rsultat peut tre plac soit dans le registre W, soit dans lammoire RAM la place de loctet utilis pour faire laddition (la nouvellevaleur prend la place de lancienne).

    - Cette instruction affecte 3 bits du registre dtat :le flag C : Carryle flag DC : Digit Carryle flag Z : Zero

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0111 dfff ffff

    0 7 (W) 0

    ou(registre) 1

    De 000 1100 100 1111

    Adresse de la RAM(entre 0C et 4F)

    dont le contenu est

    additionner W.

    - Exemples de programmation :

    1) MOVF VentesDuMois,WADDWF,0

  • 7/31/2019 Pic 16f84 Fichier1

    63/142

    63

    2) MOVF VentesDuMois,WADDWF,1

    Lexemple 1 met dans W ce qui se trouve ladresse VentesDu Mois, puisadditionne VentesDuMois au contenu de W, et range le rsultat dans W.

    Lexemple 2 met dans W ce qui se trouve ladresse VentesDu Mois, puisadditionne VentesDuMois au contenu de W, et range le rsultat ladresseVentesDuMois , en renplaant lancienne valeur par le total quon vient detrouver.

  • 7/31/2019 Pic 16f84 Fichier1

    64/142

    64

    ANDLWAND Literal and W

    - Effectue une opration logique ET (AND) entre la valeur immdiate duliteral et loctet se trouvant dans le registre W.

    - Le literal est un mot de 8 bits (de 00 FF)

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 011 1001 kkkk kkkk

    3 9 Valeur de loctet avec

    laquelle on veuteffectuer le ET logique(valeur pouvant aller

    de 00 FF).

    - Table de vrit dune porte ET :

    A B Q0 0 00 1 01 0 01 1 1

  • 7/31/2019 Pic 16f84 Fichier1

    65/142

    65

    - Exemple de programmation :

    ANDLW A7

    En supposant que W contienne 5C (01011100) avant linstruction, aprs

    linstruction W contient 04.

    A7 = 101001115C = 01011100

    AND = 00000100 (04 en hexa)

    Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?

    Elle sert lorsque dans un octet on a besoin de rcuprer un bit en particulier (ou certains bits en particulier).

    Pour cela il suffit de prparer un masque , cest dire on octet compos de 0(aux emplacements o se trouvent les bits liminer) et de 1 (auxemplacements o se trouvent les bits rcuprer).

    Exemple : on souhaite rcuprer uniquement le bit 5 de loctet 01111010.

    On prpare alors le masque 00100000 et on fait un ET logique entre loctetet le masque . Comme ceci :

    01111010 (octet)00100000 ( masque )

    Ce qui donne : 00100000 (rsultat)

    Le rsultat de lopration permet donc bien de rcuprer

    uniquement le bit 5 de loctet : ici cest un 1 (00 100000).

    Une fois rcupr, on peut utiliser ce bit comme on veut.

  • 7/31/2019 Pic 16f84 Fichier1

    66/142

    66

    ANDWFAND W and File

    - Effectue une opration logique ET (AND) entre loctet se trouvant dans leregistre W et loctet situ (en mmoire RAM) ladresse indique de suite(adresse comprise entre 0C et 4F) ; avec deux variantes : le rsultat peuttre plac soit dans le registre W, soit dans la mmoire RAM la place deloctet utilis pour effectuer le ET logique (la nouvelle valeur prend la placede lancienne).

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 0

    00 0101 dfff ffff

    0 5 (W) 0

    ou(registre) 1

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctetavec lequel on veut

    faire le ET logique.

    - Exemples de programmation :

    1) ANDWF,0 Adresse

    2) ANDWF,1 Adresse

  • 7/31/2019 Pic 16f84 Fichier1

    67/142

    67

    Lexemple 1 effectue un ET logique entre loctet se trouvant dans W etloctet se trouvant Adresse, et range le rsultat dans W.

    Lexemple 2 effectue un ET logique entre loctet se trouvant dans W etloctet se trouvant Adresse, et range le rsultat dans Adresse .

    - Table de vrit dune porte ET :

    A B Q0 0 00 1 01 0 01 1 1

    Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?

    Elle sert lorsque dans un octet on a besoin de rcuprer un bit en particulier (ou certains bits en particulier).

    Pour cela il suffit de prparer un masque , cest dire on octet compos de 0(aux emplacements o se trouvent les bits liminer) et de 1 (auxemplacements o se trouvent les bits rcuprer).

    Exemple : on souhaite rcuprer uniquement le bit 5 de loctet 01111010.

    On prpare alors le masque 00100000 et on fait un ET logique entre loctet

    et le masque . Comme ceci : 01111010 (octet)00100000 ( masque )

    Ce qui donne : 00100000 (rsultat)

    Le rsultat de lopration permet donc bien de rcuprer uniquement le bit 5 de loctet : ici cest un 1 (00 100000).

    Une fois rcupr, on peut utiliser ce bit comme on veut.

  • 7/31/2019 Pic 16f84 Fichier1

    68/142

    68

    BCFBit Clear File

    - Met zro le bit dsign de loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F).

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 001 00bb bfff ffff

    1 Positiondu bitdans

    loctet.

    De 000 1100 100 1111

    Adresse de la RAM(entre 0C et 4F)o se trouve loctetsur lequel on veut oprer.

    - Position du bit dans loctet :

    7 0

    - Exemples de programmation :

    En supposant quon veuille mettre zro (Clear) un certain bit de loctetsitu ladresse 27 de la mmoire RAM, la programmation serait :

    1 1 1

    1 1 0

    1 0 1

    1 0 0

    1 1

    1 0

    1 0

  • 7/31/2019 Pic 16f84 Fichier1

    69/142

    69

    BCF 27, 0 (pour mettre zro le bit 0)

    ou BCF 27, 1 (pour mettre zro le bit 1)

    ou BCF 27, 2 (pour mettre zro le bit 2)

    etc...

  • 7/31/2019 Pic 16f84 Fichier1

    70/142

    70

    BSFBit Set File

    - Met 1 (Set) le bit dsign de loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F).

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 001 01bb bfff ffff

    1 Positiondu bitdans

    loctet.

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    sur lequel on veut oprer.

    - Position du bit dans loctet :

    7 0

    - Exemples de programmation :

    En supposant quon veuille mettre 1 (Set) un certain bit de loctetsitu ladresse 1C de la mmoire RAM, la programmation serait :

    1 1 1

    1 1 0

    1 0 1

    1 0 0

    1 1

    1 0

    1 0

  • 7/31/2019 Pic 16f84 Fichier1

    71/142

    71

    BSF 1C, 0 (pour mettre 1 le bit 0)

    ou BSF 1C, 1 (pour mettre 1 le bit 1)

    ou BSF 1C, 2 (pour mettre 1 le bit 2)

    etc...

  • 7/31/2019 Pic 16f84 Fichier1

    72/142

    72

    BTFSCBit Test File, Skip if Clear

    - Vrifie ltat logique du bit dsign de loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F).Est-il zro ?Sil est zro, ignore linstruction suivante.

    - Selon que la rponse soit OUI ou NON , linstruction prend 1 ou 2 cyclesdhorloge.

    - Encodage de linstruction:

    13 001 10bb bfff ffff

    1 Position

    du bitdansloctet.

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    sur lequel on veut oprer.

    - Position du bit dans loctet :

    7 0

    1 1 1

    1 1 0

    1 0 1

    1 0 0

    1 1

    1 0

    1 0

  • 7/31/2019 Pic 16f84 Fichier1

    73/142

    73

    - Organigramme du traitement :

    - Exemple de programmation :

    En supposant que loctet dont on veut tester un bit soit situ ladresse 1A,la programmation serait la suivante :

    BTFSC 1A, 0 (pour tester le bit 0)

    ou BTFSC 1A, 1 (pour tester le bit 1)

    ou BTFSC 1A, 2 (pour tester le bit 2)

    etc...

  • 7/31/2019 Pic 16f84 Fichier1

    74/142

    74

    BTFSSBit Test File, Skip if Set

    - Vrifie ltat logique du bit dsign de loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F).Est-il 1 ?Sil est 1, ignore linstruction suivante.

    - Selon que la rponse soit OUI ou NON , linstruction prend 1 ou 2 cyclesdhorloge.

    - Encodage de linstruction:

    13 001 11bb bfff ffff

    1 Position

    du bitdansloctet.

    De 000 1100 100 1111

    Adresse de la RAM(entre 0C et 4F)

    o se trouve loctetsur lequel on veut oprer.

    - Position du bit dans loctet :

    7 0

    1 1 1

    1 1 0

    1 0 1

    1 0 0

    1 1

    1 0

    1 0

  • 7/31/2019 Pic 16f84 Fichier1

    75/142

    75

    - Organigramme du traitement :

    - Exemple de programmation :

    En supposant que loctet dont on veut tester un bit soit situ ladresse 1C,la programmation serait la suivante :

    BTFSS 1C, 0 (pour tester le bit 0)

    ou BTFSS 1C, 1 (pour tester le bit 1)

    ou BTFSS 1C, 2 (pour tester le bit 2)

    etc...

  • 7/31/2019 Pic 16f84 Fichier1

    76/142

    76

    CALLCALL subroutine

    - Appel sous-programme.

    - Le C sauvegarde ladresse de retour dans la pile (stack), puis charge dansle PC (Program Counter) ladresse laquelle il est invit se rendre. Il peutsagir aussi bien dune adresse que dune label ; et cest l que dmarre lesous-programme.

    - Tout sous-programme appel par linstruction CALL doit obligatoirementse terminer soit par linstruction RETURN, soit par linstructionRETLW qui renvoient au programme principal.

    Ne pas confondre linstruction CALL avec linstruction GOTO.Linstruction CALL fait toujours revenir le programme principal lendroito il avait t abandonn ; tandis que linstruction GOTO provoquelabandon total de la squence et peut conduire soit une toute autre action,soit larrt total du programme.

    - La pile (stack) est une zone de mmoire ne pouvant contenir que 8 motsde 13 bits.Ceci limite 8 niveaux les possibilits dimbrication. Sil y en avait unneuvime, la premire adresse de retour serait perdue...

    - Cette instruction prend 2 cycles dhorloge.

    - Encodage de linstruction :

    13 010 0kkk kkkk kkkk

    2 Adresse de lEEPROM

    de programme laquelleest log le sous-programme

    (adresse comprise entre 000 et 3FF).

  • 7/31/2019 Pic 16f84 Fichier1

    77/142

    77

    - Organigramme du traitement :

    Programme principal..................................

    ....................................................................CALL sous-programme---------------

    -->.................................. .................................. .................................. sous-programme

  • 7/31/2019 Pic 16f84 Fichier1

    78/142

    78

    CLRFCLeaR File

    - Efface (Clear) ce qui se trouve (en mmoire RAM) ladresseindique de suite (adresse comprise entre 00 et 4F).

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 000 0001 1fff ffff

    0 1 Adresse de la RAM

    (entre 00 et 4F)o se trouve loctetquon veut effacer.

    - Exemples de programmation :

    1) CLRF INTCON (pour dsactiver les interruptions)

    2) CLRF PORTB (pour mettre zro tous les bits du port B)

    3) CLRF 1E (pour effacer ce qui se trouve ladresse 1E)

  • 7/31/2019 Pic 16f84 Fichier1

    79/142

    79

    CLRWCLeaR W

    - Efface (Clear) le registre W.

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 000 0001 xxxx xxxx

    0 1 0 0

    - Exemple de programmation :

    CLRW (efface le registre W).

    En supposant que W contienne F8 avant linstruction, aprs linstructionil contient 00.

  • 7/31/2019 Pic 16f84 Fichier1

    80/142

    80

    CLRWDTCLeaR Wach Dog Timer

    - Met zro le compteur du chien de garde (ainsi que celui du pr diviseur,si celui-ci est activ).

    - Cette instruction affecte deux bits du registre dtat :- le flag TO (Time Out) passe 1- le flag PD (Power Down) passe 1

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 000 0000 0110 0100

    0 0 6 4

    - Exemple de programmation :

    CLWDT (efface le compteur du chien de garde).

    Peu importe o en tait le compteur du chien de garde, cette instructionle fait revenir zro.

  • 7/31/2019 Pic 16f84 Fichier1

    81/142

    81

    COMFCOMplement File

    - Effectue un complment bit bit sur loctet situ (en mmoire RAM) ladresse indique de suite (adresse comprise entre 0C et 4F) ; avec deuxvariantes : le rsultat peut tre plac soit dans le registre W, soit dans lammoire RAM la place de loctet utilis pour faire le complment (lanouvelle valeur prend la place de lancienne).

    Faire le complment bit bit dun octet quivaut changer ses zros en 1,et inversement.Exemple : le complment de 00111100 est 11000011.

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 1001 dfff ffff

    0 9 (W) 0

    ou(registre) 1

    De 000 1100

    100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    sur lequel on veut oprer.

    - Exemples de programmation :

    1) COMF 2B, 0 (effectue le complment bit bit deloctet situ ladresse 2B et range lersultat dans W)

    En supposant que 2B contienne 11100000 avant linstruction, aprslinstruction cette valeur est transforme en 00011111.

  • 7/31/2019 Pic 16f84 Fichier1

    82/142

    82

    2) COMF 2B, 1 (mme chose, mais le rsultat est rang la place de loctet utilis pour faire lecomplment).

  • 7/31/2019 Pic 16f84 Fichier1

    83/142

    83

    DECFDECrement File

    - Dcrmente la valeur de loctet situ (en mmoire RAM) ladresseindique de suite (adresse comprise entre 0C et 4F) ; avec deux variantes :le rsultat peut tre plac soit dans le registre W, soit dans la mmoireRAM la place de loctet quon a dcrment (la nouvelle valeur prend la

    place de lancienne).

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0011 dfff ffff

    0 3 (W) 0ou

    (registre) 1

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    quon veut dcrmenter.

    - Exemples de programmation :

    1) DECF COMPTEUR, 0 (dcrmente loctet se trouvant ladresse COMPTEUR, etrange le rsultat dans W)

    2) DECF COMPTEUR, 1 (mme chose, mais cette foisle rsultat est rang ladresseCOMPTEUR).

  • 7/31/2019 Pic 16f84 Fichier1

    84/142

    84

    DECFSZDECrement File, Skip if Zero

    - Dcrmente la valeur de loctet situ (en mmoire RAM) ladresseindique de suite (adresse comprise entre 0C et 4F), et effectue un test :loctet a-t-il atteint zro ?Si OUI, ignore linstruction suivante.Avec deux variantes : le rsultat peut tre plac soit dans le registre W, soitdans la mmoire RAM la place de loctet dcrment (la nouvelle valeur

    prend la place de lancienne).

    - Selon qu la suite de la dcrmentation loctet ait atteint ou pas la valeur zro, linstruction prend 1 ou 2 cycles dhorloge.

    - Encodage de linstruction:

    13 000 1011 dfff ffff

    0 B (W) 0ou

    (registre) 1

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    quon veut dcrmenter.

    - Cette instruction est gnralement suivie par linstruction CALL.

    - Exemples de programmation :

    1) DECFSZ 2F, 0 (dcrmente loctet se trouvant ladresse 2F, et range le rsultat dans W.Si le rsultat est zro, ignore linstructionsuivante).

  • 7/31/2019 Pic 16f84 Fichier1

    85/142

    85

    2) DECFSZ 2F, 1 (mme chose, mais cette fois lersultat est rang ladresse 2F.La nouvelle valeur prend la placede lancienne).

  • 7/31/2019 Pic 16f84 Fichier1

    86/142

    86

    GOTO

    - Branchement inconditionnel.Va de faon inconditionnelle ladresse indique de suite (adresse dedmarrage du sous-programme). Il peut sagir aussi bien dune adresse quedune label.Cette instruction interrompt lexcution squentielle des instructions etoblige poursuivre le programme dune adresse compltement ailleurs.A la diffrence de linstruction CALL (qui fait toujours revenir le

    programme principal lendroit o il avait t abandonn) , linstructionGOTO provoque labandon complet de la squence et peut conduire soit une toute autre action, soit larrt total du programme.

    - Cette instruction prend 2 cycles dhorloge.

    - Encodage de linstruction :

    13 010 1kkk kkkk kkkk

    2 Adresse de lEEPROM

    de programme, laquellele programme doit se rendre

    pour poursuivre(adresse comprise entre 005 et 3FF).

    - Exemple de programmation

    GOTO ALLUMAGE

    Aprs cette instruction, le PC (Program Counter) est charg avec lavaleur de ladresse laquelle commence le programme ALLUMAGE.

  • 7/31/2019 Pic 16f84 Fichier1

    87/142

    87

    INCFINCrement File

    - Incrmente la valeur de loctet situ (en mmoire RAM) ladresseindique de suite (adresse comprise entre 0C et 4F) ; avec deux variantes :le rsultat peut tre plac soit dans le registre W, soit dans la mmoireRAM la place de loctet quon a incrment (la nouvelle valeur prend la

    place de lancienne).

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 1010 dfff ffff

    0 A (W) 0ou

    (registre) 1

    De 000 1100 100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    quon veut incrmenter.

    - Exemples de programmation :

    1) INCF NOMBRE, 0 (incrmente loctet se trouvant ladresse NOMBRE,et range le rsultat dans W)

    2) INCF NOMBRE, 1 (mme chose, mais cette foisle rsultat est rang ladresse

    NOMBRE. La nouvelle valeur prend la place de lancienne).

  • 7/31/2019 Pic 16f84 Fichier1

    88/142

    88

    INCFSZINCcrement File, Skip if Zero

    - Incrmente la valeur de loctet situ (en mmoire RAM) ladresseindique de suite (adresse comprise entre 0C et 4F), et effectue un test :loctet a-t-il atteint zro ?Si OUI, ignore linstruction suivante.Avec deux variantes : le rsultat peut tre plac soit dans le registre W, soitdans la mmoire RAM la place de loctet incrment (la nouvelle valeur

    prend la place de lancienne).

    - Selon qu la suite de lincrmentation loctet ait atteint ou pas la valeur zro, linstruction prend 1 cycle ou deux dhorloge.

    - Encodage de linstruction:

    13 000 1111 dfff ffff

    0 F (W) 0

    ou(registre) 1

    De 000 1100

    100 1111Adresse de la RAM

    (entre 0C et 4F)o se trouve loctet

    quon veut incrmenter.

    - Cette instruction est gnralement suivie par CALL.

    - Exemples de programmation :

    1) INCFSZ DATE, 0 (incrmente loctet se trouvant ladresse DATE, et range le rsul-tat dans W. Si le rsultat est zro,ignore linstruction suivante).

  • 7/31/2019 Pic 16f84 Fichier1

    89/142

    89

    2) INCFSZ DATE, 1 (mme chose, mais cette foisle rsultat est rang ladresseDATE. La nouvelle valeur prendla place de lancienne).

  • 7/31/2019 Pic 16f84 Fichier1

    90/142

    90

    IORLWInclusive OR Literal with W

    - Effectue une opration logique OU inclusif (Inclusive OR) entre la valeur immdiate du literal et loctet se trouvant dans le registre W.Le rsultat de lopration reste dans le registre W.

    - Le literal est un mot de 8 bits (de 00 FF)

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 011 1000 kkkk kkkk

    3 8 Valeur de loctet avec

    lequel on veuteffectuer le OU inclusif

    (valeur pouvant aller de 00 FF).

    - Table de vrit dune porte OU inclusif :

    A B Q0 0 00 1 11 0 11 1 1

  • 7/31/2019 Pic 16f84 Fichier1

    91/142

    91

    - Exemple de programmation :

    IORLW B5 (10110101)

    En supposant que W contienne 49 (01001001) avant linstruction, aprslinstruction il contient FD.

    B5 = 1011010149 = 01001001

    OR = 11111101 (FD en hexa)

    Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?

    Elle sert lorsque dans un octet on a besoin de forcer 1 un bit en particulier (ou certains bits en particulier).

    Pour cela il suffit de prparer un masque , cest dire on octet compos de 0(aux emplacements o se trouvent les bits ignorer) et de 1 (aux

    emplacements o se trouvent les bits quon veut forcer 1 ).

    Exemple : on souhaite forcer 1 les bits 7 et 6 de loctet 01111010.

    On prpare alors le masque 11000000 et on fait un OU logique entre loctetet le masque . Comme ceci :

    01111010 (octet)11000000 ( masque )

    Ce qui donne : 11111010 (rsultat)

    Le rsultat de lopration permet donc bien de forcer 1 les bits 7et 6 de loctet. Il se trouve quici le bit 6 tait dj 1. Mais le programmene le savait pas. Linstruction IORLW permet de prciser les choses.

    Une fois forcs 1, on peut utiliser ces bits (ou loctet) comme on veut.

  • 7/31/2019 Pic 16f84 Fichier1

    92/142

    92

    IORWFInclusive OR With File

    - Effectue une opration logique OU inclusif (Inclusive OR) entre loctet setrouvant dans le registre W et loctet situ (en mmoire RAM) ladressesitue de suite (adresse comprise entre 0C et 4F) ; avec deux variantes : lersultat peut tre plac soit dans le registre W, soit dans la mmoire RAM la place de loctet utilis pour faire le OU inclusif (la nouvelle valeur prendla place de lancienne).

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0100 dfff ffff

    0 4 (W) 0ou

    (registre) 1

    De 000 1100 100 1111

    Adresse de la RAM (entre 0C et 4F) o se trouveloctet avec lequel on veut faire le OU inclusif.

    - Table de vrit dune porte OU inclusif :

    A B Q0 0 00 1 11 0 11 1 1

  • 7/31/2019 Pic 16f84 Fichier1

    93/142

    93

    - Exemples de programmation :

    1) IORWF 29, 0 (effectue le OU inclusif entreloctet se trouvant dans W etcelui situ ladresse 29, et range

    le rsultat dans W).En supposant que le contenu de ladresse 29 soit C7 (11000111) etque W contienne 69 (01101001), aprs linstruction on obtient EF(11101111).

    2) IORWF 29, 1 (mme chose, mais le rsultat estrang ladresse 29, la place deloctet utilis pour faire le OUinclusif).

    Pourquoi cette instruction dans le set du 16F84 ? A quoi sert-elle ?

    Elle sert lorsque dans un octet on a besoin de forcer 1 un bit en particulier (ou certains bits en particulier).

    Pour cela il suffit de prparer un masque , cest dire on octet compos de 0(aux emplacements o se trouvent les bits ignorer) et de 1 (auxemplacements o se trouvent les bits quon veut forcer 1 ).

    Exemple : on souhaite forcer 1 les bits 7 et 6 de loctet 01111010.

    On prpare alors le masque 11000000 et on fait un OU logique entre loctetet le masque . Comme ceci :

    01111010 (octet)11000000 ( masque )

    Ce qui donne : 11111010 (rsultat)

    Le rsultat de lopration permet donc bien de forcer 1 les bits 7et 6 de loctet. Il se trouve quici le bit 6 tait dj 1. Mais le programmene le savait pas. Linstruction IORLW permet de prciser les choses.

    Une fois forcs 1, on peut utiliser ces bits (ou loctet) comme on veut.

  • 7/31/2019 Pic 16f84 Fichier1

    94/142

    94

    MOVFMOVe File

    - Cette instruction peut faire deux choses :

    1) soit porter dans W le contenu situ (en mmoireRAM) ladresse indique de suite (adresse com-

    prise entre 0C et 4F), avec loption de program-mation ,0

    2) soit copier loctet sur lui-mme au mme emplacementde la RAM, avec loption de programmation ,1

    Bien que a paraisse comique de copier le contenu dun registre sur lui-mme, en fait - tant donn que cette opration modifie le bit Z du registredtat - elle est utile quand on a besoin de faire un test zro sur loctet, entoute scurit.

    - Cette instruction affecte le bit Z du registre dtat

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 1000 dfff ffff

    0 8 (W) 0

    ou(registre) 1

    De 000 1100 100 1111

    Adresse de la RAM (entre 0C et 4F)o se trouve loctet quon veut traiter.

  • 7/31/2019 Pic 16f84 Fichier1

    95/142

    95

    - Exemples de programmation :

    1) MOVF PORTB, 0 (porte dans W ltates lignes du port B).

    1) MOVF 18, 1 (copie le contenu de ladresse 18sur lui-mme).

  • 7/31/2019 Pic 16f84 Fichier1

    96/142

    96

    MOVLWMOVe Literal to W

    - Charge de manire immdiate le literal dans le registre W

    - Le literal est un mot de 8 bits (de 00 FF)

    - 1 cycle dhorloge

    - Encodage de linstruction :

    13 011 00xx kkkk kkkk 3 0

    Valeur du literal

    - Exemple de programmation :

    MOVLW F5 (met F5 , cest -dire11110101, dans W).

  • 7/31/2019 Pic 16f84 Fichier1

    97/142

    97

    MOVWFMOVe W to File

    - Prend le contenu du registre W et le met (dans la mmoire RAM) ladresse indique de suite (adresse de 0C 4F)

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0000 1fff ffff 0 0

    Adresse de la RAM (entre 0C et 4F) laquelleon veut mettre la valeur du registre W.

    - Exemple de programmation :

    MOVWF 0D (crit le contenu de W ladresse RAM 0D).

  • 7/31/2019 Pic 16f84 Fichier1

    98/142

    98

    NOP No OPeration

    - Linstruction la plus paresseuse ! Ne fait rien.Elle sert juste occuper le processeur pour laisser passer un peu de temps(1 cycle dhorloge).Sutilise essentiellement pour crer des temporisations.

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0000 0xx0 00000 0 0 0

    - Exemple de programme:

    NOP

  • 7/31/2019 Pic 16f84 Fichier1

    99/142

    99

    OPTIONload OPTION register

    - NB : cette instruction est spcifique au 16F84 .

    Microchip recommande de ne pas lutiliser, dans le but de laisser les programmes (crits pour ce type de microcontrleur) compatibles avecceux crits pour dautres modles de PIC.

    Il suffit de le savoir. Mais ceci nest pas un obstacle pour nous, du fait que notre intrt est exclusivement tourn vers le 16F84.

    - Charge le registre OPTION, cest -dire le registre qui sert configurer leTMR 0 ( lhorloge interne du microcontrleur) ainsi que le prdiviseur.

    - Sagissant dun registre lecture/criture simultane, on ne peut pas ycrire directement, mais il faut obligatoirement transiter par le registre W.

    En programmation, on commence par crire loctet de configuration dansW. Puis linstruction OPTION - en mme temps quelle adresse ce registre-y copie automatiquement loctet de configuration.

  • 7/31/2019 Pic 16f84 Fichier1

    100/142

    100

    RETFIERETurn From IntErrupt

    - Retour au programme principal aprs excution dun sous-programmedinterruption.Charge le PC (Program Counter : compteur dinstructions) avec la valeur qui se trouve au sommet de la pile (stack) ; ce qui provoque le retour au

    programme principal.

    - Lorsquune interruption est demande, le microcontrleur, avant de sauter ladresse 004 de lEEPROM mmoire de programme, sauve la valeur duProgram Counter dans la pile.Cette valeur - comme dans une pile dassiettes - se place tout en haut de la

    pile (dans laquelle il y a seulement 8 places).A la fin du sous-programme de rponse linterruption, le C rencontrelinstruction RETFIE par laquelle il rcupre la valeur se trouvant ausommet de la pile (correspondant la dernire valeur entre) et la

    positionne dans le Program Counter, faisant ainsi revenir le programme son flux normal (pile de type LIFO : Last In, First Out).

    - Aprs cette instruction, le pointeur de pile (stack pointer) se positionnetout en haut de la pile, et le bit du GIE (General Interrupt Enable) duregistre INTCON (bit7) bascule 1.

    - Cette instruction prend 2 cycles dhorloge

    - Encodage de linstruction:

    13 000 0000 0000 10010 0 0 9

    - Exemple de programme :

    RETFIE

  • 7/31/2019 Pic 16f84 Fichier1

    101/142

    101

    RETLWRETurn from subroutine with Literal in W

    - Instruction jusqu un certain point similaire RETURN, en ce sensquelle ferme un sous-programme et provoque le retour au programme

    principal lendroit o il avait t abandonn ; mais avec une particulariten plus : charge dans le registre W la valeur du literal.

    - Le literal est un mot de 8 bits (de 00 FF)

    - Cette instruction prend 2 cycles dhorloge

    - Encodage de linstruction:

    13 011 01xx kkkk kkkk 3 4

    Valeur de loctet avec laquelle on veutcharger W en rentrant du sous-programme

    (valeur pouvant aller de 00 FF).

  • 7/31/2019 Pic 16f84 Fichier1

    102/142

    102

    RETURNRETURN from subroutine

    - Retour dun sous-programme.Le PC (Program Counter) est charg avec ladresse se trouvant au sommetde la pile.

    - Cest linstruction qui ferme un sous-programme et provoque le retour au programme principal lendroit auquel il avait t abandonn.

    - Cette instruction prend 2 cycles dhorloge

    - Encodage de linstruction:

    13 000 0000 0000 10000 0 0 8

  • 7/31/2019 Pic 16f84 Fichier1

    103/142

    103

    RLFRotate Left File

    - Rotation gauche.

    C 7 6 5 4 3 2 1 0

    - Effectue le dplacement dune position vers la gauche des bits de loctetsitu (en mmoire RAM) ladresse indique de suite (adresse compriseentre 0C et 4F) en utilisant le bit de CARRY du registre dtat : le contenu

    du bit de CARRY devient le nouveau bit 0 de loctet ayant effectu larotation gauche, tandis que lancien bit 7 entre dans CARRY ; avec deuxvariantes : le rsultat de la rotation peut tre rang soit dans le registre W,soit dans la mmoire RAM la place de loctet utilis pour effectuer larotation (la nouvelle valeur prend la place de lancienne).

    - NB : Avant dutiliser cette instruction il convient de pralablement effacer le bit de CARRY.Car, supposer que dans CARRY il ait un 1, aprs une rotation gauche de0000000 1 on aurait 000000 11 alors quon sattendait 000000 10.Linstruction qui efface le bit de CARRY est : BCF STATUS,0(efface le bit zro du registre STATUS, cest -dire le bit de CARRY).

    - Cette instruction affecte le bit C du registre dtat

    - 1 cycle dhorloge

  • 7/31/2019 Pic 16f84 Fichier1

    104/142

    104

    - Encodage de linstruction:

    13 000 1101 dfff ffff

    0 D (W) 0

    ou(registre) 1

    De 000 1100

    100 1111Adresse de la RAM (entre 0C et 4F)o se trouve loctet dont on veuteffectuer la rotation gauche.

  • 7/31/2019 Pic 16f84 Fichier1

    105/142

    105

    RRFRotate Right File

    - Rotation droite.

    C 7 6 5 4 3 2 1 0

    - Effectue le dplacement dune position vers la droite des bits de loctetsitu (en mmoire RAM) ladresse indique de suite (adresse comprise

    entre 0C et 4F) en utilisant le bit de CARRY du registre dtat : le contenudu bit de CARRY devient le nouveau bit 7 de loctet ayant effectu larotation droite, tandis que lancien bit 0 entre dans CARRY ; avec deuxvariantes : le rsultat de la rotation peut tre rang soit dans le registre W,soit dans la mmoire RAM la place de loctet utilis pour effectuer larotation (la nouvelle valeur prend la place de lancienne).

    - NB : Avant dutiliser cette instruction il convient de pralablement effacer le bit de CARRY .

    Linstruction qui efface le bit de CARRY est : BCF STATUS,0(efface le bit zro du registre STATUS, cest -dire le bit de CARRY).

    - Cette instruction affecte le bit C du registre dtat

    - 1 cycle dhorloge

  • 7/31/2019 Pic 16f84 Fichier1

    106/142

    106

    - Encodage de linstruction:

    13 000 1100 dfff ffff

    0 C (W) 0

    ou(registre) 1

    De 000 1100

    100 1111Adresse de la RAM (entre 0C et 4F)o se trouve loctet dont on veut

    effectuer la rotation droite.

  • 7/31/2019 Pic 16f84 Fichier1

    107/142

    107

    SLEEP

    - Mise en veilleuse.Cette instruction sutilise non pas pour mettre le C hors tension, mais

    pour arrter le squencement des instructions (ralentir le signal dhorloge jusqu lextrme limite : la frquence zro).Pendant cette mise en veilleuse, lhorloge externe (faisant partie de ce quenous avons appel le cortge des invariants) est coupe. Le flux du

    programme est bloqu.Seul le chronomtre du Watch Dog (chien de garde) reste actif.La consommation du botier (qui normalement est de 2 mA) tombe 30A.Parmi les causes pouvant rveiller le C retenons : une demandedinterruption, ou un signal provenant du chronomtre (timer) du chien degarde.

    - Cette instruction affecte deux bits du registre dtat :TO (Time Out) passe 1PD (Power Down) passe 0

    En plus, elle met zro le chronomtre du chien de garde, ainsi que le prdiviseur.

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0000 0110 00110 0 6 3

  • 7/31/2019 Pic 16f84 Fichier1

    108/142

    108

    SUBLWSUBtract Literal with W

    - Soustrait le literal (valeur immdiate reprsente par un octet pouvantaller de 00 FF) du contenu du registre W, et place le rsultat dans W.

    Literal diminuende- W - diminuteur

    = rsultat = diffrence

    - Cette instruction affecte 3 bits du registre dtat :- le flag C (Carry)- le flag DC (Digit Carry)- le flag Z (Zero)

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 011 110x kkkk kkkk 3 C

    Valeur de loctet (literal)reprsentant le diminuende

    (valeur pouvant aller de 00 FF).

  • 7/31/2019 Pic 16f84 Fichier1

    109/142

    109

    SUBWFSUBtract W from File

    - Soustrait la valeur contenue dans le registre W de la valeur se trouvant (enmmoire RAM) ladresse indique de suite (adresse comprise entre 0C et4F) ; avec deux variantes : le rsultat (diffrence) peut tre rang soit dansle registre W, soit dans la mmoire RAM la place du diminuende.

    File (valeur se trouvant lemplacement RAM, le diminuende)- W (valeur contenue dans le registre W, le diminuteur )

    Rsultat diffrence

    - Cette instruction affecte 3 bits du registre dtat :- le flag C (Carry)- le flag DC (Digit Carry)- le flag Z (Zero)

    - 1 cycle dhorloge

    - Encodage de linstruction:

    13 000 0010 dfff ffff

    0 2 (W) 0

    ou(registre) 1

    De 000 1100 100 1111

    Adresse de la RAM (entre 0C et 4F) laquelle on veut ranger la diffrence.

  • 7/31/2019 Pic 16f84 Fichier1

    110/142

    110

    SWAPFSWAP File

    - Echange les quatre bits de poids fort dun octet se trouvant (en mmoireRAM) ladresse indique de suite (adresse comprise entre 00 et 4F), avecses propres quatre bits de poids faible :

    1 0 0 0 1 0 1 1devient

    1 0 1 1 1 0 0 0

    Avec deux variantes : le rsultat de lchange peut tre plac soit dans leregistre W, soit dans la mmoire RAM en lieu et place de loctet utilis

    pour effectuer le swap .

    - 1 cycle dhorloge- Encodage de linstruction:

    13 000 1110 dfff ffff

    0 E (W) 0

    ou(registre) 1

    De 000 1100

    100 1111Adresse de la RAM (entre 0C et 4F)

    o se trouve loctet dont on veutchanger les quartets.

  • 7/31/2019 Pic 16f84 Fichier1

    111/142

    111

    TRISTRIState port

    - NB : cette instruction est spcifique au 16F84 .

    Microchip recommande de ne pas lutiliser, dans le but de laisser les programmes (crits pour ce type de microcontrleur) compatibles avecceux crits pour dautres modles de PIC.

    Il suffit de le savoir. Mais ceci nest pas un obstacle pour nous, du fait que notre intrt est exclusivement tourn vers le 16F84.

    - Charge le registre TRIS (A ou B), et met les lignes de port hauteimpdance.Ce registre configure , cest dire dfinit le sens de fonctionnement dechacune des lignes des ports A et B ; assigne chaque ligne soit le rledentre , soit le rle de sortie , sans pour autant provoquer aucune entre niaucune sortie.

    - Il sagit dun registre de 8 bits, pouvant tous se programmer individuellement par 0 ou par 1 :

    0 = la ligne de port (qui lui correspond) est configurecomme sortie

    1 = la ligne de port (qui lui correspond) est configurecomme en