403
1 Pierre LOGLISCI Le microcontrôleur PIC 16F84 Edition de l’Auteur

le PIC_16F84 livre

Embed Size (px)

Citation preview

Page 1: le PIC_16F84 livre

1

Pierre LOGLISCI

Le microcontrôleurPIC

16F84

Edition de l’Auteur

Page 2: le PIC_16F84 livre

2

Cet ouvrage est la propriété de l’Auteur.

Il est protégé par les Lois sur le Copyright.

Aucune partie de ce livre ne peut être reproduite, sous aucune forme ou par un quelconque procédé (électronique, photocopie, CD ou autre), sans l’autorisation

écrite de l’Auteur.

La bible pour désassembler à la main est une nouveaté mondiale, idée originale de l’Auteur.

- Le nom et le logo MICROCHIP sont des Marques déposées 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 EXPLORERsont des Marques déposées de MICROSOFT

- PicBASIC est une Marque déposée de Micro Engineering Labs

Page 3: le PIC_16F84 livre

3

Dédicace

Lorsque ce travail n’était qu’un manuscrit, mon plus grand problème futde savoir comment faire pour lui donner une forme dactylographiqueacceptable pour être lu par tous.

Je n’avais que très peu de connaissances en ce qui concerne l’utilisationdu clavier, des logiciels de traitement de texte et d’images, et du scanner...Je ne savais pas comment créer les indispensables tableaux, ni commentaccéder aux caractères spéciaux....Je n’avais aucune expérience de composition et de mise en page...Bref : je ne savais pas comment m’y prendre pour faire en sorte qu’un tasde feuilles gribouillées à la main deviennent un livre...

Si j’y suis parvenu, c’est grâce à l’aide spontanée et constante que m’aapportée ma fille Elodie qui - comme un guide de haute montagne - m’aprécédé dans la difficile ascension en m’ouvrant des chemins faciles et sûrs,toujours en se mettant à ma place, dosant les difficultés à la mesure del’effort qu’elle savait que j’étais capable de fournir .Sans jamais faire de concessions, elle s’est de nombreuses fois obligée àchercher - chez elle, sur son propre PC - les solutions pratiques auxproblèmes que je lui soumettais, au fur et à mesure qu’ils se présentaient.

Page 4: le PIC_16F84 livre

4

C’est à elle que je dédicace ce livre.

Pour son aide, bien sûr ; mais aussi pour les constants encouragementsrépétés qu’elle m’a donnés, l’enthousiasme qu’elle a partagé avec moipendant tout le temps que j’ai consacré au projet, et son doux sourire, dontelle m’entoure encore.

Page 5: le PIC_16F84 livre

5

Avant-propos

Bien qu’il existe une déjà abondante littérature sur lesmicrocontrôleurs PIC en général, l’amateur qui veut s’attaquer à uneréalisation personnelle utilisant le modèle 16F84 n’y arrive qu’au prix degros efforts.Ceci à cause du fait qu’il y a plusieurs modèles de PIC qui, tout enpossédant la même philosophie, diffèrent sensiblement l’un de l’autre (parle nombre d’instructions, le nombre de pages mémoire, le nom desregistres, la présence ou l’absence de ressources internes...) et déroutentcelui qui en entreprend l’étude pour la première fois.

Or, si les ouvrages traitant les microcontrôleurs PIC en généralsont nombreux, aucun n’aborde le 16F84 en particulier.

Dans ces conditions, le lecteur qui ne s’intéresse qu’à ce modèleexclusivement, doit se livrer à tout un travail pour séparer ce qui estimportant et nécessaire (parce que ça concerne le 16F84) de ce qui estsuperflu (parce que ça ne concerne pas le 16F84 mais se réfère à d’autresmodèles).

Aussi j’ai condensé dans cet ouvrage les seules notions pratiquesnécessaires pour aborder un montage personnel à base de 16F84.

Il y a plusieurs raisons à cela.

En premier lieu, ce modèle possédant une mémoire EEPROMeffaçable électriquement, s’impose comme la solution idéale pour ceux quiveulent apprendre à utiliser un microcontrôleur PIC, du fait qu’il estreprogrammable jusqu’à plus de 1.000 fois (selon les spécifications dufabricant).

Associé à de simples organes périphériques, il représente l’outild’apprentissage par excellence, car le lecteur peut tester tous lesprogrammes avec le même microcontrôleur et revenir sur les erreurs, lescorriger et rapidement re-tester l’application.

Page 6: le PIC_16F84 livre

6

Ce microcontrôleur possède un fusible interne, accessible parprogrammation, qu’il faudra se garder de laisser intact. Car lorsque cefusible a été brûlé, le microcontrôleur, s’il peut encore être effacé etreprogrammé, ne peut plus être lu correctement , car sa mémoire estrestituée complètement désorganisée.Bien utile pour ceux qui mettent au point une application commercialequ’ils veulent protéger et mettre à l’abri de copies sauvages, ce fusible doitêtre ignoré pendant la durée de l’étude.

Cette accessibilité permanente de la mémoire représente l’aspect leplus original de tous les microcontrôleurs à mémoire flash, parmi lesquelstrône le 16F84.

De plus, la capacité mémoire de ce modèle (ni trop petite ni tropgrande) le prédestine comme le compromis idéal non seulement pourl’auto-apprentissage, mais aussi pour les premières applicationspersonnelles que chacun aura envie d’inventer.

Car, s’il est incontestable qu’on peut parvenir à la réalisation d’ungrand nombre de dispositifs en téléchargeant programmes et circuitsimprimés à partir des nombreux sites consacrés aux microcontrôleurs, dansce domaine particulier de la microélectronique seules les capacitéspersonnelles comptent.

C’est pourquoi ce livre s’adresse tout particulièrement à qui veutvraiment prendre ... dans une main le PIC 16F84 ... et dans l’autre lesindispensables outils de développement et... le fer à souder !

Les seules connaissances exigées pour en aborder la lecture sontles bases fondamentales de l’électronique générale et de l’électroniquelogique.

Un avertissement tout de même - s’il était nécessaire - consiste àrappeler que pour maîtriser la réalisation d’un montage incorporant unmicrocontrôleur 16F84 il faut disposer d’un ordinateur et d’un outil dedéveloppement (pouvant être soit une copie de l’assembleur MPLAB queMicrochip distribue gratuitement sur son site Internet, soit un compilateurBASIC). Nous verrons ceci plus loin, dans la section traitant de laprogrammation.

Page 7: le PIC_16F84 livre

7

Du contrôleur au microcontrôleur

Pour le dire avec des mots simples, un contrôleur est un dispositifqui - placé au cœur d’un processus - surveille l’évolution d’un événement etcompare son état (ou sa valeur) à une donnée prédéterminée, pourintervenir dès que les limites préfixées sont atteintes.

De ce point de vue, un contrôleur n’est pas forcément électronique.Il peut être mécanique, pneumatique, thermique, etc..

Son travail consiste à surveiller (lire) la valeur d’une situation, et àla comparer en permanence à une valeur fixée d’avance.Lorsqu’il y a une différence entre la valeur lue et celle fixée, le contrôleurgénère une commande qui - envoyée à un endroit approprié du processus -réduit cette différence ou ramène les choses à la normale.

Aussi, un thermostat d’ambiance ou la valve de sécurité installéesur le couvercle d’une cocotte-minute, sont des exemples de contrôleurssimples.

Un contrôleur peut accomplir une ou plusieurs tâches à la suite.

Les plus souples de tous les contrôleurs sont évidemment lescontrôleurs faisant appel à l’électronique, et plus particulièrement lesmicrocontrôleurs.

La surveillance de la valeur d’une situation se fait alors au moyend’une ou plusieurs lignes d’acquisition de données configurées en entrées,tandis que l’envoi de commandes se fait au moyen d’une ou plusieurslignes configurées en sorties.

L’ensemble des tâches confiées à un microcontrôleur s’appelleprogramme.

Page 8: le PIC_16F84 livre

8

Le microcontrôleur 16F84Présentation générale

Ce modèle de PIC (Programmable Interface Controler) est uncircuit de petite taille, fabriqué par la Société américaine ArizonaMICROCHIP Technology.

En le regardant pour la première fois, il fait davantage penser à unbanal circuit intégré logique TTL ou MOS, plutôt qu’à un microcontrôleur.Son boîtier est un DIL (Dual In Line) de 2x9 pattes.

En dépit de sa petite taille, il est caractérisé par une architectureinterne qui lui confère souplesse et vitesse incomparables.

Ses principales caractéristiques sont :

- 13 lignes d’entrées/sorties, réparties en un port de 5 lignes (Port A) et un port de 8 lignes (Port B)- alimentation sous 5 Volts- architecture interne révolutionnaire lui conférant une extraordinaire rapidité- une mémoire de programme pouvant contenir 1.019 instructions de 14 bits chacune (allant de l’adresse 005 à l’adresse 3FF)- une mémoire RAM utilisateur de 68 emplacements à 8 bits (de l’adresse 0C à l’adresse 4F)- une mémoire RAM de 2x12 emplacements réservée aux registres spéciaux- une mémoire EEPROM de 64 emplacements- une horloge interne, avec pré diviseur et chien de garde- possibilité d’être programmé in-circuit, c’est à dire sans qu’il soit nécessaire de le retirer du support de l’application- vecteur de Reset situé à l’adresse 000- un vecteur d’interruption, situé à l’adresse 004- bus d’adresses de 13 lignes- présence d’un code de protection permettant d’en empêcher la duplication- facilité de programmation- simplicité- faible prix .

Page 9: le PIC_16F84 livre

9

Brochage du PIC 16F84 (µC vu de dessus)

Page 10: le PIC_16F84 livre

10

Le cortège des invariants

Indépendamment de ce qu’on veut faire de ses 13 lignes (que l’ondéfinit par lignes d’entrée/sortie) et quelle que soit l’application à laquelleon le destine, un microcontrôleur PIC 16F84, pour pouvoir fonctionner, anécessairement besoin de :

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

temps à quartz est nécessaire), ou une résistance et un condensateur (pourune base de temps de type RC, économique, utilisable dans les cas nedemandant pas une extrême précision de cadencement) ;

- un condensateur de découplage (pour réduire les transitoires seformant inévitablement dans tout système impulsionnel) ;

- un bouton poussoir et une résistance, pour la mise en place d’unecommande de Reset.

Ces éléments - qu’il convient de considérer comme des invariantsdevant nécessairement figurer dans tout montage - représentent le cortègeobligatoire de tout microcontrôleur PIC 16F84, de la même façon -pourrais-je dire - qu’un transistor demande, pour fonctionner, une résistancede Base et une résistance de Collecteur.

Les applications type sont celles des deux pages suivantes :

Page 11: le PIC_16F84 livre

11

1) Pilotage par quartz

Page 12: le PIC_16F84 livre

12

2) Pilotage par oscillateur RC

Page 13: le PIC_16F84 livre

13

Les Entrées/Sorties

A part les cinq pins réservées au cortège des invariants devantnécessairement figurer dans tout montage, les treize autres pins du 16F84servent d’entrées/sorties.

Elles sont regroupées en deux ports : Port A et Port B.

Le Port A possède 5 lignes, nommées:RA0..........pin 17RA1..........pin 18RA2..........pin 1RA3..........pin 2RA4..........pin 3 (RA4/T0CKI)(NB : RA = Register A)

Le Port B possède 8 lignes, nommées:RB0..........pin 6 (RB0/INT)RB1..........pin 7RB2..........pin 8RB3..........pin 9RB4..........pin 10RB5..........pin 11RB6..........pin 12RB7..........pin 13(NB : RB = Register B)

A remarquer que RB0 (pin 6) et RA4 (pin 3), outre qu’à pouvoirservir d’entrées/sorties, selon la façon dont on les programme peuventrespectivement servir l’une comme entrée d’interruption et l’autre commeentrée d’horloge externe pour le pilotage du timer (TMR0).

Page 14: le PIC_16F84 livre

14

Organisation de la mémoire du PIC 16F84

La mémoire du PIC 16F84 est répartie en trois espaces, logés surla même pastille de silicium :

1) Une mémoire EEPROM de type flash, de 1 K mots de 14 bits,allant de l’adresse 000 à l’adresse 3FF. Cet espace est dénommé mémoire de programme, dont le plan est lesuivant :

5 adresses réservées au µC 000 Vecteur de Reset (adresses que je 001 conseille de sauter) 002

003 004 Vecteur d’Interruption

005 Début du programme utilisateur

.

.

1019 adressesrestantes, .disponibles pour y logerles instructions devotre programme .

.

.

3FF Fin de l’espace mémoiredisponible

Page 15: le PIC_16F84 livre

15

Cette mémoire est celle dans laquelle le programmateur écrit lesinstructions du programme.

Dans cet espace mémoire, les cinq premières adresses (000, 001,002, 003, et 004) sont réservées au microcontrôleur.

Certaines d’entre elles sont particulièrement remarquables :

a) l’adresse 000 correspond au vecteur de Reset.A la mise sous tension, ou à chaque fois que des instructions spécifiquesl’obligent, le Program Counter (PC) se rend à cette adresse et c’est là que lesystème trouve la première instruction à exécuter.C’est une case devant obligatoirement être remplie et contenir l’origine duprogramme (ORG).Si cette adresse était vide, le microcontrôleur ne ferait rien, car aucunprogramme ne serait exécuté.

b) l’adresse 004 correspond au vecteur d’interruption.C’est l’adresse « point de rencontre » définie par le fabricant, à laquellesystème et utilisateur se rendent lorsqu’un problème surgit, pour se dire cequ’il se passe et quel sont les remèdes d’urgence à apporter.

2) une mémoire de données (Data Memory) EEPROM flash, de 64emplacements à 8 bits, allant de l’adresse 00 à l’adresse 3F, auxquels onaccède uniquement par l’intermédiaire de quatre registres spéciaux:

-EEADR (EEprom ADRess) pour ce qui concerne les adresses- EEDATA (EEprom DATA) pour ce qui concerne les données- EECON1 (EEprom CONtrol) permettant de définir le

- EECON2 mode de fonctionnement de cette mémoire.

Pour lire dans cette mémoire, les étapes à suivre sont les suivantes :1) on écrit l’adresse dans le registre EEADR ;2) on met à 1 le bit 0 (RD : Read Data) du registre EECON1 (ce qui provoque le transfert de la donnée dans le registre EEDATA) ;3) on lit la donnée dans le registre EEDATA où elle est devenue disponible.

Page 16: le PIC_16F84 livre

16

Exemple : on veut lire le contenu de l’emplacement mémoire 03 :

BCF STATUS,RP0MOVLW 03MOVWF EEADRBSF STATUS,RP0BSF EECON1,0BCF STATUS,RP0

A partir de ce moment, ayant autorisé le mode « lecture », ladonnée contenue à l’adresse 03 est disponible dans le registre EEDATA, eton peut l’utiliser comme on veut.

Ainsi, par exemple, on veut lire une donnée en EEPROM et laporter dans le registre W :

BCF STATUS,RP0MOVLW adresse dont on veut lire le contenuMOVWF EEADRBSF STATUS,RP0BSF EECON1,0BCF STATUS,RP0MOVF EEDATA,W

Voyons maintenant comment écrire une donnée en EEPROM :

BCF STATUS,RP0BCF INTCON,7MOVLW donnée que l’on veut écrireMOVWF EEDATAMOVLW adresseMOVWF EEADRBSF STATUS,RP0BCF EECON1,4BSF EECON1,2MOVLW 55MOVWF EECON2MOVLW AAMOVWF EECON2

Page 17: le PIC_16F84 livre

17

BSF EECON1,1BCF EECON1,2BSF INTCON,7BCF STATUS,RP0

Cette séquence montre que pour écrire dans cette mémoire, les étapes àsuivre sont un peu plus complexes, car on est obligé de passer d’abord parEECON2 avant de confirmer la donnée par EECON1 :1) on interdit les interruptions ;2) on écrit la donnée dans le registre EEDATA ;3) on écrit l’adresse dans le registre EEADR ;4) on configure le registre EECON15) on envoie la séquence définie par Microchip (55 et AA)6) on reconfigure les registres EECON1, INTCON et STATUS.

Voyons les choses plus en détail au moyen d’un autre exemplemontrant l’écriture d’une donnée (par exemple : 13) à une certaine adresse(par exemple : 1F) :

EEDATA EQU 08EEADR EQU 09EECON1 EQU 88EECON2 EQU 89INTCON EQU 0B

BCF INTCON,7MOVLW 13MOVWF EEDATAMOVLW 1FMOVWF EEADRBSF STATUS,RP0BCF EECON1,4BSF EECON1,2MOVLW 55MOVWF EECON2MOVLW AAMOVWF EECON2BSF EECON1,1BCF EECON1,2BSF INTCON,7BCF STATUS,RP0

Page 18: le PIC_16F84 livre

18

3) Une mémoire RAM à 8 bits, que Microchip appelle Register File,réservée aux données.A plus proprement parler, il s’agit d’une RAM statique (SRAM).

Cet espace est à son tour réparti en deux zones :

a) une zone RAM de 24 emplacements à 8 bits réservée auxregistres spéciaux, dont 12 situés en Page 0 (adresses 00 à 0B) et 12 situésen Page 1 (adresses 80 à 8B) selon la mappe suivante :

Page 0 Page 100 Adressage indirect01 TMR002 PCL03 STATUS04 FSR05 PORT A06 PORT B07 08 EEDATA09 EEADR

0A PCLATH 0B INTCON

80 Adressage indirect81 OPTION82 PCL83 STATUS84 FSR85 TRIS A86 TRIS B87 88 EECON189 EECON2

8A PCLATH 8B INTCON

Ces registres - auxquels on accède en programmant le bit 5 (RP0) duregistre STATUS - servent à contrôler le fonctionnement de nombreuxorganes internes au PIC. Nous y reviendrons plus en détail;

b) une zone RAM de données, constituée de 68 emplacements à 8bits (adresses de 0C à 4F) situés juste au dessous des registres spéciaux,formant la RAM utilisateur proprement dite, selon la mappe détaillée ci-après :

0C0D0E0F10

Page 19: le PIC_16F84 livre

19

1112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3032333435363738393A

Page 20: le PIC_16F84 livre

20

3B3C3D3E3F404142434445464748494A4B4C4D4E4F

Lors de la programmation il faut toujours indiquer l’adresse de lazone RAM à partir de laquelle le µC doit commencer à écrire, ainsi que lenombre d’emplacements à réserver pour chaque variable.

Comme ceci, par exemple :

ORG OCCompteur RES 3

Ce qui revient à dire : réserve trois emplacements à la variable Compteur,dans l’ordre suivant :

Compteur à l’adresse 0CCompteur+1 à l’adresse 0DCompteur+2 à l’adresse 0E .

Ainsi, par exemple :

pour effacer les données de l’adresse OE, on écrira : CLRF Compteur+2.

Page 21: le PIC_16F84 livre

21

4) et enfin une toute petite mémoire EEPROM, contenant seulement 8cases, de l’adresse 2000 à l’adresse 2007, réservées au microcontrôleur.

Les adresses 2000, 2001, 2002 et 2003 correspondent auxemplacements dans lesquels l’utilisateur peut stocker un coded’identification (en n’utilisant que les quatre bits de poids faible de chacunde ces mots à 14 bits).

L’adresse 2007 correspond au registre de configuration dumicrocontrôleur.

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

4 3 2 1 0CP PWRTE WDTE FOSC1 FOSC0

- Bit 0 - FOSC0 (OSCillateur zéro) et- Bit 1 - FOSC1 (OSCillateur un) sont à programmer en fonction du type d’oscillateur utilisé,conformément aux spécifications du tableau suivant:

FOSC1 FOSC0 Type d’oscillateur Caractéristiques0 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 = n’autorise pas le chien de garde

- Bit 3 - PWRTE (PoWeR Timer Enable)Le µC possède un timer permettant de retarder de 72 ms le

lancement du programme après la mise sous tension du circuit.1 = le µC attend 72 ms0 = le µC démarre tout de suite

Page 22: le PIC_16F84 livre

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 mémoire sera désorganisé).

Page 23: le PIC_16F84 livre

23

Les registres spéciaux

Nous avons dit que dans l’espace mémoire RAM que Microchipappelle Register File, une zone est réservée aux registres spéciaux.

Le mot registre est utilisé ici pour désigner un emplacementmémoire, tandis que le mot file signifie groupement.

Certains de ces registres sont situés en Page 0 entre les adresses 00et 0B, et d’autres sont situés en Page 1 entre les adresses 80 et 8B.Quelques-uns d’entre eux figurent même dans les deux pages (Page 0 etPage 1) pour en faciliter l’accès.

Ils ont des noms et des usages spécifiques, et servent à commanderle microcontrôleur.

Il y en a 16 en tout, et sont si importants qu’ils conditionnentvéritablement la programmation.

Ils sont utilisés constamment, et constamment tenus présents dans la tête duprogrammeur.

Celui qui veut écrire ne fût-ce qu’un petit programme de quelqueslignes, ne peut pas les ignorer.

C’est pourquoi ils doivent être étudiés et connus à fond.

Examinons-les en détail, un par un, par ordre alphabétique.

Page 24: le PIC_16F84 livre

24

EEADR (EEprom ADRess)

Registre dans lequel on écrit l’adresse de la mémoire de donnéesEEPROM (mémoire flash de 64 octets, allant de l’adresse 00 à l’adresse3F) à laquelle on veut accéder pour y lire ou pour y écrire.

Contrairement à l’EEPROM de programme qui - en plus de latension d’alimentation du microcontrôleur - nécessite une tension externepour la programmation, cette EEPROM fonctionne avec la seule tensiond’alimentation, dans toute sa plage.

Page 25: le PIC_16F84 livre

25

EECON1 (EEprom CONtrol 1)

Registre de contrôle permettant de définir le mode defonctionnement de la mémoire de données EEPROM (mémoire flash de 64octets, allant de l’adresse 00 à l’adresse 3F).Registre à 8 bits, mais dont 5 seulement sont utilisés:

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-même. Le programmeur ne peut y écrire que un 1. N’accepte pas d’être programmé à zéro.

Bit 1 : WR (WRite) Normalement à 0. Il se met dans cet état de lui-même. Le programmeur ne peut écrire que un 1. N’accepte pas d’être programmé à zéro.

Bit 2 : WREN (WRite ENable) Mis à zéro, interdit toute écriture en mémoire. Mis à 1, autorise une écriture en mémoire.

Bit 3 : WRERR (WRite ERRor) Flag d’erreur. Normalement à zéro.

Passe à 1 pour signaler qu’une erreur s’est produite juste au moment où une écriture était en cours (Celle-ci n’a pu aboutir parce qu’un événement inopiné s’est produit ; par exemple un Reset).

Bit 4 : EEIF (EEprom Interrupt Flag) Flag d’interruption. Il est automatiquement mis à 1 lorsque la programmation de l’EEPROM de données est terminée. Doit être mis à zéro par programmation.

Page 26: le PIC_16F84 livre

26

EECON2 (EEprom CONtrol 2)

Registre n’ayant aucune consistance physique, et dont le seul rôleconsiste à obliger le programmeur à vérifier les données qu’il envoie dansl’EEPROM.

Page 27: le PIC_16F84 livre

27

EEDATA (EEprom DATA)

- Pendant une opération de lecture : registre dans lequel estdisponible la donnée qu’on est allé chercher à une certaine adresse de lamémoire EEPROM.

- Pendant une opération d’écriture : registre dans lequel on place ladonnée qu’on veut y écrire.

Page 28: le PIC_16F84 livre

28

FSR (File Select Register)

Sert à sélectionner la mémoire de données, pour pouvoir y accéder.

Page 29: le PIC_16F84 livre

29

INTCON (INTerrupt CONtrol)

Est le registre qui préside au fonctionnement des interruptions.

Dans le 16F84 il y a quatre sources possibles d’interruptions.Chaque fois que l’une d’elles surgit, le microcontrôleur (après avoir notédans la pile l’adresse de retour) abandonne momentanément (interrompt) leprogramme qu’il avait en cours d’exécution et saute à l’adresse 004(adresse prédéfinie par le fabricant, de la même façon que l’adresse 000 aété prédéfinie pour la fonction Reset).

En lisant le contenu de ce registre, on peut déterminer la provenance de lademande d’interruption et aiguiller le programme de manière à y répondrede façon adéquate.

L’interruption peut être commandée soit par un flanc montant, soit par unflanc descendant : cela dépend de la façon dont on a préalablementprogrammé le bit 6 (INTEDG) du registre OPTION :

1 = l’interruption est générée à l’apparition d’un front montant ;

0 = l’interruption est générée à l’apparition d’un front descendant.

Les quatre sources d’interruption possibles sont :

1) la fin d’une programmation de l’EEPROM de données ;

2) le débordement du timer interne ;

3) une commande externe appliquée sur la pin 6 (RB0/INT) ;

4) un changement d’état sur l’une des pins 10, 11, 12 ou 13 (respectivement RB4, RB5, RB6, RB7). Dans ce cas, seule une configuration des lignes en entrée peut donner lieu à une éventuelle demande d’interruption.

Page 30: le PIC_16F84 livre

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 suprême du registre INTCON. Le roi de toutes les interruptions ! Mis à 1, il autorise la prise en compte de tous les autres

bits de l’octet ; tandis que mis à zéro, il les masque (même s’ils sont positionnés). Sous l’action d’un Reset il est automatiquement mis à zéro.

Pour interdire la prise en compte de toute éventuelle demande d’interruption pouvant surgir pendant que le microcontrôleur est déjà occupé à en traiter une, ce bit (GIE) passe automatiquement à zéro jusqu’à ce que dans le programme apparaît l’instruction RETFIE, qui le repositionne à 1. Au cas où l’utilisation de ce bit soit nécessaire, il ne faut pas oublier que: après l’avoir activé (pour ouvrir l’accès au(x) bit(s) concerné(s),

et après l’instruction RETFIE, c’est à dire à la fin d’un sous-programme d’interruption, lorsque son utilisation n’est plus nécessaire, il faut le mettre à zéro, au risque de placer les demandes d’interruption dans un cycle qui les ferait revenir continuellement.

Bit 6 : EEIE (EEprom Interrupt Enable) Mis à 1, autorise l’interruption que l’EEPROM génère

à la fin de la programmation.

7 6 5 4 3 2 1 0EEIE

Page 31: le PIC_16F84 livre

31

Bit 5 : T0IE (Timer zero Interrupt Enable) 7 6 5 4 3 2 1 0

TOIE Mis à 1, il autorise les interruptions provoquées par le débordement 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 d’interruption provenant de l’extérieur, appliquées sur la pin 6 (RB0 /INT).NB : ces demandes peuvent se déclencher soit à l’apparition d’unFront montant, soit à l’apparition d’un front descendant, selon la façonDont 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 provoquées par un changement d’état sur les lignes du port B (RB4, BR5, RB6, RB7).

Page 32: le PIC_16F84 livre

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 l’état du bit 5. Il ne fonctionne que si le bit 5 a préalablement été mis à 1. Dans la mesure où le bit 5 est à 1, ce flag passe à 1 chaque fois que le timer TMR0 déborde (passage de FF à 00).

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

INTF

Le fonctionnement de ce flag est conditionné par l’état du bit 4. Il ne fonctionne que si le bit 4 a préalablement été mis à 1. Dans la mesure où le bit 4 est à 1, ce flag passe à 1 chaque fois qu’une demande d’interruption surgit, pro- venant de l’extérieur, appliquée sur la pin 6 du boîtier (RB0/INT).

Bit 0 : RBIF (Register B Interrupt Flag)

7 6 5 4 3 2 1 0RBIF

Le fonctionnement de ce flag est conditionné par l’état du bit 3. Il ne fonctionne que si le bit 3 a préalablement été mis à 1. Dans la mesure où le bit 3 est à 1, ce bit passe à 1 chaque fois qu’il y a un changement d’état sur l’une des lignes du port B (RB4, RB5, RB6 ou RB7) par rapport à la dernière opération de lecture du port B (dans la mesure, évidemment, où les lignes de ce port sont configurées en entrée).

Page 33: le PIC_16F84 livre

33

OPTION

Est le registre qui préside au fonctionnement de l’horloge internedu microcontrôleur (TMR0) :

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

Bit 7 : RBPU (Register B Pull Up) Mis à zéro (actif à l’état bas) valide les résistances de pull-up présentes, à l’intérieur du boîtier, sur les lignes du port B.

Bit 6 : INTEDG (INTerrupt EDGe) Détermine le front du signal d’horloge sur lequel on veut que soit prise en compte une demande d’interruption provenant de l’extérieur (commande appliquée sur la pin 6 : RB0/INT). Car on peut faire agir une telle demande soit à l’apparition d’un front montant (passage de zéro à 1), soit à l’apparition d’un front descendant (passage de 1 à zéro).

1 = interruption programmée pour se déclencher

sur un front montant ( )0 = interruption programmée pour se déclencher

sur un front descendant ( ).

Bit 5 : T0CS (Timer zero Clock Source) Sert à choisir la provenance du signal qu’on souhaite utiliser comme clock pour piloter l’horloge interne. Il existe deux choix possibles : soit utiliser l’horloge interne utilisant le quartz pilote du microcontrôleur et fournissant un signal dont la fréquence est celle du quartz divisée par 4, soit utiliser un signal externe prélevé sur la pin RA4 (bit 4 du port A).

0 = le timer est piloté par l’horloge interne1 = le timer est piloté par un signal externe.

Page 34: le PIC_16F84 livre

34

Bit 4 : T0SE (Timer zero Signal Edge) Sert à déterminer si l’horloge doit avancer sur front montant ou sur front descendant.

0 = l’horloge avance sur front montant ( )

1 = l’horloge avance sur front descendant ( ) .

Bit 3 : PSA (Pre-Scaler Assignment) Sert à affecter le prédiviseur soit au timer TMR0 soit au Watch-Dog.

0 = le pré diviseur est affecté au timer TMR01 = le pré diviseur est affecté au Watch-Dog.

Bits 2 – 1 – 0 : PS2 – PS1 – PS0 (Pre-Scaler rate) Ces trois bits servent à programmer le facteur de division qu’on veut assigner au prédiviseur dans le but d’avoir des signaux plus lents.

A remarquer que le facteur de division n’est pas le même selon que le pré diviseur soit affecté au TMR0 (timer) ou au Watch-Dog (chien de garde) :

Facteur de divisionPS2 PS1 PS0

Pour le TMR0 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 l’instruction BSF,bitSoit l’instruction BCF,bit.

Page 35: le PIC_16F84 livre

35

Représentation imagée du fonctionnement du timer TMR0 et duWatch-Dog (chien de garde) :

Page 36: le PIC_16F84 livre

36

PCL (Program Counter Low)

Il s’agit du compteur qui fournit au programme la partie basse del’adresse.

Dans les microcontrôleurs de Microchip les lignes d’adresses sontréparties en deux bytes : le PCL (fourni par ce registre Program CounterLow), et le PCH (fourni par le registre PCLATH Program Counter LATchHigh).

Il s’agit d’un compteur dont la tâche est d’adresser la mémoiredans laquelle sont logées les instructions du programme.

L’organisation de ce type de compteur, dans les microcontrôleursPIC, veut que l’adresse soit composée de deux parties : la partie basse(fournie par PCL, sur dix lignes d’adresse) et la partie haute (fournie parPCLATH).

Page 37: le PIC_16F84 livre

37

PCLATH (Program Counter LATch High)

L’adresse du compteur de programme est obtenue en mettantensemble la partie basse fournie par PCL (Program Counter Low) et lapartie haute fournie par PCLATH.

Contrairement à ce qu’on pourrait penser, ce registre ne fournit pasun nombre complémentaire fixe de bits, mais un nombre de bits variable, enfonction des instructions qui sont traitées.

Page 38: le PIC_16F84 livre

38

PORT A - PORT BAlors que TRIS A et TRIS B se limitent à définir le sens de chaque

ligne des ports (entrée ou sortie), PORT A et PORT B permettentconcrètement au microcontrôleur de communiquer avec l’extérieur.

Voici des exemples :

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

MOVLW 11111110 (en binaire, pour que ce soit plus parlant). Octet de confi-

guration de port :0 = sortie1 = entrée

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

MOVWF TRISA Charge l’octet de configura- tion dans le registre TRIS A, mais toutes les lignes sont encore maintenues en haute impédance.

BCF PORTA,0 Met à zéro (clear) le bit 0 du port A. Toutes les autres lignes du port restent à

haute impédance.

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

MOVLW 11111110 (en binaire, pour que ce soit plus parlant). Octet de confi-

guration de port :0 = sortie1 = entrée

Dans ce cas : on veut pro- grammer le bit 2 en sortie et tous les autres en entrée.

MOVWF TRISA Charge l’octet de configura- tion dans le registre TRIS A.

Page 39: le PIC_16F84 livre

39

BSF PORTA,2 Met à 1 (set) le bit 2 du port A. Toutes les autres

lignes du port restent à haute impédance.

3) Comment lire l’état logique d’une ligne de port. C’est à 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 soient des entrées).

MOVWF TRISA Charge l’octet de configura- tion dans le registre TRIS A.

BTFSC PORTA,3 Teste le bit 3 des lignes du port A. S’il est à 1, l’in- struction suivante est exécu- tée. Si par contre il est à 0, l’instruction suivante est igno- rée et le programme exécute l’instruction se trouvant enco- re après. NB : Au lieu de BTFSC, on aurait pu utiliser l’instruction BTFSS pour, dans ce cas, exé- ter l’instruction suivante si le bit testé est à 0.

4) Comment lire l’octet entier d’un port configuré en entrée :

MOVF PORTA,W Charge le contenu du port A dans le registre W.

Page 40: le PIC_16F84 livre

40

STATUS (Registre d’état)

Les cinq premiers bits de ce registre (bits 0 à 4) correspondent àdes flags que le programmeur peut interroger pour obtenir des informationslui permettant d’écrire correctement la suite des instructions de sonprogramme ; tandis que les bits 5, 6 et 7 (RP0, RP1, RP2), d’après la façondont on les programme, pourraient sélectionner 8 pages de registresinternes (chacune de 128 octets).Comme dans le 16F84 il n’y a que deux pages de registres (Page 0 et Page1), seul le bit 5 (RP0) 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 lorsd’une addition ou d’une soustraction.Si une retenue a été générée, ce bit passe à 1.

Bit 1 : DC (Digit Carry)Flag fonctionnant comme le bit de Carry, sauf qu’ici lasurveillance de la retenue s’exerce non pas sur l’octetentier, mais sur le premier demi-octet.Ce flag se positionne à 1 si une retenue est générée du bit3 (bit de poids fort du quartet inférieur) vers le bit 0 duquartet supérieur.Il est utile pour corriger le résultat d’opérations effectuéesen code BCD.

Bit 2 : Z (Zero)Ce flag passe à 1 si le résultat d’une opération (arithmé-tique ou logique) est 0.

Bit 3 : PD (Power Down)Mise en veilleuse de l’alimentation, effectuée par l’instructionSLEEP.Passe à 1 lorsqu’on utilise l’instruction CLWDT, ou à la mise soustension.

Page 41: le PIC_16F84 livre

41

Bit 4 : TO (Time Out)Dépassement de délai.

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

Bit 5 : RP0 (Register Page zero)Sert à sélectionner l’une des deux pages de registres (Page 0ou Page 1).

0 = sélectionne la page mémoire 0 (adresses de 00 à 7F)1 = sélectionne la page mémoire 1 (adresses de 80 à FF).

Exemples de programmation :

1) BCF STATUS, RP0 (Bit Clear File STATUS Register Page 0). Met à zéro le bit RP0 du registre

d’état. Autrement dit : sélectionne le banc mémoire 0 (adresses 00 à 7F).

2) BSF STATUS,RP0 (Bit Set File STATUS Register Page 0). Met à 1 le bit RP0 du registre

d’état. Autrement dit : sélectionne le banc mémoire 1 (adresses de 80 à FF).

Page 42: le PIC_16F84 livre

42

TMR0 (TiMeR zero)

Est le registre de contrôle de l’horloge interne (timer) dumicrocontrôleur.Ce timer peut soit fonctionner seul, soit être précédé par un pré diviseurprogrammable à 8 bits dont la programmation se fait par l’intermédiaire duregistre OPTION.

Ce registre peut être lu et modifié à tout moment, soit pourconnaître sa position courante, soit pour le déclencher à partir d’une valeurdéterminée.Une quelconque opération d’écriture dans ce registre met automatiquementà zéro le comptage en cours dans le pré diviseur.Se rappeler que le timer compte sur 8 bits, et qu’une fois que le comptageest arrivé à FF, celui-ci revient à 00 (ce qui provoque le passage à 1 du bit 2du registre INTCON appelé T0IF).

En programmation on peut écrire :

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

2) pour lui donner une valeur de départ :MOVLW valeurMOVWF TMR0

3) pour le mettre à zéro :CLRF TMR0

Page 43: le PIC_16F84 livre

43

TRIS A - TRIS B

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

Toute ligne mise à 1 est programmée comme entrée, tandis que toute lignemise à zéro est programmée comme sortie.

Il n’y a aucune instruction permettant d’écrire directement dansces registres : on y accède en transitant par le registre de travail W. Enprogrammation, on commence donc par charger l’octet 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 défini comme entrée, tandis que les sept autres lignessont définies comme sorties.

Page 44: le PIC_16F84 livre

44

La PROGRAMMATION

Différentes façons de programmer

Il existe plus d’un chemin possible pour programmer les PIC.

Nous en examinerons deux :

1) la programmation en langage ASSEMBLEUR

2) la programmation en langage BASIC.

Page 45: le PIC_16F84 livre

45

Avantages et inconvénients de la programmation enlangage ASSEMBLEUR

Avantages :La programmation en langage ASSEMBLEUR se fait à l’aide d’un outil deprogrammation entièrement gratuit et que l’on peut diffuser librement.Cet outil (qui est un magnifique environnement de programmation complet)s’appelle MPLAB.Il est disponible en téléchargement gratuit sur le site de Microchip.

Inconvénients :Pour programmer en langage ASSEMBLEUR, il faut non seulementconnaître le fonctionnement de chaque instruction, mais aussi l’architectureinterne du microcontrôleur, la structure de sa mémoire, les adresses desregistres spéciaux, le fonctionnement de chacune de ses ressources internes,etc..La programmation en langage ASSEMBLEUR s’appuie sur desorganigrammes plus travaillés, et requiert plus de rigueur et de minutie.Le programmeur doit plus faire attention aux impératifs machine qu’à lafinalité de son programme.Distrait par le impératifs machine, le programmeur commet souvent deserreurs.Ces erreurs sont souvent difficiles à déceler et à corriger.

Page 46: le PIC_16F84 livre

46

Avantages et inconvénients de la programmation enlangage BASIC

Avantages :La programmation en BASIC se fait à l’aide d’un langage facile et directqui (bien qu’étant de l’anglais) comprend des mots puissants, si bien qu’unprogramme écrit en BASIC comporte peu de mots.Les erreurs de programmation sont plus rares, et se décèlent facilement.L’écriture des programmes prend peu de temps.

Inconvénients :La programmation en BASIC nécessite un COMPILATEURexpressément conçu pour la programmation des PIC.Il s’agit d’un produit commercial, fruit d’un travail d’équipe, et doncpayant.Les programmes en langage BASIC, bien que très courts pour leprogrammeur qui les écrit, demandent plus de place EEPROM car, vus côtéPIC, ils demandent plus d’instructions élémentaires. A tel point que parfoisun microcontrôleur pouvant contenir à l’aise un programme écrit enlangage assembleur, s’avère posséder une mémoire insuffisante s’il étaitprogrammé en langage BASIC, pour faire la même chose.

Page 47: le PIC_16F84 livre

47

Les outils nécessaires pour programmer enlangage ASSEMBLEUR

Pour programmer en langage ASSEMBLEUR il faut :

1) un PC et une imprimante, pour écrire les instructions permettant de confectionner le fichier à extension . asm

2) un ASSEMBLEUR fourni gratuitement par Microchip (à télécharger sur INTERNET) permettant de confectionner le fichier à extension .hex Cet ASSEMBLEUR s’appelle MPLAB. Il faut l’installer sur votre PC et apprendre à vous en servir.

3) un PROGRAMMATEUR de PIC. Relativement simple à réaliser. Il existe des modèles pour port série et des modèles pour port parallèle. Je vous conseille un modèle pour port parallèle. Cherchez un schéma sur un magazine d’Electronique, 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 schéma dans un magazine, vous devez pouvoir télécharger le logiciel à l’adresse citée dans l’article.

5) Des câbles de liaison et une petite alimentation (un bloc secteur).

Page 48: le PIC_16F84 livre

48

Les outils nécessaires pour programmer enlangage BASIC

Pour programmer en langage BASIC il faut :

1) un PC et une imprimante, pour écrire les instructions permettant de confectionner le fichier à extension .bas

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

3) un PROGRAMMATEUR de PIC (mêmes remarques qu’à propos des outils pour programmer en langage ASSEMBLEUR)

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

5) Des câbles de liaison et une petite alimentation (un bloc secteur).

Page 49: le PIC_16F84 livre

49

STRUCTURE d’un PROGRAMME

L’écriture d’un programme implique l’élaboration d’une véritablestructure.C’est pourquoi je ne saurais trop vous conseiller d’agir avec méthode etprécision.

Tout programme doit comporter un titre : une sorte de définitionsuccincte de ce que fait le programme.

L’étape suivante consiste à mettre ce programme sur papier(listing).Nous y ajouterons des commentaires, ligne par ligne, pour chaque opérationeffectuée.Ceux-ci seront clairs et abondants. Ils vous aideront – plus tard – àcomprendre les détails du programme.Ils doivent être tels que si vous repreniez votre feuille plusieurs mois après,vous devriez facilement savoir vous relire et comprendre.Mieux encore : si vous travaillez en équipe, n’importe qui de votre équipedevrait être en mesure de comprendre de quoi il s’agit.

Prenez l’habitude de signer et dater vos programmes.

Dans la mesure du possible, accompagnez-les d’un organigramme.

Page 50: le PIC_16F84 livre

50

CANEVAS d’un programme

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

Voici le squelette d’un programme pour PIC 16F84 :

Processor 16F84Déclarations obligatoires Radix .....

Include <<P16F84>>

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

Initialisation de la RAMet réservation d’un ORG 0Ccertain nombre d’adresses RES ...mémoire

Début du programme ORG 00après Reset

Configuration des lignesde port

Instructions

Sous programmes

Fin du programme END

Page 51: le PIC_16F84 livre

51

PROGRAMMATIONen langage ASSEMBLEUR

La programmation en langage ASSEMBLEUR se fait en utilisantles 37 instructions formant son dictionnaire.

En langage ASSEMBLEUR le PIC 16F84 ne comprend que ces 37mots (en fait : 35 instructions communes à tous les modèles de PIC, plusdeux instructions spécifiques au 16F84 : OPTION et TRIS).

Ces 37 mots forment ce que l’on appelle le set d’instructions du16F84.Il convient de toutes les connaître.

Ecrire un programme en langage ASSEMBLEUR revient donc àdétailler au PIC ce qu’il doit faire, en le disant exclusivement au moyen deces 37 mots de son vocabulaire : les seuls mots qu’il est capable decomprendre.

Examinons-les une par une.

Page 52: le PIC_16F84 livre

52

Les INSTRUCTIONS du 16F84

Le microcontrôleur 16F84 possède un set de seulement 37 instructionscodées (en représentation binaire) sur 14 bits, selon le modèle :

XX XXXX XXXX XXXX

bit de poids fort bit de poids faible

Codées en hexadécimal, elles prennent la forme :

XXXX

A remarquer qu’étant 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 résulte que la première valeur de toute instruction codée enhexadécimal ne peut dépasser 3.Autrement dit : eu égard à la première valeur de chaque instruction codéeen hexadécimal, les seuls formats possibles sont :

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

avec une étendue comprise entre 0000 et 3FFF.

La plupart des instructions opèrent en utilisant le registre de travailW (Working register) comparable à l’accumulateur des anciensmicroprocesseurs, et soit un registre soit une valeur immédiate codée sur 8bits appelée literal.Le résultat des opérations peut être envoyé soit dans le registre W(accumulateur) soit dans le registre sollicité (soit dans les deux, aveccertaines instructions).Un petit nombre d’instructions opèrent en utilisant uniquement un registre(c’est le cas des instructions BCF, BSF, BTFSC, BTFSS, CLRW, CLRWTet SLEEP).

Les 37 instructions du 16F84 peuvent être classées comme onveut.

Page 53: le PIC_16F84 livre

53

Je vous propose quatre types de classement:

a) classement par ordre alphabétiqueb) classement par genrec) classement par typed) classement par ordre croissant d’encodage.

Toutes les instructions sont codées en un seul mot de 14 bits (0 à 13).

Elles sont toutes exécutées en un seul cycle d’horloge , 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 spécifiques (je l’ai déjà dit) et ont un caractère spécial : OPTION etTRIS.Ces deux instructions ne figurent pas dans les autres modèles de PIC. AussiMicrochip recommande de ne pas les utiliser, dans le but de laissercompatibles les programmes (écrits pour ce µC) avec ceux écrits pourd’autres modèles de PIC.Il suffit de le savoir.Mais ceci n’est pas un obstacle pour nous, du fait que notre intérêt estexclusivement tourné vers le 16F84.

Page 54: le PIC_16F84 livre

54

a) Classement par lettre alphabétique

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 ClearBTFSS Bit Test File, Skip if Set

CALL CALL subroutineCLRF CLeaR FileCLRW CLeaR WCLRWDT CLeaR Wach Dog TimerCOMF 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

Page 55: le PIC_16F84 livre

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

Page 56: le PIC_16F84 livre

56

b) Classement par genre

- instructions arithmétiques :ADDLWADDWFSUBLWSUBWF

- instructions d’incrémentation :DECFDECFSZINCFINCFSZ

- instructions d’effacement :CLRFCLRWCLRWDT

- instructions de mouvement :MOVFMOVLWMOVWF

- instructions de rotation :RLFRRF

- instructions logiques :ANDLWANDWFCOMFIORLWIORWFXORLWXORWF

Page 57: le PIC_16F84 livre

57

- instructions de saut et branchement :CALLGOTORETFIERETLWRETURN

- instructions agissant sur les bits :BCFBSFBTFSCBTFSS

- instructions diverses :NOPOPTIONTRISSLEEPSWAPF

Page 58: le PIC_16F84 livre

58

c) Classement par type

- instructions travaillant seules :CLRWCLRWDTNOPOPTIONRETFIERETURNSLEEP

- instructions travaillant avec une constante ou une étiquette (k) :ADDLW kANDLW kCALL kGOTO kIORLW kMOVLW kRETLW kSUBLW kXORLW k

- instructions travaillant avec un registre (f) :CLRF fMOVWF fTRIS f

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

Il est évident que b ne peut prendre qu’une valeur comprise entre 0 et 7, désignant la po- sition du bit dans l’octet :

7 6 5 4 3 2 1 0

Page 59: le PIC_16F84 livre

59

- instructions travaillant avec un registre (f) mais proposant un choix (d) dans la destination du résultat :- d = 0 : le résultat est placé dans W- d = 1 : le résultat est placé dans le registre f

ADDWF f,dANDWF 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

Page 60: le PIC_16F84 livre

60

d) Classement par ordre croissant d’encodage

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 MOVWF0100 CLRW01xx CLRF02xx SUBWF03xx DECF04xx IORWF05xx ANDWF06xx XORWF07xx ADDWF08xx MOVF09xx COMF0Axx INCF0Bxx DECFSZ0Cxx RRF0Dxx RLF0Exx SWAPF0Fxx INCFSZ

Page 61: le PIC_16F84 livre

61

ADDLWADD Literal to W

- Additionne de manière immédiate le literal au contenu du registre W, et place le résultat dans W.

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

- Cette instruction affecte 3 bits du registre d’état :le flag C : Carryle flag DC : Digit Carryle flag Z : Zero

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 11 111x kkkk kkkk

3 E ↓↓↓↓ ↓↓↓↓ Valeur de l’octet que l’on veut ajouter à W (valeur pouvant aller de 00 à FF).

- Exemple de programmation :

ADDLW 06

En supposant que W contienne 04 avant l’instruction, après l’instruction ilcontient 0A (en hexa : 06 + 04 = 0A).

Page 62: le PIC_16F84 livre

62

ADDWFADD W to File

- Additionne le contenu du registre W à l’octet situé (en mémoire RAM) àl’adresse indiquée de suite (adresse comprise entre 0C et 4F) ; avec deuxvariantes : le résultat peut être placé soit dans le registre W, soit dans lamémoire RAM à la place de l’octet utilisé pour faire l’addition (la nouvellevaleur prend la place de l’ancienne).

- Cette instruction affecte 3 bits du registre d’état : le flag C : Carry

le flag DC : Digit Carryle flag Z : Zero

- 1 cycle d’horloge

- Encodage de l’instruction:

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,W ADDWF,0

Page 63: le PIC_16F84 livre

63

2) MOVF VentesDuMois,W ADDWF,1

L’exemple 1 met dans W ce qui se trouve à l’adresse VentesDu Mois, puisadditionne VentesDuMois au contenu de W, et range le résultat dans W.

L’exemple 2 met dans W ce qui se trouve à l’adresse VentesDu Mois, puisadditionne VentesDuMois au contenu de W, et range le résultat à l’adresseVentesDuMois, en renplaçant l’ancienne valeur par le total qu’on vient detrouver.

Page 64: le PIC_16F84 livre

64

ANDLWAND Literal and W

- Effectue une opération logique ET (AND) entre la valeur immédiate duliteral et l’octet 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 d’état

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 11 1001 kkkk kkkk

3 9 ↓↓↓↓ ↓↓↓↓ Valeur de l’octet avec laquelle on veut effectuer le ET logique (valeur pouvant aller de 00 à FF).

- Table de vérité d’une porte ET :

A B Q0 0 00 1 01 0 01 1 1

Page 65: le PIC_16F84 livre

65

- Exemple de programmation :

ANDLW A7

En supposant que W contienne 5C (01011100) avant l’instruction, aprèsl’instruction 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 récupérer un bit enparticulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à éliminer) et de 1 (auxemplacements où se trouvent les bits à récupérer).

Exemple : on souhaite récupérer uniquement le bit 5 de l’octet 01111010.

On prépare alors le masque 00100000 et on fait un ET logique entre l’octetet le masque. Comme ceci :

01111010 (octet)00100000 (masque)

Ce qui donne : 00100000 (résultat)

Le résultat de l’opération permet donc bien de récupéreruniquement le bit 5 de l’octet : ici c’est un 1 (00100000).

Une fois récupéré, on peut utiliser ce bit comme on veut.

Page 66: le PIC_16F84 livre

66

ANDWFAND W and File

- Effectue une opération logique ET (AND) entre l’octet se trouvant dans leregistre W et l’octet situé (en mémoire RAM) à l’adresse indiquée de suite(adresse comprise entre 0C et 4F) ; avec deux variantes : le résultat peutêtre placé soit dans le registre W, soit dans la mémoire RAM à la place del’octet utilisé pour effectuer le ET logique (la nouvelle valeur prend la placede l’ancienne).

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0101 dfff ffff

0 5 ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111

Adresse de la RAM (entre 0C et 4F) où se trouve l’octet avec lequel on veut faire le ET logique.

- Exemples de programmation :

1) ANDWF,0 Adresse

2) ANDWF,1 Adresse

Page 67: le PIC_16F84 livre

67

L’exemple 1 effectue un ET logique entre l’octet se trouvant dans W etl’octet se trouvant à Adresse, et range le résultat dans W.

L’exemple 2 effectue un ET logique entre l’octet se trouvant dans W etl’octet se trouvant à Adresse, et range le résultat dans Adresse.

- Table de vérité d’une 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 récupérer un bit enparticulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à éliminer) et de 1 (auxemplacements où se trouvent les bits à récupérer).

Exemple : on souhaite récupérer uniquement le bit 5 de l’octet 01111010.

On prépare alors le masque 00100000 et on fait un ET logique entre l’octetet le masque. Comme ceci :

01111010 (octet)00100000 (masque)

Ce qui donne : 00100000 (résultat)

Le résultat de l’opération permet donc bien de récupéreruniquement le bit 5 de l’octet : ici c’est un 1 (00100000).

Une fois récupéré, on peut utiliser ce bit comme on veut.

Page 68: le PIC_16F84 livre

68

BCFBit Clear File

- Met à zéro le bit désigné de l’octet situé (en mémoire RAM) àl’adresse indiquée de suite (adresse comprise entre 0C et 4F).

- 1 cycle d’horloge

- Encodage de l’instruction:

13 001 00bb bfff ffff

1 ↓↓ ↓↓↓↓ ↓↓↓↓ Position du bit dans l’octet. ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111

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

où se trouve l’octet sur lequel on veut opérer.

- Position du bit dans l’octet :

7 0

- Exemples de programmation :

En supposant qu’on veuille mettre à zéro (Clear) un certain bit de l’octetsitué à l’adresse 27 de la mémoire RAM, la programmation serait :

111

110

101

100

11 10 1 0

Page 69: le PIC_16F84 livre

69

BCF 27,0 (pour mettre à zéro le bit 0)

ou BCF 27,1 (pour mettre à zéro le bit 1)

ou BCF 27,2 (pour mettre à zéro le bit 2)

etc...

Page 70: le PIC_16F84 livre

70

BSFBit Set File

- Met à 1 (Set) le bit désigné de l’octet situé (en mémoire RAM) à l’adresse indiquée de suite (adresse comprise entre 0C et 4F).

- 1 cycle d’horloge

- Encodage de l’instruction:

13 001 01bb bfff ffff

1 ↓↓ ↓↓↓↓ ↓↓↓↓ Position du bit dans l’octet. ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet sur lequel on veut opérer.

- Position du bit dans l’octet :

7 0

- Exemples de programmation :

En supposant qu’on veuille mettre à 1 (Set) un certain bit de l’octet situé à l’adresse 1C de la mémoire RAM, la programmation serait :

111

110

101

100

11 10 1 0

Page 71: le PIC_16F84 livre

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...

Page 72: le PIC_16F84 livre

72

BTFSCBit Test File, Skip if Clear

- Vérifie l’état logique du bit désigné de l’octet situé (en mémoire RAM) àl’adresse indiquée de suite (adresse comprise entre 0C et 4F).Est-il à zéro ?S’il est à zéro, ignore l’instruction suivante.

- Selon que la réponse soit OUI ou NON, l’instruction prend 1 ou 2 cyclesd’horloge.

- Encodage de l’instruction:

13 001 10bb bfff ffff

1 ↓↓ ↓↓↓↓ ↓↓↓↓ Position du bit dans l’octet. ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet sur lequel on veut opérer.

- Position du bit dans l’octet :

7 0

111

110

101

100

11 10 1 0

Page 73: le PIC_16F84 livre

73

- Organigramme du traitement :

- Exemple de programmation :

En supposant que l’octet dont on veut tester un bit soit situé à l’adresse 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...

Page 74: le PIC_16F84 livre

74

BTFSSBit Test File, Skip if Set

- Vérifie l’état logique du bit désigné de l’octet situé (en mémoire RAM) àl’adresse indiquée de suite (adresse comprise entre 0C et 4F).Est-il à 1 ?S’il est à 1, ignore l’instruction suivante.

- Selon que la réponse soit OUI ou NON, l’instruction prend 1 ou 2 cyclesd’horloge.

- Encodage de l’instruction:

13 001 11bb bfff ffff

1 ↓↓ ↓↓↓↓ ↓↓↓↓ Position du bit dans l’octet. ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet sur lequel on veut opérer.

- Position du bit dans l’octet :

7 0

111

110

101

100

11 10 1 0

Page 75: le PIC_16F84 livre

75

- Organigramme du traitement :

- Exemple de programmation :

En supposant que l’octet dont on veut tester un bit soit situé à l’adresse 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...

Page 76: le PIC_16F84 livre

76

CALLCALL subroutine

- Appel à sous-programme.

- Le µC sauvegarde l’adresse de retour dans la pile (stack), puis charge dansle PC (Program Counter) l’adresse à laquelle il est invité à se rendre. Il peuts’agir aussi bien d’une adresse que d’une label ; et c’est là que démarre lesous-programme.

- Tout sous-programme appelé par l’instruction CALL doit obligatoirementse terminer soit par l’instruction RETURN, soit par l’instructionRETLW qui renvoient au programme principal. Ne pas confondre l’instruction CALL avec l’instruction GOTO.L’instruction CALL fait toujours revenir le programme principal à l’endroitoù il avait été abandonné ; tandis que l’instruction GOTO provoquel’abandon total de la séquence et peut conduire soit à une toute autre action,soit à l’arrêt total du programme.

- La pile (stack) est une zone de mémoire ne pouvant contenir que 8 motsde 13 bits.Ceci limite à 8 niveaux les possibilités d’imbrication. S’il y en avait unneuvième, la première adresse de retour serait perdue...

- Cette instruction prend 2 cycles d’horloge.

- Encodage de l’instruction :

13 0 10 0kkk kkkk kkkk

2 ↓↓↓ ↓↓↓↓ ↓↓↓↓ Adresse de l’EEPROM de programme à laquelle est logé le sous-programme (adresse comprise entre 000 et 3FF).

Page 77: le PIC_16F84 livre

77

- Organigramme du traitement :

Programme principal......................................................................................................CALL sous-programme--------------- -->.................................. ↓ ↑ .................................. ↓ ↑ .................................. ↓ ↑ sous-programme <----- ↓ ↑ .................................. ↑ .................................. ↑<-- RETURN

- Exemple de programmation :

CALL Tempo (saute à l’adresse correspondant à Tempo).

Page 78: le PIC_16F84 livre

78

CLRFCLeaR File

- Efface (Clear) ce qui se trouve (en mémoire RAM) à l’adresse indiquée de suite (adresse comprise entre 00 et 4F).

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 00 0001 1fff ffff

0 1 ↓↓↓ ↓↓↓↓ Adresse de la RAM (entre 00 et 4F) où se trouve l’octet qu’on veut effacer.

- Exemples de programmation :

1) CLRF INTCON (pour désactiver les interruptions)

2) CLRF PORTB (pour mettre à zéro tous les bits du port B)

3) CLRF 1E (pour effacer ce qui se trouve à l’adresse 1E)

Page 79: le PIC_16F84 livre

79

CLRWCLeaR W

- Efface (Clear) le registre W.

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 00 0001 xxxx xxxx

0 1 0 0

- Exemple de programmation :

CLRW (efface le registre W).

En supposant que W contienne F8 avant l’instruction, après l’instructionil contient 00.

Page 80: le PIC_16F84 livre

80

CLRWDTCLeaR Wach Dog Timer

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

- Cette instruction affecte deux bits du registre d’état :- le flag TO (Time Out) passe à 1- le flag PD (Power Down) passe à 1

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 00 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 à zéro.

Page 81: le PIC_16F84 livre

81

COMFCOMplement File

- Effectue un complément bit à bit sur l’octet situé (en mémoire RAM) àl’adresse indiquée de suite (adresse comprise entre 0C et 4F) ; avec deuxvariantes : le résultat peut être placé soit dans le registre W, soit dans lamémoire RAM à la place de l’octet utilisé pour faire le complément (lanouvelle valeur prend la place de l’ancienne). Faire le complément bit à bit d’un octet équivaut à changer ses zéros en 1,et inversement.Exemple : le complément de 00111100 est 11000011.

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 1001 dfff ffff

0 9 ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve l’octet

sur lequel on veut opérer.

- Exemples de programmation :

1) COMF 2B,0 (effectue le complément bit à bit del’octet situé à l’adresse 2B et range lerésultat dans W)

En supposant que 2B contienne 11100000 avant l’instruction, aprèsl’instruction cette valeur est transformée en 00011111.

Page 82: le PIC_16F84 livre

82

2) COMF 2B,1 (même chose, mais le résultat est rangé àla place de l’octet utilisé pour faire lecomplément).

Page 83: le PIC_16F84 livre

83

DECFDECrement File

- Décrémente la valeur de l’octet situé (en mémoire RAM) à l’adresseindiquée de suite (adresse comprise entre 0C et 4F) ; avec deux variantes :le résultat peut être placé soit dans le registre W, soit dans la mémoireRAM à la place de l’octet qu’on a décrémenté (la nouvelle valeur prend laplace de l’ancienne).

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0011 dfff ffff

0 3 ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve l’octet

qu’on veut décrémenter.

- Exemples de programmation :

1) DECF COMPTEUR,0 (décrémente l’octet se trouvantà l’adresse COMPTEUR, etrange le résultat dans W)

2) DECF COMPTEUR,1 (même chose, mais cette foisle résultat est rangé à l’adresseCOMPTEUR).

Page 84: le PIC_16F84 livre

84

DECFSZDECrement File, Skip if Zero

- Décrémente la valeur de l’octet situé (en mémoire RAM) à l’adresseindiquée de suite (adresse comprise entre 0C et 4F), et effectue un test :l’octet a-t-il atteint zéro ?Si OUI, ignore l’instruction suivante.Avec deux variantes : le résultat peut être placé soit dans le registre W, soitdans la mémoire RAM à la place de l’octet décrémenté (la nouvelle valeurprend la place de l’ancienne).

- Selon qu’à la suite de la décrémentation l’octet ait atteint ou pas la valeurzéro, l’instruction prend 1 ou 2 cycles d’horloge.

- Encodage de l’instruction:

13 000 1011 dfff ffff

0 B ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve l’octet

qu’on veut décrémenter.

- Cette instruction est généralement suivie par l’instruction CALL.

- Exemples de programmation :

1) DECFSZ 2F,0 (décrémente l’octet se trouvant à l’adresse 2F, et range le résultat dans W. Si le résultat est zéro, ignore l’instruction suivante).

Page 85: le PIC_16F84 livre

85

2) DECFSZ 2F,1 (même chose, mais cette fois le résultat est rangé à l’adresse 2F. La nouvelle valeur prend la place de l’ancienne).

Page 86: le PIC_16F84 livre

86

GOTO

- Branchement inconditionnel.Va de façon inconditionnelle à l’adresse indiquée de suite (adresse dedémarrage du sous-programme). Il peut s’agir aussi bien d’une adresse qued’une label.Cette instruction interrompt l’exécution séquentielle des instructions etoblige à poursuivre le programme d’une adresse complètement ailleurs.A la différence de l’instruction CALL (qui fait toujours revenir leprogramme principal à l’endroit où il avait été abandonné) , l’instructionGOTO provoque l’abandon complet de la séquence et peut conduire soit àune toute autre action, soit à l’arrêt total du programme.

- Cette instruction prend 2 cycles d’horloge.

- Encodage de l’instruction :

13 0 10 1kkk kkkk kkkk

2 ↓↓↓ ↓↓↓↓ ↓↓↓↓ Adresse de l’EEPROM de programme, à laquelle le programme doit se rendre pour poursuivre (adresse comprise entre 005 et 3FF).

- Exemple de programmation

GOTO ALLUMAGE

Après cette instruction, le PC (Program Counter) est chargé avec lavaleur de l’adresse à laquelle commence le programme ALLUMAGE.

Page 87: le PIC_16F84 livre

87

INCFINCrement File

- Incrémente la valeur de l’octet situé (en mémoire RAM) à l’adresseindiquée de suite (adresse comprise entre 0C et 4F) ; avec deux variantes :le résultat peut être placé soit dans le registre W, soit dans la mémoireRAM à la place de l’octet qu’on a incrémenté (la nouvelle valeur prend laplace de l’ancienne).

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 1010 dfff ffff

0 A ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve l’octet

qu’on veut incrémenter.

- Exemples de programmation :

1) INCF NOMBRE,0 (incrémente l’octet se trouvantà l’adresse NOMBRE,et range le résultat dans W)

2) INCF NOMBRE,1 (même chose, mais cette foisle résultat est rangé à l’adresseNOMBRE. La nouvelle valeur

prend la place de l’ancienne).

Page 88: le PIC_16F84 livre

88

INCFSZINCcrement File, Skip if Zero

- Incrémente la valeur de l’octet situé (en mémoire RAM) à l’adresseindiquée de suite (adresse comprise entre 0C et 4F), et effectue un test :l’octet a-t-il atteint zéro ?Si OUI, ignore l’instruction suivante.Avec deux variantes : le résultat peut être placé soit dans le registre W, soitdans la mémoire RAM à la place de l’octet incrémenté (la nouvelle valeurprend la place de l’ancienne).

- Selon qu’à la suite de l’incrémentation l’octet ait atteint ou pas la valeurzéro, l’instruction prend 1 cycle ou deux d’horloge.

- Encodage de l’instruction:

13 000 1111 dfff ffff

0 F ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve l’octet

qu’on veut incrémenter.

- Cette instruction est généralement suivie par CALL.

- Exemples de programmation :

1) INCFSZ DATE,0 (incrémente l’octet se trouvant à l’adresse DATE, et range le résul-

tat dans W. Si le résultat est zéro, ignore l’instruction suivante).

Page 89: le PIC_16F84 livre

89

2) INCFSZ DATE,1 (même chose, mais cette foisle résultat est rangé à l’adresseDATE. La nouvelle valeur prendla place de l’ancienne).

Page 90: le PIC_16F84 livre

90

IORLWInclusive OR Literal with W

- Effectue une opération logique OU inclusif (Inclusive OR) entre la valeurimmédiate du literal et l’octet se trouvant dans le registre W.Le résultat de l’opération reste dans le registre W.

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

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 11 1000 kkkk kkkk

3 8 ↓↓↓↓ ↓↓↓↓ Valeur de l’octet avec lequel on veut effectuer le OU inclusif (valeur pouvant aller de 00 à FF).

- Table de vérité d’une porte OU inclusif :

A B Q0 0 00 1 11 0 11 1 1

Page 91: le PIC_16F84 livre

91

- Exemple de programmation :

IORLW B5 (10110101)

En supposant que W contienne 49 (01001001) avant l’instruction, aprèsl’instruction 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 enparticulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à ignorer) et de 1 (auxemplacements où se trouvent les bits qu’on veut forcer à 1).

Exemple : on souhaite forcer à 1 les bits 7 et 6 de l’octet 01111010.

On prépare alors le masque 11000000 et on fait un OU logique entre l’octetet le masque. Comme ceci :

01111010 (octet)11000000 (masque)

Ce qui donne : 11111010 (résultat)

Le résultat de l’opération permet donc bien de forcer à 1 les bits 7et 6 de l’octet. Il se trouve qu’ici le bit 6 était déjà à 1. Mais le programmene le savait pas. L’instruction IORLW permet de préciser les choses.

Une fois forcés à 1, on peut utiliser ces bits (ou l’octet) comme on veut.

Page 92: le PIC_16F84 livre

92

IORWFInclusive OR With File

- Effectue une opération logique OU inclusif (Inclusive OR) entre l’octet setrouvant dans le registre W et l’octet situé (en mémoire RAM) à l’adressesituée de suite (adresse comprise entre 0C et 4F) ; avec deux variantes : lerésultat peut être placé soit dans le registre W, soit dans la mémoire RAM àla place de l’octet utilisé pour faire le OU inclusif (la nouvelle valeur prendla place de l’ancienne).

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0100 dfff ffff

0 4 ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F) où se trouve

l’octet avec lequel on veut faire le OU inclusif.

- Table de vérité d’une porte OU inclusif :

A B Q0 0 00 1 11 0 11 1 1

Page 93: le PIC_16F84 livre

93

- Exemples de programmation :

1) IORWF 29,0 (effectue le OU inclusif entrel’octet se trouvant dans W etcelui situé à l’adresse 29, et rangele résultat dans W).

En supposant que le contenu de l’adresse 29 soit C7 (11000111) etque W contienne 69 (01101001), après l’instruction on obtient EF(11101111).

2) IORWF 29,1 (même chose, mais le résultat estrangé à l’adresse 29, à la place del’octet utilisé pour faire le OU

inclusif).

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 enparticulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à ignorer) et de 1 (auxemplacements où se trouvent les bits qu’on veut forcer à 1).

Exemple : on souhaite forcer à 1 les bits 7 et 6 de l’octet 01111010.

On prépare alors le masque 11000000 et on fait un OU logique entre l’octetet le masque. Comme ceci :

01111010 (octet)11000000 (masque)

Ce qui donne : 11111010 (résultat)

Le résultat de l’opération permet donc bien de forcer à 1 les bits 7et 6 de l’octet. Il se trouve qu’ici le bit 6 était déjà à 1. Mais le programmene le savait pas. L’instruction IORLW permet de préciser les choses.

Une fois forcés à 1, on peut utiliser ces bits (ou l’octet) comme on veut.

Page 94: le PIC_16F84 livre

94

MOVFMOVe File

- Cette instruction peut faire deux choses :

1) soit porter dans W le contenu situé (en mémoireRAM) à l’adresse indiquée de suite (adresse com-prise entre 0C et 4F), avec l’option de program-mation ,0

2) soit copier l’octet sur lui-même au même emplacementde la RAM, avec l’option de programmation ,1

Bien que ça paraisse comique de copier le contenu d’un registre sur lui-même, en fait - étant donné que cette opération modifie le bit Z du registred’état - elle est utile quand on a besoin de faire un test à zéro sur l’octet, entoute sécurité.

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

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 l’octet qu’on veut traiter.

Page 95: le PIC_16F84 livre

95

- Exemples de programmation :

1) MOVF PORTB,0 (porte dans W l’état es lignes du port B).

1) MOVF 18,1 (copie le contenu de l’adresse 18 sur lui-même).

Page 96: le PIC_16F84 livre

96

MOVLWMOVe Literal to W

- Charge de manière immédiate le literal dans le registre W

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

- 1 cycle d’horloge

- Encodage de l’instruction :

13 0 11 00xx kkkk kkkk

3 0 ↓↓↓↓ ↓↓↓↓ Valeur du literal

- Exemple de programmation :

MOVLW F5 (met F5 , c’est à-dire11110101, dans W).

Page 97: le PIC_16F84 livre

97

MOVWFMOVe W to File

- Prend le contenu du registre W et le met (dans la mémoire RAM) àl’adresse indiquée de suite (adresse de 0C à 4F)

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0000 1fff ffff

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

on veut mettre la valeur du registre W.

- Exemple de programmation :

MOVWF 0D (écrit le contenu de W àl’adresse RAM 0D).

Page 98: le PIC_16F84 livre

98

NOPNo OPeration

- L’instruction la plus paresseuse !Ne fait rien.Elle sert juste à occuper le processeur pour laisser passer un peu de temps(1 cycle d’horloge).S’utilise essentiellement pour créer des temporisations.

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0000 0xx0 0000

0 0 0 0

- Exemple de programme:

NOP

Page 99: le PIC_16F84 livre

99

OPTIONload OPTION register

- NB : cette instruction est spécifique au 16F84.

Microchip recommande de ne pas l’utiliser, dans le but de laisser lesprogrammes (écrits pour ce type de microcontrôleur) compatibles avecceux écrits pour d’autres modèles de PIC.Il suffit de le savoir.Mais ceci n’est pas un obstacle pour nous, du fait que notre intérêt estexclusivement tourné vers le 16F84.

- Charge le registre OPTION, c’est à-dire le registre qui sert à configurer leTMR0 ( l’horloge interne du microcontrôleur) ainsi que le prédiviseur.

- S’agissant d’un registre à lecture/écriture simultanée, on ne peut pas yécrire directement, mais il faut obligatoirement transiter par le registre W.

En programmation, on commence par écrire l’octet de configuration dansW. Puis l’instruction OPTION - en même temps qu’elle adresse ce registre-y copie automatiquement l’octet de configuration.

Page 100: le PIC_16F84 livre

100

RETFIERETurn From IntErrupt

- Retour au programme principal après exécution d’un sous-programmed’interruption.Charge le PC (Program Counter : compteur d’instructions) avec la valeurqui se trouve au sommet de la pile (stack) ; ce qui provoque le retour auprogramme principal.

- Lorsqu’une interruption est demandée, le microcontrôleur, avant de sauterà l’adresse 004 de l’EEPROM mémoire de programme, sauve la valeur duProgram Counter dans la pile.Cette valeur - comme dans une pile d’assiettes - se place tout en haut de lapile (dans laquelle il y a seulement 8 places).A la fin du sous-programme de réponse à l’interruption, le µC rencontrel’instruction RETFIE par laquelle il récupère la valeur se trouvant ausommet de la pile (correspondant à la dernière valeur entrée) et lapositionne dans le Program Counter, faisant ainsi revenir le programme àson flux normal (pile de type LIFO : Last In, First Out).

- Après 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 d’horloge

- Encodage de l’instruction:

13 000 0000 0000 1001

0 0 0 9

- Exemple de programme :

RETFIE

Page 101: le PIC_16F84 livre

101

RETLWRETurn from subroutine with Literal in W

- Instruction jusqu’à un certain point similaire à RETURN, en ce sensqu’elle ferme un sous-programme et provoque le retour au programmeprincipal à l’endroit où il avait été abandonné ; mais avec une particularitéen 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 d’horloge

- Encodage de l’instruction:

13 011 01xx kkkk kkkk

3 4 ↓↓↓↓ ↓↓↓↓ Valeur de l’octet avec laquelle on veut charger W en rentrant du sous-programme (valeur pouvant aller de 00 à FF).

Page 102: le PIC_16F84 livre

102

RETURNRETURN from subroutine

- Retour d’un sous-programme.Le PC (Program Counter) est chargé avec l’adresse se trouvant au sommetde la pile.

- C’est l’instruction qui ferme un sous-programme et provoque le retour auprogramme principal à l’endroit auquel il avait été abandonné.

- Cette instruction prend 2 cycles d’horloge

- Encodage de l’instruction:

13 000 0000 0000 1000

0 0 0 8

Page 103: le PIC_16F84 livre

103

RLFRotate Left File

- Rotation à gauche.

← C ← 7 6 5 4 3 2 1 0 ←

- Effectue le déplacement d’une position vers la gauche des bits de l’octetsitué (en mémoire RAM) à l’adresse indiquée de suite (adresse compriseentre 0C et 4F) en utilisant le bit de CARRY du registre d’état : le contenudu bit de CARRY devient le nouveau bit 0 de l’octet ayant effectué larotation à gauche, tandis que l’ancien bit 7 entre dans CARRY ; avec deuxvariantes : le résultat de la rotation peut être rangé soit dans le registre W,soit dans la mémoire RAM à la place de l’octet utilisé pour effectuer larotation (la nouvelle valeur prend la place de l’ancienne).

- NB : Avant d’utiliser cette instruction il convient de préalablement effacerle bit de CARRY.Car, à supposer que dans CARRY il ait un 1, après une rotation à gauche de00000001 on aurait 00000011 alors qu’on s’attendait à 00000010.L’instruction qui efface le bit de CARRY est : BCF STATUS,0(efface le bit zéro du registre STATUS, c’est à-dire le bit de CARRY).

- Cette instruction affecte le bit C du registre d’état

- 1 cycle d’horloge

Page 104: le PIC_16F84 livre

104

- Encodage de l’instruction:

13 000 1101 dfff ffff

0 D ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet dont on veut effectuer la rotation à gauche.

Page 105: le PIC_16F84 livre

105

RRFRotate Right File

- Rotation à droite.

→ C → 7 6 5 4 3 2 1 0 →

- Effectue le déplacement d’une position vers la droite des bits de l’octetsitué (en mémoire RAM) à l’adresse indiquée de suite (adresse compriseentre 0C et 4F) en utilisant le bit de CARRY du registre d’état : le contenudu bit de CARRY devient le nouveau bit 7 de l’octet ayant effectué larotation à droite, tandis que l’ancien bit 0 entre dans CARRY ; avec deuxvariantes : le résultat de la rotation peut être rangé soit dans le registre W,soit dans la mémoire RAM à la place de l’octet utilisé pour effectuer larotation (la nouvelle valeur prend la place de l’ancienne).

- NB : Avant d’utiliser cette instruction il convient de préalablement effacerle bit de CARRY .

L’instruction qui efface le bit de CARRY est : BCF STATUS,0(efface le bit zéro du registre STATUS, c’est à-dire le bit de CARRY).

- Cette instruction affecte le bit C du registre d’état

- 1 cycle d’horloge

Page 106: le PIC_16F84 livre

106

- Encodage de l’instruction:

13 000 1100 dfff ffff

0 C ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet dont on veut effectuer la rotation à droite.

Page 107: le PIC_16F84 livre

107

SLEEP

- Mise en veilleuse.Cette instruction s’utilise non pas pour mettre le µC hors tension, maispour arrêter le séquencement des instructions (ralentir le signal d’horlogejusqu’à l’extrême limite : la fréquence zéro).Pendant cette mise en veilleuse, l’horloge externe (faisant partie de ce quenous avons appelé le cortège des invariants) est coupée. Le flux duprogramme est bloqué.Seul le chronomètre du Watch Dog (chien de garde) reste actif.La consommation du boîtier (qui normalement est de 2 mA) tombe à 30µA.Parmi les causes pouvant réveiller le µC retenons : une demanded’interruption, ou un signal provenant du chronomètre (timer) du chien degarde.

- Cette instruction affecte deux bits du registre d’état :TO (Time Out) passe à 1PD (Power Down) passe à 0 En plus, elle met à zéro le chronomètre du chien de garde, ainsi que le prédiviseur.

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0000 0110 0011

0 0 6 3

Page 108: le PIC_16F84 livre

108

SUBLWSUBtract Literal with W

- Soustrait le literal (valeur immédiate représentée par un octet pouvantaller de 00 à FF) du contenu du registre W, et place le résultat dans W.

Literal diminuende - W - diminuteur = résultat = différence

- Cette instruction affecte 3 bits du registre d’état :- le flag C (Carry)- le flag DC (Digit Carry)- le flag Z (Zero)

- 1 cycle d’horloge

- Encodage de l’instruction:

13 011 110x kkkk kkkk

3 C ↓↓↓↓ ↓↓↓↓ Valeur de l’octet (literal) représentant le diminuende (valeur pouvant aller de 00 à FF).

Page 109: le PIC_16F84 livre

109

SUBWFSUBtract W from File

- Soustrait la valeur contenue dans le registre W de la valeur se trouvant (enmémoire RAM) à l’adresse indiquée de suite (adresse comprise entre 0C et4F) ; avec deux variantes : le résultat (différence) peut être rangé soit dansle registre W, soit dans la mémoire RAM à la place du diminuende.

File (valeur se trouvant à l’emplacement RAM, le diminuende) - W (valeur contenue dans le registre W, le diminuteur ) Résultat différence

- Cette instruction affecte 3 bits du registre d’état :- le flag C (Carry)- le flag DC (Digit Carry)- le flag Z (Zero)

- 1 cycle d’horloge

- Encodage de l’instruction:

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 différence.

Page 110: le PIC_16F84 livre

110

SWAPFSWAP File

- Echange les quatre bits de poids fort d’un octet se trouvant (en mémoireRAM) à l’adresse indiquée de suite (adresse comprise entre 00 et 4F), avecses propres quatre bits de poids faible :

1 0 0 0 1 0 1 1 devient

1 0 1 1 1 0 0 0

Avec deux variantes : le résultat de l’échange peut être placé soit dans leregistre W, soit dans la mémoire RAM en lieu et place de l’octet utilisépour effectuer le swap.

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 1110 dfff ffff

0 E ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet dont on veut échanger les quartets.

Page 111: le PIC_16F84 livre

111

TRISTRIState port

- NB : cette instruction est spécifique au 16F84.

Microchip recommande de ne pas l’utiliser, dans le but de laisser lesprogrammes (écrits pour ce type de microcontrôleur) compatibles avecceux écrits pour d’autres modèles de PIC.Il suffit de le savoir.Mais ceci n’est pas un obstacle pour nous, du fait que notre intérêt estexclusivement tourné vers le 16F84.

- Charge le registre TRIS (A ou B), et met les lignes de port à hauteimpédance.Ce registre configure, c’est à dire définit le sens de fonctionnement dechacune des lignes des ports A et B ; assigne à chaque ligne soit le rôled’entrée, soit le rôle de sortie, sans pour autant provoquer aucune entrée niaucune sortie.

- Il s’agit d’un registre de 8 bits, pouvant tous se programmerindividuellement par 0 ou par 1 :

0 = la ligne de port (qui lui correspond) est configurée comme sortie

1 = la ligne de port (qui lui correspond) est configurée comme entrée

- S’agissant d’un registre à lecture/écriture simultanée, on ne peut pas yécrire directement, mais il faut obligatoirement transiter par le registre W.

En programmation, on commence par écrire l’octet de configuration dansW. Puis l’instruction TRIS (A ou B), en même temps qu’elle adresse ceregistre, copie automatiquement l’octet de configuration dans le port A oudans le port B.

Page 112: le PIC_16F84 livre

112

- Encodage de l’instruction :

13 0 00 0000 0110 0fff

0 0 6 ↓↓↓ Ne peut prendre que deux valeurs :

101 (pour désigner le port A) 110 (pour désigner le port B)

- Exemple de programmation :

MOVLW 00000100 (en binaire)MOVWF TRISB

On charge dans le registre W l’octet de configuration de port (ligne 2 enentrée, toutes les autres lignes en sortie), que l’instruction TRIS valide.

A partir de ce moment le port est configuré, mais aucune donnée n’y entre,aucune donnée n’y sort.Les lignes du port sont mises en haute impédance (tristate).

Page 113: le PIC_16F84 livre

113

XORLWEXclusive OR Literal and W

- Effectue un OU exclusif (Exclusive OR) entre la valeur immédiate duliteral et l’octet se trouvant dans le registre W.Le résultat est rangé dans W.

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

- Un OR exclusif permet de comparer deux octets bit à bit.Si les bits de même poids sont au même niveau, le résultat est zéro.Si par contre ils sont à des niveaux différents, le résultat est 1.Exemple de XOR entre deux octets :

00110011 01110010

résultat = 01000001

- Un OR exclusif permet d’inverser un état logique.Exemple : Soit au départ l’octet 11111111.Si le XOR se fait avec 00000000 , rien ne change ; le résultat est : 11111111.Si par contre le XOR se fait avec 00000001,le résultat est :11111110(Alors que les zéros ne font rien changer, les 1 provoquent un basculementd’état).

- Table de vérité d’une porte OU exclusif :

A B Q0 0 00 1 11 0 11 1 0

Page 114: le PIC_16F84 livre

114

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 011 1010 kkkk kkkk

3 A ↓↓↓↓ ↓↓↓↓ Valeur de l’octet avec lequel on veut effectuer le OU exclusif (valeur pouvant aller de 00 à FF).

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

Elle sert lorsque – dans un octet – on a besoin d’inverser un bit enparticulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à ignorer) et de 1 (auxemplacements où se trouvent les bits qu’on veut inverser).

Exemple : on souhaite inverser les bits 7, 6, 5 et 4 de l’octet 01111010.

On prépare alors le masque 11110000 et on fait un OU logique entre l’octetet le masque. Comme ceci :

01111010 (octet)11110000 (masque)

Ce qui donne : 10001010 (résultat)

L’instruction XORLW a donc bien inversé l’état logique des bits7, 6, 5 et 4 de l’octet se trouvant dans W. Les bits qui étaient à 0 sontpassés à 1, et inversement.

Page 115: le PIC_16F84 livre

115

XORWFExclusive OR W and File

- Effectue un OU exclusif (Exclusive OR) entre l’octet se trouvant dans leregistre W et l’octet situé (en mémoire RAM) à l’adresse indiquée de suite(adresse comprise entre 0C et 4F) ; avec deux variantes : le résultat peutêtre rangé soit dans le registre W, soit dans la mémoire RAM à la place del’octet utilisé pour effectuer le OU exclusif (la nouvelle valeur prend laplace de l’ancienne).

- Un OR exclusif permet de comparer deux octets bit à bit.Si les bits de même poids sont au même niveau, le résultat est zéro.Si par contre ils sont à des niveaux différents, le résultat est 1.Exemple de XOR entre deux octets :

00110011 01110010

résultat = 01000001

- Un OR exclusif permet d’inverser un état logique.Exemple : Soit au départ l’octet 11111111.Si le XOR se fait avec 00000000 , rien ne change ; le résultat est : 11111111.Si par contre le XOR se fait avec 00000001, le résultat est :11111110.(Alors que les zéros ne font rien changer, les 1 provoquent un basculementd’état).

- Table de vérité d’une porte OU exclusif :

A B Q0 0 00 1 11 0 11 1 0

Page 116: le PIC_16F84 livre

116

- Cette instruction affecte le bit Z du registre d’état

- 1 cycle d’horloge

- Encodage de l’instruction:

13 000 0110 dfff ffff

0 6 ↓↓↓↓ ↓↓↓↓ (W) 0 ou (registre) 1 ↓↓↓ ↓↓↓↓

De 000 1100 à 100 1111 Adresse de la RAM (entre 0C et 4F)

où se trouve l’octet avec lequel on veut effectuer le OU exclusif.

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

Elle sert essentiellement lorsque – dans un octet – on a besoin d’inverser unbit en particulier (ou certains bits en particulier).

Pour cela il suffit de préparer un masque, c’est à dire on octet composé de 0(aux emplacements où se trouvent les bits à ignorer) et de 1 (auxemplacements où se trouvent les bits qu’on veut inverser).

Exemple : on souhaite inverser les bits 7, 6, 5 et 4 de l’octet 01111010.

On prépare alors le masque 11110000 et on fait un OU logique entre l’octetet le masque. Comme ceci :

01111010 (octet)11110000 (masque)

Ce qui donne : 10001010 (résultat)

L’instruction XORWF a donc bien inversé l’état logique des bits 7,6, 5 et 4 de l’octet en mémoire. Les bits qui étaient à 0 sont passés à 1, etinversement.

Page 117: le PIC_16F84 livre

117

ENCODAGE des INSTRUCTIONS

Signification des lettres utilisées dans l’encodage desinstructions :

b = position du bit dans l’octet sur lequel on opère ( il peut aller de 0 à 7)

d = registre de destination, avec deux variantes : d = 0 : le résultat est placé dans W d = 1 : le résultat est placé dans le registre

f = généralement adresse de la mémoire RAM où se trouve l’octet concerné ( dans l’espace mémoire compris entre 00 et 4F). Dans l’instruction TRIS : octet de configuration de port

k = valeur du literal (ou adresse, dans les instructions CALL et GOTO)

w = registre W (accumulateur)

x = valeur indifférente : peut être soit 0 soit 1. L’assembleur lui donne automatiquement la valeur 0 (forme recommandée par Microchip)

Page 118: le PIC_16F84 livre

118

Exemples de programmesécrits en langage ASSEMBLEUR

Programme 1

a) Organigramme

Page 119: le PIC_16F84 livre

119

b) Fichier à extension .asm

;Titre du programme : PROG1;Ce programme allume la LED branchée sur la;sortie RB0 (bit 0 du Port B) et la laisse;indéfiniment allumée.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84RADIX HEXINCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEUR de RESET;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05 ;Saut introduit pour passer au-dessus

;des 5 premières adresses de la mémoire;EEPROM (00 – 01 – 02 – 03 et 04).

CLRF PORTB ;Initialise le Port B.

BSF STATUS,RP0 ;Met à 1 (set) le bit 5 (RP0) du;registre d’état (STATUS).;Autrement dit : sélectionne la;page 1 du Register File (adresses;de 80 à 8B) dans laquelle se trouve;le Registre STATUS (à l’adresse 83).

MOVLW b’00000000’ ;Met la valeur binaire 00000000 dans;le registre W, matérialisant ainsi notre;intention d’utiliser les 8 lignes du;Port B comme SORTIES.

MOVWF TRISB ;Port B configuré, mais encore en;haute impédance (Trhee-state).

BCF STATUS,RP0 ;Retour à la page 0 du Register File.

Page 120: le PIC_16F84 livre

120

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++LOOP BSF PORTB,0 ;Allume la LED, car l’instruction

; « BSF » met à 1 (set).;Dans le cas présent, elle met à 1 le;bit zéro du Port B (PORTB,0).

GOTO LOOP ;Le programme se reboucle.;La LED reste indéfiniment allumée.

END ;Fin du programme.

c) Fichier à extension .hex

020000000528D106000A00860183160030A0080010008600831206140A288102400E00F13F8000000001FF

Page 121: le PIC_16F84 livre

121

Programme 2

a) Organigramme

Page 122: le PIC_16F84 livre

122

b) Fichier à extension .asm

;Titre du programme : PROG2;Ce programme fait clignoter indéfiniment la LED branchée sur la;sortie RB0 (bit 0 du Port B).;Le programme comporte une temporisation (DELAI) pour rendre;perceptibles les allumages et les extinctions de la LED, sinon les;transitions auraient lieu à très grande vitesse et notre œil ne verrait;pas les clignotements.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84RADIX HEXINCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS DES VARIABLES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++COMPT1 EQU 0C ;On met la variable COMPT1 à

;l’adresse RAM 0C.COMPT2 EQU 0D ;On met la variable COMPT2 à

;l’adresse RAM 0D.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEUR DE RESET;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05 ;Saut introduit intentionnellement pour faire

;démarrer le programme à l’adresse EEPROM 05.

CLRF PORTB ;Efface les 8 bits du Port B.

BSF STATUS,RP0 ;Met à 1 (set) le bit 5 (RP0) du;registre d’état (STATUS).;Autrement dit : sélectionne la;page 1 du Register File (adresses;de 80 à 8B) dans laquelle se trouve;le Registre STATUS (à l’adresse 83).

MOVLW b’00000000’ ;Met la valeur binaire 00000000 dans;le registre W, matérialisant ainsi notre;intention d’utiliser les 8 lignes du

Page 123: le PIC_16F84 livre

123

;Port B comme SORTIES.;La notation b’00000000’ indique que;la valeur 00000000 est à interpréter;en tant que chiffre binaire.

MOVWF TRISB ;Port B configuré, mais encore en;haute impédance (Trhee-state).

BCF STATUS,RP0 ;Retour à la page 0 du Register File.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++MAIN BCF PORTB,0 ;LED éteinte car l’instruction

; « BCF » met à 0 (clear).;Ici, elle met à 0 le bit 0 du;Port B (PORTB,0).

CALL DELAI ;Appelle le sous-programme de;retard (DELAI).

BSF PORTB,0 ;LED allumée, car l’instruction; « BSF » met à 1 (set).;Ici elle met à 1 le bit 0 du;Port B (PORTB,0).

CALL DELAI ;On appelle à nouveau le;sous-programme de retard.

GOTO MAIN ;Retour au programme principal.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; SOUS-PROGRAMME de TEMPORISATION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++DELAI DECFSZ COMPT1,1 ;Décrémente COMPT1et - s’il n’est pas

GOTO DELAI ;à zéro - va à DELAI

MOVLW .255 ;Charge la variable COMPT1 (adresseMOVWF COMPT1 ;RAM 0C) avec 255 (en décimal).

DECFSZ COMPT2,1 ;Décrémente COMPT2, et s’il n’est pasGOTO DELAI ;à zéro, va à DELAI

MOVLW .255 ;Recharge COMPT1 avec 255MOVWF COMPT1

MOVLW .255 ;Recharge COMPT2 avec 255MOVWF COMPT2

RETURN ;Fin du sous-programme DELAI

END ;Fin du programme.

Page 124: le PIC_16F84 livre

124

c) Fichier à extension .hex

020000000528D106000A00860183160030A0100010008600831206100F2006140F200A288C0B6E100020000F28FF308C008D0B0F28FF308C00FF3025040030008D0008003702400E00F13F8000000001FF

Page 125: le PIC_16F84 livre

125

PROGRAMME 3

a) Organigramme

Page 126: le PIC_16F84 livre

126

b) Fichier à extension .asm

;Titre du programme : PROG3;Ce programme fait clignoter un certain nombre de fois la LED;branchée sur la sortie RB0 (bit 0 du PORT B), puis fait clignoter;un certain autre nombre de fois la LED branchée sur la sortie;RB1 (bit 1 du Port B), et recommence le cycle indéfiniment.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84RADIX HEXINCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS DES VARIABLES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++COMPT1 EQU 0C ;On met la variable COMPT1 à

; l’adresse RAM 0C.COMPT2 EQU 0D ; On met la variable COMPT2 à

; l’adresse RAM 0D.nFOIS EQU 0E ; On met la variable nFOIS à

; l’adresse RAM 0E.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEUR DE RESET;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05 ;Saut introduit intentionnellement pour faire

;démarrer le programme à l’adresse EEPROM 05.

CLRF PORTB ;Efface les 8 bits du Port B.

BSF STATUS,RP0 ;Met à 1 (set) le bit 5 (RP0) du;registre d’état (STATUS).;Autrement dit : sélectionne la;page 1 du Register File (adresses;de 80 à 8B) dans laquelle se trouve;le Registre STATUS (à l’adresse 83).

MOVLW b’00000000’ ;Met la valeur binaire 00000000 dans;le registre W, matérialisant ainsi notre;intention d’utiliser les 8 lignes du

Page 127: le PIC_16F84 livre

127

;Port B comme SORTIES.;La notation b’00000000’ indique que;la valeur 00000000 est à interpréter;en tant que chiffre binaire.

MOVWF TRISB ;Port B configuré, mais encore en;haute impédance (Trhee-state).

BCF STATUS,RP0 ;Retour à la page 0 du Register File.

GOTO MAIN1 ;Renvoi à l’adresse correspondant à;la label MAIN1.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; SOUS-PROGRAMME de TEMPORISATION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++TEMPO MOVLW .255 ;Charge COMPT2 (« grande boucle »)

MOVWF COMPT2 ;avec la valeur décimale 255.

DELAI2 MOVLW .255 ;Charge COMPT1 (« petite boucle »)MOVWF COMPT1 ;avec la valeur décimale 255.

DELAI1 DECFSZ COMPT1,1 ;Décrémente COMPT1et - s’il n’est pasGOTO DELAI1 ;à zéro - va à DELAI1

DECFSZ COMPT2,1 ;Décrémente COMPT2, et s’il n’est pasGOTO DELAI2 ;à zéro, va à DELAI2.

RETURN ;Fin du sous-programme TEMPO.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++MAIN1 MOVLW .2 ;On définit le nombre de cycles de la

MOVWF nFOIS ;première phase (ici : 2 clignotements)

LED1 BCF PORTB,0 ;LED éteinte car l’instruction; « BCF » met à 0 (clear).;Ici, elle met à 0 le bit 0 du;Port B (PORTB,0).

CALL TEMPO ;Appelle le sous-programme de;retard (TEMPO).

BSF PORTB,0 ;LED allumée, car l’instruction; « BSF » met à 1 (set).;Ici elle met à 1 le bit 0 du;Port B (PORTB,0).

CALL TEMPO ;On appelle à nouveau le;sous-programme de retard.

Page 128: le PIC_16F84 livre

128

DECFSZ nFOIS,1 ;Décrémente le nombre de cyclesGOTO LED1 ;affectés à LED1, et si le compteurGOTO MAIN2 ;n’est pas arrivé à 0, effectue un

;nouveau cycle. Si par contre nFOIS;est à 0, l’instruction « GOTO LED1 »;est ignorée et le programme saute à; « GOTO MAIN2 ».

MAIN2 MOVLW .5 ;On définit le nombre de cycles de laMOVWF nFOIS ;deuxième phase (ici :5 clignotements)

LED2 BCF PORTB,1 ;LED éteinte car l’instruction; « BCF » met à 0 (clear).;Ici, elle met à 0 le bit 1 du;Port B (PORTB,1).

CALL TEMPO ;Appelle le sous-programme de;retard (TEMPO).

BSF PORTB,1 ;LED allumée, car l’instruction; « BSF » met à 1 (set).;Ici elle met à 1 le bit 1 du;Port B (PORTB,1).

CALL TEMPO ;On appelle à nouveau le;sous-programme de retard.

DECFSZ nFOIS,1 ;Décrémente le nombre de cyclesGOTO LED2 ;affectés à LED2, et si le compteurGOTO MAIN1 ;n’est pas arrivé à 0, effectue un

;nouveau cycle. Si par contre nFOIS;est à 0, l’instruction « GOTO LED2 »;est ignorée et le programme saute à; « GOTO MAIN1 ».

END ;Fin du programme.

Page 129: le PIC_16F84 livre

129

c) Fichier à extension .hex

020000000528D106000A00860183160030A010001000860083121428FF308D00FF308C008C0B7B100020000F288D0B0D28080001308E0006140B20C01000300006100B208E0B16281D2802308E008614090C0040000B2086100B208E0B1F281428AC00000001FF

Page 130: le PIC_16F84 livre

130

PROGRAMME 4

a) Organigramme

Page 131: le PIC_16F84 livre

131

b) Fichier à extension .asm

;Titre du programme : PROG4;Ce programme fait clignoter une LED;branchée sur la sortie RB0 (bit 0 du PORT B), si l’entrée RA4;(bit 4 du Port A) est activée.;En désactivant RA4, la LED s’éteint.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84RADIX HEXINCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++STATUS EQU 03 ; Aurions pu ne pas lesRP0 EQU 05 ; déclarer, car cesPORTA EQU 05 ; équivalences sontPORTB EQU 06 ; définies dans le fichierTRISA EQU 85 ; INCLUDE « P16F84.INC ».TRISB EQU 86 ; C’est redondant. Mais ce n’estSTART EQU 05 ; pas interdit.COMPT1 EQU 0C ;On met la variable COMPT1 à

; l’adresse RAM 0C.COMPT2 EQU 0D .On met la variable COMPT2 à

; l’adresse RAM 0D.nFOIS EQU 0E ;On met la variable nFOIS

;à l’adresse RAM 0E.

ORG 00 ;Vecteur de Reset.

GOTO START ;Renvoi à l’adresse EEPROM 05 (hexa)

ORG 05 ;Voulons intentionnellement faire;démarrer le programme à l’adresse EEPROM 05.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

CLRF PORTB ;Efface les 8 bits du Port B.

BSF STATUS,RP0 ;Met à 1 (set) le bit 5 (RP0) du;registre d’état (STATUS).;Autrement dit : sélectionne la;page 1 du Register File pour atteindre;le Registre TRISB (à l’adresse 86).

Page 132: le PIC_16F84 livre

132

MOVLW 00 ;Met des zéros dans le registre W,;pour les porter ensuite dans le;Registre TRISB

MOVWF TRISB ;matérialisant ainsi notre intention;d’utiliser les 8 lignes du Port B;comme sorties.

MOVLW 0xFF ;Met 11111111 dans le Registre W,;pour les porter ensuite dans le;Registre TRISA

MOVWF TRISA ;matérialisant ainsi notre intention;d’utiliser les 8 lignes du Port A;comme entrées.

BCF STATUS,RP0 ;Retour à la page 0 du Register File.

GOTO MAIN ;Renvoi au programme principal.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; SOUS-PROGRAMMES;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

TEMPO ;Début du sous-programme TEMPO

MOVLW .255 ;Charge COMPT2 (« grande boucle »)MOVWF COMPT2 ;avec la valeur décimale 255

DELAI2 MOVLW .255 ;Charge COMPT1 («petite boucle »)MOVWF COMPT1 ;avec la valeur décimale 255

DELAI1 DECFSZ COMPT1,1 ;Décrémente COMPT1, et s’il n’est pasGOTO DELAI1 ;arrivé à zéro, va à DELAI1. Ces deux

;instructions permettent de vider la;variable COMPT1 (qui est une zone;RAM et qui pourrait, au démarrage du;système, contenir une valeur;aléatoire), pour ensuite lui donner;une valeur précise.

DECFSZ COMPT2,1 ;Décrémente COMPT2, et s’il n’est;pas à zéro, va à DELAI2, « grande;boucle » engendrant un retard long

GOTO DELAI2 ;COMPT2 fois la valeur de COMPT1.

RETURN ;Fin du sous-programme TEMPO;et retour au programme principal;à la ligne située juste après;l’instruction « CALL TEMPO ».

LED ;Début du sous-programme « LED »

BSF PORTB,0 ;Allume la LED.

Page 133: le PIC_16F84 livre

133

CALL TEMPO ;Appel du sous-programme de;temporisation.

BCF PORTB,0 ;Eteint la LED.

CALL TEMPO ;Nouvel appel du sous-;programme de temporisation.

RETURN ;Fin du sous-programme « LED ».

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++MAIN BTFSS PORTA,4 ;Est-ce que l’entrée RA4 est activée ?

GOTO MAIN ;NON. Alors on continue à tester.

CALL LED ;OUI. Dans ce cas on appelle le;sous-programme LED.

GOTO MAIN ;Retour au programme principal.

END

c) Fichier à extension .hex

020000000528D106000A00860183160030A0100010008600FF30850083121B28FF308D00FF30E3100020008C008C0B11288D0B0F28080006140D20560E00300006100D200800051E1B2816201B289800000001FF

Page 134: le PIC_16F84 livre

134

PROGRAMME 5

Fichier à extension .asm

;Titre du programme : PROG5;Ce programme fait clignoter une LED;en utilisant les interruptions générées;par le timer interne (TMR0).

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84INCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SAVE_W EQU 0C ;Déclaration deSAVE_STAT EQU 0D ;deux variables.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEURS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START

ORG 04 ;Vecteur d’interruption.GOTO INT_VECT

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; START;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

BSF STATUS,RP0 ;On passe en Page 1.

MOVLW b’00000000’ ;Port B en sortie.MOVWF TRISB

Page 135: le PIC_16F84 livre

135

MOVLW b’00000111’ ;On configure OPTION.MOVWF OPTION_REG .Le pré diviseur divise par 255.

BCF STATUS,RP0 ;On revient en Page 0.

CLRF TMR0 ;Timer à zéro.

CLRF PORTB ;Toutes LED éteintes.

MOVLW b’10100000’ ;On configure INTCON.MOVWF INTCON ; - GIE (bit 7) à 1

; - T0IE (bit 5) à 1; - tous les autres bits à zéro.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++LOOP GOTO LOOP ;Boucle introduite juste pour occuper

;le processeur, car le but du programme;est d’attendre l’apparition du signal;d’interruption.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME d’INTERRUPTION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

INT_VECT MOVWF SAVE_W ;Phase de PUSH (store).

MOVF STATUS,W ;On sauve le Registre WMOVWF SAVE_STAT ;ainsi que le Registre

;STATUS.BCF INTCON,T0IF ;On met à zéro le flag

;T0IF qui passe à 1 à chaque;débordement du TMR0;(bit 2).

BTFSC PORTB,0GOTO LED_OFFBSF PORTB,0 ;On allume la LED RB0.GOTO FIN

LED_OFF BCF PORTB,0 ;On éteint la LED RB0.

FIN MOVF SAVE_STAT,W ;Phase de POP (restore).MOVWF STATUS ;On remet en place leMOVF SAVE_W,W :Registre STATUS, ainsi

;que le Registre W.

RETFIE ;Lorsqu’une interruption est générée,;le PIC met automatiquement à zéro le;bit GIE du Registre INTCON pendant;toute la durée d’exécution du;sous-programme d’interruption (pour

Page 136: le PIC_16F84 livre

136

;empêcher la prise en compte d’une;nouvelle interruption pouvant surgir,;alors qu’il est justement en train d’en;traiter une. (On dit que pendant ce;temps-là les interruptions sont;masquées).:L’instruction RETFIE, en même temps;qu’elle provoque le retour au;programme principal, remet à 1 le bit;GIE (Global Interrupt Enable).

END

Page 137: le PIC_16F84 livre

137

PROGRAMME 6

Fichier à extension .asm

;Titre du programme : PROG6;Ce programme fait clignoter une LED;en utilisant les interruptions générées;par le timer interne (TMR0), et - en plus - allume et laisse;toujours allumée une deuxième LED branchée sur RB1.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84INCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SAVE_W EQU 0CSAVE_STAT EQU 0D ;VariablesCHOIX EQU 0ECOMPT EQU 0F

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEURS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START

ORG 04 ;Vecteur d’interruption.GOTO INT_VECT

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; START;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

BSF STATUS,RP0 ;On passe en Page 1.

Page 138: le PIC_16F84 livre

138

MOVLW b’00000000’ ;Port B en sortie.MOVWF TRISB

MOVLW b’00000111’ ;On configure OPTION.MOVWF OPTION_REG .Le pré diviseur divise par 255.

BCF STATUS,RP0 ;On revient en Page 0.

CLRF TMR0 ;Timer à zéro.

CLRF PORTB ;Toutes LED éteintes.

MOVLW b’10100000’ ;On configure INTCON.MOVWF INTCON ; - GIE (bit 7) à 1

; - T0IE (bit 5) à 1; - tous les autres bits à zéro.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++MAIN BSF PORTB,1 ;On allume la LED (BR1) et on la

GOTO MAIN ;laisse toujours allumée, en attendant;l’apparition d’une interruption.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME d’INTERRUPTION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

INT_VECT MOVWF SAVE_W ;Phase de PUSH (store).MOVF STATUS,W ;On sauve WMOVWF SAVE_STAT ;et STATUS dans la RAM.

BCF INTCON,T0IF ;On met à zéro le flag;T0IF qui passe à 1 à chaque;débordement du TMR0;(bit 2).

BTFSC PORTB,0GOTO SUITEBSF PORTB,0 ;On allume la LED RB0.GOTO FIN

SUITE BCF PORTB,0 ;On éteint la LED RB0.

FIN MOVF SAVE_STAT,W ;Phase de POP (restore).MOVWF STATUS ;On remet en placeMOVF SAVE_W,W :STATUS et W.

RETFIE ;Lorsqu’une interruption est générée,;le PIC met automatiquement à zéro le;bit GIE du Registre INTCON pendant;toute la durée d’exécution du;sous-programme d’interruption (pour

Page 139: le PIC_16F84 livre

139

;empêcher la prise en compte d’une;nouvelle interruption pouvant surgir,;alors qu’il est justement en train d’en;traiter une. (On dit que pendant ce;temps-là les interruptions sont;masquées).:L’instruction RETFIE, en même temps;qu’elle provoque le retour au;programme principal, remet à 1 le bit;GIE (Global Interrupt Enable).

END

Page 140: le PIC_16F84 livre

140

PROGRAMME 7

Fichier à extension .asm

;Titre du programme : PROG7;Ce programme active un chenillard sur 4 LED;utilisant les bits 0, 1, 2, et 3 du Port B.;Chaque LED s’allume pendant un temps calibré de juste 1 minute;(60 secondes) fourni par le TMR0 en association avec un compteur.

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DIRECTIVES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

PROCESSOR 16F84INCLUDE « P16F84.INC »__CONFIG 3FF1

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; DECLARATIONS des VARIABLES;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++SHIFT EQU 0CCOMPT1 EQU 0D

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; VECTEURS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

ORG 00 ;Vecteur de Reset.GOTO START ;Renvoi à l’adresse EEPROM 05

ORG 04 ;Vecteur d’interruption.GOTO INT_VECT ;Renvoi au programme d’interruption.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; INITIALISATIONS;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++START ORG 05 ;Saut introduit intentionnellement

;pour passer au-dessus des adresses;EEPROM 01 – 02 – 03 – et 04,;et obliger le programme à démarrer;à l’adresse 05.

BSF STATUS,RP0 ;On passe en Page 1 pour atteindre;TRISB (adresse 86) et OPTION;(adresse 81).

MOVLW b’00000000’ ;Port B configuré en sortie (0=sortie).MOVWF TRISBMOVLW b’00000100’ ;Pré diviseur affecté au TMR0, et

Page 141: le PIC_16F84 livre

141

MOVWF OPTION_REG ;configurer pour diviser par 32.

BCF STATUS,RP0 ;On revient en Page 0.

MOVLW .125MOVWF COMPT1

MOVLW b’10100000’ ;On configure le Registre INTCON :MOVWF INTCON ; - GIE (bit 7) à 1

; - T0IE (bit 5) à 1; - tous les autres bits à zéro

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME PRINCIPAL;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++LOOP1 GOTO LOOP1 ;Boucle introduite pour occuper le

;processeur, car le but principal du;programme est d’attendre l’apparition;du signal d’interruption pour;déclencher l’animation du chenillard.

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; PROGRAMME d’INTERRUPTION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++INT_VECT MOVLW b’00000001’ ;On allume la LED

MOVWF SHIFT ;branchée sur RB0,MOVF SHIFT,0 ;en transitant parMOVWF PORTB ;la variable SHIFT.

BCF STATUS,0 ;Pour créer un effet deRLF SHIFT,1 ;chenillard, on utilise

;l’instruction RLF (Rotate;Left File) laquelle :

; 1) provoque un glissement (rotation); à gauche (Left), et; 2) insère le contenu du bit de CARRY; dans le bit 0 du Registre STATUS.; Comme on ignore la valeur (0 ou 1); de la CARRY, il est impératif de; l’effacer au préalable.

BTFSC SHIFT,4 ;Lorsque – de rotation enrotation –

;le 1 baladeur atteint le bit 4, on;provoque un SWAP (croisement) entre;le demi octet de poids faible et le demi;octet de poids fort (on inverse les;demi octets)

SWAPF SHIFT,1 ;Après chaque rotation, l’octet est;gardé dans le même Registre SHIFT,;pour y évoluer.

CALL DELAI ;On appelle le sous programme DELAI

Page 142: le PIC_16F84 livre

142

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; SOUS-PROGRAMME de TEMPORISATION;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

DELAI MOVLW .6 ;On initialise le TMR0 avec la valeurMOVWF TMR0 ;6 (décimal), afin qu’il déborde

;après 250 impulsions.

TEST MOVF TMR0,0 ;On porte la valeur du TMR0 dansBTFSS STATUS,Z ;W pour pouvoir la tester :

;a-t-elle vu arriver (256 – 6);250 impulsions ?;C’est à dire : est-ce que le TMR0;est arrivé à FF ?

GOTO TEST ;Si NON : on continue à tester.

MOVLW .6 ;Si OUI : on recharge TMR0MOVWF TMR0 ;avec 6 (décimal) et ensuiteDECFSZ COMPT1,1 ;on décrémente la variable COMPT1GOTO TEST ;Est-ce que COMPT1 = 0 ?

;NON : on continue à décrémenter.;OUI : 1 seconde s’est écoulée.

MOVLW .6 ;On rechargeMOVWF TMR0 ;le TMR0.

MOVLW .125 ;On rechargeMOVWF COMPT1 ;la variable COMPT1.

RETURN ;Fin du sous-programme DELAI.

END ;Fin du programme.

Page 143: le PIC_16F84 livre

143

MPLAB

Qu’est-ce que MPLAB

MPLAB est un outil de développement spécifique auxmicrocontrôleurs PIC, conçu et fourni gratuitement par Microchip.

Il permet d’écrire, mettre au point et optimiser les programmes,sous Windows.En effet, en plus d’un éditeur et d’un assembleur, il inclut un ensembled’outils permettant non seulement de fabriquer le code objet d’uneapplication, mais aussi de simuler le programme, c’est à dire le voirdérouler à l’écran.

Il supporte plusieurs outils externes, parmi lesquels deux modèlesde programmateurs (PICSTART PLUS et PROMATE 2) et deuxémulateurs (PICMASTER et PICMASTER-CE).

MPLAB est facile à apprendre et à utiliser.

Page 144: le PIC_16F84 livre

144

Il offre beaucoup de flexibilité aux développeurs, notamment grâceaux nombreuses fenêtres pouvant être ouvertes à tout moment lors d’unemise au point, permettant de voir le contenu d’un quelconque emplacementmémoire et d’un quelconque registre.

Page 145: le PIC_16F84 livre

145

Comment obtenir MPLAB

MPLAB est téléchargeable à partir du site Internet de Microchip(www.microchip.com).Si vous aviez besoin de le copier sur disquettes, prévoyez-en un bonnombre (il vous en faudra au moins huit).Vous seriez en possession de fichiers compressés, que vous devriezdécompresser au moyen d’un logiciel adapté (WinZip, par exemple).

Remarquez que MPLAB est un produit en constante évolution, etqu’en fonction de la version qui vous serait fournie, vous pourriez trouverun certain nombre de fichiers modifiés ou différents d’une version à l’autre.

La version que Microchip diffuse au moment où j’écris et dont jeme sers dans mes exemples est la version 5.20

Page 146: le PIC_16F84 livre

146

Caractéristiques requises par le PC pourl’installation de MPLAB

Pour pouvoir être installé, MPLAB nécessite la configurationminimale suivante :

- un PC compatible 486 ou mieux ;

- Microsoft Windows depuis 3.1 jusqu’à la version la plus récente ;

- écran VGA ;

- 8 Méga de mémoire (32 Méga recommandés) ;

- 20 Méga d’espace disponible sur le disque dur ;

- la souris.

Page 147: le PIC_16F84 livre

147

Comment installer MPLAB

MPLAB s’installe automatiquement.

Pendant la procédure d’installation, qui démarre toute seule,plusieurs fenêtres vont s’ouvrir.

La première est celle qui vous souhaite la bienvenue et vousinforme que vous vous préparez à installer la version 5.20 de MPLAB .

Cliquez sur le bouton Next.

Page 148: le PIC_16F84 livre

148

Dans la fenêtre suivante, décochez les éléments que vous nesouhaitez pas installer.

A moins que vous ayez acheté un simulateur ou un émulateur(chose dont je doute fort !), vous ne devriez installer que les outils logicielscourants, et l’aide.

Décochez les autres.

Cliquez ensuite sur le bouton Next.

Page 149: le PIC_16F84 livre

149

Dans la fenêtre Select Language Components, vous ne devriezmaintenir actif que tout ce qui se rapporte à Windows.

Décochez tout ce qui se rapporte au DOS (Je n’aime pas lesprogrammes tournant sous DOS. Vous non plus, j’imagine ! ).

Page 150: le PIC_16F84 livre

150

La fenêtre suivante (Select Destination Directory) vous indique lechemin que l’installation va prendre dans votre PC.

Acceptez, en cliquant sur Next.

La fenêtre suivante vous demande si vous voulez créer des copiesde sauvegardes des fichiers que l’installation pourrait être amenée àremplacer.

Page 151: le PIC_16F84 livre

151

Acceptez la configuration par défaut (No) en cliquant sur Next.

Page 152: le PIC_16F84 livre

152

Dans la fenêtre suivante (Add to Start Menu ?) acceptez lasuggestion Yes .

Page 153: le PIC_16F84 livre

153

Faites la même chose dans la fenêtre suivante :

Acceptez la configuration suggérée, en cliquant sur Next.

Page 154: le PIC_16F84 livre

154

Puis acceptez encore ce qui vous est proposé dans la fenêtre quisuit :

Page 155: le PIC_16F84 livre

155

Vous arrivez enfin à la dernière fenêtre : celle qui vous dit quemaintenant tout est prêt pour que l’installation démarre de vrai !

Cliquez sur Next : c’est parti.

Page 156: le PIC_16F84 livre

156

Une fois l’installation terminée (Installation Completed !), vouspouvez ignorer le Readme proposé. Cliquez sur MPLAB.EXE pour créer unraccourci.

Vous pouvez démarrer.

L’environnement de développement de MPLAB est à vous !

Page 157: le PIC_16F84 livre

157

Comment désinstaller MPLAB

Le fichier INSTALL.LOG enregistre les noms de tous les fichierscopiés au cours de la procédure d’installation.

Le jour que l’on souhaite désinstaller MPLAB, la procédure dedésinstallation utilise INSTALL.LOG pour savoir quels sont les fichiers àsupprimer.

Pour la désinstallation, il suffit de lancer UNWISE.EXE setrouvant dans le répertoire de MPLAB.

Page 158: le PIC_16F84 livre

158

Comment démarrer avec MPLAB

Tout d’abord une constatation : l’écran de démarrage de MPLABressemble à la plupart des écrans Windows, en ce sens qu’il comporte - enhaut - la barre des menus et la barre d’outils, et - en bas - une barre d’étatinformant de la façon dont le système est configuré.

En cliquant sur la toute première icône de la barre d’outils (icôneen couleur représentant trois fiches en perspective : bleu, rouge, jaune):

vous pouvez déjà constater la présence d’autres barres d’outils (il yen a quatre) :

Comme l’on sait que dans tout logiciel bien conçu plus il y ad’outils disponibles et plus le travail est facile, la première évidence est queMPLAB est un logiciel sympathique.

A ajouter aussi que MPLAB est un logiciel sûr, et qu’il possède plusieurspoints d’entrée.

Page 159: le PIC_16F84 livre

159

MPLAB est un logiciel sûr : vous pouvez l’utiliser sans vous fairele moindre souci, car il ne vous laissera jamais modifier ou supprimer quoique ce soit présentant le moindre danger pour l’intégrité des fichiers sansvous mettre en garde et vous demander de confirmer la commande;

MPLAB possède plusieurs points d’entrée : en ce sens que vouspouvez effectuer la même tâche en empruntant des chemins différents, sansobligatoirement obéir à un mode d’emploi préétabli. Il suffit, la plupart desfois, d’adapter et de croiser les grilles écran ouvertes sur le bureau.

Eu égard à cette souplesse, c’est-à-dire : étant donné qu’il estpossible d’emprunter différents chemins pour accomplir la même tâche, lamanière d’écrire un programme et de l’assembler que je vais vous indiquer,est seulement l’une des manières possibles. Au fur et à mesure que vousvous familiariserez avec MPLAB, vous en découvrirez d’autres.

Page 160: le PIC_16F84 livre

160

Première étape : création du projet

Créer un projet

Pour pouvoir aboutir à un programme, MPLAB a besoin denaviguer entre plusieurs fichiers.

Pour cette raison, avant de vous autoriser à écrire un programme,MPLAB vous oblige à créer un projet.

Créer un projet revient à définir entre autres:

1) le nom que va porter le programme ;

2) les fichiers que MPLAB devra utiliser au cours du développement.

Un projet comporte un nom, avec extension .pjt

Convenons d’appeler notre projet phase1 Le nom du projet sera donc : phase1.pjt

Page 161: le PIC_16F84 livre

161

Comment créer un projet

Lancez MPLAB, puis allez dans : Project ↓ New Project

Une fenêtre s’ouvre (New Project) :

MPLAB vous rappelle que le nom du projet doit impérativementêtre suivi de l’extension .pjt

Page 162: le PIC_16F84 livre

162

Dans le champ File Name entrez le nom que vous voulez donner àvotre projet (nous avons convenu de l’appeler phase1) suivi de .pjt(phase1.pjt).

Puis cliquez sur OK.

Cette manœuvre ouvre une autre fenêtre (Edit Project):

Page 163: le PIC_16F84 livre

163

Dans cette fenêtre :

a) le Target Filename (le nom du fichier cible, c’est à direcelui auquel vous voulez aboutir) doit correspondre à celui que vous voulezcréer, portant donc l’extension .hex (phase1.hex) ;

Page 164: le PIC_16F84 livre

164

b) le Development Mode se rapporte bien au MPLAB-SIM Simulator PIC 16F84 et non pas à un autre mode de développement(sinon cliquez sur la touche Change et modifiez en conséquence; puiscliquez en répondant toujours OK) ;

b) le Language Tool Suite doit être celui de Microchip.

Après ces vérifications, cliquez sur la touche OK.

Dès lors, le projet est créé.

Il contient les paramètres qui lui sont nécessaires, et vous pourrezvous y référer par la suite.

Page 165: le PIC_16F84 livre

165

Deuxième étape : écriture du programme source

Pour taper votre programme, allez dans :

File ↓ New

C’est à partir de maintenant que l’écriture à proprement parler desinstructions du programme peut démarrer.

Page 166: le PIC_16F84 livre

166

La fenêtre d’accueil est Untitled1 :

C’est celle de l’éditeur de texte de MPLAB.

Elle est prête à recevoir les lignes de votre programme.

Agrandissez-la à plein écran, et commencez la frappe.

Pour séparer les champs (labels, instructions, opérandes etcommentaires) servez-vous de la touche de tabulation.

N’oubliez pas d’insérer des ; (point-virgule) avant lescommentaires.

Page 167: le PIC_16F84 livre

167

Lorsque toutes les lignes du programme ont été saisies, allez dans :File ↓

Save As...

Une fenêtre s’ouvre (Save File As):

Page 168: le PIC_16F84 livre

168

Dans le champ File Name demandant le nom sous lequel vousvoulez sauvegarder le fichier, tapez le nom du programme - qui doit êtreimpérativement le même que celui du projet, suivi de l’extension .asm ainsique MPLAB vous le rappelle (phase1.asm) - ou allez le chercher dans laliste déroulante, au moyen de l’ascenseur. Puis terminez en cliquant sur latouche OK.

Dès lors, ce fichier à extension .asm contient le « programmesource », que l’on appelle plus couramment « fichier source », ou toutsimplement « source ».

Ce fichier est sauvegardé.

Notez ou retenez bien son nom (phase1.asm), car vous aurezl’occasion d’y revenir.

Page 169: le PIC_16F84 livre

169

Troisième étape: conversion du programme source

en programme objet

Le but de cette opération est de convertir le fichier source (celuidont l’extension est .asm ) en fichier objet, c’est à dire en un fichier ayantle même nom que celui du fichier source, mais avec extension .hex

Autrement dit : convertir phase1.asm en phase1.hex

Pour cela, allez dans :

Project ↓

Edit Project

Page 170: le PIC_16F84 livre

170

Une fenêtre s’ouvre :

Vous connaissez cette fenêtre pour l’avoir vue lors de l’ouverturedu projet.

Assurez-vous d’abord que le nom du fichier figurant dans la zoneTarget Filename correspond à celui qui vous intéresse (phase1.hex).

Le cas échéant, modifiez en cliquant sur la touche Change.

Page 171: le PIC_16F84 livre

171

Cette fenêtre comporte déjà le nom du fichier cible (phase1.hex).Mais, à ce stade, MPLAB demande qu’un nœud soit créé entre le fichiercible et le fichier source.

En bas, à droite, une touche est disponible : Add Node.

Un clic sur cette touche, ouvre la fenêtre Add Node.

Au moyen de l’ascenseur, cherchez-y le fichier de même nom àextension .asm (phase1.asm) et cliquez sur ce fichier pour que son noms’inscrive dans le champ Nom de fichier.

Puis cliquez sur OK.

Page 172: le PIC_16F84 livre

172

La fenêtre Edit Project s’ouvre une nouvelle fois :

Mais cette fois, dans la zone Project Files, figurent les noms dedeux fichiers :

- celui à extension .hex - et celui à extension .asm

Page 173: le PIC_16F84 livre

173

Cliquez sur OK pour verrouiller le nœud entre MPLAB etMPASM (un autre utilitaire de l’environnement intégré) et lier ainsi cesdeux fichiers.

Puis allez dans :

Project ↓

Build All

Dès lors, la compilation démarre: les instructions du fichierphase1.asm écrites en langage assembleur (celui utilisant lesmnémoniques) sont transformées en une suite de 0 et de 1 (seul langagecompréhensible par le 16F84) pour constituer le fichier phase1.hex

Page 174: le PIC_16F84 livre

174

Il arrive qu’une compilation soit bonne du premier coup.

A supposer que tel soit le cas, vous devriez voir s’ouvrir la fenêtresuivante :

Par le message : « Build completed successfully » (la compilations’est achevée avec succès), cette fenêtre vous informe que l’assemblage devotre fichier à extension .asm (phase1.asm) a aboutit à un fichier àextension .hex (phase1.hex)

Félicitations ! Cela veut dire que dans votre programme sourcevous n’avez commis aucune erreur.

Page 175: le PIC_16F84 livre

175

Vous pourriez - tout au plus - voir apparaître des « messages » oudes « warnings », c’est à dire des avertissements, des mises en garde.

Bien que les messages et les warnings n’empêchent pas ledéroulement d’un programme, il est tout de même bon de leur jeter un coupd’œil et d’en comprendre les raisons.

Il suffit de demander à MPLAB de numéroter les lignes de votreprogramme (en cliquant sur l’icône dans l’une des barres des outils, en hautde l’écran)

Puis, de vous reporter à la ligne mentionnée par chaque messageou warning et de l’examiner attentivement. A cette ligne le compilateurassembleur de MPASM n’a pas trouvé une erreur à proprement parler, maisune sorte d’ambiguïté, une anomalie, et il vous prévient que cela pourraitconduire à une exécution défaillante de votre programme.

Page 176: le PIC_16F84 livre

176

Quatrième étape: correction des erreurs

Si votre programme contient des erreurs, la compilation n’aboutitpas.

Avec le message Build failed (construction ratée), vous verriezapparaître des messages mentionnant la ou les erreurs.

Dans ce cas, il faut impérativement revenir au fichier à extension.asm et corriger les erreurs.

Puis, relancer la compilation depuis le début par :Project

↓ Make Project

Vous revenez ainsi à la fenêtre Build Results.

Cela autant de fois que nécessaire, jusqu’à lire le message :« Build completed successfully ».

Page 177: le PIC_16F84 livre

177

Cinquième étape: simulation du programme

Disons-le tout de suite : cette étape est facultative, car elleconcerne la simulation.

La simulation est une sorte de vérification virtuelle permettant devoir à l’écran ce qui se passe lorsque les instructions sont exécutées par lemicrocontrôleur.

On peut la faire de différentes façons :

- en mode pas à pas- en mode step over- en mode exécution automatique- avec ouverture de fenêtres.

Page 178: le PIC_16F84 livre

178

Mode pas à pas

Pour simuler un programme en mode pas à pas, appelez à l’écranle fichier à extension .asm

Puis allez dans :Debug

↓ Run

↓Reset

(ou tapez le raccourci clavier F6) :

Cette manœuvre effectue un Reset logiciel du programme qu’onveut simuler.

En effet, le Program Counter est mis à zéro (adressecorrespondant au vecteur Reset du 16F84).

Page 179: le PIC_16F84 livre

179

La ligne de programme se trouvant à cette adresse passe ensurbrillance, tandis que dans la barre d’état (située en bas de l’écran) PCprend la valeur 00.

Ensuite allez dans :

Debug ↓ Run ↓ Step

En tapant sur le raccourci clavier F7 le PC (Program Counter)avance d’un pas à la fois, ainsi que vous pouvez le constater en lisant lavaleur du Program Counter dans la barre d’état.

C’est l’exécution en mode pas à pas.

Page 180: le PIC_16F84 livre

180

Vous pouvez aussi vousservir de la souris, en cliquantsur l’icône :

(Deux empreintes de pas: Pas à pas : F7)

Icône située dans la barre des outils, en haut de l’écran.

Devant une boucle, vous pourriez stopper la simulation soit entapant sur le raccourci clavier F5, soit en cliquant sur l’icône du feu rouge :

(Feu rouge : Halt : F5)

Page 181: le PIC_16F84 livre

181

Mode Step Over

Lorsque dans le programme il y a des boucles, l’exécution peutprendre beaucoup de temps.

Dans ce cas, il existe la possibilité de demander au simulateurd’ignorer les boucles.

C’est le mode Step Over.

Pour ce type d’exécution il faut choisir le chemin :

Debug ↓ Run ↓

Step Over

Page 182: le PIC_16F84 livre

182

Pour faire avancer le programme dans ce mode, tapez sur leraccourci clavier

F8 ou cliquez de façon répétée sur l’icône montrant deux

empreintes de pas entrecoupées :

Le programme s’exécute alors selon un mode qui - en apparence -ressemble au mode pas à pas, mais qui en réalité ignore toutes les boucles.De ce fait, le temps de son exécution est considérablement plus court.

L’arrêt de la simulation peut se faire à tout moment, soit encliquant sur l’icône du feu rouge, soit en tapant sur la touche F6.

L’on revient alors au début du programme.

Page 183: le PIC_16F84 livre

183

Mode exécution automatique

Au lieu de faire du pas à pas, on peut faire exécuter le programmeen entier, automatiquement, sans avoir besoin ni de cliquer sur unequelconque icône, ni de taper sur une quelconque touche de raccourci.

Il suffit d’aller dans :Debug→Run→Animate :

L’arrêt de la simulation peut se faire à tout moment, soit encliquant sur l’icône du feu rouge

soit en tapant sur la touche F6.Dans les deux cas l’on revient au début du programme.

Page 184: le PIC_16F84 livre

184

Ouverture de fenêtres

En complément à la simulation, vous pourriez avoir besoin de voirde plus près comment évolue une variable, une adresse, le contenu d’uncompteur ou d’une quelconque zone mémoire.

Pour ce genre d’observation, MPLAB met à disposition un grandnombre de fenêtres (Windows) spécifiques.

Il suffit d’aller soit dans :Window

Cette fenêtre permet d’ouvrir les trois fenêtres principales : cellerelative à la pile (Stack Window), celle relative à la RAM (File Register

Page 185: le PIC_16F84 livre

185

Window), ou celle relative aux registres à usage spécial (Special FunctionRegister Window).

Sinon on peut aller dans :

Window ↓

Watch Windows ↓

New Watch Window

Page 186: le PIC_16F84 livre

186

Cette manœuvre ouvre une fenêtre comportant tous les noms desregistres et variables utilisé dans votre programme :

Il suffit de cliquer sur ce qui vous intéresse, pour aussitôt voirs’ouvrir la fenêtre correspondante, dans laquelle toute variable subissantune modification au cours de l’exécution du programme, change decouleur, attirant votre attention.

Il est même possible de suivre l’évolution de plusieurs variables etd’avoir sous vos yeux, constamment ouvertes, plusieurs fenêtres.

Pour cela, au moyen de l’ascenseur, sélectionnez la lignecorrespondant à ce que vous voulez observer, et terminez - après avoiréventuellement sélectionné d’autres registres encore - en cliquant sur lebouton Add, puis sur le bouton Close.

Dès lors, plusieurs fenêtres se positionnent sur l’écran, rangéel’une derrière l’autre, comme les cartes dans la main d’un joueur, que vouspouvez rendre actives à souhait.

Faites ensuite avancer le programme en mode pas à pas (F7).

Page 187: le PIC_16F84 livre

187

PROGRAMMATION en langage BASIC

Le BASIC que nous allons utiliser est le PicBASIC élaboré par laSociété MICRO ENGINEERING Labs (représentée en France parSELECTRONIC à Lille).

Le COMPILATEUR PicBASIC tient sur une disquette.Il est proposé en deux versions : la version standard et la versionprofessionnelle.Tous les exemples que je fournis ont été réalisés avec la version standard,qui permet de réaliser n’importe quel programme, sans limitations.Ce que l’on trouve en plus dans la version Pro, c’est un plus grand confortde travail : possibilité d’ouvrir plusieurs fenêtres en même temps,numérotation des lignes du fichier source, etc..La disquette est accompagnée d’un manuel d’utilisation en anglais et d’unetraduction en français.Ce logiciel, vendu par SELECTRONIC à Lille, au moment de la rédactionde ces pages, coûte € 129,50 (prix au 16/09/2002).

Si vous voulez mon conseil : n’hésitez pas à vous le procurer.Il fera de vous des programmeurs enthousiastes, car programmer

avec le PicBASIC de MICRO ENGINEERING Labs (MEL) estextrêmement facile.

Il n’y a rien de comparable entre la programmation en langageASSEMBLEUR et la programmation en langage MEL PicBASIC.

Bien qu’il existe d’autres BASIC pour les microcontrôleurs PIC,proposés par d’autres Sociétés, celui de MEL est de loin le meilleur, carextrêmement puissant et très facile à prendre en main.

Alors un conseil : ne cédez pas à la tentation de vous en procurerou d’accepter une version quelconque de BASIC pour PIC, pensant faireune bonne affaire. Car vous vous habitueriez à travailler avec sesinstructions et – si un jour vous vous rendiez compte des limites de votreBASIC et vous vouliez passer au MEL PicBASIC – vous auriez de ladifficulté à chasser de votre mémoire les instructions de l’ancien BASIC,avec le risque de les mélanger et fatalement d’avoir à corriger des erreurs.

Faites donc dès à présent l’effort de cet achat, et je vous assure quevous ne le regretterez pas. Le langage ASSEMBLEUR, l’architecture du

Page 188: le PIC_16F84 livre

188

PIC, la Page 0, la Page1, le Registre STATUS, le Registre OPTION et toutle reste.. sera vite oublié. Vous ne verrez plus que votre programme.

C’est comme si, pour préparer un programme commandantl’ouverture de la porte de votre garage :

a) avec le langage ASSEMBLEUR vous devriez écrire :- approchez-vous de la porte du garage- mettez la main gauche dans la poche gauche de votre veste- prenez la clé de la porte du garage- avez-vous la clé en main ?- non- mettez alors la main droite dans la poche droite de votre veste- prenez la clé de la porte du garage- avez-vous la clé en main ?- oui- sortez la main droite de la poche droite de votre veste- introduisez la clé dans la serrure de la porte du garage- tournez la clé -etc...- etc...- fin

b) alors qu’avec le langage MEL PicBASIC il suffirait d’écrire :- approchez-vous de la porte du garage- prenez la clé- ouvrez la porte du garage- fin

Ce sont les instructions du PicBASIC qui - avec leur puissance -comprennent ce que vous voulez faire et effectuent toutes les petites tâchesintermédiaires, à votre place, sans que vous ayez besoin de les détailler.

Merveilleux, non ?

Avant d’examiner chaque instruction une par une, il estindispensable de s’arrêter sur quelques particularités qui facilitentgrandement l’apprentissage du langage MEL PicBASIC.

Page 189: le PIC_16F84 livre

189

Symbol

Avec la directive Symbol on peut associer un nom à une variableou à une pin du microcontrôleur.

Ainsi définies, telle variable ou telle pin du microcontrôleurpeuvent alors être plus facilement utilisées dans l’écriture d’un programme.

Par exemple : Symbol LED = Pin 0Signifie : associe à Pin 0 (c’est à dire à RB0) le nom LED.Ainsi, par exemple l’instruction :

LED = 1est plus facile à lire dans le programme, car on comprend qu’elle allume laLED (met au niveau logique haut la pin 0 du Port B).

Symbol permet de renommer un chiffre (le plus souvent) ou unevariable.Chiffres et variables qui – rencontrés dans la lecture d’un programme – nediraient pas grand’chose, deviennent plus explicites après avoir étérebaptisés par Symbol car il est beaucoup plus facile de retenir un nomqu’une adresse, le nom étant chargé d’une signification, alors qu’uneadresse ne dit rien.

Page 190: le PIC_16F84 livre

190

Les variables de type B et W

Les variables correspondent à des emplacements mémoire utiliséspour stocker temporairement des données.

Le MEL PicBASIC propose d’emblée des variables prêtes àl’emploi.

Selon que les données à stocker soient de petites données etqu’elles tiennent en un seul octet (byte = 8 bits), ou qu’elles soient degrandes données et que pour les accueillir il faille un mot (word = 16 bits),MEL PicBASIC propose deux types de variables :

a) les variables de type B (byte) utilisées pour stocker des variables à 8 bits, et

b) les variables de type W (word) utilisées pour stocker des variables à 16 bits.

Pour le microcontrôleur 16F84 PicBASIC a prédéfini 52 variablesde type B (de B0 à B51), et 26 variables de type W (de W0 à W25).

Les variables de type W sont constituées de la juxtaposition dedeux variables de type B. Ainsi la variable W0 est constituée de lajuxtaposition de la variable B0 et de la variable B1. La variable W1 estconstituée de la juxtaposition de la variable B2 et de variable B3, et ainsi desuite..

Le compilateur ne peut utiliser que les registres du microcontrôleurpour stocker les variables du programme. Ce qui veut dire que le nombredes variables mises à disposition dépend du modèle de PIC utilisé.

Page 191: le PIC_16F84 livre

191

Les variables de bit

Il faut savoir qu’il existe aussi des variables de bit prédéfinies.Ce sont les variables B0 et B1 qui les accueillent.Dans ce cas, les variables de bit qu’elles logent s’appellent :

Bit0, Bit1, Bit2 ........ et ainsi de suite jusqu’à Bit15.

Page 192: le PIC_16F84 livre

192

Dénomination des lignes de PORTS

MEL PicBASIC n’appelle pas de la même façon les bits du Port Aet les bits du Port B.

a) Les bits du Port A Les bits du Port A sont appelés : Pin0

Pin1Pin2Pin3Pin5

b) Les bits du Port B Les bits du Port B sont appelés : 0

1234567

Attention donc ! - Pour vous référer à l’un des 5 bits du Port A vous direz :

Pin0, Pin1, Pin2, Pin3, Pin4.

- Pour vous référer à l’un des 8 bits du Port B vous direz : 0, 1, 2, 3, 4, 5, 6, 7.

Page 193: le PIC_16F84 livre

193

Configuration des bits de chaque Port

Chaque bit de Port (Port A et Port B) peut être configuré en entréeou en sortie :

- tout bit mis à 0 est configuré en entrée- tout bit mis à 1 est configuré en sortie.

Mais la façon dont MEL PicBASIC configure les bits n’est pas lamême pour le Port A et pour le Port B.

Port A

a) Pour configurer le Port A en entrée (associé - par exemple - àdes interrupteurs) il faut premièrement s’adresser au Registre du Port A(situé à l’adresse 5). Puis il faut définir la direction de ce Port en s’adressantau Registre TRISA (situé à l’adresse 85).

Les bits mis à 0 deviennent des entrées. Tandis que les bits mis à 1deviennent des sorties.

Pour configurer tout le Port A en entrée il faut donc écrire :Symbol PORTA = 5Symbol TRISA = $85POKE TRISA,255 (255 = 11111111)

(Tous bits du Port A en entrée).

b) Pour configurer le Port A en sortie il faut faire de même :premièrement s’adresser au Registre du Port A (situé à l’adresse 5). Puisdéfinir la direction de ce Port en s’adressant au Registre TRISA (situé àl’adresse 85).

Les bits mis à 0 deviennent des entrées. Tandis que les bits mis à 1deviennent des sorties.

Pour configurer tout le Port A en sortie il faut donc écrire :Symbol PORTA = 5Symbol TRISA = $85POKE TRISA,0 (0 = 00000000)

(Tous bits du Port A en sortie).

Page 194: le PIC_16F84 livre

194

Port B

Pour configurer le Port B on utilise l’instruction

DIRS = X X X X X X X X

DIRS suivi du signe égal et - après le signe égal - des 0 et des 1formant l’octet de configuration, conformément à la façon dont on veutconfigurer le Port.

0 = entrée1 = sortie

Exemples :

- DIRS = % 11111111 (Tous bits du Port B configurés en (ou DIRS = 255) sortie).

- DIRS = % 00000000 (Tous bits du Port B configurés en (ou DIRS = 0) entrée).

- DIRS = % 00001111 (Bits 0 à 3 configurés en sortie, et (ou DIRS = 15) bits 4 à 7 configurés en entrée)

- etc.. (tous les cas de figure sont permis).

Page 195: le PIC_16F84 livre

195

Lecture des Ports

Pour lire l’état d’un Port on utilise l’instruction PEEK.Comme ceci :

PEEK PORTA,B0Ce qui signifie : lire le contenu du Port A et le stocker dans lavariable B0. En fait cette variable peut être l’une quelconquedes variables prédéfinies pour le 16F84 (B0... B51).

Ensuite on peut affiner par :

IF B0, Bit0 = 0 Then......

ou

IF B0, Bit0 = 1 Then.....

etc..

Page 196: le PIC_16F84 livre

196

Les constantes

Les constantes numériques peuvent être exprimées en trois bases :

- décimale- binaire- hexadécimale

Pour dire au compilateur en quelle base on veut travailler, on placeun préfixe devant le nombre.

En écrivant un nombre sans préfixe, le compilateur traite cenombre en décimal.

Par exemple : 100 (sans préfixe) est interprété comme 100 (basedécimale).

En tapant %100, le compilateur interprète le nombre 100 enbinaire (00000100 c’est à dire 4 en décimal).

Enfin, en tapant $100, le compilateur interprète le nombre 100 enhexadécimal (0001 0000 0000 c’est à dire 256 en décimal).

Page 197: le PIC_16F84 livre

197

Les labels

Les labels (étiquettes) doivent obligatoirement commencer à lapremière colonne, et doivent se terminer par deux points ( :)

Elles servent généralement à identifier des sous-programmes pourque le PIC - à l’issue d’un test, par exemple - fasse une certaine chose si lacondition est vraie, ou une autre chose si la condition est fausse. Ou, devantla position d’un interrupteur, pour qu’il fasse une certaine chose sil’interrupteur est ouvert ou une certaine autre chose si l’interrupteur estfermé.... etc..

Les étiquettes repèrent des adresses, pour que le PIC y accèdequand on y fait référence.

Page 198: le PIC_16F84 livre

198

Les commentaires

En PicBASIC les commentaires doivent obligatoirement êtreprécédés par une apostrophe (‘) (Attention : la directive REM n’existe pasen PicBASIC).

Tout ce qui est écrit après une apostrophe est ignoré par lecompilateur.

Les commentaires servent à garder une trace de ce que fait leprogramme.

L’écriture d’un programme sans commentaires n’est pas àenvisager, car même si la compréhension d’un programme peut paraîtreévidente au moment de sa création, elle peut s’avérer difficile quelquetemps après, ou sa lecture impossible pour ceux qui devraient en assurer lamaintenance.

Ne soyez pas avares de commentaires. Mettez-les même quand lesseules instructions du programme pourraient donner une impressiond’évidence.

Page 199: le PIC_16F84 livre

199

Le set d’INSTRUCTIONS du MEL PicBASIC

Le MEL PicBASIC est constitué de 40 instructions.

Ne confondez pas - je vous prie - les 40 instructions de ce langageavec les 37 instructions du langage ASSEMBLEUR : cela n’a strictementrien à voir !

Examinons ces 40 instructions une par une, en les présentant parordre alphabétique pour que vous les retrouviez plus facilement.

Je signale qu’elles peuvent être écrites comme on veut :- en majuscules- en minuscules- et même en mélangeant majuscules et minuscules.

Par exemple, l’instruction GOTO peut s’écrire :

- GOTO- Goto- goto- GoTO- goTO- gOto- etc...

Page 200: le PIC_16F84 livre

200

Classement par ordre alphabétique

BRANCHBUTTONCALLDEBUGDIRS =EEPROMENDFOR/NEXTGOSUBGOTOHIGHI2CinI2CoutIF...THENINPUTLETLOOKdownLOOKupLOWNAPOUTPUTPAUSEPEEKPINS =POKEPOTPULSinPULSoutPWMRANDOMREADRETURNREVERSESERinSERoutSLEEPSOUNDTOGLETRISAWRITE

Page 201: le PIC_16F84 livre

201

Classement par genre

BRANCHCALLGOSUBGOTORETURN

BUTTONDIRS =HIGHINPUTLOWOUTPUTPINS =POTPULSinPULSoutPWMREVERSESERinSERoutSOUNDTOGLE

I2CinI2CoutTRISA

DEBUGEEPROMENDFOR...NEXTIF...THENLETLOOKDOWNLOOKUPNAPPAUSEPEEKPOKERANDOMREADSLEEPWRITE

Page 202: le PIC_16F84 livre

202

BRANCH

Cette instruction est une variante de GOTO.Comme GOTO, elle permet de sauter à des sous-programmes.Mais ici en fonction de la valeur prise par la variable donnée en offset.

SYNTAXE :BRANCH offset (Label1, Label2, ... )Si offset vaut 0, le programme saute à Label1S’il vaut 1, le programme saute à Label2et ainsi de suite..

EXEMPLE :BRANCH B5 (Label1, Label2, Label3)Si B5 vaut 0, le programme fait un GOTO au sous-programmeappelé Label1.S’il vaut1, le programme fait un GOTO au sous-programmeappelé Label2.S’il vaut2, le programme fait un GOTO au sous-programmeappelé Label3.

Si la valeur de l’offset (ici B5) prend une valeur supérieure aunombre des sous-programmes indiqués dans les parenthèses (ici : 0, 1, 2) leprogramme n’effectue aucun saut et continue en séquence.

Page 203: le PIC_16F84 livre

203

BUTTON

Cette instruction lit l’état d’un interrupteur placé sur l’une des 8lignes (0.....7) du Port B (RB) et peut :

- déclencher une procédure d’anti-rebonds- déclencher une procédure d’auto-répétition- tester si l’interrupteur ferme vers la masse ou vers le +- faire un GOTO à un sous-programme, selon que l’interrupteur soit ouvert ou fermé.

SYNTAXE :BUTTON Pin, Down, Delay, Rate, Var, Action, Label

Nom du sous-programme auquel il faut sauter.

Etat auquel l’interrupteur doit se trouver (0 si ouvert, 1 si fermé)

pour que le saut ait lieu.

Nom de la variable (B0....B51) servant au décomptage des auto-répétitions.

Nombre de fois (0.....255) qu’on veut faire tourner l’auto-répétition pour lire l’état

de l’interrupteur.

Nombre de cycles (0.....255) qu’on veut laisser passer à partir du moment où l’interrupteur a été actionné, avant de déclencher une procédure d’auto-répétition.

Si Delay vaut 0, les fonctions anti-rebonds et répétition automatique n’ont pas lieu. Si Delay vaut

255, seule la fonction anti-rebonds a lieu, pas celle d’auto-répétition.

Etat de l’interrupteur au moment où il est appuyé.

Numéro de la pin du Port B (RB) sur laquelle se trouvel’interrupteur (0.......7).

Page 204: le PIC_16F84 livre

204

EXEMPLE :BUTTON 2, 0, 100, 10, B0, 0, CLIGNOTELit l’état de l’interrupteur placé sur RB2 (en supprimant lesrebonds des contacts) et – si l’interrupteur est ouvert – saute ausous-programme appelé CLIGNOTE.

Page 205: le PIC_16F84 livre

205

CALL

Appelle un sous-programme écrit en langage ASSEMBLEUR.C’est une instruction qui assure une sorte de passerelle, grâce à

laquelle on peut incorporer, à des instructions écrites en PicBASIC, desinstructions écrites en langage ASSEMBLEUR.

SYNTAXE :CALL Label

EXEMPLE :CALL DELAIDELAI DECFSZ COMPT1,1

GOTO DELAIMOVLW .255MOVWF COMPT1

DECFSZ COMPT2,1GOTO DELAIMOVLW .255MOVWF COMPT1MOVLW .255MOVWF COMPT2RETURN

Page 206: le PIC_16F84 livre

206

DEBUG

Sert lors de la mise au point d’un programme.

La mise au point d’un programme est une phase délicate.Le programme est écrit, mais des erreurs de syntaxe ou de

compilation peuvent apparaître. Le programme ne se déroule pascorrectement. Il faut alors le déboguer.

Pour cela il existe différentes techniques.L’une d’elles consiste à placer une instruction DEBUG dans le

programme pour provoquer l’affichage de valeurs permettant de délimiterdes étapes dans le déroulement du programme et localiser l’erreur.

L’instruction DEBUG se comporte comme une sorte de pointd’arrêt dynamique. Elle ne peut être utilisée que pendant la phase dudéveloppement, et ne peut pas figurer dans un programme mis au point.

Dans tous les cas, il faut retirer cette instruction d’aide à la mise aupoint, lors de la fabrication de la version finale du programme.

De toutes façons, si l’instruction DEBUG restait dans leprogramme, elle serait ignorée une fois que celui-ci ait été correctementcompilé.

Au fur et à mesure que vous réalisez votre programme, ayeztoujours la mise au point en tête.

Si vous modifiez temporairement des instructions, ayez une feuillevolante avec leur liste. C’est la meilleure façon pour ne pas oublier detoutes les restaurer ensuite.

Page 207: le PIC_16F84 livre

207

DIRS

Définit la direction des lignes du Port B.

SYNTAXE :DIRS = X X X X X X X X

(octet de configuration) (0.......255)

0 = entrée1 = sortie

EXEMPLES :1)DIRS = 255 (255 décimal, donc 11111111 en binaire)

Cela peut s’écrire aussi :DIRS = %11111111

Tous bits du Port B configurés en sortie

2)DIRS = 0

Tous bits du Ports B configurés en entrée.

Page 208: le PIC_16F84 livre

208

EEPROM

C’est l’instruction avec laquelle on écrit dans l’EEPROM du PIC,dans des adresses consécutives, à partir de celle qu’on lui indique commeétant l’adresse de départ.

SYNTAXE :EEPROM Adresse, (Donnée, Donnée, Donnée,......)

Dans les parenthèses - espacées par des virgules - les données à écrire dans l’EEPROM

(constantes numériques ou caractères ASCII).

Adresse de départ, à partir de laquelle on veut écrire dans l’EEPROM.Si on ne met rien dans ce paramètre, l’écriture démarreautomatiquement à l’adresse 0.(NB : Dans le µC 16F84 l’étendue de l’EEPROM va de 00 à 3F).

EXEMPLE :EEPROM 8, (2, 4, 8, 16, 32, 64, 128)

On stocke 2 à l’adresse EEPROM 08On stocke 4 à l’adresse EEPROM 09On stocke 8 à l’adresse EEPROM 0AOn stocke 16 à l’adresse EEPROM 0BOn stocke 32 à l’adresse EEPROM 0COn stocke 64 à l’adresse EEPROM 0DOn stocke 128 à l’adresse EEPROM 0E

NB : Les données entrent dans la mémoire EEPROM une seule fois : lors de la programmation du circuit, et non pas chaque fois qu’on exécute le programme.

Page 209: le PIC_16F84 livre

209

END

C’est l’instruction que l’on doit obligatoirement placer à la fin detout programme.

Elle termine l’exécution du programme et place le microcontrôleuren mode veille.

Pour réveiller le microcontrôleur on est obligé de faire un Resetmatériel.

Page 210: le PIC_16F84 livre

210

FOR... NEXT

Cette instruction introduit une boucle en faisant exécuter un certainnombre de fois les actions détaillées dans ce que l’on appelle : lecorps de l’instruction.

SYNTAXE :FOR Variable = Début TO Fin (Pas)

.

.

. .

.NEXT Variable

Variable prend d’abord la valeur définie parDébut ; puis – successivement – toutes les valeurs suivantes, parincrémentation automatique, jusqu’à atteindre la valeur définie par Fin, etchaque fois, pour chaque valeur de Variable, exécute les instructionsdétaillées dans le corps de l’instruction.

A chaque passage, Variable s’incrémente (de 1).Mais on peut aussi incrémenter la Variable au pas qu’on veut.

Dans ce cas il faut le préciser en donnant une valeur à Pas, placée entredeux parenthèses.

Par exemple, si l’on écrit :FOR B1 = 0 TO 10 (2)

B1 prendra successivementnon pas les valeurs 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9mais 0, 2, 4, 6, 8 et 10.

EXEMPLE :FOR B1 = 1 TO 10

HIGH 0 PAUSE 200 LOW 0 PAUSE 200

NEXT B1

Page 211: le PIC_16F84 livre

211

Fait clignoter 10 fois de suite (allume pendant 200 millisecondes,puis éteint pendant 200 millisecondes) la LED connectée sur RB0 (Pin 0 duPort B).

NB : Des boucles FOR... NEXT peuvent être imbriquées dansd’autres boucles FOR... NEXT jusqu’à un maximum de 16 imbriquements.

EXEMPLE :

LOOPFOR B0 = 1 TO 5FOR B1 = 1 TO 7

HIGH B1PAUSE 10LOW B1PAUSE 500

NEXT B1NEXT B0

GOTO LOOP

Pour chacune des valeurs pouvant être prises par B1 (c’està dire 1 à 7. C’est la boucle interne) faire le travail défini par la boucleinterne autant de fois que les valeurs pouvant être prises par B0 (boucleexterne).

Dans le cas de cet exemple : la boucle externe tourne 5fois, avant que B1 passe d’une valeur à la suivante.

Ici, donc, la LED reliée à RB0 clignote 5 fois, puis laLED reliée à RB1 clignote 5 fois, puis la LED reliée à RB2 clignote 5fois.... jusqu’à celle reliée à RB7.

Puis, ça recommence.

Restons sur cet exemple, et étudions-le de plus près. Cela en vaut la peine, car les boucles FOR.... NEXT sont très utiliséesquand on programme en PicBASIC.

Page 212: le PIC_16F84 livre

212

LOOPFOR B0 = 1 TO 5FOR B1 = 0 TO 7

HIGH B1PAUSE 10 Le travail...LOW B1 que doivent fairePAUSE 500 chacune des valeurs

NEXT B1 de B1, autant de fois...NEXT B0 .... que chacune des valeurs de B0

GOTO LOOP

Autrement dit :

HIGH 0: PAUSE 10: LOW 0 : PAUSE 500HIGH 0: PAUSE 10: LOW 0 : PAUSE 500HIGH 0: PAUSE 10: LOW 0 : PAUSE 500HIGH 0: PAUSE 10: LOW 0 : PAUSE 500HIGH 0: PAUSE 10: LOW 0 : PAUSE 500

HIGH 1: PAUSE 10: LOW 1 : PAUSE 500HIGH 1: PAUSE 10: LOW 1 : PAUSE 500HIGH 1: PAUSE 10: LOW 1 : PAUSE 500

HIGH 1: PAUSE 10: LOW 1 : PAUSE 500HIGH 1: PAUSE 10: LOW 1 : PAUSE 500

HIGH 2: PAUSE 10: LOW 2 : PAUSE 500

etc....jusqu’à 7.

L’importance de NEXT est très grande. Voyons-la au moyen d’un autreexemple :

On veut allumer toutes les LED du Port B.Ecrivons le programme suivant :

LOOP FOR B0 = 0 TO 7HIGH B0NEXT B0

END

Page 213: le PIC_16F84 livre

213

Si on exécute ce même programme sans l’instruction NEXT B0,on constate que seule la LED reliée à RB0 s’allume, et pas les autres.

Ceci parce que l’instruction NEXT B0 incrémente la variable B0et referme la boucle en fournissant – à chaque tour – une nouvelle valeur (0,1, 2,.....7) correspondant à différents RB et – par là – à des LED différentes.

Page 214: le PIC_16F84 livre

214

GOSUB

C’est l’instruction par laquelle on appelle un sous-programme.

Le sous-programme appelé doit impérativement se terminer parl’instruction RETURN.

L’instruction RETURN, placée à la fin du sous-programme, faitrevenir le programme principal à l’instruction se trouvant juste aprèsGOSUB.

Ne pas confondre GOSUB avec GOTO qui renvoie – elle aussi –l’exécution du programme ailleurs, mais – cette fois – sans retour.

SYNTAXE :GOSUB Label

. . .

RETURN

NB : Des paires d’instructions GOSUB..... RETURN peuvent êtreimbriquées. Mais sans aller au-delà de 4 niveaux (on ne peut pas imbriquerplus de 4 paires l’une dans l’autre).

L’exemple qui suit, illustre le fonctionnement de GOSUB et de RETURN.

Page 215: le PIC_16F84 livre

215

Programme principal

DEBUTINSTRUCTION 1INSTRUCTION 2INSTRUCTION 3

INSTRUCTION 37INSTRUCTION 38GOSUB TEMPOINSTRUCTION 40INSTRUCTION 41

FIN

Sous-programme

TEMPOINSTRUCTION aINSTRUCTION bINSTRUCTION cINSTRUCTION dINSTRUCTION e

RETURN

Page 216: le PIC_16F84 livre

216

GOTO

Renvoie à un autre endroit du programme.

SYNTAXE :GOTO Label

Repère (adresse) de l’endroit de la mémoire auquel le programme doit serendre pour poursuivre son exécution.

EXEMPLE :GOTO END

(Arrête le programme)

Page 217: le PIC_16F84 livre

217

HIGH

Cette instruction fait deux choses en même temps :- après avoir mis en sortie une ligne du Port B (RB), la place aussitôt à l’état logique haut (1).

SYNTAXE :HIGH Pin

Numéro de la pin (0..... 7) du Port B (RB) qu’on veut mettre à l’état haut

EXEMPLE :HIGH 0 Sort un 1 sur RB0

NB : Seul le numéro de la pin du RB doit être spécifié (exemple : HIGH 7et non pas HIGH Pin 7), car une instruction ainsi rédigée n’est pas admise,et conduirait à une exécution erronée du programme.

Page 218: le PIC_16F84 livre

218

I2Cin

Reçoit des données à partir d’un bus I2C.

SYNTAXE :I2Cin Contrôle, Adresse, Variable

Nom de la variable (B0... B51) dans laquelleon veut stocker le résultat de la lecture.

Adresse mémoire dont on veut lire le contenu.

Octet composé de :- la clé d’accès spécifique au circuit I2C utilisé, telle qu’elle a été définie par son fabricant (sur 4 bits)- 1 bit (celui de plus fort poids) désignant la largeur du bus d’adresses (0 = 8 bits ; 1 = 16 bits)- 3 bits (ceux de plus faible poids) servant à la sélection des blocs internes (pages de 256 octets).

Cette instruction fait plusieurs choses de suite :- sort la clé permettant l’accès au circuit I2C- va à l’adresse voulue- lit son contenu- le stocke dans la variable figurant en argument.

EXEMPLE :I2Cin %01010000, 12, B0

Lit le contenu de l’adresse 12 et le stocke dans la variable B0.

L’octet Contrôle (%01010000 ou $50) se lit comme ceci :- le bit de plus fort poids (0) spécifie un bus d’adresse de 8 bits- les quatre bits suivants (1010) correspondent à la clé d’accès définie par le fabricant- les trois bits de plus faible poids, non utilisés dans ce type de mémoire, sont mis à zéro (000).

Page 219: le PIC_16F84 livre

219

Cette instruction permet notamment d’ajouter au PIC une mémoireEEPROM série au standard I2C (24LC01B, 24LC02B, 24LC04B,24LC08B, 24LC16B, 24LC32B, 24LC65... toutes les 24 C0x en général)et de disposer ainsi d’une plus grande taille mémoire.

Bien entendu, ce n’est pas seulement à des EEPROM que le PICpeut être associé, mais à n’importe quel circuit du standard I2C (capteur detempérature, convertisseur A/D, etc...).

Ce tableau donne les clés d’accès des EEPROM les plus courantes :

Modèle Taille mémoire Contrôle Largeur de bus24LC01B 128 octets %01010xxx 8 bits24LC02B 256 octets %01010xxx 8 bits24LC04B 512 octets %01010xxb 8bits24LC08B 1k octets %01010xbb 8bits24LC16B 2K octets %01010bbb 8bits24LC32B 4K octets %11010ddd 16 bits24LC65 8K octets %11010ddd 16 bits

bbb = bits de sélection du ou des blocs internes (pages)ddd = bits servant à sélectionner le boîtierxxx = sans importance

Page 220: le PIC_16F84 livre

220

Schéma-type de connexion d’un PIC 16F84avec une EEPROM 24LC01B

Les lignes Data et Clock sont affectées respectivement au Port A0et au Port A1. Ceci dans le but évident de laisser entièrement disponiblesles 8 bits du Port B.

La ligne Data est bidirectionnelle.Elle doit comporter une résistance de Pull-up de 4,7 KΩ.

Page 221: le PIC_16F84 livre

221

I2Cout

Envoie des données sur un bus I2C.

SYNTAXE :I2Cout Contrôle, Adresse, (Valeur)

Valeur à écrire (00... FF)

Adresse à laquelle on veut écrire.

Octet de contrôle composé de :- la clé d’accès spécifique au circuit I2C, telle q’elle a été définie par le fabricant (sur 4 bits) ;- 1 bit (celui de plus fort poids) désignant la valeur du bus des adresses (0=8 bits ; 1=16 bits) ;- 3 bits (ceux de plus faible poids) servant à la sélection des blocs.

L’écriture d’un octet dans une EEPROM série prend environ 10 ms.Par conséquent, si on veut écrire plusieurs octets en suivant, il fautimpérativement respecter ce délai sinon, si une opération d’écriture estencore en route, l’accès à la mémoire est ignoré.Différent est le cas si, au lieu d’avoir affaire à des mémoires EEPROM, ona affaire à des composants de la famille I2C ne demandant pas un aussilong délai entre deux écritures.

EXEMPLE :I2Cout %01010000, 17, (42)PAUSE 10I2Cout %0101000, 125 (B3)PAUSE 10

On écrit 42 à l’adresse 17. On laisse passer 10 ms pour quel’opération d’écriture s’achève. Puis on écrit le contenu de la variable B3à l’adresse 125 et on laisse encore passer 10 ms.Les lignes DATA et CLOCK sont affectées respectivement à PORTA0 età PORTA1. Ceci dans le soucis de laisser entièrement disponibles les 8 bits Port B. La ligne DATA est bidirectionnelle. Elle doit comporter unerésistance de Pull-up de 4,7 KΩ.

Page 222: le PIC_16F84 livre

222

If... Then

Cette instruction teste une condition.Si la condition est vraie, le programme saute au sous-programmeindiqué après Then.

Then est ici une sorte de Goto. C’est pourquoi après Then on doitimpérativement indiquer le nom du sous-programme auquel le programmedoit se rendre.Si la condition est fausse, le programme continue en séquence et analysel’instruction suivante.

SYNTAXE :IF Comparaison THEN Label

Nom du sous-programme à exécuter si la condition est vraie.

Ce que l’on veut comparer :- ceci égal à cela (=)- ceci inférieur à cela (<)- ceci supérieur à cela (>)- ceci supérieur ou égal à cela (>=)- ceci différent de cela ( <>)

EXEMPLE :IF Pin0 = 0 THEN OUVERTIF B0 >=9 THEN PORTE

Si l’interrupteur connecté à la pin 0 du Port A est ouvert (0),exécute le sous-programme appelé OUVERT.Si la variable B a une valeur supérieure ou égale à 9, exécute lesous-programme appelé PORTE.

Page 223: le PIC_16F84 livre

223

INPUT

Place en entrée l’une des 8 lignes du Port B (RB).

SYNTAXE :INPUT Pin

Numéro de la pin du Port B (RB) qu’on veut placer en entrée.

EXEMPLE :INPUT 3

Met RB3 en entrée.

NB : Seul le numéro de la pin doit être noté. C’est à dire : 0.... 7 et non Pin0.... Pin7

Page 224: le PIC_16F84 livre

224

LET

Avec cette instruction on affecte une valeur à une variable.

EXEMPLE :LET B0 = 37

Affecte à la variable B0 la valeur 37.

Page 225: le PIC_16F84 livre

225

LOOKdown

Cherche une valeur (Recherche) dans une liste (Constante, Constante,Constante...), et fournit en Index sa position dans la liste.

SYNTAXE :LOOKDOWN Recherche, (Constante, Constante, Constante...), Index

L’instruction compare une variable à une liste de constantesjusqu’à ce qu’elle trouve une égalité et – dans ce cas – place dansune variable le numéro du rang de cette valeur.Si la valeur recherchée est la première de la liste, Index prend lavaleur 0 ; si c’est la deuxième, Index prend la valeur 1, etc..Si par contre la recherche est infructueuse, aucune action n’a lieu et Indexreste inchangé.

Par exemple : si la liste des Constantes est (3, 12, 14, 27, 9) et la valeur deRecherche est 14, Index prendra la valeur 2 puisque 14 est la troisièmeconstante de la liste (le décompte commence à 0).

EXEMPLE :SERin 1, N2400, B0LOOKDOWN B0, (″ 0123456789ABCDEF″ ), B1SERout 0, N2400, (#B1)

Lit les caractères arrivant dans une réception série sur RB1 (pin 1du Port B), les stocke un à la fois dans la variable B0, et fournit laposition de chacun d’eux dans la variable B1, mise ensuite ensortie sur RB0 (pin 0 du Port B).

Page 226: le PIC_16F84 livre

226

LOOKup

Cette instruction permet de récupérer une valeur à partir d’unetable de constantes.On donne une valeur à Index et on demande à l’instruction desauvegarder dans une Variable la valeur correspondant à son rangdans la liste des variables.Si Index vaut 0, Variable assume la valeur de la premièreconstante. Si Index vaut 1, Variable assume la valeur de ladeuxième constante, et ainsi de suite.Si Index est un nombre supérieur au nombre des constantes, il nese passe rien et Variable reste inchangée.

SYNTAXE :LOOKUP Index, (Constante, Constante, Constante....), Variable

Nom de la variabledans laquelle on veutmémoriser la variablerecherchée.

Constantes rangées par rang.

Rang correspondant à la valeur qu’on veut récupérer.

EXEMPLE :FOR B0 = 0 to 6

LOOKUP B0, (″BONJOUR″), B1SERout 0, N2400, (B1)

NEXT B0

On donne successivement à B0 les valeurs de 0 à7 pour récupérer dans la variable B1, l’une aprèsl’autre, toutes les lettres de BONJOUR,lesquelles sortent ensuite en série sur RB1.

Page 227: le PIC_16F84 livre

227

LOW

Cette instruction met à l’état logique bas (0) une ligne (0... 7) duPort B (RB).

SYNTAXE :LOW Pin

Numéro de la pin (0... 7) du Port B qu’on veut mettre à l’état bas.

EXEMPLE :LOW 3

Met à l’état logique bas RB3.

NB : Seul le numéro de la pin de RB doit être spécifié. Exemple : 4, et non pas Pin 4. Une instruction mal rédigée conduirait à une exécution erronée du programme.

Page 228: le PIC_16F84 livre

228

NAP

Cette instruction met le microcontrôleur en veille pendant le tempsdéfini par Période.

SYNTAXE :NAP Période

(0... 7)

0 18 ms1 36 ms2 72 ms

30 144 ms4 288 ms5 576 ms6 1.152 ms7 2.304 ms

Ces durées sont approximatives car dérivées du Watchdog Timer,piloté par son horloge R/C interne, et donc pouvant différer d’unmicrocontrôleur à l’autre...

Page 229: le PIC_16F84 livre

229

OUTPUT

Cette instruction place en sortie l’une des 8 pins du Port B (RB).

SYNTAXE :OUTPUT Pin

Numéro de la pin du Port B (RB) qu’on veut placer en sortie.

EXEMPLE :OUTPUT 3

Met RB3 en sortie.

NB : Seul le numéro de la pin de RB doit être spécifié. Exemple : 3, et non pas Pin 3. Une instruction mal rédigée conduirait à une exécution erronée du programme.

Page 230: le PIC_16F84 livre

230

PAUSE

Instruction introduisant une temporisation.

SYNTAXE :PAUSE Période

Durée, exprimée en millisecondes.

Pour un 16F84 cadencé à 4 MHz, l’unité de temps est approximativement1 milliseconde.

EXEMPLE :PAUSE 500

Engendre un temporisation de 500 ms (½ seconde).

Contrairement à l’instruction NAP qui fournit des délaisprédéfinis et approximatifs (car issus du Watchdog Timer),l’instruction PAUSE fournit des délais à la demande et plusprécis (bien qu’encore pas tout à fait exacts, sa précisiondépendant entre autre de celle du quartz et de l’état del’alimentation).

Page 231: le PIC_16F84 livre

231

PEEK

Cette instruction lit le contenu d’une adresse et le stockedans une variable.

SYNTAXE :PEEK Adresse, Variable

Nom de la variable dans laquelle on veutstocker le résultat de la lecture.

Adresse dont on veut lire le contenu.

EXEMPLE :PEEK PORTA, B0

On lit le contenu du Port A et on le mémorise dans lavariable B0.

Autre EXEMPLE :Symbol PORTA = 5Symbol TRISA = $85

POKE TRISA, 255PEEK PORTA, B0

Ensuite, on peut continuer comme ceci :

IF BIT0 = 0 THEN......IF BIT0 = 1 THEN......

On lit le Port A par l’intermédiaire de la variable B0.Ensuite on peut tester et agir en fonction de l’état dechaque bit.

Page 232: le PIC_16F84 livre

232

PINS

Cette instruction met en sortie, sur le Port B, l’octet spécifié aprèsle signe =

SYNTAXE :PINS = X X X X X X X X

Octet à spécifier.

EXEMPLES :

1) PINS = $2B Met la valeur hexadécimale 2B (00101100) sur le Port B. Ce qui a pour effet de mettre :

le bit 0 à 0le bit 1 à 0le bit 2 à 1le bit 3 à 1le bit 4 à 0le bit 5 à 1le bit 6 à 0le bit 7 à 0.

2) PINS = B1 Met chacun des bits du Port B à l’état haut ou à l’état bas, conformément à l’octet se trouvant dans la variable B1.

3) PINS = 255 Met à l’état haut tous les bits du Port B.

4) DIRS = 255 (Port B en sortie)

Page 233: le PIC_16F84 livre

233

LOOP FOR B1 = 0 TO 255PINS = B1PAUSE 500NEXT B1GOTO LOOP

END

On affiche sur le Port B toutes les valeurs de 0 à 255 (FOR B1 = 0 TO 255... NEXT B1) à un intervalle de 500 ms.Puis on recommence indéfiniment.

Page 234: le PIC_16F84 livre

234

POKE

C’est l’instruction par laquelle on écrit une donnée à l’adresse que l’ondésigne.

SYNTAXE :POKE Adresse, Donnée

Donnée à écrire.

Adresse à laquelle on veut écrire la donnée.

EXEMPLES :

1) POKE TRISA, 0Met 0 dans TRISA.

2) SYMBOL PORTA = 5 (Adresse de PORTA)SYMBOL TRISA = $85 (Adresse de TRISA)

POKE TRISA, 0 (Port A en sortie)PEEK PORTA, B0 (Copie Port A

dans B0)BIT1 = 1BIT2 = 0etc...POKE PORTA, B0

END

Ainsi faisant, on copie sur le Port A ce quise trouve dans la variable B0.

Page 235: le PIC_16F84 livre

235

POT

Lit la valeur d’une résistance (potentiomètre, thermistance, jauge decontrainte, capteur de position ou autre composant résistif) sur l’unedes pins (0..... 7) du Port B.La valeur de la résistance (pouvant aller de 5 KΩ à 50 KΩ) estdéterminée, en fait, en mesurant le temps de décharge du condensateurassocié à la résistance avec laquelle il forme une cellule R/C.

SYNTAXE :POT Pin, Echelle, Variable

Nom de la variable dans laquelle on veut mémoriser le résultat de la mesure. Si Echelle est positionné à sa valeur optimale, Variable prend une valeur proche de 0 lorsque le potentiomètre est tourné sur le minimum, et une valeur proche de 255 lorsque le potentiomètre est tourné sur le maximum.

(1..... 255) est un facteur de conversion qui dépend des caractéristiques de la cellule R/C. Sa valeur doit être déterminée expérimentalement. Pour de grandes constantes de temps R/C, la valeur d’Echelle doit être petite (le minimum est 1). Au contraire, pour de petites constantes de temps, la valeur à donner à Echelle doit être grande (255).

(0....7) Désigne la pin du Port B (RB) sur laquelle on veut lire la valeur de la résistance.

Pour déterminer au plus juste la valeur qu’il convient de donner à Echelle,la méthode consiste à la faire évaluer par le PIC lui-même. Pour cela,réglez d’abord la valeur de la résistance à son maximum, et lisez-la avecEchelle provisoirement positionnée à 255. Cette valeur (stockée dansVariable) évaluée par le PIC, est celle que vous pourriez alors donner àEchelle (valeur optimale).Evidemment, pas question de s’attendre à lire une valeur précise deRésistance, exprimée en Ohms !

Page 236: le PIC_16F84 livre

236

Ici, en définitive, on lit des paliers. Mais la valeur qu’assume tour à tourVariable chaque fois qu’on tourne l’axe du potentiomètre, renseignesuffisamment sur la position de l’axe et – par là même – sur la valeurprise par la résistance, si on connaît sa valeur de butée.

EXEMPLE :POT 7, 255, B0SERout 0, N2400, (#B0)

Lit un potentiomètre relié à RB7, mémorise le résultat dans lavariable B0, puis met cette valeur en sortie sur RB0, en modesérie.Le schéma de branchement est le suivant :

Page 237: le PIC_16F84 livre

237

PULSin

Mesure la durée d’une impulsion arrivant sur une pin du Port B (RB).La pin désignée est automatiquement mise en entrée.NB : La durée est exprimée par unités de 10 µs. Autrement dit : le résultatde la mesure est à multiplier par 10 pour avoir le nombre de microsecondesrecherché.

SYNTAXE :PULSin Pin, Etat, Variable

Nom de la variable à 16 bits (donc : de type W) dans laquelle on veut mémoriser le résultat de la mesure. Cette variable peut aller de 1 à 65.535 (correspondant respectivement à :

- 1 x 10 µs = 10 µs..

- 65.535 x 10 µs = 655.350 µs (soit 655,35 ms ou encore 0,65535 secondes).

( 0 ou 1 ) Définit la partie du signal dont on veut lire la durée :

1 = la partie haute 0 = la partie basse.

( 0... 7 ) Numéro de la pin du Port B (RB) qui reçoit le signal dont on veut mesurer la durée. Attention : seul le numéro de la pin doit être noté ( 0..... 7).

Page 238: le PIC_16F84 livre

238

EXEMPLE :PULSin 5, 1, W0Mesure la durée de la partie haute d’une impulsion arrivant surRB5 et stocke le résultat dans la variable (à16 bits) W0.

NB : Si aucun front n’est détecté, ou si l’impulsion dure pluslongtemps que 0.65535 seconde, Variable est mise à 0.

Si on définit une variable de type B (variable à 8 bits) au lieud’une variable de type W (variable à 16 bits), seuls les 8 bits de

poids faible sont mémorisés.

Page 239: le PIC_16F84 livre

239

PULSout

Génère - sur une pin du Port B - une impulsion de durée calibrée,exprimée par unités de 10 µs.La pin désignée est automatiquement mise en sortie.Le niveau (haut ou bas) de l’impulsion calibrée mise en sortie,dépend de l’état de la pin avant l’exécution de cette instruction, car- lorsque cette instruction survient - elle inverse l’état actuel, pourmarquer un début à partir duquel elle peut calculer la durée.

SYNTAXE :PULSout Pin, Période

Durée de l’impulsion (de 1 à 65.535) par pas de 10 µs. 1 correspond à (1x10 µs) soit 10 µs 2 correspond à (2x10 µs) soit 20 µs

. 65.535 correspond à (65.535x10 µs) soit 0.65535 secondes.

(0... 7) Désigne le numéro de la pin du Port B (RB) sur laquelle onveut sortir l’impulsion calibrée.Attention : seul le numéro (1, 2, 3..... 7) de la pin doit être noté,et non pas Pin 1, Pin 2...... Pin 7

EXEMPLE :PULSout 4, 100Envoie sur RB4 une impulsion de 1 ms (100x10 µs).

Page 240: le PIC_16F84 livre

240

PWM Pulse With Modulation

Modulation par largeur d’impulsions

Exemple de largeurs d’impulsions allant en augmentant(ici l’état haut MARK devient de plus en plus large) :

Exemple de largeurs d’impulsions allant en diminuant(ici l’état haut MARK devient de plus en plus court) :

Cette instruction génère sur une pin du Port B (RB) un train d’impulsionsmodulées en largeur.

Page 241: le PIC_16F84 livre

241

La pin désignée est automatiquement mise en sortie mais, sitôt lecycle terminé, elle est automatiquement remise en entrée.

SYNTAXE :PWM Pin, Duty, Cycle

Nombre d’impulsions qu’on veut élargir ou retrécir.

Désigne (en pourcentage) le cycle de travail de chaque train d’impulsions (peut varier de 0% à 255%). C’est le coefficient d’élargissement ou de retrécissement qu’on veut appliquer aux

impulsions.

Numéro de la pin du Port B (RB) sur laquelle on veut générer le train d’impulsions PWM.

Une LED commandée par un signal PWM voit sa luminosité s’accroîtreprogressivement ou diminuer progressivement (selon le mode deprogrammation), comme si elle était associée à un variateur, produisantainsi une sorte d’effet crépucsulaire.

Moyennant un réseau R/C, cette instruction permet de mettre en placeun convertisseur D/A tout simple :

Page 242: le PIC_16F84 livre

242

La modulation par largeur d’impulsions (modulation d’impulsionsen durée, ou modulation par nombre d’impulsions dans le temps) est unetechnique qui consiste à faire varier la puissance moyenne de sortie, dans letemps, en agissant sur le rapport cyclique (temps ON / temps de cycle).Le temps de cycle est un état ON plus un état OFF.

La puissance moyenne du signal diminue (ou augmente) en fonction dutemps.Le temps de cycle est constant, mais le temps « ON » varie (sa duréediminue, ou augmente).

Ce type de modulation présente au moins trois avantages : un seul bit dePort suffit à commander les transitions ON/OFF ; le signal ainsi moduléréduit la dissipation de puissance (perte de chaleur, par exemple), et peutcommander une charge à puissance variable.

Temps de cycle = un temps « ON » + un temps « OFF ».

Temps « ON »Rapport cyclique = ---------------------

Temps de cycle

Un exercice pour vous entraîner à utiliser cette instruction consiste à brancher un voltmètre pour visualiser et mesurer un signal PWM, en y

associant une LED servant (dans une certaine mesure) de confirmation.Le voltmètre sera un modèle analogique (à aiguille) de préférence à unmodèle digital.La tension de sortie moyenne est proportionnelle au rapport cyclique etindépendante du temps de cycle.Avec un temps de cycle maximum, vous risquez de voir l’aiguille duvoltmètre se déplacer très légèrement.

Page 243: le PIC_16F84 livre

243

Un autre exercice pourrait consister à faire varier le temps « ON »et le temps « OFF » en fonction des données d’un tableau. Avec ces prescriptions, par exemple :

Rapportcyclique

Temps« ON »

Temps« OFF »

Tempsde cycle

0,10 20 180 2000,20 20 80 1000,30 30 70 1000,40 40 60 1000,50 60 60 1200,60 90 60 1500,70 140 60 2000,80 160 40 2000,90 180 20 2001,00 200 0 200

Page 244: le PIC_16F84 livre

244

RANDOM

Génère un nombre aléatoire sur 16 bits et le stocke dans unevariable de type W (variable de 16 bits, composée de lajuxtapposition de deux variables de 8 bits. Exemple : la variableW0 est composée de la juxtapposition des variables B0 et B1).

SYNTAXE :RANDOM Variable

Nom d’un variable de 16 bits (W0.... W25) dans laquelle le programme va stocker le nombre aléatoire.

EXEMPLE :RANDOM W0Génère un nombre aléatoire de 16 bits et lestocke dans la wariable W0.

NB : Le nombre aléatoire pouvant être généré par cette instruction peut aller de 1 à 65.535. Le nombre 0 n’est pas généré.

Page 245: le PIC_16F84 livre

245

READ

Avec cette instruction on lit une donnée dans la mémoireEEPROM.Le résutlat de la lecture est mémorisé dans la variable spécifiée.

SYNTAXE :READ Adresse, Variable

Nom de la variable (B0... B51) dans laquelle on veut stocker le résultat de la lecture.

Adresse EEPROM dont on veut lire le contenu.

Rappel : Pour écrire dans cette mémoire on utilisel’instruction EEPROM.

Page 246: le PIC_16F84 livre

246

RETURN

C’est l’instruction qui termine tout sous programme.Un sous programme commence par GOSUB, et doitobligatoirement se terminer par RETURN.Une fois le sous programme terminé, cette instruction provoquele retour au programme principal, à l’instruction se trouvantjust’après le GOSUB ayant appelé le sous programme.

Page 247: le PIC_16F84 livre

247

REVERSE

Inverse le sens de fonctionnement de la patte spécifiée (0.... 7)du Port B (RB).Si elle était une entrée, après cette instruction elle devient une sortie,et inversement (si elle était une sortie, elle devient une entrée).

SYNTAXE :REVERSE Pin

Numéro (0.... 7) de la pin du Port B (RB) dont on veutinverser le sens.

EXEMPLE :OUTPUT 7REVERSE 7Met d’abord RB7 en sortie, puis inverse le senset met RB7 en entrée.

NB : Seul le numéro (0.... 7) de la pin du Port B (RB) doit être noté (REVERSE 0, REVERSE 1,....... REVERSE 7 et non REVERSE Pin0, REVERSE Pin1.....).

Page 248: le PIC_16F84 livre

248

SERin Serial Input

Cette instruction permet de recevoir des données sous forme sérieasynchrone , par mots de 8 bits, sans parité, avec un seul bit de STOP.La réception doit avoir lieu en utilisant l’une des pins (0.... 7) duPort B (RB).

SYNTAXE :SERIN Pin, Mode, (Qualificateur), Variable

Nom de la variable (B0... B51)dans laquelle on veut stockerles données reçues.

A noter entre parenthèses. Ca peut être un seul,ou plusieurs. Si plusieurs, une virgule doit lesséparer. Il s’agit des informations optionnelles(formant une sorte de « clé ») qui doivent êtrereçues exactement dans l’ordre spécifié, avantque la ou les données ne soient prises en compte.Si, lors de la réception de plusieursQualificateurs, un seul ne correspond pas à la cléà laquelle ils sont comparés un à un, leprocessus revient au début, et le programmereprend à les examiner depuis le premier.Un Qualificateur peut être une constante, unevariable ou une chaîne de caractères (dans cedernier cas, chaque caractère de la chaîne esttraité individuellement, pris en sa valeurASCII). Cela sert à sécuriser une transmission.Très utile notamment dans le cas destélécommandes, d’alarmes ou d’anti-vol àdistance).

Définit à la fois la vitesse de transmission (Baud Rate) et la forme des données (TTL vrai ou TTL inversé).

On peut choisir parmi 8 modes possibles, selon lesspécifications du tableau suivant :

Page 249: le PIC_16F84 livre

249

Symbole Valeur Baud Rate ModeT2400 0 2400T1200 1 1200T9600 2 9600T300 3 300

TTL vrai

N2400 4 2400N1200 5 1200N9600 6 9600N300 7 300

TTL inversé

Etant donné que les circuits d’interface RS232 (même les pluséconomiques) présentent d’excellentes caractéristiques d’entrée/sortie,les signaux peuvent être gérés par les PIC sans besoin d’un convertisseurde niveux.Les signaux présentés en format TTL inversé doivent être utilisésmoyennant une résistance de limitation de courant :

EXEMPLE :LOOP SERin 7, n1200, B0

IF B0>0 THEN SORTIESORTIE POKE Pin3, B0

PAUSE 300GOTO LOOP

Reçoit un signal série sur RB7, en TTL inversé, à la vitesse de1200 Bauds, et le stocke dans la variable B0.Si B0 contient une donnée, elle est envoyée sur la pin 3 du Port A(RA3). On temporise 300 ms. Puis on recommence avecl’octet suivant.

Page 250: le PIC_16F84 livre

250

SERout Serial Output

Cette instruction permet d’envoyer des données, sous forme sérieasynchrone, par mots de 8 bits, sans parité, avec un seul bit deSTOP.L’émission doit avoir lieu en utilisant l’une des pins (0... 7) duPort B (RB).

SYNTAXE :SERout Pin, Mode, (Donnée, Donnée....)

A noter entre parenthèses. Ca peut être une ou plusieurs. Si plusieurs, une virgule doit les séparer. Il s’agit des informations à transmettre. Ces informations peuvent être des constantes, des variables ou une chaîne de caractères.

- Une chaîne de caractères est traitée comme une suite de caractères. Chacun d’eux est émis individuellement.- Une valeur numérique (variable ou constante) est émise sous la forme de son équivalent ASCII. Ainsi, par exemple, 13 est un retour chariot et 10 est un saut de ligne.- Une valeur numérique précédée du signe # (dièse) est émise sous la forme de la représentation en ASCII de la valeur décimale correspondante. Ainsi par exemple, #123 fera émettre « 1 », puis « 2 », puis « 3 ».

Définit à la fois la vitesse de la transmission (Baud Rate), la forme des données (TTL vrai ou TTL TTL inversé) et la configuration de l’étage de sortie (Drain ouvert ou Collecteur ouvert). On peut choisir parmi 16 modes possibles, selon les spécifications du tableau suivant :

Page 251: le PIC_16F84 livre

251

Symbole Valeur Baud Rate ModeT2400 0 2400T1200 1 1200T9600 2 9600T300 3 300

TTL vrai

N2400 4 2400N1200 5 1200N9600 6 9600N300 7 300

TTL inversé

OT2400 8 2400OT1200 9 1200OT9600 10 9600OT300 11 300

Drainouvert

ON2400 1 2400ON1200 2 1200ON9600 13 9600ON300 14 300

Sourceouvert

Pin désigne le numéro (0... 7) de la pin du Port B (RB) que l’on veututiliser pour sortir le signal série.

Etant donné que les circuits d’interface RS232 (même les pluséconomiques) présentent d’excellentes caractéristiques d’entrée/sortie,les signaux peuvent être gérés par les PIC sans besoin d’un convertisseurde niveux.Les signaux présentés en format TTL inversé doivent être utilisésmoyennant une résistance de limitation de courant :

Page 252: le PIC_16F84 livre

252

Sur fiche DB9 Sur fiche BD25RS232 Rx Pin 2 Pin 3

RS233 Masse Pin 5 Pin 7

EXEMPLES :

1) Un seul octet à transmettre :SERout 6, N2400, (B1)

2) Plusieurs octets à transmettre :SERout 6, N2400, (B1, B0.....0F....C3)

3) Envoyer sur RB0 la valeur ASCII contenue dans la variable B0, suivie d’un saut de ligne :

SERout 0, N2400, (#B0, 10)

4) Envoi d’un octet (stocké dans la variable B1) précédé d’une clé servant de code secret :

SERout 6, N2400, (″S″, ″E″ , ″S″, ″A″, ″M″, ″E″, B1) ↓ Octet proprement

dit.

Caractères servant de clé (caractères « secrets »).

Cette façon de coder est particulièrement utile dans le casde systèmes d’antivol.Le récepteur, sans avoir au préalable reçu le mot SESAME,ne peut mémoriser le mot fourni par B1.

Page 253: le PIC_16F84 livre

253

SLEEP

Met le PIC en mode veille pendant un certain temps (définipar Période) exprimé en secondes.Période est une variable de 16 bits, pouvant aller de 1 à65.535 (plus de 18 heures) avec une précision qui dépend dutimer interne (celui associé au chien de garde) qui est du typeR/C. Cette précision n’est qu’approximative, et ne doit pas êtreutilisée comme référence temporelle absolue.En plus, il faut savoir que la plus courte Période ne peut êtreinférieure à celle du time-out maximum du chien de garde, quiest de 2,3 secondes.En mode SLEEP, le microcontrôleur passe en mode basseconsommation (low power).Lorsque le délai spécifié est écoulé, l’exécution du programmereprend avec l’instruction suivante.

SYNTAXE :SLEEP Période

Durée de veille, éxprimée en secondes.

EXEMPLE :SLEEP 60Met le µC en veille pendant 1 minute (60 secondes).

Page 254: le PIC_16F84 livre

254

SOUND

Génère un son sur la pin désignée du Port B (RB).

SYNTAXE :SOUND Pin, (Note, Durée, Note, Durée,...)

Durée de la note (ms).

Hauteur de la note: - de 1 à 127 = notes audibles - de 128 à 256 = bruit blanc.

Numéro (0.... 7) de la pin du Port B (RB) sur laquelle on veutfaire sortir le son.

EXEMPLES :

1) SOUND 7, (100, 50) Génère sur RB7 une note de hauteur 100, pendant 50 ms.

2) SOUND 7, (1, 100, 65, 100, 127, 100) Génère sur RB7 trois notes : une note grave pendant 100 ms, suivie d’une note moyenne pendant 100 ms, suivie encore d’une note aigüe pendant 100 ms.

Le son généré a la forme d’un signal carré.La Durée et la hauteur de la Note sont à déterminer expérimentalement, carelles peuvent varier d’un µC à l’autre en fonction notamment de lafréquence du quartz pilote, mais aussi de la tension d’alimentation, de latempérature, etc...

Les paramètres enfermés dans les parenthèses doivent indiquer la note etsa durée, la note et sa durée, la note et sa durée....Leur nombre doit être (forcément !) pair.On peut mettre dans les parenthèses autant de paramètres qu’on veut.Il y a – bien sûr – une limite : la taille mémoire maximale du PIC !

Page 255: le PIC_16F84 livre

255

Voici deux façons possibles de raccorder un haut-parleur àune pin du Port B :

Page 256: le PIC_16F84 livre

256

TOGLE

Cette instruction inverse l’état logique de l’un des bits (0... 7)du Port B (RB).

SYNTAXE :TOGLE Pin

Numéro de la pin (0.... 7) du Port B dont on veut inverser l’état.

EXEMPLE :LOW 0TOGLE 0Dans un premier temps on met RB0 à l’état bas,puis on inverse l’état de RB0 (RB0 passe

de l’état bas à l’état haut).

Page 257: le PIC_16F84 livre

257

TRISA

Configure le Port A (en sortie ou en entrée).

Exemples :1) SYMBOL PORTA = 5 SYMBOL TRISA = $85 POKE TRISA, 0 On configure le Port A en sortie

2) SYMBOL PORTA = 5 SYMBOL TRISA = $85 POKE TRISA, 255 On configure le Port A en entrée

Page 258: le PIC_16F84 livre

258

WRITE

C’est l’instruction avec laquelle on écrit dans la mémoire EEPROMde données (Data Memory).

SYNTAXE :WRITE Adresse, Donnée

Donnée à écrire.

Adresse à laquelle on veut écrire (00.... 3F).

EXEMPLE :WRITE 6, B0Ecrit à l’adresse 6 la donnée se trouvant dans la variable B0.

NB : Les données entrent dans la mémoire EEPROM une seule fois au moment de la programmation du PIC et non pas chaque fois qu’on exécute le programme.

Page 259: le PIC_16F84 livre

259

Exemples de programmes écrits en langage PicBASIC

Voici 17 exemples de programmes écrits en MEL PicBASICqu’ils ne faut pas juger au nombre d’instructions, car – ainsi queje l’ai déjà dit – les programmes écrits en PicBASIC sont souventcourts, cela étant dû à la puissance de ses instructions.

Ce ne sont que des bases. Ils illustrent le mécanisme de la programmationen MEL PicBASIC (je rappelle que MEL est l’acronime de MICROENGINERING LABS, la Société qui a développé ce BASIC pour PIC).

Je vous encourage à vous procurer un Editer MEL PicBASICet à faire comme moi.Vous verrez que développer avec ce logiciel devient un jeu d’enfants.

Bonne programmation.

Page 260: le PIC_16F84 livre

260

Programme 1

Faire clignoter une LED reliée à RB0 (pin 0 du Port B).

LOOP : HIGH 0PAUSE 1000LOW 0PAUSE 1000GOTO LOOPEND

La LED s’allume pendant 1 seconde (1000 ms), puis s’éteint pendant1 seconde.Puis le cycle recommence indéfiniment.

Pour que la LED clignote plus vite, il faut ajuster la durée de PAUSE.Exemple :LOOP : HIGH 0

PAUSE 100LOW 0PAUSE 100GOTO LOOPEND

Dans ce cas la LED s’allume pendant 100 ms, puis s’éteint pendant 100 ms.Puis le cycle recommence indéfiniment.

Page 261: le PIC_16F84 livre

261

Programme 2

Faire clignoter une LED relée à RB5 (bit 5 du Port B) si l’interrupteurrelié à RA0 (bit 0 du Port A) est à l’état haut.

LOOP : IF PIN 0 = 1 THEN LEDGOTO LOOP

LED : HIGH 5PAUSE 100LOW 5PAUSE 100GOTO LOOPEND

PAUSE étant ici positionnée à 100, la LED clignote plutôt rapidement.

Page 262: le PIC_16F84 livre

262

Pour faire clignoter la LED moins rapidement, il suffit de modifierla valeur de PAUSE :

LOOP : IF PIN 0 = 1 THEN LEDGOTO LOOP

LED : HIGH 5PAUSE 1000LOW 5PAUSE 1000GOTO LOOPEND

1000 ms = 1 seconde. Ici la LED clignote lentement.

On y remarque deux labels : LOOP et LED. Chacune renvoit àun sous programme.Les noms des labels sont suivis du signe : (deux points) :

- LOOP :- LED :

Dans le premier sous programme on dit :Si la pin 0 du Port A est à l’état 1, cesse d’exécuter lesinstructions en ligne et saute au sous programme LED, sinon(ligne suivante GOTO LOOP) surveille l’état logique de cette pin.Si elle est à l’état 0, continue à surveiller.

Dans le deuxième sous programme on dit :Allume la pin 0 du Port B pendant 1 seconde, puis éteins-lapendant 1 seconde. Puis recommence la scrutation de l’état de laPin 0 du Port A.

Les pins auxquelles le langage MEL PicBASIC fait tacitement référencesont celle du Port B.HIGH 5 signifie : met à l’état haut la pin 5 du Port B.

HIGH (mets à l’état haut) 5 (la pin 5 du Port B).

Page 263: le PIC_16F84 livre

263

Programme 3

Faire clignoter une LED reliée à RB5 (pin 5 du Port B) si lesinterrupteurs reliés à RA0 et à RA1 sont fermés.

LOOP : IF Pin 0 = 1 AND Pin 1 = 1 THEN LEDGOTO LOOP

LED : HIGH 5PAUSE 100LOW 5PAUSE 100GOTO LOOPEND

Si la pin 0 (RA0) et la pin 1 (RA1) du Port A sont à 1, on exécute le sous programme LED, sinon on continue à surveiller l’état de RA0et de RA1.

Lorsque les conditions sont remplies, on allume la LED reliée à RB5(pin 5 du Port B) pendant 100 ms, puis on l’éteint pendant 100 ms.Puis on revient au début pour voir si les deux interrupteurs sont fermés.Si Pin0 et Pin1 ne sont pas tous les deux enfoncés, il ne se passe rien(la LED reste éteinte).

Page 264: le PIC_16F84 livre

264

Programme 4

Allumer successivement toutes les LED du Port B.

LOOP : FOR B0 = 0 TO 7HIGH B0NEXT B0END

Page 265: le PIC_16F84 livre

265

Programme 5

Allume et éteint en séquence, une à la fois, toutes les LED du Port B(de RB0 à RB7), avec un petit intervalle de temps entre chaque.

LOOP : FOR B0 = 0 TO 7HIGH B0PAUSE 100LOW B0PAUSE 900NEXT B0GOTO LOOP

END

Page 266: le PIC_16F84 livre

266

Programme 6

Faire clignoter simultanément toutes les 8 LED du Port B.

On pourrait certes écrire :LOOP : HIGH 0

HIGH 1HIGH 2HIGH 3HIGH 4HIGH 5HIGH 6HIGH 7PAUSE 100LOW 0LOW 1LOW 2LOW 3LOW 4LOW 5LOW 6LOW 7PAUSE 100GOTO LOOPEND

Pas très beau !L’utilisation d’une variable simplifie l’écriture :LOOP : FOR B0 = 0 TO 7

HIGH B0NEXT B0PAUSE 100FOR B0 = 0 TO 7LOW B0NEXT B0PAUSE 100GOTO LOOPEND

Page 267: le PIC_16F84 livre

267

Les deux programmes font exactement la même chose, mais le deuxièmeutilise beaucoup moins d’instructions.

Faire des économies d’instructions dans un si court programme n’a pas desens ; mais cela vaut la peine quand on écrit des programmes longs.Exercez-vous donc à toujours recourir aux instructions les mieux adaptées.

Page 268: le PIC_16F84 livre

268

Programme 7

Faire clignoter 5 fois toutes les LED du Port B ensemble.

LOOP : FOR B1 = 0 TO 7HIGH B1PAUSE 50LOW B1PAUSE 500NEXT B1FOR B0 = 1 TO 5HIGH B1PAUSE 50LOW B1PAUSE 50NEXT B1NEXT B0GOTO LOOP

Page 269: le PIC_16F84 livre

269

Programme 8

Faire clignoter en séquence, 5 fois chacune, l’une après l’autreet une à la fois, les 8 LED du Port B, en commençant par la LEDassociée à RB1.... jusquà celle associée à RB7. Puis recommencer.

LOOP : FOR B0 = 1 TO 5FOR B1 = 0 TO 7HIGH B1PAUSE 100LOW B1PAUSE 500NEXT B1NEXT B0GOTO LOOPEND

Ce programme fait clignoter toutes les LED du Port B (0 à 7) cinq fois,l’une après l’autre, à un intervalle de demi-seconde, créant l’illusion

d’une LED qui se décale en clignotant.

Page 270: le PIC_16F84 livre

270

Programme 9

Allumer les 8 LED du Port B en séquence binaire.

DIRS = 255LOOP : FOR B1 = 0 TO 255

PINS = B1PAUSE 200NEXT B1GOTO LOOP

Dans ce programme :- DIRS = 255 définit les 8 lignes du Port B comme sorties ;- Le comptage se fait de 0 à 255 (décimal) (on pourrait écrire : FOR B1 = %0 TO %11111111 ou aussi : FOR B1 = $0 TO $FF ) ;- A chaque incrément de la valeur assumée par la variable B1 (de 0 à 255 en décimal) l’instructions PINS = B1 visualise la valeur courante de B1 ;- L’instruction PAUSE 200 maintient cette visualisation active pendant 200 ms.

Page 271: le PIC_16F84 livre

271

Programme 10

Générer sur RB3 un signal modulé en largeur d’impulsions (PWM)sous le contrôle de 2 interrupteurs :

- l’un placé sur RA0, faisant augmenter la luminosité de la LED lorsqu’il est fermé ;- l’autre placé sur RA1, faisant diminuer la luminosité de la LED lorsqu’il est fermé.

NB : Un transistor peut être branché sur RB3 pour commander une charge plus importante, ou un triac pour commander une lampe secteur.

SYMBOL PORTA = 5SYMBOL TRISA = $85

POKE TRISA, 255B1 = 127

LOOP : PEEK PORTA, 0PWM 3, B1, 10IF Bit 0 = 1 THEN INCIF Bit 1 = 1 THEN DECGOTO LOOP

INC : IF B1 > 250 THEN LOOPB1 = B1 + 5GOTO LOOP

DEC : IF B1 < 5 THEN LOOPB1 = B1 – 5GOTO LOOPEND

Les trois premières lignes sont des initialisations . On y dit que PORTA està l’adresse 5, TRISA est à l’adresse 85, et qu’on veut tous les bits duPort A en entrée.B1 = 127 donne à la LED une luminosité initiale moyenne (127 est à lamoitié entre 1 et 256).PEEK PORTA, 0 lit l’état de RA0.Puis on définit les paramètres de la PWM, avec un coefficient changeantde 5% par coup, sur 10 cycles, et si RA0 est à 1 on incrémente la variableB1 (en appelant le sous programme INC), tandis que si RA1 est à 1, ondécrémente la variable B1 ( en appelant le sous programme DEC).

Page 272: le PIC_16F84 livre

272

Programme 11

Réaliser une syrène à 2 tons.

LOOP SOUND 7, (10, 100, 50, 100)GOTO LOOPEND

Ce programme génère sur RB7 un son de hauteur 10 pendant 100 ms,suivi d’un deuxième de hauteur 50 pendant 100 ms.Puis on recommence.

Page 273: le PIC_16F84 livre

273

Programme 12

Générer une mélodie répétitive à 3 notes.

LOOP SOUND 7, (10, 100, 60, 100, 120, 100)GOTO LOOPEND

Ce programme génère sur RB7 un premier son de hauteur 10 pendant(environ) 100 ms, puis un deuxième son de hauteur 60 pendant(approximativement) 100 ms, et enfin un troisième son de hauteur 120pendant encore (approximativement) 100 ms.Puis on recommence sans cesse.

Page 274: le PIC_16F84 livre

274

Programme 13

Générer une mélodie en crescendo de 20 notes jouées en continuation.

LOOP B0 = 0INC FOR B0 = B0 + 5

SOUND 7, (B0, 100)NEXT B0IF B0 > 100 THEN LOOPGOTO INCEND

La variable B0 prend ici les 20 valeurs : 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95100

qui renvoient à des sons de différente hauteur (en crescendo).

Page 275: le PIC_16F84 livre

275

Programme 14

Lire l’état de 5 interrupteurs placés sur le Port A et visualiser l’état dechacun d’eux sur une rangée de 5 LED reliées au Port B.

SYMBOL PORTA = 5SYMBOL TRISA = $85

POKE TRISA, 255LOOP : PEEK PORTA, B0

IF Bit0 = 1 THEN ZEROIF Bit1 = 1 THEN UNIF Bit2 = 1 THEN DEUXIF Bit3 = 1 THEN TROISIF Bit4 = 1 THEN QUATREGOTO LOOP

ZERO : HIGH 0GOTO LOOP

UN : HIGH 1GOTO LOOP

DEUX : HIGH 2GOTO LOOP

TROIS : HIGH 3GOTO LOOP

QUATRE : HIGH 4GOTO LOOPEND

Après les initialisations, et après avoir mémorisé le Port A dans la variableB0, on teste chaque bit qui – s’il est à 1 – renvoie à un sous programmespécifique qui allume la LED correspondante.

Page 276: le PIC_16F84 livre

276

Programme 15

Lire l’état de 5 interrupteurs placés sur le Port A et dire lequel d’euxa été fermé, moyennant l’émission de bips sur un haut-parleur placésur RB7 : un seul bip pour informer qu’il s’agit de l’interrupteur n° 1,deux bips pour le n° 2, et ainsi de suite.. 5 bips pour l’interrupteur n° 5.

SYMBOL PORTA = 5SYMBOL TRISA = $85

POKE TRISA, 255LOOP : PEEK PORTA, B0

IF Bit0 = 1 THEN 1_bipIF Bit1 = 1 THEN 2_bipsIF Bit2 = 1 THEN 3_bipsIF Bit3 = 1 THEN 4_bipsIF Bit4 = 1 THEN 5_bipsGOTO LOOP

1_bip : SOUND 7, (100, 50)GOTO LOOP

2_bips : SOUND 7, (100, 50, 100, 50)GOTO LOOP

3_bips : SOUND 7, (100, 50, 100, 50, 100, 50)GOTO LOOP

4_bips : SOUND 7, (100, 50, 100, 50, 100, 50, 100, 50)GOTO LOOP

5_bips : SOUND 7, (100, 50, 100, 50, 100, 50, 100, 50, 100, 50)GOTO LOOPEND

Après les initialisations, et après avoir mémorisé le Port A dans la variableB0, on teste chaque bit qui – s’il est à 1 – renvoie à un sous programmespécifique qui émet le nombre de bips correspondant.Les bips ont tous la même hauteur et la même durée (100, 50).100 correspond à la hauteur de la note. 50 correspond à sa durée.

Page 277: le PIC_16F84 livre

277

Programme 16

Transmettre en mode série, à 2400 Bauds, via la pin RB6, un code de 4bits issu de 4 interrupteurs placés sur le Port A.

SYMBOL PORTA = 5SYMBOL TRISA = $85

POKE TRISA, 255 (Port A en entrée)LOOP : PEEK PORTA, B0 (Mémorise le Port A dans B0)

PAUSE 200SERout , T2400, (B0)GOTO LOOPEND

- L’instruction PAUSE 200 est nécessaire ici, car le code provient d’interrupteurs (pouvant générer des rebonds).- L’instruction SERout 6, T2400, (B0) envoie sur la pin 6 du Port B le code stocké dans la variable B0, aux normes T2400 (2400 Bauds, mode TTL vrai).

Page 278: le PIC_16F84 livre

278

Programme 17

Recevoir en mode série, à 2400 Bauds, un code entrant sur la pin RB6.Stocker le code reçu dans la variable B0.

LOOP : SERin 6, N2400, B0IF B0 > 0 THEN CODE_OKGOTO LOOP

CODE_OK POKE PORTA, B0END

Le code reçu est stocké dans la variable B0.L’instruction IF B0 > 0...... sert à détecter l’arrivée d’un code.Si un code autre que 0 est détecté, alors on le stocke dans B0.En l’absence de code, on continue à guetter.

Page 279: le PIC_16F84 livre

279

BIBLE pour DESASSEMBLER A LA MAIN

Version 1.00

DESSASSEMBLER est le contraire d’ASSEMBLER.Cette BIBLE n’est donc valable que pour des programmes assemblés,c’est à dire ayant été écrits en langage ASSEMBLEUR, à extension .hex.Elle ne s’applique pas à des programmes écrits en BASIC ou dans unquelconque autre langage.

Lorsque dans un programme en ASSEMBLEUR vous écrivez, parexemple :

GOTO STARTMOVLW 00MOVWF TRISB

. . .

l’Assembleur code ces instructions et fournit les valeurs hexadécimalessuivantes :

280530000086 . . .

2805 veut dire GOTO à l’adresse 053000 veut dire MOVLW 000086 veut dire MOVWF TRISB....

Il est donc possible de procéder à l’inverse, c’est à dire : partir des codeshexadécimaux et remonter aux instructions.

Ce travail est généralement confié à un logiciel appeléDESASSEMBLEUR. Mais, avec un peu de patience, vous pouvezdésassembler un programme à la main, sans besoin d’aucun logiciel, envous aidant de ma bible à désassembler à la main, dont vous truvez icila première version. C’est une nouveauté MONDIALE.

Page 280: le PIC_16F84 livre

280

Mais en tout premier lieu, notez bien ces quatre remarques :

1) Les codes hexadécimaux qui ne figurent pas dans cette bible, sont :- soit inexistants (exemple : 0087)- soit illégaux ;

2) A côté de chaque code hexadécimal permis, vous trouvez, selon le cas, ou le seul nom de l’instruction correspondante(par exemple : 0064 = CLRWDT)ou le nom de l’instruction et le registre qui lui est associé (par exemple : 0083 = MOVWF STATUS) ;

3) Certaines instructions hexadécimales peuvent avoir plusieursprésentations.C’est pourquoi vous pouvez trouver la même instruction plusieurs fois,dans plusieurs pages différentes, à plusieurs endroits... (exemple : NOP =0000 = 0020 = 0040 = 0060).Il ne s’agit pas d’une erreur, car dans l’encodage de l’instruction NOP (pourrester dans cet exemple), les bits 5 et 6 peuvent prendre des valeursindifférentes. Ce qui conduit à 4 encodages possibles : 0000, 0020, 0040 et0060.

4) Cette bible est ma première tentative ( en quoi, je pense avoir innové car- à ma connaissance - il n’existe rien de semblable ni en librairie ni sur leWEB). C’est pourquoi je vous l’ai présentée comme une nouveautéMONDIALE.C’est la version 1.00J’y ai consacré beaucoup de temps, et j’ai veillé à l’exactitude de chaquecode.Cependant j’espère que vous me pardonnerez une éventuelle faute defrappe, une omission, un double-emploi ou une bévue.N’hésitez pas à me signaler ce qui vous paraît douteux, pour que je puisseétudier votre proposition, éventuellement corriger, et en distribuer unenouvelle version.

Page 281: le PIC_16F84 livre

281

0000 NOP0008 RETURN0009 RETFIE0020 NOP0040 NOP0060 NOP0062 OPTION0063 SLEEP0064 CLWDT0065 TRIS A0066 TRIS B0080 MOVWF INDF0081 MOVWF TMR00082 MOVWF PCL0083 MOVWF STATUS0084 MOVWF FSR0085 MOVWF PORTA0086 MOVWF PORTB0088 MOVWF EEDATA0089 MOVWF EEADR008A MOVWF PCLAYH008B MOVWF INTCON008C MOVWF 0C008D MOVWF 0D008E MOVWF 0E008F MOVWF 0F0090 MOVWF 100091 MOVWF 110092 MOVWF 120093 MOVWF 130094 MOVWF 140095 MOVWF 150096 MOVWF 160097 MOVWF 170098 MOVWF 180099 MOVWF 19009A MOVWF 1A

009B MOVWF 1B009C MOVWF 1C009D MOVWF 1D009E MOVWF 1E009F MOVWF 1F00A0 MOVWF 2000A1 MOVWF 2100A2 MOVWF 2200A3 MOVWF 2300A4 MOVWF 2400A5 MOVWF 2500A6 MOVWF 2600A7 MOVWF 2700A8 MOVWF 2800A9 MOVWF 2900AA MOVWF 2A00AB MOVWF 2B00AC MOVWF 2C00AD MOVWF 2D00AE MOVWF 2E00AF MOVWF 2F00B0 MOVWF 3000B1 MOVWF 3100B2 MOVWF 3200B3 MOVWF 3300B4 MOVWF 3400B5 MOVWF 3500B6 MOVWF 3600B7 MOVWF 3700B8 MOVWF 3800B9 MOVWF 3900BA MOVWF 3A00BB MOVWF 3B00BC MOVWF 3C00BD MOVWF 3D00BE MOVWF 3E00BF MOVWF 3F

Page 282: le PIC_16F84 livre

282

00C0 MOVWF 4000C1 MOVWF 4100C2 MOVWF 4200C3 MOVWF 4300C4 MOVWF 4400C5 MOVWF 4500C6 MOVWF 4600C7 MOVWF 4700C8 MOVWF 4800C9 MOVWF 4900CA MOVWF 4A00CB MOVWF 4B00CC MOVWF 4C00CD MOVWF 4D00CE MOVWF 4E00CF MOVWF 4F0100 CLRW0101 CLRW0102 CLRW0103 CLRW0104 CLRW0105 CLRW0106 CLRW0107 CLRW0108 CLRW0109 CLRW010A CLRW010B CLRW010C CLRW010D CLRW010E CLRW010F CLRW0110 CLRW0111 CLRW0112 CLRW0113 CLRW0114 CLRW

0115 CLRW0116 CLRW0117 CLRW0118 CLRW0119 CLRW011A CLRW011B CLRW011C CLRW011D CLRW011E CLRW011F CLRW0120 CLRW0121 CLRW0122 CLRW0123 CLRW0124 CLRW0125 CLRW0126 CLRW0127 CLRW0128 CLRW0129 CLRW012A CLRW012B CLRW012C CLRW012D CLRW012E CLRW012F CLRW0130 CLRW0131 CLRW0132 CLRW0133 CLRW0134 CLRW0135 CLRW0136 CLRW0137 CLRW0138 CLRW0139 CLRW

Page 283: le PIC_16F84 livre

283

013A CLRW013B CLRW013C CLRW013D CLRW013E CLRW013F CLRW0140 CLRW0141 CLRW0142 CLRW0143 CLRW0144 CLRW0145 CLRW0146 CLRW0147 CLRW0148 CLRW0149 CLRW014A CLRW014B CLRW014C CLRW014D CLRW014F CLRW014F CLRW0150 CLRW0151 CLRW0152 CLRW0153 CLRW0154 CLRW0155 CLRW0156 CLRW0157 CLRW0158 CLRW0159 CLRW015A CLRW015B CLRW015C CLRW015D CLRW015E CLRW

015F CLRW0160 CLRW0161 CLRW0162 CLRW0163 CLRW0164 CLRW0165 CLRW0166 CLRW0167 CLRW0168 CLRW0169 CLRW016A CLRW016B CLRW016C CLRW016D CLRW016E CLRW016F CLRW0170 CLRW0171 CLRW0172 CLRW0173 CLRW0174 CLRW0175 CLRW0176 CLRW0177 CLRW0178 CLRW0179 CLRW017A CLRW017B CLRW017C CLRW017D CLRW017E CLRW017F CLRW0180 CLRF INDF0181 CLRF TMR00182 CLRF PCL0183 CLRF STATUS

Page 284: le PIC_16F84 livre

284

0184 CLRF FSR0185 CLRF PORTA0186 CLRF PORTB0188 CLRF EEDATA0189 CLRF EEADR018A CLRF PCLATH018B CLRF INTCON018C CLRF 0C018D CLRF 0D018E CLRF 0E018F CLRF 0F0190 CLRF 100191 CLRF 110192 CLRF 120193 CLRF 130194 CLRF 140195 CLRF 150196 CLRF 160197 CLRF 170198 CLRF 180199 CLRF 19019A CLRF 1A019B CLRF 1B019C CLRF 1C019D CLRF 1D019E CLRF 1E019F CLRF 1F01A0 CLRF 2001A1 CLRF 2101A2 CLRF 2201A3 CLRF 2301A4 CLRF 2401A5 CLRF 2501A6 CLRF 2601A7 CLRF 27

01A8 CLRF 2801A9 CLRF 2901AA CLRF 2A01AB CLRF 2B01AC CLRF 2C01AD CLRF 2D01AE CLRF 2E01AF CLRF 2F01B0 CLRF 3001B1 CLRF 3101B2 CLRF 3201B3 CLRF 3301B4 CLRF 3401B5 CLRF 3501B6 CLRF 3601B7 CLRF 3701B8 CLRF 3801B9 CLRF 3901BA CLRF 3A01BB CLRF 3B01BC CLRF 3C01BD CLRF 3D01BE CLRF 3E01BF CLRF 3F01C0 CLRF 4001C1 CLRF 4101C2 CLRF 4201C3 CLRF 4301C4 CLRF 4401C5 CLRF 4501C6 CLRF 4601C7 CLRF 4701C8 CLRF 4801C9 CLRF 4901CA CLRF 4A

Page 285: le PIC_16F84 livre

285

01CB CLRF 4B01CC CLRF 4C01CD CLRF 4D01CE CLRF 4E01CF CLRF 4F020C SUBWF 0C020D SUBWF 0D020E SUBWF 0E020F SUBWF 0F0210 SUBWF 100211 SUBWF 110212 SUBWF 120213 SUBWF 130214 SUBWF 140215 SUBWF 150216 SUBWF 160217 SUBWF 170218 SUBWF 180219 SUBWF 19021A SUBWF 1A021B SUBWF 1B021C SUBWF 1C021D SUBWF 1D021E SUBWF 1E021F SUBWF 1F0220 SUBWF 200221 SUBWF 210222 SUBWF 220223 SUBWF 230224 SUBWF 240225 SUBWF 250226 SUBWF 260227 SUBWF 270228 SUBWF 280229 SUBWF 29022A SUBWF 2A022B SUBWF 2B

022C SUBWF 2C022D SUBWF 2D022E SUBWF 2E022F SUBWF 2F0230 SUBWF 300231 SUBWF 310232 SUBWF 320233 SUBWF 330234 SUBWF 340235 SUBWF 350236 SUBWF 360237 SUBWF 370238 SUBWF 380239 SUBWF 39023A SUBWF 3A023B SUBWF 3B023C SUBWF 2C023D SUBWF 2D023E SUBWF 3E023F SUBWF 3F0240 SUBWF 400241 SUBWF 410242 SUBWF 420243 SUBWF 430244 SUBWF 440245 SUBWF 450246 SUBWF 460247 SUBWF 470248 SUBWF 480249 SUBWF 49024A SUBWF 4A024B SUBWF 4B024C SUBWF 4C024D SUBWF 4D024E SUBWF 4E024F SUBWF 4F030C DECF 0C

Page 286: le PIC_16F84 livre

286

030D DECF 0D030E DECF 0E030F DECF 0F0310 DECF 100311 DECF 110312 DECF 120313 DECF 130314 DECF 140315 DECF 150316 DECF 160317 DECF 170318 DECF 180319 DECF 19031A DECF 1A031B DECF 1B031C DECF 1C031D DECF 1D031E DECF 1E031F DECF 1F0320 DECF 200321 DECF 210322 DECF 220323 DECF 230324 DECF 240325 DECF 250326 DECF 260327 DECF 270328 DECF 280329 DECF 29032A DECF 2A032B DECF 2B032C DECF 2C032D DECF 2D032E DECF 2E032F DECF 2F0330 DECF 300331 DECF 31

0332 DECF 320333 DECF 330334 DECF 340335 DECF 350336 DECF 360337 DECF 370338 DECF 380339 DECF 39033A DECF 3A033B DECF 3B033C DECF 3C033D DECF 3D033E DECF 3E033F DECF 3F0340 DECF 400341 DECF 410342 DECF 420343 DECF 430344 DECF 440345 DECF 450346 DECF 460347 DECF 470348 DECF 480349 DECF 49034A DECF 4A034B DECF 4B034C DECF 4C034D DECF 4D034E DECF 4E034F DECF 4F040C IORWF 0C040D IORWF 0D040E IORWF 0E040F IORWF 0F0410 IORWF 100411 IORWF 110412 IORWF 12

Page 287: le PIC_16F84 livre

287

0413 IORWF 130414 IORWF 140415 IORWF 150416 IORWF 160417 IORWF 170418 IORWF 180419 IORWF 19041A IORWF 2A041B IORWF 2B041C IORWF 2C041D IORWF 2D041E IORWF 2E041F IORWF 2F0420 IORWF 200421 IORWF 210422 IORWF 220423 IORWF 230424 IORWF 240425 IORWF 250426 IORWF 260427 IORWF 270428 IORWF 280429 IORWF 29042A IORWF 2A042B IORWF 2B042C IORWF 2C042D IORWF 2D042E IORWF 2E042F IORWF 2F0430 IORWF 300431 IORWF 310432 IORWF 320433 IORWF 330434 IORWF 340435 IORWF 350436 IORWF 360437 IORWF 37

0438 IORWF 380439 IORWF 39043A IORWF 3A043B IORWF 3B043C IORWF 3C043D IORWF 3D043E IORWF 3E043F IORWF 3F0440 IORWF 400441 IORWF 410442 IORWF 420443 IORWF 430444 IORWF 440445 IORWF 450446 IORWF 460447 IORWF 470448 IORWF 480449 IORWF 49044A IORWF 4A044B IORWF 4B044C IORWF 4C044D IORWF 4D044E IORWF 4E044F IORWF 4F050C ANDWF 0C050D ANDWF 0D050E ANDWF 0E050F ANDWF 0F0510 ANDWF 100511 ANDWF 110512 ANDWF 120513 ANDWF 130514 ANDWF 140515 ANDWF 150516 ANDWF 160517 ANDWF 170518 ANDWF 18

Page 288: le PIC_16F84 livre

288

0519 ANDWF 19051A ANDWF 1A051B ANDWF 1B051C ANDWF 1C051D ANDWF 1D051E ANDWF 1E051F ANDWF 1F0520 ANDWF 200521 ANDWF 210522 ANDWF 220523 ANDWF 230524 ANDWF 240525 ANDWF 250526 ANDWF 260527 ANDWF 270528 ANDWF 280529 ANDWF 29052A ANDWF 2A052B ANDWF 2B052C ANDWF 2C052D ANDWF 2D052E ANDWF 2E052F ANDWF 2F0530 ANDWF 300531 ANDWF 310532 ANDWF 320533 ANDWF 330534 ANDWF 340535 ANDWF 350536 ANDWF 360537 ANDWF 370538 ANDWF 380539 ANDWF 39053A ANDWF 3A053B ANDWF 3B053C ANDWF 3C053D ANDWF 3D

053E ANDWF 3E053F ANDWF 3F0540 ANDWF 400541 ANDWF 410542 ANDWF 420543 ANDWF 430544 ANDWF 440545 ANDWF 450546 ANDWF 460547 ANDWF 470548 ANDWF 480549 ANDWF 49054A ANDWF 4A054B ANDWF 4B054C ANDWF 4C054D ANDWF 4D054E ANDWF 4E054F ANDWF 4F060C XORWF 0C060D XORWF 0D060E XORWF 0E060F XORWF 0F0610 XORWF 100611 XORWF 110612 XORWF 120613 XORWF 130614 XORWF 140615 XORWF 150616 XORWF 160617 XORWF 170618 XORWF 180619 XORWF 19061A XORWF 1A061B XORWF 1B061C XORWF 1C061D XORWF 1D061E XORWF 1E

Page 289: le PIC_16F84 livre

289

061F XORWF 1F0620 XORWF 200621 XORWF 210622 XORWF 220623 XORWF 230624 XORWF 240625 XORWF 250626 XORWF 260627 XORWF 270628 XORWF 280629 XORWF 29062A XORWF 2A062B XORWF 2B062C XORWF 2C062D XORWF 2D062E XORWF 2E062F XORWF 2F0630 XORWF 300631 XORWF 310632 XORWF 320633 XORWF 330634 XORWF 340635 XORWF 350636 XORWF 360637 XORWF 370638 XORWF 380639 XORWF 39063A XORWF 3A063B XORWF 3B063C XORWF 3C063D XORWF 3D063E XORWF 3E063F XORWF 3F0640 XORWF 400641 XORWF 410642 XORWF 420643 XORWF 43

0644 XORWF 440645 XORWF 450646 XORWF 460647 XORWF 470648 XORWF 480649 XORWF 49064A XORWF 4A064B XORWF 4B064C XORWF 4C064D XORWF 4D064E XORWF 4E064F XORWF 4F070C ADDWF 0C070D ADDWF 0D070E ADDWF 0E070F ADDWF 0F0710 ADDWF 100711 ADDWF 110712 ADDWF 120713 ADDWF 130714 ADDWF 140715 ADDWF 150716 ADDWF 160717 ADDWF 170718 ADDWF 180719 ADDWF 19071A ADDWF 1A071B ADDWF 1B071C ADDWF 1C071D ADDWF 1D071E ADDWF 1E071F ADDWF 1F0720 ADDWF 200721 ADDWF 210722 ADDWF 220723 ADDWF 230724 ADDWF 24

Page 290: le PIC_16F84 livre

290

0725 ADDWF 250726 ADDWF 260727 ADDWF 270728 ADDWF 280729 ADDWF 29072A ADDWF 2A072B ADDWF 2B072C ADDWF 2C072D ADDWF 2D072E ADDWF 2E072F ADDWF 2F0730 ADDWF 300731 ADDWF 310732 ADDWF 320733 ADDWF 330734 ADDWF 340735 ADDWF 350736 ADDWF 360737 ADDWF 370738 ADDWF 380739 ADDWF 39073A ADDWF 3A073B ADDWF 3B073C ADDWF 3C073D ADDWF 3D073E ADDWF 3E073F ADDWF 3F0740 ADDWF 400741 ADDWF 410742 ADDWF 420743 ADDWF 430744 ADDWF 440745 ADDWF 450746 ADDWF 460747 ADDWF 470748 ADDWF 480749 ADDWF 49

074A ADDWF 4A074B ADDWF 4B074C ADDWF 4C074D ADDWF 4D074E ADDWF 4E074F ADDWF 4F080C MOVF 0C080D MOVF 0D080E MOVF 0E080F MOVF 0F0810 MOVF 100811 MOVF 110812 MOVF 120813 MOVF 130814 MOVF 140815 MOVF 150816 MOVF 160817 MOVF 170818 MOVF 180819 MOVF 19081A MOVF 1A081B MOVF 1B081C MOVF 1C081D MOVF 1D081E MOVF 1E081F MOVF 1F0820 MOVF 200821 MOVF 210822 MOVF 220823 MOVF 230824 MOVF 240825 MOVF 250826 MOVF 260827 MOVF 270828 MOVF 280829 MOVF 29082A MOVF 2A

Page 291: le PIC_16F84 livre

291

082B MOVF 2B082C MOVF 2C082D MOVF 2D082E MOVF 2E082F MOVF 2F0830 MOVF 300831 MOVF 310832 MOVF 320833 MOVF 330834 MOVF 340835 MOVF 350836 MOVF 360837 MOVF 370838 MOVF 380839 MOVF 39083A MOVF 3A083B MOVF 3B083C MOVF 3C083D MOVF 3D083E MOVF 3E083F MOVF 3F0840 MOVF 400841 MOVF 410842 MOVF 420843 MOVF 430844 MOVF 440845 MOVF 450846 MOVF 460847 MOVF 470848 MOVF 480849 MOVF 49084A MOVF 4A084B MOVF 4B084C MOVF 4C084D MOVF 4D084E MOVF 4E

084F MOVF 4F090C COMF 0C,w090D COMF 0D,w090E COMF 0E,w090F COMF 0F,w0910 COMF 10,w0911 COMF 11,w0912 COMF 12,w0913 COMF 13,w0914 COMF 14,w0915 COMF 15,w0916 COMF 16,w0917 COMF 17,w0918 COMF 18,w0919 COMF 19,w091A COMF 1A,w091B COMF 1B,w091C COMF 1C,w091D COMF 1D,w091E COMF 1E,w091F COMF 1F,w0920 COMF 20,w0921 COMF 21,w0922 COMF 22,w0923 COMF 23,w0924 COMF 24,w0925 COMF 25,w0926 COMF 26,w0927 COMF 27,w0928 COMF 28,w0929 COMF 29,w092A COMF 2A,w092B COMF 2B,w092C COMF 2C,w092D COMF 2D,w092E COMF 2E,w

Page 292: le PIC_16F84 livre

292

092F COMF 2F,w0930 COMF 30,w0931 COMF 31,w0932 COMF 32,w0933 COMF 33,w0934 COMF 34,w0935 COMF 35,w0936 COMF 36,w0937 COMF 37,w0938 COMF 38,w0939 COMF 39,w093A COMF 3A,w093B COMF 3B,w093C COMF 3C,w093D COMF 3D,w093E COMF 3E,w093F COMF 3F,w0940 COMF 40,w0941 COMF 41,w0942 COMF 42,w0943 COMF 43,w0944 COMF 44,w0945 COMF 45,w0946 COMF 46,w0947 COMF 47,w0948 COMF 48,w0949 COMF 49,w094A COMF 4A,w094B COMF 4B,w094C COMF 4C,w094D COMF 4D,w094E COMF 4E,w094F COMF 4F,w098C COMF 0C,f098D COMF 0D,f098E COMF 0E,f

098F COMF 0F,f0990 COMF 10,f0991 COMF 11,f0992 COMF 12,f0993 COMF 13,f0994 COMF 14,f0995 COMF 15,f0996 COMF 16,f0997 COMF 17,f0998 COMF 18,f0999 COMF 19,f099A COMF 1A,f099B COMF 1B,f099C COMF 1C,f099D COMF 1D,f099E COMF 1E,f099F COMF 1F,f09A0 COMF 20,f09A1 COMF 21,f09A2 COMF 22,f09A3 COMF 23,f09A4 COMF 24,f09A5 COMF 25,f09A6 COMF 26,f09A7 COMF 27,f09A8 COMF 28,f09A9 COMF 29,f09AA COMF 2A,f09AB COMF 2B,f09AC COMF 2C,f09AD COMF 2D,f09AE COMF 2E,f09AF COMF 2F,f09B0 COMF 30,f09B1 COMF 31,f09B2 COMF 32,f

Page 293: le PIC_16F84 livre

293

09B3 COMF 33,f09B4 COMF 34,f09B5 COMF 35,f09B6 COMF 36,f09B7 COMF 37,f09B8 COMF 38,f09B9 COMF 39,f09BA COMF 3A,f09BB COMF 3B,f09BC COMF 3C,f09BD COMF 3D,f09BE COMF 3E,f09BF COMF 3F,f09C0 COMF 40,f09C1 COMF 41,f09C2 COMF 42,f09C3 COMF 43,f09C4 COMF 44,f09C5 COMF 45,f09C6 COMF 46,f09C7 COMF 47,f09C8 COMF 48,f09C9 COMF 49,f09CA COMF 4A,f09CB COMF 4B,f09CC COMF 4C,f09CD COMF 4D,f09CE COMF 4E ,f09CF COMF 4F,f0A0C INCF 0C,w0A0D INCF 0D,w0A0E INCF 0E,w0A0F INCF 0F,w0A10 INCF 10,w0A11 INCF 11,w0A12 INCF 12,w

0A13 INCF 13,w0A14 INCF 14,w0A15 INCF 15,w0A16 INCF 16,w0A17 INCF 17,w0A18 INCF 18,w0A19 INCF 19,w0A1A INCF 1A,w0A1B INCF 1B,w0A1C INCF 1C,w0A1D INCF 1D,w0A1E INCF 1E,w0A1F INCF 1F,w0A20 INCF 20,w0A21 INCF 21,w0A22 INCF 22,w0A23 INCF 23,w0A24 INCF 24,w0A25 INCF 25,w0A26 INCF 26,w0A27 INCF 27,w0A28 INCF 28,w0A29 INCF 29,w0A2A INCF 2A,w0A3B INCF 2B,w0A2C INCF 2C,w0A2D INCF 2D,w0A2E INCF 2E,w0A2F INCF 2F,w0A30 INCF 30,w0A31 INCF 31,w0A32 INCF 32,w0A33 INCF 33,w0A34 INCF 34,w0A35 INCF 35,w0A36 INCF 36,w

Page 294: le PIC_16F84 livre

294

0A37 INCF 37,w0A38 INCF 38,w0A39 INCF 39,w0A3A INCF 3A,w0A3B INCF 3B,w0A3C INCF 3C,w0A3D INCF 3D,w0A3E INCF 3E,w0A3F INCF 3F,w0A40 INCF 40,w0A41 INCF 41,w0A42 INCF 42,w0A43 INCF 43,w0A44 INCF 44,w0A45 INCF 45,w0A46 INCF 46,w0A47 INCF 47,w0A48 INCF 48,w0A49 INCF 49,w0A4A INCF 4A,w0A4B INCF 4B,w0A4C INCF 4C,w0A4D INCF 4D,w0A4E INCF 4E,w0A4F INCF 4F,w0A8C INCF 0C,f0A8D INCF 0D,f0A8E INCF 0E,f0A8F INCF 0F,f0A90 INCF 10,f0A91 INCF 11,f0A92 INCF 12,f0A93 INCF 13,f0A94 INCF 14,f0A95 INCF 15f0A96 INCF 16,f

0A97 INCF 17,f0A98 INCF 18,f0A99 INCF 19,f0A9A INCF 1A,f0A9B INCF 1B,f0A9C INCF 1C,f0A9D INCF 1D,f0A9E INCF 1E,f0A9F INCF 1F,f0AA0 INCF 20,f0AA1 INCF 21,f0AA2 INCF 22,f0AA3 INCF 23,f0AA4 INCF 24,f0AA5 INCF 25,f0AA6 INCF 26,f0AA7 INCF 27,f0AA8 INCF 28,f0AA9 INCF 29,f0AAA INCF 2A,f0AAB INCF 2B,f0AAC INCF 2C,f0AAD INCF 2D,f0AAE INCF 2E,f0AAF INCF 2F,f0AB0 INCF 30,f0AB1 INCF 31,f0AB2 INCF 32,f0AB3 INCF 33,f0AB4 INCF 34,f0AB5 INCF 35,f0AB6 INCF 36,f0AB7 INCF 37,f0AB8 INCF 38,f0AB9 INCF 39,f0ABA INCF 3A,f

Page 295: le PIC_16F84 livre

295

0ABB INCF 3B,f0ABC INCF 3C,f0ABD INCF 3D,f0ABE INCF 3E,f0ABF INCF 3F,f0AC0 INCF 40,f0AC1 INCF 41,f0AC2 INCF 42,f0AC3 INCF 43,f0AC4 INCF 44,f0AC5 INCF 45,f0AC6 INCF 46,f0AC7 INCF 47,f0AC8 INCF 48,f0AC9 INCF 49,f0ACA INCF 4A,f0ACB INCF 4B,f0ACC INCF 4C,f0ACD INCF 4D,f0ACE INCF 4E,f0ACF INCF 4F,f0B0C DECFSZ 0C,w0B0D DECFSZ 0D,w0B0E DECFSZ 0E,w0B0F DECFSZ 0F,w0B10 DECFSZ 10,w0B11 DECFSZ 11,w0B12 DECFSZ 12,w0B13 DECFSZ 13,w0B14 DECFSZ 14,w0B15 DECFSZ 15,w0B16 DECFSZ 16,w0B17 DECFSZ 17,w0B18 DECFSZ 18,w0B19 DECFSZ 19,w0B1A DECFSZ 1A,w

0B1B DECFSZ 1B,w0B1C DECFSZ 1C,w0B1D DECFSZ 1D,w0B1E DECFSZ 1E,w0B1F DECFSZ 1F,w0B20 DECFSZ 20,w0B21 DECFSZ 21,w0B22 DECFSZ 22,w0B23 DECFSZ 23,w0B24 DECFSZ 24,w0B25 DECFSZ 25,w0B26 DECFSZ 26,w0B27 DECFSZ 27,w0B28 DECFSZ 28,w0B29 DECFSZ 29,w0B2A DECFSZ 2A,w0B2B DECFSZ 2B,w0B2C DECFSZ 2C,w0B2D DECFSZ 2D,w0B2E DECFSZ 2E,w0B2F DECFSZ 2F,w0B30 DECFSZ 30,w0B31 DECFSZ 31,w0B32 DECFSZ 32,w0B33 DECFSZ 33,w0B34 DECFSZ 34,w0B35 DECFSZ 35,w0B36 DECFSZ 36,w0B37 DECFSZ 37,w0B38 DECFSZ 38,w0B39 DECFSZ 29,w0B3A DECFSZ 3A,w0B3B DECFSZ 3B,w0B3C DECFSZ 3C,w0B3D DECFSZ 3D,w0B3E DECFSZ 3E,w

Page 296: le PIC_16F84 livre

296

0B3F DECFSZ 3F,w0B40 DECFSZ 40,w0B41 DECFSZ 41,w0B42 DECFSZ 42,w0B43 DECFSZ 43,w0B44 DECFSZ 44,w0B45 DECFSZ 45,w0B46 DECFSZ 46,w0B47 DECFSZ 47,w0B48 DECFSZ 48,w0B49 DECFSZ 49,w0B4A DECFSZ 4A,w0B4B DECFSZ 4B,w0B4C DECFSZ 4C,w0B4D DECFSZ 4D,w0B4E DECFSZ 4E,w0B4F DECFSZ 4F,w0B8C DECFSZ 0C,f0B8D DECFSZ 0D,f0B8E DECFSZ 0E,f0B8F DECFSZ 0F,f0B90 DECFSZ 10,f0B91 DECFSZ 11,f0B92 DECFSZ 12,f0B93 DECFSZ 13,f0B94 DECFSZ 14,f0B95 DECFSZ 15,f0B96 DECFSZ 16,f0B97 DECFSZ 17,f0B98 DECFSZ 18,f0B99 DECFSZ 19,f0B9A DECFSZ 1A,f0B9B DECFSZ 1B,f0B9C DECFSZ 1C,f0B9D DECFSZ 1D,f0B9E DECFSZ 1E,f

0B9F DECFSZ 1F,f0BA0 DECFSZ 20,f0BA1 DECFSZ 21,f0BA2 DECFSZ 22,f0BA3 DECFSZ 23,f0BA4 DECFSZ 24,f0BA5 DECFSZ 25,f0BA6 DECFSZ 26,f0BA7 DECFSZ 27,f0BA8 DECFSZ 28,f0BA9 DECFSZ 29,f0BAA DECFSZ 2A,f0BAB DECFSZ 2B,f0BAC DECFSZ 2C,f0BAD DECFSZ 2D,f0BAE DECFSZ 2E,f0BAF DECFSZ 2F,f0BB0 DECFSZ 30,f0BB1 DECFSZ 31,f0BB2 DECFSZ 32,f0BB3 DECFSZ 33,f0BB4 DECFSZ 34,f0BB5 DECFSZ 35,f0BB6 DECFSZ 36,f0BB7 DECFSZ 37,f0BB8 DECFSZ 38,f0BB9 DECFSZ 39,f0BBA DECFSZ 3A,f0BBB DECCFS 3B,f0BBC DECFES 3C,f0BBD DECFSZ 3D,f0BBE DECFSZ 3E,f0BBF DECFSZ 3F,f0BC0 DECFSZ 40,f0BC1 DECFSZ 41,f0BC2 DECFSZ 42,f

Page 297: le PIC_16F84 livre

297

0BC3 DECFSZ 43,f0BC4 DECFSZ 44,f0BC5 DECFSZ 45,f0BC6 DECFSZ 46,f0BC7 DECFSZ 47,f0BC8 DECFSZ 48,f0BC9 DECFSZ 49,f0BCA DECFSZ 4A,f0BCB DECFSZ 4B,f0BCC DECFSZ 4C,f0BCD DECFSZ 4D,f0BCE DECFSZ 4E,f0BCF DECFSZ 4F,f0C0C RRF 0C,w0C0D RRF 0D,w0C0E RRF 0E,w0C0F RRF 0F,w0C10 RRF 10,w0C11 RRF 11,w0C12 RRF 12,w0C13 RRF 13,w0C14 RRF 14,w0C15 RRF 15,w0C16 RRF 16,w0C17 RRF 17,w0C18 RRF 18,w0C19 RRF 19,w0C1A RRF 1A,w0C1B RRF 1B,w0C1C RRF 1B,w0C1D RRF 1D,w0C1E RRF 1E,w0C1F RRF 1F,w0C20 RRF 20,w0C21 RRF 21,w0C22 RRF 22,w

0C23 RRF 23,w0C24 RRF 24,w0C25 RRF 25,w0C26 RRF 26,w0C27 RRF 27,w0C28 RRF 28,w0C29 RRF 29,w0C2A RRF 2A,w0C2B RRF 2B,w0C2C RRF 2C,w0C2D RRF 2D,w0C2E RRF 2E,w0C2F RRF 2F,w0C30 RRF 30,w0C31 RRF 31,w0C32 RRF 32,w0C33 RRF 33,w0C34 RRF 34,w0C35 RRF 35,w0C36 RRF 36,w0C37 RRF 37,w0C38 RRF 38,w0C39 RRF 39,w0C3A RRF 3A,w0C3B RRF 3B,w0C3C RRF 3C,w0C3D RRF 3D,w0C3E RRF 3E,w0C3F RRF 3F,w0C40 RRF 40,w0C41 RRF 41,w0C42 RRF 42,w0C43 RRF 43,w0C44 RRF 44,w0C45 RRF 45,w0C46 RRF 46,w

Page 298: le PIC_16F84 livre

298

0C47 RRF 47,w0C48 RRF 48,w0C49 RRF 49,w0C4A RRF 4A,w0C4B RRF 4B,w0C4C RRF 4C,w0C4D RRF 4D,w0C4E RRF 4E,w0C4F RRF 4F,w0C8C RRF 0C,f0C8D RRF 0D,f0C8E RRF 0E,f0C8F RRF 0F,f0C90 RRF 10,f0C91 RRF 11,f0C92 RRF 12,f0C93 RRF 13,f0C94 RRF 14,f0C95 RRF 15,f0C96 RRF 16,f0C97 RRF 17,f0C98 RRF 18,f0C99 RRF 19,f0C9A RRF 1A,f0C9B RRF 1B,f0C9C RRF 1C,f0C9D RRF 1D,f0C9E RRF 1E,f0C9F RRF 1F,f0CA0 RRF 20,f0CA1 RRF 21,f0CA2 RRF 22,f0CA3 RRF 23,f0CA4 RRF 24,f0CA5 RRF 25,f0CA6 RRF 26,f

0CA7 RRF 27,f0CA8 RRF 28,f0CA9 RRF 29,f0CAA RRF 2A,f0CAB RRF 2B,f0CAC RRF 2C,f0CAD RRF 2D,f0CAE RRF 2E,f0CAF RRF 2F,f0CB0 RRF 30,f0CB1 RRF 31,f0CB2 RRF 32,f0CB3 RRF 33,f0CB4 RRF 34,f0CB5 RRF 35,f0CB6 RRF 36,f0CB7 RRF 37,f0CB8 RRF 38,f0CB9 RRF 39,f0CBA RRF 3A,f0CBB RRF 3B,f0CBC RRF 3C,f0CBD RRF 3D,f0CBE RRF 3E,f0CBF RRF 3F,f0CC0 RRF 40,f0CC1 RRF 41,f0CC2 RRF 42,f0CC3 RRF 43,f0CC4 RRF 44,f0CC5 RRF 45,f0CC6 RRF 46 ,f0CC7 RRF 47,f0CC8 RRF 48,f0CC9 RRF 49,f0CCA RRF 4A,f

Page 299: le PIC_16F84 livre

299

0CCB RRF 4B,f0CCC RRF 4C,f0CCD RRF 4D,f0CCE RRF 4E,f0CCF RRF 4F,f0D0C RLF 0C,w0D0D RLF 0D,w0D0E RLF 0E,w0D0F RLF 0F,w0D10 RLF 10,w0D11 RLF 11,w0D12 RLF 12,w0D13 RLF 13,w0D14 RLF 14,w0D15 RLF 15,w0D16 RLF 16,w0D17 RLF 17,w0D18 RLF 18,w0D19 RLF 19,w0D1A RLF 1A,w0D1B RLF 1B,w0D1C RLF 1C,w0D1D RLF 1D,w0D1E RLF 1E,w0D1F RLF 1F,w0D20 RLF 20,w0D21 RLF 21,w0D22 RLF 22,w0D23 RLF 23,w0D24 RLF 24,w0D25 RLF 25,w0D26 RLF 26,w0D27 RLF 27,w0D28 RLF 28,w0D29 RLF 29,w0D2A RLF 2A,w

0D2B RLF 2B,w0D2C RLF 2C,wD02D RLF 2D,w0D2E RLF 2E,w0D2F RLF 2F,w0D30 RLF 30,w0D31 RLF 31,w0D32 RLF 32,w0D33 RLF 33,w0D34 RLF 34,w0D35 RLF 35,w0D36 RLF 36,w0D37 RLF 37,w0D38 RLF 38,w0D39 RLF 39,w0D3A RLF 3A,w0D3B RLF 3B,w0D3C RLF 3C,w0D3D RLF 3D,w0D3E RLF 3E,w0D3F RLF 3F,w0D40 RLF 40,w0D41 RLF 41,w0D42 RLF 42,w0D43 RLF 43,w0D44 RLF 44,w0D45 RLF 45,w0D46 RLF 46,w0D47 RLF 47,w0D48 RLF 48,w0D49 RLF 49,w0D4A RLF 4A,w0D4B RLF 4B,w0D4C RLF 4C,w0D4D RLF 4D,w0D4E RLF 4E,w

Page 300: le PIC_16F84 livre

300

0D4F RLF 4F,w0D8C RLF 0C,f0D8D RLF 0D,f0D8E RLF 0E,f0D8F RLF 0F,f0D90 RLF 10,f0D91 RLF 11,f0D92 RLF 12,f0D93 RLF 13,f0D94 RLF 14,f0D95 RLF 15,f0D96 RLF 16,f0D97 RLF 17,f0D98 RLF 18,f0D99 RLF 19,f0D9A RLF 1A,f0D9B RLF 1B,f0D9C RLF 1C,f0D9D RLF 1D,f0D9E RLF 1E,f0D9F RLF 1F,f0DA0 RLF 20,f0DA1 RLF 21,f0DA2 RLF 22,f0DA3 RLF 23,f0DA4 RLF 24,f0DA5 RLF 25,f0DA6 RLF 26,f0DA7 RLF 27,f0DA8 RLF 28,f0DA9 RLF 29,f0DAA RLF 2A,f0DAB RLF 2B,f0DAC RLF 2C,f0DAD RLF 2D,f0DAE RLF 2E,f

0DAF RLF 2F,f0DB0 RLF 30,f0DB1 RLF 31,f0DB2 RLF 32,f0DB3 RLF 33,f0DB4 RLF 34,f0DB5 RLF 35,f0DB6 RLF 36,f0DB7 RLF 37,f0DB8 RLF 38,f0DB9 RLF 39,f0DBA RLF 3A,f0DBB RLF 3B,f0DBC RLF 3C,f0DBD RLF 3D,f0DBE RLF 3E,f0DBF RLF 3F,f0DC0 RLF 40,f0DC1 RLF 41,f0DC2 RLF 42,f0DC3 RLF 43,f0DC4 RLF 44,f0DC5 RLF 45,f0DC6 RLF 46,f0DC7 RLF 47,f0DC8 RLF 48,f0DC9 RLF 49,f0DCA RLF 4A,f0DCB RLF 4B,f0DCC RLF 4C,f0DCD RLF 4D,f0DCE RLF 4E,f0DCF RLF 4F,f0E0C SWAPF 0C,w0E0D SWAPF 0D,w0E0E SWAPF 0E,w

Page 301: le PIC_16F84 livre

301

0E0F SWAPF 0F,w0E10 SWAPF 10,w0E11 SWAPF 11,w0E12 SWAPF 12,w0E13 SWAPF 13,w0E14 SWAPF 14,w0E15 SWAPF 15,w0E16 SWAPF 16,w0E17 SWAPF 17,w0E18 SWAPF 18,w0E19 SWAPF 19,w0E1A SWAPF 1A,w0E1B SWAPF 1B,w0E1C SWAPF 1C,w0E1D SWAPF 1D,w0E1E SWAPF 1E,w0E1F SWAPF 1F,w0E20 SWAPF 20,w0E21 SWAPF 21,w0E22 SWAPF 22,w0E23 SWAPF 23,w0E24 SWAPF 24,w0E25 SWAPF 25,w0E26 SWAPF 26,w0E27 SWAPF 27,w0E28 SWAPF 28,w0E29 SWAPF 29,w0E2A SWAPF 2A,w0E2B SWAPF 2B,w0E2C SWAPF 2C,w0E2D SWAPF 2D,w0E2E SWAPF 2E,w0E2F SWAPF 2F,w0E30 SWAPF 30,w0E31 SWAPF 31,w0E32 SWAPF 32,w

0E33 SWAPF 33,w0E34 SWAPF 34,w0E35 SWAPF 35,w0E36 SWAPF 36,w0E37 SWAPF 37,w0E38 SWAPF 38,w0E39 SWAPF 39,w0E3A SWAPF 3A,w0E3B SWAPF 3B,w0E3C SWAPF 3C,w0E3D SWAPF 3D,w0E3E SWAPF 3E,w0E3F SWAPF 3F,w0E40 SWAPF 40,w0E41 SWAPF 41,w0E42 SWAPF 42,w0E43 SWAPF 43,w0E44 SWAPF 44,w0E45 SWAPF 45,w0E46 SWAPF 46,w0E47 SWAPF 47,w0E48 SWAPF 48,w0E49 SWAPF 49,w0E4A SWAPF 4A,w0E4B SWAPF 4B,w0E4C SWAPF 4C,w0E4D SWAPF 4D,w0E4E SWAPF 4E,w0E4F SWAPF 4F,f0E8C SWAPF 0C,f0E8D SWAPF 0D,f0E8E SWAPF 0E,f0E8F SWAPF 0F,f0E90 SWAPF 10,f0E91 SWAPF 11,f0E92 SWAPF 12,f

Page 302: le PIC_16F84 livre

302

0E93 SWAPF 13,f0E94 SWAPF 14,f0E95 SWAPF 15,f0E96 SWAPF 16,f0E97 SWAPF 17,f0E98 SWAPF 18,f0E99 SWAPF 19,f0E9A SWAPF 1A,f0E9B SWAPF 1B,f0E9C SWAPF 1C,f0E9D SWAPF 1D,f0E9E SWAPF 1E,f0E9F SWAPF 1F,f0EA0 SWAPF 20,f0EA1 SWAPF 21,f0EA2 SWAPF 22,f0EA3 SWAPF 23,f0EA4 SWAPF 24,f0EA5 SWAPF 25,f0EA6 SWAPF 26,f0EA7 SWAPF 27,f0EA8 SWAPF 28,f0EA9 SWAPF 29,f0EAA SWAPF 2A,f0EAB SWAPF 2B,f0EAC SWAPF 2C,f0EAD SWAPF 2D,f0EAE SWAPF 2E,f0EAF SWAPF 2F,f0EB0 SWAPF 30,f0EB1 SWAPF 31,f0EB2 SWAPF 32,f0EB3 SWAPF 33,f0EB4 SWAPF 34,f0EB5 SWAPF 35,f0EB6 SWAPF 36,f

0EB7 SWAPF 37,f0EB8 SWAPF 38,f0EB9 SWAPF 39,f0EBA SWAPF 3A,f0EBB SWAPF 3B,f0EBC SWAPF 3C,f0EBD SWAPF 3D,f0EBE SWAPF 3E,f0EBF SWAPF 3F,f0EC0 SWAPF 40,f0EC1 SWAPF 41,f0EC2 SWAPF 42,f0EC3 SWAPF 43,f0EC4 SWAPF 44,f0EC5 SWAPF 45,f0EC6 SWAPF 46,f0EC7 SWAPF 47,f0EC8 SWAPF 48,f0EC9 SWAPF 49,f0ECA SWAPF 4A,f0ECB SWAPF 4B,f0ECC SWAPF 4C,f0ECD SWAPF 4D,f0ECE SWAPF 4E,f0ECF SWAPF 4F,f0F0C INCFSZ 0C,w0F0D INCFSZ 0D,w0F0E INCFSZ 0E,w0F0F INCFSZ 0F,w0F10 INCFSZ 10,w0F11 INCFSZ 11,w0F12 INCFSZ 12,w0F13 INCFSZ 13,w0F14 INCFSZ 14,w0F15 INCFSZ 15,w0F16 INCFSZ 16,w

Page 303: le PIC_16F84 livre

303

0F17 INCFSZ 17,w0F18 INCFSZ 18,w0F19 INCFSZ 19,w0F1A INCFSZ 1A,w0F1B INCFSZ 1B,w0F1C INCFSZ 1C,w0F1D INCFSZ 1D,w0F1E INCFSZ 1E,w0F1F INCFSZ 1F,w0F20 INCFSZ 20,w0F21 INCFSZ 21,w0F22 INCFSZ 22,w0F23 INCFSZ 23,w0F24 INCFSZ 24,w0F25 INCFSZ 25,w0F26 INCFSZ 26,w0F27 INCFSZ 27,w0F28 INCFSZ 28,w0F29 INCFSZ 29,w0F2A INCFSZ 2A,w0F2B INCFSZ 2B,w0F2C INCFSZ 2C,w0F2D INCFSZ 2D,w0F2E INCFSZ 2E,w0F2F INCFSZ 2F,w0F30 INCFSZ 30,w0F31 INCFSZ 31,w0F32 INCFSZ 32,w0F33 INCFSZ 33,w0F34 INCFSZ 34,w0F35 INCFSZ 35,w0F36 INCFSZ 36,w0F37 INCFSZ 37,w0F38 INCFSZ 38,w0F39 INCFSZ 39,w0F3A INCFSZ 3A,w

0F3B INCFSZ 3B,w0F3C INCFSZ 3C,w0F3D INCFSZ 3D,w0F3E INCFSZ 3E,w0F3F INCFSZ 3F,w0F40 INCFSZ 40,w0F41 INCFSZ 41,w0F42 INCFSZ 42,w0F43 INCFSZ 43,w0F44 INCFSZ 44,w0F45 INCFSZ 45,w0F46 INCFSZ 46,w0F47 INCFSZ 47,w0F48 INCFSZ 48,w0F49 INCFSZ 49,w0F4A INCFSZ 4A,w0F4B INCFSZ 4B,w0F4C INCFSZ 4C,w0F4D INCFSZ 4D,w0F4E INCFSZ 4E,w0F4F INCFSZ 4F,f0F8C INCFSZ 0C,f0F8D INCFSZ 0D,f0F8E INCFSZ 0E,f0F8F INCFSZ 0F,f0F90 INCFSZ 10,f0F91 INCFSZ 11,f0F92 INCFSZ 12,f0F93 INCFSZ 13,f0F94 INCFSZ 14,f0F95 INCFSZ 15,f0F96 INCFSZ 16,f0F97 INCFSZ 17,f0F98 INCFSZ 18,f0F99 INCFSZ 19,f0F9A INCFSZ 1A,f

Page 304: le PIC_16F84 livre

304

0F9B INCFSZ 1B,f0F9C INCFSZ 1C,f0F9D INCFSZ 1D,f0F9E INCFSZ 1E,f0F9F INCFSZ 1F,f0FA0 INCFSZ 20,f0FA1 INCFSZ 21,f0FA2 INCFSZ 22,f0FA3 INCFSZ 23,f0FA4 INCFSZ 24,f0FA5 INCFSZ 25,f0FA6 INCFSZ 26,f0FA7 INCFSZ 27,f0FA8 INCFSZ 28,f0FA9 INCFSZ 29,f0FAA INCFSZ 2A,f0FAB INCFSZ 2B,f0FAC INCFSZ 2C,f0FAD INCFSZ 2D,f0FAE INCFSZ 2E,f0FAF INCFSZ 2F,f0FB0 INCFSZ 30,f0FB1 INCFSZ 31,f0FB2 INCFSZ 32,f0FB3 INCFSZ 33,f0FB4 INCFSZ 34,f0FB5 INCFSZ 35,f0FB6 INCFSZ 36,f0FB7 INCFSZ 37,f0FB8 INCFSZ 38,f0FB9 INCFSZ 39,f0FBA INCFSZ 3A,f0FBB INCFSZ 3B,f0FBC INCFSZ 3C,f0FBD INCFSZ 3D,f0FBE INCFSZ 3E,f

0FBF INCFSZ 3F,f0FC0 INCFSZ 40,f0FC1 INCFSZ 41,f0FC2 INCFSZ 42,f0FC3 INCFSZ 43,f0FC4 INCFSZ 44,f0FC5 INCFSZ 45,f0FC6 INCFSZ 46,f0FC7 INCFSZ 47,f0FC8 INCFSZ 48,f0FC9 INCFSZ 49,f0FCA INCFSZ 4A,f0FCB INCFSZ 4B,f0FCC INCFSZ 4C,f0FCD INCFSZ 4D,f0FCE INCFSZ 4E,f0FCF INCFSZ 4F,f1003 BCF STATUS,C1005 BCF PARTA,01006 BCF PORTB,0100B BCF INTCON,RBIF100C BCF 0C,0100D BCF 0D,0100E BCF 0E,0100F BCF 0F,01010 BCF 10,01011 BCF 11,01012 BCF 12,01013 BCF 13,01014 BCF 14,01015 BCF 15,01016 BCF 16,01017 BCF 17,01018 BCF 18,01019 BCF 19,0101A BCF 1A,0

Page 305: le PIC_16F84 livre

305

101B BCF 1B,0101C BCF 1C,0101D BCF 1D,0101E BCF 1E,0101F BCF 1F,01020 BCF 20,01021 BCF 21,01022 BCF 22,01023 BCF 23,01024 BCF 24,01025 BCF 25,01026 BCF 26,01027 BCF 27,01028 BCF 28,01029 BCF 29,0102A BCF 2A,0102B BCF 2B,0102C BCF 2C,0102D BCF 2D,0102E BCF 2E,0102F BCF 2F,01030 BCF 30,01031 BCF 31,01032 BCF 32,01033 BCF 33,01034 BCF 34,01035 BCF 35,01036 BCF 36,01037 BCF 37,01038 BCF 38,01039 BCF 39,0103A BCF 3A,0103B BCF 3B,0103C BCF 3C,0103D BCF 3D,0103E BCF 3E,0

103F BCF 3F,01040 BCF 40,01041 BCF 41,01042 BCF 42,01043 BCF 43,01044 BCF 44,01045 BCF 45,01046 BCF 46,01047 BCF 47,01048 BCF 48,01049 BCF 49,0104A BCF 4A,0104B BCF 4B,0104C BCF 4C,0104D BCF 4D,0104E BCF 4E,0104F BCF 4F,01083 BCF STATUS,DC1085 BCF PORTA,11086 BCF PORTB,1108B BCF INTCON,INTF108C BCF 0C,1108D BCF 0D,1108E BCF 0E,1108F BCF 0F,11090 BCF 10,11091 BCF 11,11092 BCF 12,11093 BCF 13,11094 BCF 14,11095 BCF 15,11096 BCF 16,11097 BCF 17,11098 BCF 18,11099 BCF 19,1109A BCF 1A,1

Page 306: le PIC_16F84 livre

306

109B BCF 1B,1109C BCF 1C,1109D BCF 1D,1109E BCF 1E,1109F BCF 1F,110A0 BCF 20,110A1 BCF 21,110A2 BCF 22,110A3 BCF 23,110A4 BCF 24,110A5 BCF 25,110A6 BCF 26,110A7 BCF 27,110A8 BCF 28,110A9 BCF 29,110AA BCF 2A,110AB BCF 2B,110AC BCF 2C,110AD BCF 2D,110AE BCF 2E,110AF BCF 2F,110B0 BCF 30,110B1 BCF 31,110B2 BCF 32,110B3 BCF 33,110B4 BCF 34,110B5 BCF 35,110B6 BCF 36,110B7 BCF 37,110B8 BCF 38,110B9 BCF 39,110BA BCF 3A,110BB BCF 3B,110BC BCF 3C,110BD BCF 3D,110BE BCF 3E,1

10BF BCF 3F,110C0 BCF 40,110C1 BCF 41,110C2 BCF 42,110C3 BCF 43,110C4 BCF 44,110C5 BCF 45,110C6 BCF 46,110C7 BCF 47,110C8 BCF 48,110C9 BCF 49,110CA BCF 4A,110CB BCF 4B,110CC BCF 4C,110CD BCF 4D,110CE BCF 4E,110CF BCF 4F,11103 BCF STATUS,Z1105 BCF PORTA,21106 BCF PORTB,2110B BCF INTCON,TOIF110C BCF 0C,2110D BCF 0D,2110E BCF 0E,2110F BCF 0F,21110 BCF 10,21111 BCF 11,21112 BCF 12,21113 BCF 13,21114 BCF 14,21115 BCF 15,21116 BCF 16,21117 BCF 17,21118 BCF 18,21119 BCF 19,2111A BCF 1A,2

Page 307: le PIC_16F84 livre

307

111B BCF 1B,2111C BCF 1C,2111D BCF 1D,2111E BCF 1E,2111F BCF 1F,21120 BCF 20,21121 BCF 21,21122 BCF 22,21123 BCF 23,21124 BCF 24,21125 BCF 25,21126 BCF 26,21127 BCF 27,21128 BCF 28,21129 BCF 29,2112A BCF 2A,2112B BCF 2B,2112C BCF 2C,2112D BCF 2D,2112E BCF 2E,2112F BCF 2F,21130 BCF 30,21131 BCF 31,21132 BCF 32,21133 BCF 33,21134 BCF 34,21135 BCF 35,21136 BCF 36,21137 BCF 37,21138 BCF 38,21139 BCF 39,2113A BCF 3A,2113B BCF 3B,2113C BCF 3C,2113D BCF 3D,2113E BCF 3E,2

113F BCF 3F,21140 BCF 40,21141 BCF 41,21142 BCF 42,21143 BCF 43,21144 BCF 44,21145 BCF 45,21146 BCF 46,21147 BCF 47,21148 BCF 48,21149 BCF 49,2114A BCF 4A,2114B BCF 4B,2114C BCF 4C,2114D BCF 4D,2114E BCF 4E,2114F BCF 4F,21183 BCF STATUS,PD1185 BCF PORTA,31186 BCF PORTB,3118B BCF INTCON,RBIE118C BCF 0C,3118D BCF 0D,3118E BCF 0E,3118F BCF 0F,31190 BCF 10,31191 BCF 11,31192 BCF 12,31193 BCF 13,31194 BCF 14,31195 BCF 15,31196 BCF 16,31197 BCF 17,31198 BCF 18,31199 BCF 19,3119A BCF 1A,3

Page 308: le PIC_16F84 livre

308

119B BCF 1B,3119C BCF 1C,3119D BCF 1D,3119E BCF 1E,3119F BCF 1F,311A0 BCF 20,311A1 BCF 21,311A2 BCF 22 ,311A3 BCF 23,311A4 BCF 24,311A5 BCF 25,311A6 BCF 26,311A7 BCF 27,311A8 BCF 28,311A9 BCF 29,311AA BCF 2A,311AB BCF 2B,311AC BCF 2C,311AD BCF 2D,311AE BCF 2E,311AF BCF 2F,311B0 BCF 30,311B1 BCF 31,311B2 BCF 32,311B3 BCF 33,311B4 BCF 34,311B5 BCF 35,311B6 BCF 36,311B7 BCF 37,311B8 BCF 38,311B9 BCF 39,311BA BCF 3A,311BB BCF 3B,311BC BCF 3C,311BD BCF 3D,311BE BCF 3E,3

11BF BCF 3F,311C0 BCF 40,311C1 BCF 41,311C2 BCF 42,311C3 BCF 43,311C4 BCF 44,311C5 BCF 45,311C6 BCF 46,311C7 BCF 47,311C8 BCF 48,311C9 BCF 49,311CA BCF 4A,311CB BCF 4B,311CC BCF 4C,311CD BCF 4D,311CE BCF 4E,311CF BCF 4F,31203 BCF STATUS,TO1205 BCF PORTA,41206 BCF PORTB,4120B BCF INTCON,INTE120C BCF 0C,4120D BCF 0D,4120E BCF 0E,4120F BCF 0F,41210 BCF 10,41211 BCF 11,41212 BCF 12,41213 BCF 13,41214 BCF 14,41215 BCF 15,41216 BCF 16,41217 BCF 17,41218 BCF 18,41219 BCF 19,4121A BCF 1A,4

Page 309: le PIC_16F84 livre

309

121B BCF 1B,4121C BCF 1C,4121D BCF 1D,4121E BCF 1E,4121F BCF 1F,41220 BCF 20,41221 BCF 21,41222 BCF 22,41223 BCF 23,41224 BCF 24,41225 BCF 25,41226 BCF 26,41227 BCF 27,41228 BCF 28,41229 BCF 29,4122A BCF 2A,4122B BCF 2B,4122C BCF 2C,4122D BCF 2D,4122E BCF 2E,4122F BCF 2F,41230 BCF 30,41231 BCF 31,41232 BCF 32,41233 BCF 33,41234 BCF 34,41235 BCF 35,41236 BCF 36,41237 BCF 37,41238 BCF 38,41239 BCF 39,4123A BCF 3A,4123B BCF 3B,4123C BCF 3C,4123D BCF 3D,4123E BCF 3E,4

123F BCF 3F,41240 BCF 40,41241 BCF 41,41242 BCF 42,41243 BCF 43,41244 BCF 44,41245 BCF 45,41246 BCF 46,41247 BCF 47,41248 BCF 48,41249 BCF 49,4124A BCF 4A,4124B BCF 4B,4124C BCF 4C,4124D BCF 4D,4124E BCF 4E,4124F BCF 4F,41283 BCF STATUS,RP01285 BCF PORTA,51286 BCF PORTB,5128B BCF INTCON,TOIE128C BCF 0C,5128D BCF 0D,5128E BCF 0E,5128F BCF 0F,51290 BCF 10,51291 BCF 11,51292 BCF 12,51293 BCF 13,51294 BCF 14,51295 BCF 15,51296 BCF 16,51297 BCF 17,51298 BCF 18,51299 BCF 19,5129A BCF 1A,5

Page 310: le PIC_16F84 livre

310

129B BCF 1B,5129C BCF 1C,5129D BCF 1D,5129E BCF 1E,5129F BCF 1F,512A0 BCF 20,512A1 BCF 21,512A2 BCF 22,512A3 BCF 23,512A4 BCF 24,512A5 BCF 25,512A6 BCF 26,512A7 BCF 27,512A8 BCF 28,512A9 BCF 29,512AA BCF 2A,512AB BCF 2B,512AC BCF 2C,512AD BCF 2D,512AE BCF 2E,512AF BCF 2F,512B0 BCF 30,512B1 BCF 31,512B2 BCF 32,512B3 BCF 33,512B4 BCF 34,512B5 BCF 35,512B6 BCF 36,512B7 BCF 37,512B8 BCF 38,512B9 BCF 39,512BA BCF 3A,512BB BCF 3B,512BC BCF 3C,512BD BCF 3D,512BE BCF 3E,5

12BF BCF 3F,512C0 BCF 40,512C1 BCF 41,512C2 BCF 42,512C3 BCF 43,512C4 BCF 44,512C5 BCF 45,512C6 BCF 46,512C7 BCF 47,512C8 BCF 48,512C9 BCF 49,512CA BCF 4A,512CB BCF 4B,512CC BCF 4C,512CD BCF 4D,512CE BCF 4E,512CF BCF 4F,51303 BCF STATUS,61305 BCF PORTA,61306 BCF PORTB,6130B BCF INTCON,EEIE130C BCF 0C,6130D BCF 0D,6130E BCF 0E,6130F BCF 0F,61310 BCF 10,61311 BCF 11,61312 BCF 12,61313 BCF 13,61314 BCF 14,61315 BCF 15,61316 BCF 16,61317 BCF 17,61318 BCF 18,61319 BCF 19,6131A BCF 1A,6

Page 311: le PIC_16F84 livre

311

131B BCF 1B,6131C BCF 1C,6131D BCF 1D,6131E BCF 1E,6131F BCF 1F,61320 BCF 20,61321 BCF 21,61322 BCF 22,61323 BCF 23,61324 BCF 24,61325 BCF 25,61326 BCF 26,61327 BCF 27,61328 BCF 28,61329 BCF 29,6132A BCF 2A,6132B BCF 2B,6132C BCF 2C,6132D BCF 2D,6132E BCF 2E,6132F BCF 2F,61330 BCF 30,61331 BCF 31,61332 BCF 32,61333 BCF 33,61334 BCF 34,61335 BCF 35,61336 BCF 36,61337 BCF 37,61338 BCF 38,61339 BCF 39,6133A BCF 3A,6133B BCF 3B,6133C BCF 3C,6133D BCF 3D,6133E BCF 3E,6

133F BCF 3F,61340 BCF 40,61341 BCF 41,61342 BCF 42,61343 BCF 43,61344 BCF 44,61345 BCF 45,61346 BCF 46,61347 BCF 47,61348 BCF 48,61349 BCF 49,6134A BCF 4A,6134B BCF 4B,6134C BCF 4C,6134D BCF 4D,6134E BCF 4E,6134F BCF 4F,61383 BCF STATUS,71385 BCF PORTA,71386 BCF PORTB,7138B BCF INTCON,GIE138C BCF 0C,7138D BCF 0D,7138E BCF 0E,7138F BCF 0F,71390 BCF 10,71391 BCF 11,71392 BCF 12,71393 BCF 13,71394 BCF 14,71395 BCF 15,71396 BCF 16,71397 BCF 17,71398 BCF 18,71399 BCF 19,7139A BCF 1A,7

Page 312: le PIC_16F84 livre

312

139B BCF 1B,7139C BCF 1C,7139D BCF 1D,7139E BCF 1E,7139F BCF 1F,713A0 BCF 20,713A1 BCF 21,713A2 BCF 22,713A3 BCF 23,713A4 BCF 24,713A5 BCF 25,713A6 BCF 26,713A7 BCF 27,713A8 BCF 28,713A9 BCF 29,713AA BCF 2A,713AB BCF 2B,713AC BCF 2C,713AD BCF 2D,713AE BCF 2E,713AF BCF 2F,713B0 BCF 30,713B1 BCF 31,713B2 BCF 32,713B3 BCF 33,713B4 BCF 34,713B5 BCF 35,713B6 BCF 36,713B7 BCF 37,713B8 BCF 38,713B9 BCF 39,713BA BCF 3A,713BB BCF 3B,713BC BCF 3C,713BD BCF 3D,713BE BCF 3E,7

13BF BCF 3F,713C0 BCF 40,713C1 BCF 41,713C2 BCF 42,713C3 BCF 43,713C4 BCF 44,713C5 BCF 45,713C6 BCF 46,713C7 BCF 47,713C8 BCF 48,713C9 BCF 49,713CA BCF 4A,713CB BCF 4B,713CC BCF 4C,713CD BCF 4D,713CE BCF 4E,713CF BCF 4F,71405 BSF PORTA,01406 BSF PORTB,0140C BSF 0C,0140D BSF 0D,0140E BSF 0E,0140F BSF 0F,01410 BSF 10,01411 BSF 11,01412 BSF 12,01413 BSF 13,01414 BSF 14,01415 BSF 15,01416 BSF 16,01417 BSF 17,01418 BSF 18,01419 BSF 19,0141A BSF 1A,0141B BSF 1B,0141C BSF 1C,0

Page 313: le PIC_16F84 livre

313

141D BSF 1D,0141E BSF 1E,0141F BSF 1F,01420 BSF 20,01421 BSF 21,01422 BSF 22,01423 BSF 23,01424 BSF 24,01425 BSF 25,01426 BSF 26,01427 BSF 27,01428 BSF 28,01429 BSF 29,0142A BSF 2A,0142B BSF 2B,0142C BSF 2C,0142D BSF 2D,0142E BSF 2E,0142F BSF 2F,01430 BSF 30,01431 BSF 31,01432 BSF 32,01433 BSF 33,01434 BSF 34,01435 BSF 35,01436 BSF 36,01437 BSF 37,01438 BSF 38,01439 BSF 39,0143A BSF 3A,0143B BSF 3B,0143C BSF 3C,0143D BSF 3D,0143E BSF 3E,0143F BSF 3F,01440 BSF 40,0

1441 BSF 41,01442 BSF 42,01443 BSF 43,01444 BSF 44,01445 BSF 45,01446 BSF 46,01447 BSF 47,01448 BSF 48,01449 BSF 49,0144A BSF 4A,0144B BSF 4B,0144C BSF 4C,0144D BSF 4D,0144E BSF 4E,0144F BSF 4F,01485 BSF PORTA,11486 BSF PORTB,1148C BSF 0C,1148D BSF 0D,1148E BSF 0E,1148F BSF 0F,11490 BSF 10,11491 BSF 11,11492 BSF 12,11493 BSF 13,11494 BSF 14,11495 BSF 15,11496 BSF 16,11497 BSF 17,11498 BSF 18,11499 BSF 19,1149A BSF 1A,1149B BSF 1B,1149C BSF 1C,1149D BSF 1D,1149E BSF 1E,1

Page 314: le PIC_16F84 livre

314

149F BSF 1F,114A0 BSF 20,114A1 BSF 21,114A2 BSF 22,114A3 BSF 23,114A4 BSF 24,114A5 BSF 25,114A6 BSF 26,114A7 BSF 27,114A8 BSF 28,114A9 BSF 29,114AA BSF 2A,114AB BSF 2B,114AC BSF 2C,114AD BSF 2D,114AE BSF 2E,114AF BSF 2F,114B0 BSF 30,114B1 BSF 31,114B2 BSF 32,114B3 BSF 33,114B4 BSF 34,114B5 BSF 35,114B6 BSF 36,114B7 BSF 37,114B8 BSF 38,114B9 BSF 39,114BA BSF 3A,114BB BSF 3B,114BC BSF 3C,114BD BSF 3D,114BE BSF 3E,114BF BSF 3F,114C0 BSF 40,114C1 BSF 41,114C2 BSF 42,1

14C3 BSF 43,114C4 BSF 44,114C5 BSF 45,114C6 BSF 46,114C7 BSF 47,114C8 BSF 48,114C9 BSF 49,114CA BSF 4A,114CB BSF 4B,114CC BSF 4C,114CD BSF 4D,114CE BSF 4E,114CF BSF 4F,11505 BSF PORTA,21506 BSF PORTB,2150C BSF 0C,2150D BSF 0D,2150E BSF 0E,2150F BSF 0F,21510 BSF 10,21511 BSF 11,21512 BSF 12,21513 BSF 13,21514 BSF 14,21515 BSF 15,21516 BSF 16,21517 BSF 17,21518 BSF 18,21519 BSF 19,2151A BSF 1A,2151B BSF 1B,2151C BSF 1C,2151D BSF 1D,2151E BSF 1E,2151F BSF 1F,21520 BSF 20,2

Page 315: le PIC_16F84 livre

315

1521 BSF 21,21522 BSF 22,21523 BSF 23,21524 BSF 24,21525 BSF 25,21526 BSF 26,21527 BSF 27,21528 BSF 28,21529 BSF 29,2152A BSF 2A,2152B BSF 2B,2152C BSF 2C,2152D BSF 2D,2152E BSF 2E,2152F BSF 2F,21530 BSF 30,21531 BSF 31,21532 BSF 32,21533 BSF 33,21534 BSF 34,21535 BSF 35,21536 BSF 36,21537 BSF 37,21538 BSF 38,21539 BSF 39,2153A BSF 3A,2153B BSF 3B,2153C BSF 3C,2153D BSF 3D,2153E BSF 3E,2153F BSF 3F,21540 BSF 40,21541 BSF 41,21542 BSF 42,21543 BSF 43,21544 BSF 44,2

1545 BSF 45,21546 BSF 46,21547 BSF 47,21548 BSF 48,21549 BSF 49,2154A BSF 4A,2154B BSF 4B,2154C BSF 4C,2154D BSF 4D,2154E BSF 4E,2154F BSF 4F,21585 BSF PORTA,31586 BSF PORTB,3158B BSF INTCON,RBIE158C BSF 0C,3158D BSF 0D,3158E BSF 0E,3158F BSF 0F,31590 BSF 10,31591 BSF 11,31592 BSF 12,31593 BSF 13,31594 BSF 14,31595 BSF 15,31596 BSF 16,31597 BSF 17,31598 BSF 18,31599 BSF 19,3159A BSF 1A,3159B BSF 1B,3159C BSF 1C,3159D BSF 1D,3159E BSF 1E,3159F BSF 1F,315A0 BSF 20,315A1 BSF 21,3

Page 316: le PIC_16F84 livre

316

15A2 BSF 22 ,315A3 BSF 23,315A4 BSF 24,315A5 BSF 25,315A6 BSF 26,315A7 BSF 27,315A8 BSF 28,315A9 BSF 29,315AA BSF 2A,315AB BSF 2B,315AC BSF 2C,315AD BSF 2D,315AE BSF 2E,315AF BSF 2F,315B0 BSF 30,315B1 BSF 31,315B2 BSF 32,315B3 BSF 33,315B4 BSF 34,315B5 BSF 35,315B6 BSF 36,315B7 BSF 37,315B8 BSF 38,315B9 BSF 39,315BA BSF 3A,315BB BSF 3B,315BC BSF 3C,315BD BSF 3D,315BE BSF 3E,315BF BSF 3F,315C0 BSF 40,315C1 BSF 41,315C2 BSF 42,315C3 BSF 43,315C4 BSF 44,315C5 BSF 45,3

15C6 BSF 46,315C7 BSF 47,315C8 BSF 48,315C9 BSF 49,315CA BSF 4A,315CB BSF 4B,315CC BSF 4C,315CD BSF 4D,315CE BSF 4E,315CF BSF 4F,31605 BSF PORTA,41606 BSF PORTB,4160B BSF INTCON,INTE160C BSF 0C,4160D BSF 0D,4160E BSF 0E,4160F BSF 0F,41610 BSF 10,41611 BSF 11,41612 BSF 12,41613 BSF 13,41614 BSF 14,41615 BSF 15,41616 BSF 16,41617 BSF 17,41618 BSF 18,41619 BSF 19,4161A BSF 1A,4161B BSF 1B,4161C BSF 1C,4161D BSF 1D,4161E BSF 1E,4161F BSF 1F,41620 BSF 20,41621 BSF 21,41622 BSF 22,4

Page 317: le PIC_16F84 livre

317

1623 BSF 23,41624 BSF 24,41625 BSF 25,41626 BSF 26,41627 BSF 27,41628 BSF 28,41629 BSF 29,4162A BSF 2A,4162B BSF 2B,4162C BSF 2C,4162D BSF 2D,4162E BSF 2E,4162F BSF 2F,41630 BSF 30,41631 BSF 31,41632 BSF 32,41633 BSF 33,41634 BSF 34,41635 BSF 35,41636 BSF 36,41637 BSF 37,41638 BSF 38,41639 BSF 39,4163A BSF 3A,4163B BSF 3B,4163C BSF 3C,4163D BSF 3D,4163E BSF 3E,4163F BSF 3F,41640 BSF 40,41641 BSF 41,41642 BSF 42,41643 BSF 43,41644 BSF 44,41645 BSF 45,41646 BSF 46,4

1647 BSF 47,41648 BSF 48,41649 BSF 49,4164A BSF 4A,4164B BSF 4B,4164C BSF 4C,4164D BSF 4D,4164E BSF 4E,4164F BSF 4F,41683 BSF STATUS,RP01685 BSF PORTA,51686 BSF PORTB,5168B BSF INTCON,T0IE168C BSF 0C,5168D BSF 0D,5168E BSF 0E,5168F BSF 0F,51690 BSF 10,51691 BSF 11,51692 BSF 12,51693 BSF 13,51694 BSF 14,51695 BSF 15,51696 BSF 16,51697 BSF 17,51698 BSF 18,51699 BSF 19,5169A BSF 1A,5169B BSF 1B,5169C BSF 1C,5169D BSF 1D,5169E BSF 1E,5169F BSF 1F,516A0 BSF 20,516A1 BSF 21,516A2 BSF 22,5

Page 318: le PIC_16F84 livre

318

16A3 BSF 23,516A4 BSF 24,516A5 BSF 25,516A6 BSF 26,516A7 BSF 27,516A8 BSF 28,516A9 BSF 29,516AA BSF 2A,516AB BSF 2B,516AC BSF 2C,516AD BSF 2D,516AE BSF 2E,516AF BSF 2F,516B0 BSF 30,516B1 BSF 31,516B2 BSF 32,516B3 BSF 33,516B4 BSF 34,516B5 BSF 35,516B6 BSF 36,516B7 BSF 37,516B8 BSF 38,516B9 BSF 39,516BA BSF 3A,516BB BSF 3B,516BC BSF 3C,516BD BSF 3D,516BE BSF 3E,516BF BSF 3F,516C0 BSF 40,516C1 BSF 41,516C2 BSF 42,516C3 BSF 43,516C4 BSF 44,516C5 BSF 45,516C6 BSF 46,5

16C7 BSF 47,516C8 BSF 48,516C9 BSF 49,516CA BSF 4A,516CB BSF 4B,516CC BSF 4C,516CD BSF 4D,516CE BSF 4E,516CF BSF 4F,51705 BSF PORTA,61706 BSF PORTB,6170B BSF INTCON,EEIE170C BSF 0C,6170D BSF 0D,6170E BSF 0E,6170F BSF 0F,61710 BSF 10,61711 BSF 11,61712 BSF 12,61713 BSF 13,61714 BSF 14,61715 BSF 15,61716 BSF 16,61717 BSF 17,61718 BSF 18,61719 BSF 19,6171A BSF 1A,6171B BSF 1B,6171C BSF 1C,6171D BSF 1D,6171E BSF 1E,6171F BSF 1F,61720 BSF 20,61721 BSF 21,61722 BSF 22,61723 BSF 23,6

Page 319: le PIC_16F84 livre

319

1724 BSF 24,61725 BSF 25,61726 BSF 26,61727 BSF 27,61728 BSF 28,61729 BSF 29,6172A BSF 2A,6172B BSF 2B,6172C BSF 2C,6172D BSF 2D,6172E BSF 2E,6172F BSF 2F,61730 BSF 30,61731 BSF 31,61732 BSF 32,61733 BSF 33,61734 BSF 34,61735 BSF 35,61736 BSF 36,61737 BSF 37,61738 BSF 38,61739 BSF 39,6173A BSF 3A,6173B BSF 3B,6173C BSF 3C,6173D BSF 3D,6173E BSF 3E,6173F BSF 3F,61740 BSF 40,61741 BSF 41,61742 BSF 42,61743 BSF 43,61744 BSF 44,61745 BSF 45,61746 BSF 46,61747 BSF 47,6

1748 BSF 48,61749 BSF 49,6174A BSF 4A,6174B BSF 4B,6174C BSF 4C,6174D BSF 4D,6174E BSF 4E,6174F BSF 4F,61785 BSF PORTA,71786 BSF PORTB,7178B BSF INTCON,GIE178C BSF 0C,7178D BSF 0D,7178E BSF 0E,7178F BSF 0F,71790 BSF 10,71791 BSF 11,71792 BSF 12,71793 BSF 13,71794 BSF 14,71795 BSF 15,71796 BSF 16,71797 BSF 17,71798 BSF 18,71799 BSF 19,7179A BSF 1A,7179B BSF 1B,7179C BSF 1C,7179D BSF 1D,7179E BSF 1E,7179F BSF 1F,717A0 BSF 20,717A1 BSF 21,717A2 BSF 22,717A3 BSF 23,717A4 BSF 24,7

Page 320: le PIC_16F84 livre

320

17A5 BSF 25,717A6 BSF 26,717A7 BSF 27,717A8 BSF 28,717A9 BSF 29,717AA BSF 2A,717AB BSF 2B,717AC BSF 2C,717AD BSF 2D,717AE BSF 2E,717AF BSF 2F,717B0 BSF 30,717B1 BSF 31,717B2 BSF 32,717B3 BSF 33,717B4 BSF 34,717B5 BSF 35,717B6 BSF 36,717B7 BSF 37,717B8 BSF 38,717B9 BSF 39,717BA BSF 3A,717BB BSF 3B,717BC BSF 3C,717BD BSF 3D,717BE BSF 3E,717BF BSF 3F,717C0 BSF 40,717C1 BSF 41,717C2 BSF 42,717C3 BSF 43,717C4 BSF 44,717C5 BSF 45,717C6 BSF 46,717C7 BSF 47,717C8 BSF 48,7

17C9 BSF 49,717CA BSF 4A,717CB BSF 4B,717CC BSF 4C,717CD BSF 4D,717CE BSF 4E,717CF BSF 4F,71803 BTFSC STATUS,C1805 BTFSC PORTA,01806 BTFSC PORTB,0180B BTFSC INTCON,0180C BTFSC 0C,0180D BTFSC 0D,0180E BTFSC 0E,0180F BTFSC 0F,01810 BTFSC 10,01811 BTFSC 11,01812 BTFSC 12,01813 BTFSC 13,01814 BTFSC 14,01815 BTFSC 15,01816 BTFSC 16,01817 BTFSC 17,01818 BTFSC 18,01819 BTFSC 19,0181A BTFSC 1A,0181B BTFSC 1B,0181C BTFSC 1C,0181D BTFSC 1D,0181E BTFSC 1E,0181F BTFSC 1F,01820 BTFSC 20,01821 BTFSC 21,01822 BTFSC 22,01823 BTFSC 23,01824 BTFSC 24,0

Page 321: le PIC_16F84 livre

321

1825 BTFSC 25,01826 BTFSC 26,01827 BTFSC 27,01828 BTFSC 28,01829 BTFSC 29,0182A BTFSC 2A,0182B BTFSC 2B,0182C BTFSC 2C,0182D BTFSC 2D,0182E BTFSC 2E,0182F BTFSC 2F,01830 BTFSC 30,01831 BTFSC 31,01832 BTFSC 32,01833 BTFSC 33,01834 BTFSC 34,01835 BTFSC 35,01836 BTFSC 36,01837 BTFSC 37,01838 BTFSC 38,01839 BTFSC 39,0183A BTFSC 3A,0183B BTFSC 3B,0183C BTFSC 3C,0183D BTFSC 3D,0183E BTFSC 3E,0183F BTFSC 3F,01840 BTFSC 40,01841 BTFSC 41,01842 BTFSC 42,01843 BTFSC 43,01844 BTFSC 44,01845 BTFSC 45,01846 BTFSC 46,01847 BTFSC 47,01848 BTFSC 48,0

1849 BTFSC 49,0184A BTFSC 4A,0184B BTFSC 4B,0184C BTFSC 4C,0184D BTFSC 4D,0184E BTFSC 4E,0184F BTFSC 4F,01883 BTFSC STATUS,DC1885 BTFSC PORTA,11886 BTFSC PORTB,1188B BTFSC INTCON,INTF188C BTFSC 0C,1188D BTFSC 0D,1188E BTFSC 0E,1188F BTFSC 0F,11890 BTFSC 10,11891 BTFSC 11,11892 BTFSC 12,11893 BTFSC 13,11894 BTFSC 14,11895 BTFSC 15,11896 BTFSC 16,11897 BTFSC 17,11898 BTFSC 18,11899 BTFSC 19,1189A BTFSC 1A,1189B BTFSC 1B,1189C BTFSC 1C,1189D BTFSC 1D,1189E BTFSC 1E,1189F BTFSC 1F,118A0 BTFSC 20,118A1 BTFSC 21,118A2 BTFSC 22,118A3 BTFSC 23,118A4 BTFSC 24,1

Page 322: le PIC_16F84 livre

322

18A5 BTFSC 25,118A6 BTFSC 26,118A7 BTFSC 27,118A8 BTFSC 28,118A9 BTFSC 29,118AA BTFSC 2A,118AB BTFSC 2B,118AC BTFSC 2C,118AD BTFSC 2D,118AE BTFSC 2E,118AF BTFSC 2F,118B0 BTFSC 30,118B1 BTFSC 31,118B2 BTFSC 32,118B3 BTFSC 33,118B4 BTFSC 34,118B5 BTFSC 35,118B6 BTFSC 36,118B7 BTFSC 37,118B8 BTFSC 38,118B9 BTFSC 39,118BA BTFSC 3A,118BB BTFSC 3B,118BC BTFSC 3C,118BD BTFSC 3D,118BE BTFSC 3E,118BF BTFSC 3F,118C0 BTFSC 40,118C1 BTFSC 41,118C2 BTFSC 42,118C3 BTFSC 43,118C4 BTFSC 44,118C5 BTFSC 45,118C6 BTFSC 46,118C7 BTFSC 47,118C8 BTFSC 48,1

18C9 BTFSC 49,118CA BTFSC 4A,118CB BTFSC 4B,118CC BTFSC 4C,118CD BTFSC 4D,118CE BTFSC 4E,118CF BTFSC 4F,11903 BTFSC STATUS,Z1905 BTFSC PORTA,21906 BTFSC PORTB,2190B BTFSC INTCON,T0IF190C BTFSC 0C,2190D BTFSC 0D,2190E BTFSC 0E,2190F BTFSC 0F,21910 BTFSC 10,21911 BTFSC 11,21912 BTFSC 12,21913 BTFSC 13,21914 BTFSC 14,21915 BTFSC 15,21916 BTFSC 16,21917 BTFSC 17,21918 BTFSC 18,21919 BTFSC 19,2191A BTFSC 1A,2191B BTFSC 1B,2191C BTFSC 1C,2191D BTFSC 1D,2191E BTFSC 1E,2191F BTFSC 1F,21920 BTFSC 20,21921 BTFSC 21,21922 BTFSC 22,21923 BTFSC 23,21924 BTFSC 24,2

Page 323: le PIC_16F84 livre

323

1925 BTFSC 25,21926 BTFSC 26,21927 BTFSC 27,21928 BTFSC 28,21929 BTFSC 29,2192A BTFSC 2A,2192B BTFSC 2B,2192C BTFSC 2C,2192D BTFSC 2D,2192E BTFSC 2E,2192F BTFSC 2F,21930 BTFSC 30,21931 BTFSC 31,21932 BTFSC 32,21933 BTFSC 33,21934 BTFSC 34,21935 BTFSC 35,21936 BTFSC 36,21937 BTFSC 37,21938 BTFSC 38,21939 BTFSC 39,2193A BTFSC 3A,2193B BTFSC 3B,2193C BTFSC 3C,2193D BTFSC 3D,2193E BTFSC 3E,2193F BTFSC 3F,21940 BTFSC 40,21941 BTFSC 41,21942 BTFSC 42,21943 BTFSC 43,21944 BTFSC 44,21945 BTFSC 45,21946 BTFSC 46,21947 BTFSC 47,21948 BTFSC 48,2

1949 BTFSC 49,2194A BTFSC 4A,2194B BTFSC 4B,2194C BTFSC 4C,2194D BTFSC 4D,2194E BTFSC 4E,2194F BTFSC 4F,21983 BTFSC STATUS,PD1985 BTFSC PORTA,31986 BTFSC PORTB,3198B BTFSC INTCON,RBIE198C BTFSC 0C,3198D BTFSC 0D,3198E BTFSC 0E,3198F BTFSC 0F,31990 BTFSC 10,31991 BTFSC 11,31992 BTFSC 12,31993 BTFSC 13,31994 BTFSC 14,31995 BTFSC 15,31996 BTFSC 16,31997 BTFSC 17,31998 BTFSC 18,31999 BTFSC 19,3199A BTFSC 1A,3199B BTFSC 1B,3199C BTFSC 1C,3199D BTFSC 1D,3199E BTFSC 1E,3199F BTFSC 1F,319A0 BTFSC 20,319A1 BTFSC 21,319A2 BTFSC 22 ,319A3 BTFSC 23,319A4 BTFSC 24,3

Page 324: le PIC_16F84 livre

324

19A5 BTFSC 25,319A6 BTFSC 26,319A7 BTFSC 27,319A8 BTFSC 28,319A9 BTFSC 29,319AA BTFSC 2A,319AB BTFSC 2B,319AC BTFSC 2C,319AD BTFSC 2D,319AE BTFSC 2E,319AF BTFSC 2F,319B0 BTFSC 30,319B1 BTFSC 31,319B2 BTFSC 32,319B3 BTFSC 33,319B4 BTFSC 34,319B5 BTFSC 35,319B6 BTFSC 36,319B7 BTFSC 37,319B8 BTFSC 38,319B9 BTFSC 39,319BA BTFSC 3A,319BB BTFSC 3B,319BC BTFSC 3C,319BD BTFSC 3D,319BE BTFSC 3E,319BF BTFSC 3F,319C0 BTFSC 40,319C1 BTFSC 41,319C2 BTFSC 42,319C3 BTFSC 43,319C4 BTFSC 44,319C5 BTFSC 45,319C6 BTFSC 46,319C7 BTFSC 47,319C8 BTFSC 48,3

19C9 BTFSC 49,319CA BTFSC 4A,319CB BTFSC 4B,319CC BTFSC 4C,319CD BTFSC 4D,319CE BTFSC 4E,319CF BTFSC 4F,31A03 BTFSC STATUS,TO1A05 BTFSC PORTA,41A06 BTFSC PORTB,41A0B BTFSC INTCON,INTE1A0C BTFSC 0C,41A0D BTFSC 0D,41A0E BTFSC 0E,41A0F BTFSC 0F,41A10 BTFSC 10,41A11 BTFSC 11,41A12 BTFSC 12,41A13 BTFSC 13,41A14 BTFSC 14,41A15 BTFSC 15,41A16 BTFSC 16,41A17 BTFSC 17,41A18 BTFSC 18,41A19 BTFSC 19,41A1A BTFSC 1A,41A1B BTFSC 1B,41A1C BTFSC 1C,41A1D BTFSC 1D,41A1E BTFSC 1E,41A1F BTFSC 1F,41A20 BTFSC 20,41A21 BTFSC 21,41A22 BTFSC 22 ,41A23 BTFSC 23,41A24 BTFSC 24,4

Page 325: le PIC_16F84 livre

325

1A25 BTFSC 25,41A26 BTFSC 26,41A27 BTFSC 27,41A28 BTFSC 28,41A29 BTFSC 29,41A2A BTFSC 2A,41A2B BTFSC 2B,41A2C BTFSC 2C,41A2D BTFSC 2D,41A2E BTFSC 2E,41A2F BTFSC 2F,41A30 BTFSC 30,41A31 BTFSC 31,41A32 BTFSC 32,41A33 BTFSC 33,41A34 BTFSC 34,41A35 BTFSC 35,41A36 BTFSC 36,41A37 BTFSC 37,41A38 BTFSC 38,41A39 BTFSC 39,41A3A BTFSC 3A,41A3B BTFSC 3B,41A3C BTFSC 3C,41A3D BTFSC 3D,41A3E BTFSC 3E,41A3F BTFSC 3F,41A40 BTFSC 40,41A41 BTFSC 41,41A42 BTFSC 42,41A43 BTFSC 43,41A44 BTFSC 44,41A45 BTFSC 45,41A46 BTFSC 46,41A47 BTFSC 47,41A48 BTFSC 48,4

1A49 BTFSC 49,41A4A BTFSC 4A,41A4B BTFSC 4B,41A4C BTFSC 4C,41A4D BTFSC 4D,41A4E BTFSC 4E,41A4F BTFSC 4F,41A83 BTFSC STATUS,RP01A85 BTFSC PORTA,51A86 BTFSC PORTB,51A8B BTFSC INTCON,T0IE1A8C BTFSC 0C,51A8D BTFSC 0D,51A8E BTFSC 0E,51A8F BTFSC 0F,51A90 BTFSC 10,51A91 BTFSC 11,51A92 BTFSC 12,51A93 BTFSC 13,51A94 BTFSC 14,51A95 BTFSC 15,51A96 BTFSC 16,51A97 BTFSC 17,51A98 BTFSC 18,51A99 BTFSC 19,51A9A BTFSC 1A,51A9B BTFSC 1B,51A9C BTFSC 1C,51A9D BTFSC 1D,51A9E BTFSC 1E,51A9F BTFSC 1F,51AA0 BTFSC 20,51AA1 BTFSC 21,51AA2 BTFSC 22,51AA3 BTFSC 23,51AA4 BTFSC 24,5

Page 326: le PIC_16F84 livre

326

1AA5 BTFSC 25,51AA6 BTFSC 26,51AA7 BTFSC 27,51AA8 BTFSC 28,51AA9 BTFSC 29,51AAA BTFSC 2A,51AAB BTFSC 2B,51AAC BTFSC 2C,51AAD BTFSC 2D,51AAE BTFSC 2E,51AAF BTFSC 2F,51AB0 BTFSC 30,51AB1 BTFSC 31,51AB2 BTFSC 32,51AB3 BTFSC 33,51AB4 BTFSC 34,51AB5 BTFSC 35,51AB6 BTFSC 36,51AB7 BTFSC 37,51AB8 BTFSC 38,51AB9 BTFSC 39,51ABA BTFSC 3A,51ABB BTFSC 3B,51ABC BTFSC 3C,51ABD BTFSC 3D,51ABE BTFSC 3E,51ABF BTFSC 3F,51AC0 BTFSC 40,51AC1 BTFSC 41,51AC2 BTFSC 42,51AC3 BTFSC 43,51AC4 BTFSC 44,51AC5 BTFSC 45,51AC6 BTFSC 46,51AC7 BTFSC 47,51AC8 BTFSC 48,5

1AC9 BTFSC 49,51ACA BTFSC 4A,51ACB BTFSC 4B,51ACC BTFSC 4C,51ACD BTFSC 4D,51ACE BTFSC 4E,51ACF BTFSC 4F,51B05 BTFSC PORTA,61B06 BTFSC PORTB,61B0B BTFSC INTCON,EEIE1B0C BTFSC 0C,61B0D BTFSC 0D,61B0E BTFSC 0E,61B0F BTFSC 0F,61B10 BTFSC 10,61B11 BTFSC 11,61B12 BTFSC 12,61B13 BTFSC 13,61B14 BTFSC 14,61B15 BTFSC 15,61B16 BTFSC 16,61B17 BTFSC 17,61B18 BTFSC 18,61B19 BTFSC 19,61B1A BTFSC 1A,61B1B BTFSC 1B,61B1C BTFSC 1C,61B1D BTFSC 1D,61B1E BTFSC 1E,61B1F BTFSC 1F,61B20 BTFSC 20,61B21 BTFSC 21,61B22 BTFSC 22,61B23 BTFSC 23,61B24 BTFSC 24,61B25 BTFSC 25,6

Page 327: le PIC_16F84 livre

327

1B26 BTFSC 26,61B27 BTFSC 27,61B28 BTFSC 28,61B29 BTFSC 29,61B2A BTFSC 2A,61B2B BTFSC 2B,61B2C BTFSC 2C,61B2D BTFSC 2D,61B2E BTFSC 2E,61B2F BTFSC 2F,61B30 BTFSC 30,61B31 BTFSC 31,61B32 BTFSC 32,61B33 BTFSC 33,61B34 BTFSC 34,61B35 BTFSC 35,61B36 BTFSC 36,61B37 BTFSC 37,61B38 BTFSC 38,61B39 BTFSC 39,61B3A BTFSC 3A,61B3B BTFSC 3B,61B3C BTFSC 3C,61B3D BTFSC 3D,61B3E BTFSC 3E,61B3F BTFSC 3F,61B40 BTFSC 40,61B41 BTFSC 41,61B42 BTFSC 42,61B43 BTFSC 43,61B44 BTFSC 44,61B45 BTFSC 45,61B46 BTFSC 46,61B47 BTFSC 47,61B48 BTFSC 48,61B49 BTFSC 49,6

1B4A BTFSC 4A,61B4B BTFSC 4B,61B4C BTFSC 4C,61B4D BTFSC 4D,61B4E BTFSC 4E,61B4F BTFSC 4F,61B85 BTFSC PORTA,71B86 BTFSC PORTB,71B8B BTFSC INTCON,GIE1B8C BTFSC 0C,71B8D BTFSC 0D,71B8E BTFSC 0E,71B8F BTFSC 0F,71B90 BTFSC 10,71B91 BTFSC 11,71B92 BTFSC 12,71B93 BTFSC 13,71B94 BTFSC 14,71B95 BTFSC 15,71B96 BTFSC 16,71B97 BTFSC 17,71B98 BTFSC 18,71B99 BTFSC 19,71B9A BTFSC 1A,71B9B BTFSC 1B,71B9C BTFSC 1C,71B9D BTFSC 1D,71B9E BTFSC 1E,71B9F BTFSC 1F,71BA0 BTFSC 20,71BA1 BTFSC 21,71BA2 BTFSC 22,71BA3 BTFSC 23,71BA4 BTFSC 24,71BA5 BTFSC 25,71BA6 BTFSC 26,7

Page 328: le PIC_16F84 livre

328

1BA7 BTFSC 27,71BA8 BTFSC 28,71BA9 BTFSC 29,71BAA BTFSC 2A,71BAB BTFSC 2B,71BAC BTFSC 2C,71BAD BTFSC 2D,71BAE BTFSC 2E,71BAF BTFSC 2F,71BB0 BTFSC 30,71BB1 BTFSC 31,71BB2 BTFSC 32,71BB3 BTFSC 33,71BB4 BTFSC 34,71BB5 BTFSC 35,71BB6 BTFSC 36,71BB7 BTFSC 37,71BB8 BTFSC 38,71BB9 BTFSC 39,71BBA BTFSC 3A,71BBB BTFSC 3B,71BBC BTFSC 3C,71BBD BTFSC 3D,71BBE BTFSC 3E,71BBF BTFSC 3F,71BC0 BTFSC 40,71BC1 BTFSC 41,71BC2 BTFSC 42,71BC3 BTFSC 43,71BC4 BTFSC 44,71BC5 BTFSC 45,71BC6 BTFSC 46,71BC7 BTFSC 47,71BC8 BTFSC 48,71BC9 BTFSC 49,71BCA BTFSC 4A,7

1BCB BTFSC 4B,71BCC BTFSC 4C,71BCD BTFSC 4D,71BCE BTFSC 4E,71BCF BTFSC 4F,71C03 BTFSS STATUS,C1C05 BTFSS PORTA,01C06 BTFSS PORTB,01C0B BTFSS INTCON,01C0C BTFSS 0C,01C0D BTFSS 0D,01C0E BTFSS 0E,01C0F BTFSS 0F,01C10 BTFSS 10,01C11 BTFSS 11,01C12 BTFSS 12,01C13 BTFSS 13,01C14 BTFSS 14,01C15 BTFSS 15,01C16 BTFSS 16,01C17 BTFSS 17,01C18 BTFSS 18,01C19 BTFSS 19,01C1A BTFSS 1A,01C1B BTFSS 1B,01C1C BTFSS 1C,01C1D BTFSS 1D,01C1E BTFSS 1E,01C1F BTFSS 1F,01C20 BTFSS 20,01C21 BTFSS 21,01C22 BTFSS 22,01C23 BTFSS 23,01C24 BTFSS 24,01C25 BTFSS 25,01C26 BTFSS 26,0

Page 329: le PIC_16F84 livre

329

1C27 BTFSS 27,01C28 BTFSS 28,01C29 BTFSS 29,01C2A BTFSS 2A,01C2B BTFSS 2B,01C2C BTFSS 2C,01C2D BTFSS 2D,01C2E BTFSS 2E,01C2F BTFSS 2F,01C30 BTFSS 30,01C31 BTFSS 31,01C32 BTFSS 32,01C33 BTFSS 33,01C34 BTFSS 34,01C35 BTFSS 35,01C36 BTFSS 36,01C37 BTFSS 37,01C38 BTFSS 38,01C39 BTFSS 39,01C3A BTFSS 3A,01C3B BTFSS 3B,01C3C BTFSS 3C,01C3D BTFSS 3D,01C3E BTFSS 3E,01C3F BTFSS 3F,01C40 BTFSS 40,01C41 BTFSS 41,01C42 BTFSS 42,01C43 BTFSS 43,01C44 BTFSS 44,01C45 BTFSS 45,01C46 BTFSS 46,01C47 BTFSS 47,01C48 BTFSS 48,01C49 BTFSS 49,01C4A BTFSS 4A,0

1C4B BTFSS 4B,01C4C BTFSS 4C,01C4D BTFSS 4D,01C4E BTFSS 4E,01C4F BTFSS 4F,01C83 BTFSS STATUS,DC1C85 BTFSS PORTA,11C86 BTFSS PORTB,11C8B BTFSS INTCON,INTF1C8C BTFSS 0C,11C8D BTFSS 0D,11C8E BTFSS 0E,11C8F BTFSS 0F,11C90 BTFSS 10,11C91 BTFSS 11,11C92 BTFSS 12,11C93 BTFSS 13,11C94 BTFSS 14,11C95 BTFSS 15,11C96 BTFSS 16,11C97 BTFSS 17,11C98 BTFSS 18,11C99 BTFSS 19,11C9A BTFSS 1A,11C9B BTFSS 1B,11C9C BTFSS 1C,11C9D BTFSS 1D,11C9E BTFSS 1E,11C9F BTFSS 1F,11CA0 BTFSS 20,11CA1 BTFSS 21,11CA2 BTFSS 22,11CA3 BTFSS 23,11CA4 BTFSS 24,11CA5 BTFSS 25,11CA6 BTFSS 26,1

Page 330: le PIC_16F84 livre

330

1CA7 BTFSS 27,11CA8 BTFSS 28,11CA9 BTFSS 29,11CAA BTFSS 2A,11CAB BTFSS 2B,11CAC BTFSS 2C,11CAD BTFSS 2D,11CAE BTFSS 2E,11CAF BTFSS 2F,11CB0 BTFSS 30,11CB1 BTFSS 31,11CB2 BTFSS 32,11CB3 BTFSS 33,11CB4 BTFSS 34,11CB5 BTFSS 35,11CB6 BTFSS 36,11CB7 BTFSS 37,11CB8 BTFSS 38,11CB9 BTFSS 39,11CBA BTFSS 3A,11CBB BTFSS 3B,11CBC BTFSS 3C,11CBD BTFSS 3D,11CBE BTFSS 3E,11CBF BTFSS 3F,11CC0 BTFSS 40,11CC1 BTFSS 41,11CC2 BTFSS 42,11CC3 BTFSS 43,11CC4 BTFSS 44,11CC5 BTFSS 45,11CC6 BTFSS 46,11CC7 BTFSS 47,11CC8 BTFSS 48,11CC9 BTFSS 49,11CCA BTFSS 4A,1

1CCB BTFSS 4B,11CCC BTFSS 4C,11CCD BTFSS 4D,11CCE BTFSS 4E,11CCF BTFSS 4F,11D03 BTFSS STATUS,Z1D05 BTFSS PORTA,21D06 BTFSS PORTB,21D0B BTFSS INTCON,T0IF1D0C BTFSS 0C,21D0D BTFSS 0D,21D0E BTFSS 0E,21D0F BTFSS 0F,21D10 BTFSS 10,21D11 BTFSS 11,21D12 BTFSS 12,21D13 BTFSS 13,21D14 BTFSS 14,21D15 BTFSS 15,21D16 BTFSS 16,21D17 BTFSS 17,21D18 BTFSS 18,21D19 BTFSS 19,21D1A BTFSS 1A,21D1B BTFSS 1B,21D1C BTFSS 1C,21D1D BTFSS 1D,21D1E BTFSS 1E,21D1F BTFSS 1F,21D20 BTFSS 20,21D21 BTFSS 21,21D22 BTFSS 22,21D23 BTFSS 23,21D24 BTFSS 24,21D25 BTFSS 25,21D26 BTFSS 26,2

Page 331: le PIC_16F84 livre

331

1D27 BTFSS 27,21D28 BTFSS 28,21D29 BTFSS 29,21D2A BTFSS 2A,21D2B BTFSS 2B,21D2C BTFSS 2C,21D2D BTFSS 2D,21D2E BTFSS 2E,21D2F BTFSS 2F,21D30 BTFSS 30,21D31 BTFSS 31,21D32 BTFSS 32,21D33 BTFSS 33,21D34 BTFSS 34,21D35 BTFSS 35,21D36 BTFSS 36,21D37 BTFSS 37,21D38 BTFSS 38,21D39 BTFSS 39,21D3A BTFSS 3A,21D3B BTFSS 3B,21D3C BTFSS 3C,21D3D BTFSS 3D,21D3E BTFSS 3E,21D3F BTFSS 3F,21D40 BTFSS 40,21D41 BTFSS 41,21D42 BTFSS 42,21D43 BTFSS 43,21D44 BTFSS 44,21D45 BTFSS 45,21D46 BTFSS 46,21D47 BTFSS 47,21D48 BTFSS 48,21D49 BTFSS 49,21D4A BTFSS 4A,2

1D4B BTFSS 4B,21D4C BTFSS 4C,21D4D BTFSS 4D,21D4E BTFSS 4E,21D4F BTFSS 4F,21D83 BTFSS STATUS,PD1D85 BTFSS PORTA,31D86 BTFSS PORTB,31D8B BTFSS INTCON,RBIE1D8C BTFSS 0C,31D8D BTFSS 0D,31D8E BTFSS 0E,31D8F BTFSS 0F,31D90 BTFSS 10,31D91 BTFSS 11,31D92 BTFSS 12,31D93 BTFSS 13,31D94 BTFSS 14,31D95 BTFSS 15,31D96 BTFSS 16,31D97 BTFSS 17,31D98 BTFSS 18,31D99 BTFSS 19,31D9A BTFSS 1A,31D9B BTFSS 1B,31D9C BTFSS 1C,31D9D BTFSS 1D,31D9E BTFSS 1E,31D9F BTFSS 1F,31DA0 BTFSS 20,31DA1 BTFSS 21,31DA2 BTFSS 22 ,31DA3 BTFSS 23,31DA4 BTFSS 24,31DA5 BTFSS 25,31DA6 BTFSS 26,3

Page 332: le PIC_16F84 livre

332

1DA7 BTFSS 27,31DA8 BTFSS 28,31DA9 BTFSS 29,31DAA BTFSS 2A,31DAB BTFSS 2B,31DAC BTFSS 2C,31DAD BTFSS 2D,31DAE BTFSS 2E,31DAF BTFSS 2F,31DB0 BTFSS 30,31DB1 BTFSS 31,31DB2 BTFSS 32,31DB3 BTFSS 33,31DB4 BTFSS 34,31DB5 BTFSS 35,31DB6 BTFSS 36,31DB7 BTFSS 37,31DB8 BTFSS 38,31DB9 BTFSS 39,31DBA BTFSS 3A,31DBB BTFSS 3B,31DBC BTFSS 3C,31DBD BTFSS 3D,31DBE BTFSS 3E,31DBF BTFSS 3F,31DC0 BTFSS 40,31DC1 BTFSS 41,31DC2 BTFSS 42,31DC3 BTFSS 43,31DC4 BTFSS 44,31DC5 BTFSS 45,31DC6 BTFSS 46,31DC7 BTFSS 47,31DC8 BTFSS 48,31DC9 BTFSS 49,31DCA BTFSS 4A,3

1DCB BTFSS 4B,31DCC BTFSS 4C,31DCD BTFSS 4D,31DCE BTFSS 4E,31DCF BTFSS 4F,31E03 BTFSS STATUS,TO1E05 BTFSS PORTA,41E06 BTFSS PORTB,41E0B BTFSS INTCON,INTE1E0C BTFSS 0C,41E0D BTFSS 0D,41E0E BTFSS 0E,41E0F BTFSS 0F,41E10 BTFSS 10,41E11 BTFSS 11,41E12 BTFSS 12,41E13 BTFSS 13,41E14 BTFSS 14,41E15 BTFSS 15,41E16 BTFSS 16,41E17 BTFSS 17,41E18 BTFSS 18,41E19 BTFSS 19,41E1A BTFSS 1A,41E1B BTFSS 1B,41E1C BTFSS 1C,41E1D BTFSS 1D,41E1E BTFSS 1E,41E1F BTFSS 1F,41E20 BTFSS 20,41E21 BTFSS 21,41E22 BTFSS 22 ,41E23 BTFSS 23,41E24 BTFSS 24,41E25 BTFSS 25,41E26 BTFSS 26,4

Page 333: le PIC_16F84 livre

333

1E27 BTFSS 27,41E28 BTFSS 28,41E29 BTFSS 29,41E2A BTFSS 2A,41E2B BTFSS 2B,41E2C BTFSS 2C,41E2D BTFSS 2D,41E2E BTFSS 2E,41E2F BTFSS 2F,41E30 BTFSS 30,41E31 BTFSS 31,41E32 BTFSS 32,41E33 BTFSS 33,41E34 BTFSS 34,41E35 BTFSS 35,41E36 BTFSS 36,41E37 BTFSS 37,41E38 BTFSS 38,41E39 BTFSS 39,41E3A BTFSS 3A,41E3B BTFSS 3B,41E3C BTFSS 3C,41E3D BTFSS 3D,41E3E BTFSS 3E,41E3F BTFSS 3F,41E40 BTFSS 40,41E41 BTFSS 41,41E42 BTFSS 42,41E43 BTFSS 43,41E44 BTFSS 44,41E45 BTFSS 45,41E46 BTFSS 46,41E47 BTFSS 47,41E48 BTFSS 48,41E49 BTFSS 49,41E4A BTFSS 4A,4

1E4B BTFSS 4B,41E4C BTFSS 4C,41E4D BTFSS 4D,41E4E BTFSS 4E,41E4F BTFSS 4F,41E83 BTFSS STATUS,RP01E85 BTFSS PORTA,51E86 BTFSS PORTB,51E8B BTFSS INTCON,T0IE1E8C BTFSS 0C,51E8D BTFSS 0D,51E8E BTFSS 0E,51E8F BTFSS 0F,51E90 BTFSS 10,51E91 BTFSS 11,51E92 BTFSS 12,51E93 BTFSS 13,51E94 BTFSS 14,51E95 BTFSS 15,51E96 BTFSS 16,51E97 BTFSS 17,51E98 BTFSS 18,51E99 BTFSS 19,51E9A BTFSS 1A,51E9B BTFSS 1B,51E9C BTFSS 1C,51E9D BTFSS 1D,51E9E BTFSS 1E,51E9F BTFSS 1F,51EA0 BTFSS 20,51EA1 BTFSS 21,51EA2 BTFSS 22,51EA3 BTFSS 23,51EA4 BTFSS 24,51EA5 BTFSS 25,51EA6 BTFSS 26,5

Page 334: le PIC_16F84 livre

334

1EA7 BTFSS 27,51EA8 BTFSS 28,51EA9 BTFSS 29,51EAA BTFSS 2A,51EAB BTFSS 2B,51EAC BTFSS 2C,51EAD BTFSS 2D,51EAE BTFSS 2E,51EAF BTFSS 2F,51EB0 BTFSS 30,51EB1 BTFSS 31,51EB2 BTFSS 32,51EB3 BTFSS 33,51EB4 BTFSS 34,51EB5 BTFSS 35,51EB6 BTFSS 36,51EB7 BTFSS 37,51EB8 BTFSS 38,51EB9 BTFSS 39,51EBA BTFSS 3A,51EBB BTFSS 3B,51EBC BTFSS 3C,51EBD BTFSS 3D,51EBE BTFSS 3E,51EBF BTFSS 3F,51EC0 BTFSS 40,51EC1 BTFSS 41,51EC2 BTFSS 42,51EC3 BTFSS 43,51EC4 BTFSS 44,51EC5 BTFSS 45,51EC6 BTFSS 46,51EC7 BTFSS 47,51EC8 BTFSS 48,51EC9 BTFSS 49,51ECA BTFSS 4A,5

1ECB BTFSS 4B,51ECC BTFSS 4C,51ECD BTFSS 4D,51ECE BTFSS 4E,51ECF BTFSS 4F,51F05 BTFSS PORTA,61F06 BTFSS PORTB,61F0B BTFSS INTCON,EEIE1F0C BTFSS 0C,61F0D BTFSS 0D,61F0E BTFSS 0E,61F0F BTFSS 0F,61F10 BTFSS 10,61F11 BTFSS 11,61F12 BTFSS 12,61F13 BTFSS 13,61F14 BTFSS 14,61F15 BTFSS 15,61F16 BTFSS 16,61F17 BTFSS 17,61F18 BTFSS 18,61F19 BTFSS 19,61F1A BTFSS 1A,61F1B BTFSS 1B,61F1C BTFSS 1C,61F1D BTFSS 1D,61F1E BTFSS 1E,61F1F BTFSS 1F,61F20 BTFSS 20,61F21 BTFSS 21,61F22 BTFSS 22,61F23 BTFSS 23,61F24 BTFSS 24,61F25 BTFSS 25,61F26 BTFSS 26,61F27 BTFSS 27,6

Page 335: le PIC_16F84 livre

335

1F28 BTFSS 28,61F29 BTFSS 29,61F2A BTFSS 2A,61F2B BTFSS 2B,61F2C BTFSS 2C,61F2D BTFSS 2D,61F2E BTFSS 2E,61F2F BTFSS 2F,61F30 BTFSS 30,61F31 BTFSS 31,61F32 BTFSS 32,61F33 BTFSS 33,61F34 BTFSS 34,61F35 BTFSS 35,61F36 BTFSS 36,61F37 BTFSS 37,61F38 BTFSS 38,61F39 BTFSS 39,61F3A BTFSS 3A,61F3B BTFSS 3B,61F3C BTFSS 3C,61F3D BTFSS 3D,61F3E BTFSS 3E,61F3F BTFSS 3F,61F40 BTFSS 40,61F41 BTFSS 41,61F42 BTFSS 42,61F43 BTFSS 43,61F44 BTFSS 44,61F45 BTFSS 45,61F46 BTFSS 46,61F47 BTFSS 47,61F48 BTFSS 48,61F49 BTFSS 49,61F4A BTFSS 4A,61F4B BTFSS 4B,6

1F4C BTFSS 4C,61F4D BTFSS 4D,61F4E BTFSS 4E,61F4F BTFSS 4F,61F85 BTFSS PORTA,71F86 BTFSS PORTB,71F8B BTFSS INTCON,GIE1F8C BTFSS 0C,71F8D BTFSS 0D,71F8E BTFSS 0E,71F8F BTFSS 0F,71F90 BTFSS 10,71F91 BTFSS 11,71F92 BTFSS 12,71F93 BTFSS 13,71F94 BTFSS 14,71F95 BTFSS 15,71F96 BTFSS 16,71F97 BTFSS 17,71F98 BTFSS 18,71F99 BTFSS 19,71F9A BTFSS 1A,71F9B BTFSS 1B,71F9C BTFSS 1C,71F9D BTFSS 1D,71F9E BTFSS 1E,71F9F BTFSS 1F,71FA0 BTFSS 20,71FA1 BTFSS 21,71FA2 BTFSS 22,71FA3 BTFSS 23,71FA4 BTFSS 24,71FA5 BTFSS 25,71FA6 BTFSS 26,71FA7 BTFSS 27,71FA8 BTFSS 28,7

Page 336: le PIC_16F84 livre

336

1FA9 BTFSS 29,71FAA BTFSS 2A,71FAB BTFSS 2B,71FAC BTFSS 2C,71FAD BTFSS 2D,71FAE BTFSS 2E,71FAF BTFSS 2F,71FB0 BTFSS 30,71FB1 BTFSS 31,71FB2 BTFSS 32,71FB3 BTFSS 33,71FB4 BTFSS 34,71FB5 BTFSS 35,71FB6 BTFSS 36,71FB7 BTFSS 37,71FB8 BTFSS 38,71FB9 BTFSS 39,71FBA BTFSS 3A,71FBB BTFSS 3B,71FBC BTFSS 3C,71FBD BTFSS 3D,71FBE BTFSS 3E,71FBF BTFSS 3F,71FC0 BTFSS 40,71FC1 BTFSS 41,71FC2 BTFSS 42,71FC3 BTFSS 43,71FC4 BTFSS 44,71FC5 BTFSS 45,71FC6 BTFSS 46,71FC7 BTFSS 47,71FC8 BTFSS 48,71FC9 BTFSS 49,71FCA BTFSS 4A,71FCB BTFSS 4B,71FCC BTFSS 4C,7

1FCD BTFSS 4D,71FCE BTFSS 4E,71FCF BTFSS 4F,72004 CALL 0042005 CALL 0052006 CALL 0062007 CALL 0072008 CALL 0082009 CALL 009200A CALL 00A200B CALL 00B200C CALL 00C200D CALL 00D200E CALL 00E200F CALL 00F2010 CALL 0102011 CALL 0112012 CALL 0122013 CALL 0132014 CALL 0142015 CALL 0152016 CALL 0162017 CALL 0172018 CALL 0182019 CALL 019201A CALL 01A201B CALL 01B201C CALL 01C201D CALL 01D201E CALL 01E201F CALL 01F2020 CALL 0202021 CALL 0212022 CALL 0222023 CALL 0232024 CALL 024

Page 337: le PIC_16F84 livre

337

2025 CALL 0252026 CALL 0262027 CALL 0272028 CALL 0282029 CALL 029202A CALL 02A202B CALL 02B202C CALL 02C202D CALL 02D202E CALL 02E202F CALL 02F2030 CALL 0302031 CALL 0312032 CALL 0322033 CALL 0332034 CALL 0342035 CALL 0352036 CALL 0362037 CALL 0372038 CALL 0382039 CALL 039203A CALL 03A203B CALL 03B203C CALL 03C203D CALL 03D203E CALL 03E203F CALL 03F2040 CALL 0402041 CALL 0412042 CALL 0422043 CALL 0432044 CALL 0442045 CALL 0452046 CALL 0462047 CALL 0472048 CALL 048

2049 CALL 049204A CALL 04A204B CALL 04B204C CALL 04C204D CALL 04D204E CALL 04E204F CALL 04F2050 CALL 0502051 CALL 0512052 CALL 0522053 CALL 0532054 CALL 0542055 CALL 0552056 CALL 0562057 CALL 0572058 CALL 0582059 CALL 059205A CALL 05A205B CALL 05B205C CALL 05C205D CALL 05D205E CALL 05E205F CALL 05F2060 CALL 0602061 CALL 0612062 CALL 0622063 CALL 0632064 CALL 0642065 CALL 0652066 CALL 0662067 CALL 0672068 CALL 0682069 CALL 069206A CALL 06A206B CALL 06B206C CALL 06C

Page 338: le PIC_16F84 livre

338

206D CALL 06D206E CALL 06E206F CALL 06F2070 CALL 0702071 CALL 0712072 CALL 0722073 CALL 0732074 CALL 0742075 CALL 0752076 CALL 0762077 CALL 0772078 CALL 0782079 CALL 079207A CALL 07A207B CALL 07B207C CALL 07C207D CALL 07D207E CALL 07E207F CALL 07F2080 CALL 0802081 CALL 0812082 CALL 0822083 CALL 0832084 CALL 0842085 CALL 0852086 CALL 0862087 CALL 0872088 CALL 0882089 CALL 089208A CALL 08A208B CALL 08B208C CALL 08C208D CALL 08D208E CALL 08E208F CALL 08F2090 CALL 090

2091 CALL 0912092 CALL 0922093 CALL 0932094 CALL 0942095 CALL 0952096 CALL 0962097 CALL 0972098 CALL 0982099 CALL 099209A CALL 09A209B CALL 09B209C CALL 09C209D CALL 09D209E CALL 09E209F CALL 09F20A0 CALL 0A020A1 CALL 0A120A2 CALL 0A220A3 CALL 0A320A4 CALL 0A420A5 CALL 0A520A6 CALL 0A620A7 CALL 0A720A8 CALL 0A820A9 CALL 0A920AA CALL 0AA20AB CALL 0AB20AC CALL 0AC20AD CALL 0AD20AE CALL 0AE20AF CALL 0AF20B0 CALL 0B020B1 CALL 0B120B2 CALL 0B220B3 CALL 0B320B4 CALL 0B4

Page 339: le PIC_16F84 livre

339

20B5 CALL 0B520B6 CALL 0B620B7 CALL 0B720B8 CALL 0B820B9 CALL 0B920BA CALL 0BA20BB CALL 0BB20BC CALL 0BC20BD CALL 0BD20BE CALL 0BE20BF CALL 0BF20C0 CALL 0C020C1 CALL 0C120C2 CALL 0C220C3 CALL 0C320C4 CALL 0C420C5 CALL 0C520C6 CALL 0C620C7 CALL 0C720C8 CALL 0C820C9 CALL 0C920CA CALL 0CA20CB CALL 0CB20CC CALL 0CC20CD CALL 0CD20CE CALL 0CE20CF CALL 0CF20D0 CALL 0D020D1 CALL 0D120D2 CALL 0D220D3 CALL 0D320D4 CALL 0D420D5 CALL 0D520D6 CALL 0D620D7 CALL 0D720D8 CALL 0D8

20D9 CALL 0D920DA CALL 0DA20DB CALL 0DB20DC CALL 0DC20DD CALL 0DD20DE CALL 0DE20DF CALL 0DF20E0 CALL 0E020E1 CALL 0E120E2 CALL 0E220E3 CALL 0E320E4 CALL 0E420E5 CALL 0E520E6 CALL 0E620E7 CALL 0E720E8 CALL 0E820E9 CALL 0E920EA CALL 0EA20EB CALL 0EB20EC CALL 0EC20ED CALL 0ED20EE CALL 0EE20EF CALL 0EF20F0 CALL 0F020F1 CALL 0F120F2 CALL 0F220F3 CALL 0F320F4 CALL 0F420F5 CALL 0F520F6 CALL 0F620F7 CALL 0F720F8 CALL 0F820F9 CALL 0F920FA CALL 0FA20FB CALL 0FB20FC CALL 0FC

Page 340: le PIC_16F84 livre

340

20FD CALL 0FD20FE CALL 0FE20FF CALL 0FF2100 CALL 1002101 CALL 1012102 CALL 1022103 CALL 1032104 CALL 1042105 CALL 1052106 CALL 1062107 CALL 1072108 CALL 1082109 CALL 109210A CALL 10A210B CALL 10B210C CALL 10C210D CALL 10D210E CALL 10E210F CALL 10F2110 CALL 1102111 CALL 1112112 CALL 1122113 CALL 1132114 CALL 1142115 CALL 1152116 CALL 1162117 CALL 1172118 CALL 1182119 CALL 119211A CALL 11A211B CALL 11B211C CALL 11C211D CALL 11D211E CALL 11E211F CALL 11F2120 CALL 120

2121 CALL 1212122 CALL 1222123 CALL 1232124 CALL 1242125 CALL 1252126 CALL 1262127 CALL 1272128 CALL 1282129 CALL 129212A CALL 12A212B CALL 12B212C CALL 12C212D CALL 12D212E CALL 12E212F CALL 12F2130 CALL 1302131 CALL 1312132 CALL 1322133 CALL 1332134 CALL 1342135 CALL 1352136 CALL 1362137 CALL 1372138 CALL 1382139 CALL 139213A CALL 13A213B CALL 13B213C CALL 13C213D CALL 13D213E CALL 13E213F CALL 13F2140 CALL 1402141 CALL 1412142 CALL 1422143 CALL 1432144 CALL 144

Page 341: le PIC_16F84 livre

341

2145 CALL 1452146 CALL 1462147 CALL 1472148 CALL 1482049 CALL 149214A CALL 14A201B CALL 14B214C CALL 14C214D CALL 14D214E CALL 14E214F CALL 14F2150 CALL 1502151 CALL 1512152 CALL 1522153 CALL 1532154 CALL 1542155 CALL 1552156 CALL 1562157 CALL 1572158 CALL 1582159 CALL 159215A CALL 15A215B CALL 15B215C CALL 15C215D CALL 15D215E CALL 15E215F CALL 15F2160 CALL 1602161 CALL 1612162 CALL 1622163 CALL 1632164 CALL 1642165 CALL 1652166 CALL 1662167 CALL 1672168 CALL 168

2169 CALL 169216A CALL 16A216B CALL 16B216C CALL 16C216D CALL 16D216E CALL 16E216F CALL 16F2170 CALL 1702171 CALL 1712172 CALL 1722173 CALL 1732174 CALL 1742175 CALL 1752176 CALL 1762177 CALL 1772178 CALL 1782179 CALL 179217A CALL 17A217B CALL 17B217C CALL 17C217D CALL 17D217E CALL 17E217F CALL 17F2180 CALL 1802181 CALL 1812182 CALL 1822183 CALL 1832184 CALL 1842185 CALL 1852186 CALL 1862187 CALL 1872188 CALL 1882189 CALL 189218A CALL 18A218B CALL 18B218C CALL 18C

Page 342: le PIC_16F84 livre

342

218D CALL 18D218E CALL 18E218F CALL 18F2190 CALL 1902191 CALL 1912192 CALL 1922193 CALL 1932194 CALL 1942195 CALL 1952196 CALL 1962197 CALL 1972198 CALL 1982199 CALL 199219A CALL 19A219B CALL 19B219C CALL 19C219D CALL 19D219E CALL 19E219F CALL 19F21A0 CALL 1A021A1 CALL 1A121A2 CALL 1A221A3 CALL 1A321A4 CALL 1A421A5 CALL 1A521A6 CALL 1A621A7 CALL 1A721A8 CALL 1A821A9 CALL 1A921AA CALL 1AA21AB CALL 1AB21AC CALL 1AC21AD CALL 1AD21AE CALL 1AE21AF CALL 1AF21B0 CALL 1B0

21B1 CALL 1B121B2 CALL 1B221B3 CALL 1B321B4 CALL 1B421B5 CALL 1B521B6 CALL 1B621B7 CALL 1B721B8 CALL 1B821B9 CALL 1B921BA CALL 1BA21BB CALL 1BB21BC CALL 1BC21BD CALL 1BD21BE CALL 1BE21BF CALL 1BF21C0 CALL 1C021C1 CALL 1C121C2 CALL 1C221C3 CALL 1C321C4 CALL 1C421C5 CALL 1C521C6 CALL 1C621C7 CALL 1C721C8 CALL 1C821C9 CALL 1C921CA CALL 1CA21CB CALL 1CB21CC CALL 1CC21CD CALL 1CD21CE CALL 1CE21CF CALL 1CF21D0 CALL 1D021D1 CALL 1D121D2 CALL 1D221D3 CALL 1D321D4 CALL 1D4

Page 343: le PIC_16F84 livre

343

21D5 CALL 1D521D6 CALL 1D621D7 CALL 1D721D8 CALL 1D821D9 CALL 1D921DA CALL 1DA21DB CALL 1DB21DC CALL 1DC21DD CALL 1DD21DE CALL 1DE21DF CALL 1DF21E0 CALL 1E021E1 CALL 1E121E2 CALL 1E221E3 CALL 1E321E4 CALL 1E421E5 CALL 1E521E6 CALL 1E621E7 CALL 1E721E8 CALL 1E821E9 CALL 1E921EA CALL 1EA21EB CALL 1EB21EC CALL 1EC21ED CALL 1ED21EE CALL 1EE21EF CALL 1EF21F0 CALL 1F021F1 CALL 1F121F2 CALL 1F221F3 CALL 1F321F4 CALL 1F421F5 CALL 1F521F6 CALL 1F621F7 CALL 1F721F8 CALL 1F8

21F9 CALL 1F921FA CALL 1FA21FB CALL 1FB21FC CALL 1FC21FD CALL 1FD21FE CALL 1FE21FF CALL 1FF2200 CALL 2002201 CALL 2012202 CALL 2022203 CALL 2032204 CALL 2042205 CALL 2052206 CALL 2062207 CALL 2072208 CALL 2082209 CALL 209220A CALL 20A220B CALL 20B220C CALL 20C220D CALL 20D220E CALL 20E220F CALL 20F2210 CALL 2102211 CALL 2112212 CALL 2122213 CALL 2132214 CALL 2142215 CALL 2152216 CALL 2162217 CALL 2172218 CALL 2182219 CALL 219221A CALL 21A221B CALL 21B221C CALL 21C

Page 344: le PIC_16F84 livre

344

221D CALL 21D221E CALL 21E221F CALL 21F2220 CALL 2202221 CALL 2212222 CALL 2222223 CALL 2232224 CALL 2242225 CALL 2252226 CALL 2262227 CALL 2272228 CALL 2282229 CALL 229222A CALL 22A222B CALL 22B222C CALL 22C222D CALL 22D222E CALL 22E222F CALL 22F2230 CALL 2302231 CALL 2312232 CALL 2322233 CALL 2332234 CALL 2342235 CALL 2352236 CALL 2362237 CALL 2372238 CALL 2382239 CALL 239223A CALL 23A223B CALL 23B223C CALL 23C223D CALL 23D223E CALL 23E223F CALL 23F2240 CALL 240

2241 CALL 2412242 CALL 2422243 CALL 2432244 CALL 2442245 CALL 2452246 CALL 2462247 CALL 2472248 CALL 2482249 CALL 249224A CALL 24A224B CALL 24B224C CALL 24C224D CALL 24D224E CALL 24E224F CALL 24F2250 CALL 2502251 CALL 2512252 CALL 2522253 CALL 2532254 CALL 2542255 CALL 2552256 CALL 2562257 CALL 2572258 CALL 2582259 CALL 259225A CALL 25A225B CALL 25B225C CALL 25C225D CALL 25D225E CALL 25E225F CALL 25F2260 CALL 2602261 CALL 2612262 CALL 2622263 CALL 2632264 CALL 264

Page 345: le PIC_16F84 livre

345

2265 CALL 2652266 CALL 2662267 CALL 2672268 CALL 2682269 CALL 269226A CALL 26A226B CALL 26B226C CALL 26C226D CALL 26D226E CALL 26E226F CALL 26F2270 CALL 2702271 CALL 2712272 CALL 2722273 CALL 2732274 CALL 2742275 CALL 2752276 CALL 2762277 CALL 2772278 CALL 2782279 CALL 279227A CALL 27A227B CALL 27B227C CALL 27C227D CALL 27D227E CALL 27E227F CALL 27F2280 CALL 2802281 CALL 2812282 CALL 2822283 CALL 2832284 CALL 2842285 CALL 2852286 CALL 2862287 CALL 2872288 CALL 288

2289 CALL 289228A CALL 28A228B CALL 28B228C CALL 28C228D CALL 28D228E CALL 28E228F CALL 28F2290 CALL 2902291 CALL 2912292 CALL 2922293 CALL 2932294 CALL 2942295 CALL 2952296 CALL 2962297 CALL 2972298 CALL 2982299 CALL 299229A CALL 29A229B CALL 29B229C CALL 29C229D CALL 29D229E CALL 29E229F CALL 29F22A0 CALL 2A022A1 CALL 2A122A2 CALL 2A222A3 CALL 2A322A4 CALL 2A422A5 CALL 2A522A6 CALL 2A622A7 CALL 2A722A8 CALL 2A822A9 CALL 2A922AA CALL 2AA22AB CALL 2AB22AC CALL 2AC

Page 346: le PIC_16F84 livre

346

22AD CALL 2AD22AE CALL 2AE22AF CALL 2AF22B0 CALL 2B022B1 CALL 2B122B2 CALL 2B222B3 CALL 2B322B4 CALL 2B422B5 CALL 2B522B6 CALL 2B622B7 CALL 2B722B8 CALL 2B822B9 CALL 2B922BA CALL 2BA22BB CALL 2BB22BC CALL 2BC22BD CALL 2BD22BE CALL 2BE22BF CALL 2BF22C0 CALL 2C022C1 CALL 2C122C2 CALL 2C222C3 CALL 2C322C4 CALL 2C422C5 CALL 2C522C6 CALL 2C622C7 CALL 2C722C8 CALL 2C822C9 CALL 2C922CA CALL 2CA22CB CALL 2CB22CC CALL 2CC22CD CALL 2CD22CE CALL 2CE22CF CALL 2CF22D0 CALL 2D0

22D1 CALL 2D122D2 CALL 2D222D3 CALL 2D322D4 CALL 2D422D5 CALL 2D522D6 CALL 2D622D7 CALL 2D722D8 CALL 2D822D9 CALL 2D922DA CALL 2DA22DB CALL 2DB22DC CALL 2DC22DD CALL 2DD22DE CALL 2DE22DF CALL 2DF22E0 CALL 2E022E1 CALL 2E122E2 CALL 2E222E3 CALL 2E322E4 CALL 2E422E5 CALL 2E522E6 CALL 2E622E7 CALL 2E722E8 CALL 2E822E9 CALL 2E922EA CALL 2EA22EB CALL 2EB22EC CALL 2EC22ED CALL 2ED22EE CALL 2EE22EF CALL 2EF22F0 CALL 2F022F1 CALL 2F122F2 CALL 2F222F3 CALL 2F322F4 CALL 2F4

Page 347: le PIC_16F84 livre

347

22F5 CALL 2F522F6 CALL 2F622F7 CALL 2F722F8 CALL 2F822F9 CALL 2F922FA CALL 2FA22FB CALL 2FB22FC CALL 2FC22FD CALL 2FD22FE CALL 2FE22FF CALL 2FF2300 CALL 3002301 CALL 3012302 CALL 3022303 CALL 3032304 CALL 3042305 CALL 3052306 CALL 3062307 CALL 3072308 CALL 3082309 CALL 309230A CALL 30A230B CALL 30B230C CALL 30C230D CALL 30D230E CALL 30E230F CALL 30F2310 CALL 3102311 CALL 3112312 CALL 3122313 CALL 3132314 CALL 3142315 CALL 3152316 CALL 3162317 CALL 3172318 CALL 318

2319 CALL 319231A CALL 31A231B CALL 31B231C CALL 31C231D CALL 31D231E CALL 31E231F CALL 31F2320 CALL 3202321 CALL 3212322 CALL 3222323 CALL 3232324 CALL 3242325 CALL 3252326 CALL 3262327 CALL 3272328 CALL 3282329 CALL 329232A CALL 32A232B CALL 32B232C CALL 32C232D CALL 32D232E CALL 32E232F CALL 32F2330 CALL 3302331 CALL 3312332 CALL 3322333 CALL 3332334 CALL 3342335 CALL 3352336 CALL 3362337 CALL 3372338 CALL 3382339 CALL 339233A CALL 33A233B CALL 33B233C CALL 33C

Page 348: le PIC_16F84 livre

348

233D CALL 33D233E CALL 33E233F CALL 33F2340 CALL 3402341 CALL 3412342 CALL 3422343 CALL 3432344 CALL 3442345 CALL 3452346 CALL 3462347 CALL 3472348 CALL 3482349 CALL 349234A CALL 34A234B CALL 34B234C CALL 34C234D CALL 34D234E CALL 34E234F CALL 34F2350 CALL 3502351 CALL 3512352 CALL 3522353 CALL 3532354 CALL 3542355 CALL 3552356 CALL 3562357 CALL 3572358 CALL 3582359 CALL 359235A CALL 35A235B CALL 35B235C CALL 35C235D CALL 35D235E CALL 35E235F CALL 35F2360 CALL 360

2361 CALL 3612362 CALL 3622363 CALL 3632364 CALL 3642365 CALL 3652366 CALL 3662367 CALL 3672368 CALL 3682369 CALL 369236A CALL 36A236B CALL 36B236C CALL 36C236D CALL 36D236E CALL 36E236F CALL 36F2370 CALL 3702371 CALL 3712372 CALL 3722373 CALL 3732374 CALL 3742375 CALL 3752376 CALL 3762377 CALL 3772378 CALL 3782379 CALL 379237A CALL 37A237B CALL 37B237C CALL 37C237D CALL 37D237E CALL 37E237F CALL 37F2380 CALL 3802381 CALL 3812382 CALL 3822383 CALL 3832384 CALL 384

Page 349: le PIC_16F84 livre

349

2385 CALL 3852386 CALL 3862387 CALL 3872388 CALL 3882389 CALL 389238A CALL 38A238B CALL 38B238C CALL 38C238D CALL 38D238E CALL 38E238F CALL 38F2390 CALL 3902391 CALL 3912392 CALL 3922393 CALL 3932394 CALL 3942395 CALL 3952396 CALL 3962397 CALL 3972398 CALL 3982399 CALL 399239A CALL 39A239B CALL 39B239C CALL 39C239D CALL 39D239E CALL 39E239F CALL 39F23A0 CALL 3A023A1 CALL 3A123A2 CALL 3A223A3 CALL 3A323A4 CALL 3A423A5 CALL 3A523A6 CALL 3A623A7 CALL 3A723A8 CALL 3A8

23A9 CALL 3A923AA CALL 3AA23AB CALL 3AB23AC CALL 3AC23AD CALL 3AD23AE CALL 3AE23AF CALL 3AF23B0 CALL 3B023B1 CALL 3B123B2 CALL 3B223B3 CALL 3B323B4 CALL 3B423B5 CALL 3B523B6 CALL 3B623B7 CALL 3B723B8 CALL 3B823B9 CALL 3B923BA CALL 3BA23BB CALL 3BB23BC CALL 3BC23BD CALL 3BD23BE CALL 3BE23BF CALL 3BF23C0 CALL 3C023C1 CALL 3C123C2 CALL 3C223C3 CALL 3C323C4 CALL 3C423C5 CALL 3C523C6 CALL 3C623C7 CALL 3C723C8 CALL 3C823C9 CALL 3C923CA CALL 3CA23CB CALL 3CB23CC CALL 3CC

Page 350: le PIC_16F84 livre

350

23CD CALL 3CD23CE CALL 3CE23CF CALL 3CF23D0 CALL 3D023D1 CALL 3D123D2 CALL 3D223D3 CALL 3D323D4 CALL 3D423D5 CALL 3D523D6 CALL 3D623D7 CALL 3D723D8 CALL 3D823D9 CALL 3D923DA CALL 3DA23DB CALL 3DB23DC CALL 3DC23DD CALL 3DD23DE CALL 3DE23DF CALL 3DF23E0 CALL 3E023E1 CALL 3E123E2 CALL 3E223E3 CALL 3E323E4 CALL 3E423E5 CALL 3E523E6 CALL 3E623E7 CALL 3E723E8 CALL 3E823E9 CALL 3E923EA CALL 3EA23EB CALL 3EB23EC CALL 3EC23ED CALL 3ED23EE CALL 3EE23EF CALL 3EF23F0 CALL 3F0

23F1 CALL 3F123F2 CALL 3F223F3 CALL 3F323F4 CALL 3F423F5 CALL 3F523F6 CALL 3F623F7 CALL 3F723F8 CALL 3F823F9 CALL 3F923FA CALL 3FA23FB CALL 3FB23FC CALL 3FC23FD CALL 3FD23FE CALL 3FE23FF CALL 3FF2800 GOTO 0002801 GOTO 0012802 GOTO 0022803 GOTO 0032804 GOTO 0042805 GOTO 0052806 GOTO 0062807 GOTO 0072808 GOTO 0082809 GOTO 009280A GOTO 00A280B GOTO 00B280C GOTO 00C280D GOTO 00D280E GOTO 00E280F GOTO 00F2810 GOTO 0102811 GOTO 0112812 GOTO 0122813 GOTO 0132814 GOTO 014

Page 351: le PIC_16F84 livre

351

2815 GOTO 0152816 GOTO 0162817 GOTO 0172818 GOTO 0182819 GOTO 019281A GOTO 01A281B GOTO 01B281C GOTO 01C281D GOTO 01D281E GOTO 01E281F GOTO 01F2820 GOTO 0202821 GOTO 0212822 GOTO 0222823 GOTO 0232824 GOTO 0242825 GOTO 0252826 GOTO 0262827 GOTO 0272828 GOTO 0282829 GOTO 029282A GOTO 02A282B GOTO 02B282C GOTO 02C282D GOTO 02D282E GOTO 02E282F GOTO 02F2830 GOTO 0302831 GOTO 0312832 GOTO 0322833 GOTO 0332834 GOTO 0342835 GOTO 0352836 GOTO 0362837 GOTO 0372838 GOTO 038

2839 GOTO 039283A GOTO 03A283B GOTO 03B283C GOTO 03C283D GOTO 03D283E GOTO 03E283F GOTO 03F2840 GOTO 0402841 GOTO 0412842 GOTO 0422843 GOTO 0432844 GOTO 0442845 GOTO 0452846 GOTO 0462847 GOTO 0472848 GOTO 0482849 GOTO 049284A GOTO 04A284B GOTO 04B284C GOTO 04C284D GOTO 04D284E GOTO 04E284F GOTO 04F2850 GOTO 0502851 GOTO 0512852 GOTO 0522853 GOTO 0532854 GOTO 0542855 GOTO 0552856 GOTO 0562857 GOTO 0572858 GOTO 0582859 GOTO 059285A GOTO 05A285B GOTO 05B285C GOTO 05C

Page 352: le PIC_16F84 livre

352

285D GOTO 05D285E GOTO 05E285F GOTO 05F2860 GOTO 0602861 GOTO 0612862 GOTO 0622863 GOTO 0632864 GOTO 0642865 GOTO 0652866 GOTO 0662867 GOTO 0672868 GOTO 0682869 GOTO 069286A GOTO 06A286B GOTO 06B286C GOTO 06C286D GOTO 06D286E GOTO 06E286F GOTO 06F2870 GOTO 0702871 GOTO 0712872 GOTO 0722873 GOTO 0732874 GOTO 0742875 GOTO 0752876 GOTO 0762877 GOTO 0772878 GOTO 0782879 GOTO 079287A GOTO 07A287B GOTO 07B287C GOTO 07C287D GOTO 07D287E GOTO 07E287F GOTO 07F2880 GOTO 080

2881 GOTO 0812882 GOTO 0822883 GOTO 0832884 GOTO 0842885 GOTO 0852886 GOTO 0862887 GOTO 0872888 GOTO 0882889 GOTO 089288A GOTO 08A288B GOTO 08B288C GOTO 08C288D GOTO 08D288E GOTO 08E288F GOTO 08F2890 GOTO 0902891 GOTO 0912892 GOTO 0922893 GOTO 0932894 GOTO 0942895 GOTO 0952896 GOTO 0962897 GOTO 0972898 GOTO 0982899 GOTO 099289A GOTO 09A289B GOTO 09B289C GOTO 09C289D GOTO 09D289E GOTO 09E289F GOTO 09F28A0 GOTO 0A028A1 GOTO 0A128A2 GOTO 0A228A3 GOTO 0A328A4 GOTO 0A4

Page 353: le PIC_16F84 livre

353

28A5 GOTO 0A528A6 GOTO 0A628A7 GOTO 0A728A8 GOTO 0A828A9 GOTO 0A928AA GOTO 0AA28AB GOTO 0AB28AC GOTO 0AC28AD GOTO 0AD28AE GOTO 0AE28AF GOTO 0AF28B0 GOTO 0B028B1 GOTO 0B128B2 GOTO 0B228B3 GOTO 0B328B4 GOTO 0B428B5 GOTO 0B528B6 GOTO 0B628B7 GOTO 0B728B8 GOTO 0B828B9 GOTO 0B928BA GOTO 0BA28BB GOTO 0BB28BC GOTO 0BC28BD GOTO 0BD28BE GOTO 0BE28BF GOTO 0BF28C0 GOTO 0C028C1 GOTO 0C128C2 GOTO 0C228C3 GOTO 0C328C4 GOTO 0C428C5 GOTO 0C528C6 GOTO 0C628C7 GOTO 0C728C8 GOTO 0C8

28C9 GOTO 0C928CA GOTO 0CA28CB GOTO 0CB28CC GOTO 0CC28CD GOTO 0CD28CE GOTO 0CE28CF GOTO 0CF28D0 GOTO 0D028D1 GOTO 0D128D2 GOTO 0D228D3 GOTO 0D328D4 GOTO 0D428D5 GOTO 0D528D6 GOTO 0D628D7 GOTO 0D728D8 GOTO 0D828D9 GOTO 0D928DA GOTO 0DA28DB GOTO 0DB28DC GOTO 0DC28DD GOTO 0DD28DE GOTO 0DE28DF GOTO 0DF28E0 GOTO 0E028E1 GOTO 0E128E2 GOTO 0E228E3 GOTO 0E328E4 GOTO 0E428E5 GOTO 0E528E6 GOTO 0E628E7 GOTO 0E728E8 GOTO 0E828E9 GOTO 0E928EA GOTO 0EA28EB GOTO 0EB28EC GOTO 0EC

Page 354: le PIC_16F84 livre

354

28ED GOTO 0ED28EE GOTO 0EE28EF GOTO 0EF28F0 GOTO 0F028F1 GOTO 0F128F2 GOTO 0F228F3 GOTO 0F328F4 GOTO 0F428F5 GOTO 0F528F6 GOTO 0F628F7 GOTO 0F728F8 GOTO 0F828F9 GOTO 0F928FA GOTO 0FA28FB GOTO 0FB28FC GOTO 0FC28FD GOTO 0FD28FE GOTO 0FE28FF GOTO 0FF2900 GOTO 1002901 GOTO 1012902 GOTO 1022903 GOTO 1032904 GOTO 1042905 GOTO 1052906 GOTO 1062907 GOTO 1072908 GOTO 1082909 GOTO 109290A GOTO 10A290B GOTO 10B290C GOTO 10C290D GOTO 10D290E GOTO 10E290F GOTO 10F2910 GOTO 110

2911 GOTO 1112912 GOTO 1122913 GOTO 1132914 GOTO 1142915 GOTO 1152916 GOTO 1162917 GOTO 1172918 GOTO 1182919 GOTO 119291A GOTO 11A291B GOTO 11B291C GOTO 11C291D GOTO 11D291E GOTO 11E291F GOTO 11F2920 GOTO 1202921 GOTO 1212922 GOTO 1222923 GOTO 1232924 GOTO 1242925 GOTO 1252926 GOTO 1262927 GOTO 1272928 GOTO 1282929 GOTO 129292A GOTO 12A292B GOTO 12B292C GOTO 12C292D GOTO 12D292E GOTO 12E292F GOTO 12F2930 GOTO 1302931 GOTO 1312932 GOTO 1322933 GOTO 1332934 GOTO 134

Page 355: le PIC_16F84 livre

355

2935 GOTO 1352936 GOTO 1362937 GOTO 1372938 GOTO 1382939 GOTO 139293A GOTO 13A293B GOTO 13B293C GOTO 13C293D GOTO 13D293E GOTO 13E293F GOTO 13F2940 GOTO 1402941 GOTO 1412942 GOTO 1422943 GOTO 1432944 GOTO 1442945 GOTO 1452946 GOTO 1462947 GOTO 1472948 GOTO 1482949 GOTO 149294A GOTO 14A294B GOTO 14B294C GOTO 14C294D GOTO 14D294E GOTO 14E294F GOTO 14F2950 GOTO 1502951 GOTO 1512952 GOTO 1522953 GOTO 1532954 GOTO 1542955 GOTO 1552956 GOTO 1562957 GOTO 1572958 GOTO 158

2959 GOTO 159295A GOTO 15A295B GOTO 15B295C GOTO 15C295D GOTO 15D295E GOTO 15E295F GOTO 15F2960 GOTO 1602961 GOTO 1612962 GOTO 1622963 GOTO 1632964 GOTO 1642965 GOTO 1652966 GOTO 1662967 GOTO 1672968 GOTO 1682969 GOTO 169296A GOTO 16A296B GOTO 16B296C GOTO 16C296D GOTO 16D296E GOTO 16E296F GOTO 16F2970 GOTO 1702971 GOTO 1712972 GOTO 1722973 GOTO 1732974 GOTO 1742975 GOTO 1752976 GOTO 1762977 GOTO 1772978 GOTO 1782979 GOTO 179297A GOTO 17A297B GOTO 17B297C GOTO 17C

Page 356: le PIC_16F84 livre

356

297D GOTO 17D297E GOTO 17E297F GOTO 17F2980 GOTO 1802981 GOTO 1812982 GOTO 1822983 GOTO 1832984 GOTO 1842985 GOTO 1852986 GOTO 1862987 GOTO 1872988 GOTO 1882989 GOTO 189298A GOTO 18A298B GOTO 18B298C GOTO 18C298D GOTO 18D298E GOTO 18E298F GOTO 18F2990 GOTO 1902991 GOTO 1912992 GOTO 1922993 GOTO 1932994 GOTO 1942995 GOTO 1952996 GOTO 1962997 GOTO 1972998 GOTO 1982999 GOTO 199299A GOTO 19A299B GOTO 19B299C GOTO 19C299D GOTO 19D299E GOTO 19E299F GOTO 19F29A0 GOTO 1A0

29A1 GOTO 1A129A2 GOTO 1A229A3 GOTO 1A329A4 GOTO 1A429A5 GOTO 1A529A6 GOTO 1A629A7 GOTO 1A729A8 GOTO 1A829A9 GOTO 1A929AA GOTO 1AA29AB GOTO 1AB29AC GOTO 1AC29AD GOTO 1AD29AE GOTO 1AE29AF GOTO 1AF29B0 GOTO 1B029B1 GOTO 1B129B2 GOTO 1B229B3 GOTO 1B329B4 GOTO 1B429B5 GOTO 1B529B6 GOTO 1B629B7 GOTO 1B729B8 GOTO 1B829B9 GOTO 1B929BA GOTO 1BA29BB GOTO 1BB29BC GOTO 1BC29BD GOTO 1BD29BE GOTO 1BE29BF GOTO 1BF29C0 GOTO 1C029C1 GOTO 1C129C2 GOTO 1C229C3 GOTO 1C329C4 GOTO 1C4

Page 357: le PIC_16F84 livre

357

29C5 GOTO 1C529C6 GOTO 1C629C7 GOTO 1C729C8 GOTO 1C829C9 GOTO 1C929CA GOTO 1CA29CB GOTO 1CB29CC GOTO 1CC29CD GOTO 1CD29CE GOTO 1CE29CF GOTO 1CF29D0 GOTO 1D029D1 GOTO 1D129D2 GOTO 1D229D3 GOTO 1D329D4 GOTO 1D429D5 GOTO 1D529D6 GOTO 1D629D7 GOTO 1D729D8 GOTO 1D829D9 GOTO 1D929DA GOTO 1DA29DB GOTO 1DB29DC GOTO 1DC29DD GOTO 1DD29DE GOTO 1DE29DF GOTO 1DF29E0 GOTO 1E029E1 GOTO 1E129E2 GOTO 1E229E3 GOTO 1E329E4 GOTO 1E429E5 GOTO 1E529E6 GOTO 1E629E7 GOTO 1E729E8 GOTO 1E8

29E9 GOTO 1E929EA GOTO 1EA29EB GOTO 1EB29EC GOTO 1EC29ED GOTO 1ED29EE GOTO 1EE29EF GOTO 1EF29F0 GOTO 1F029F1 GOTO 1F129F2 GOTO 1F229F3 GOTO 1F329F4 GOTO 1F429F5 GOTO 1F529F6 GOTO 1F629F7 GOTO 1F729F8 GOTO 1F829F9 GOTO 1F929FA GOTO 1FA29FB GOTO 1FB29FC GOTO 1FC29FD GOTO 1FD29FE GOTO 1FE29FF GOTO 1FF2A00 GOTO 2002A01 GOTO 2012A02 GOTO 2022A03 GOTO 2032A04 GOTO 2042A05 GOTO 2052A06 GOTO 2062A07 GOTO 2072A08 GOTO 2082A09 GOTO 2092A0A GOTO 20A2A0B GOTO 20B2A0C GOTO 20C

Page 358: le PIC_16F84 livre

358

2A0D GOTO 20D2A0E GOTO 20E2A0F GOTO 20F2A10 GOTO 2102A11 GOTO 2112A12 GOTO 2122A13 GOTO 2132A14 GOTO 2142A15 GOTO 2152A16 GOTO 2162A17 GOTO 2172A18 GOTO 2182A19 GOTO 2192A1A GOTO 21A2A1B GOTO 21B2A1C GOTO 21C2A1D GOTO 21D2A1E GOTO 21E2A1F GOTO 21F2A20 GOTO 2202A21 GOTO 2212A22 GOTO 2222A23 GOTO 2232A24 GOTO 2242A25 GOTO 2252A26 GOTO 2262A27 GOTO 2272A28 GOTO 2282A29 GOTO 2292A2A GOTO 22A2A2B GOTO 22B2A2C GOTO 22C2A2D GOTO 22D2A2E GOTO 22E2A2F GOTO 22F2A30 GOTO 230

2A31 GOTO 2312A32 GOTO 2322A33 GOTO 2332A34 GOTO 2342A35 GOTO 2352A36 GOTO 2362A37 GOTO 2372A38 GOTO 2382A39 GOTO 2392A3A GOTO 23A2A3B GOTO 23B2A3C GOTO 23C2A3D GOTO 23D2A3E GOTO 23E2A3F GOTO 23F2A40 GOTO 2402A41 GOTO 2412A42 GOTO 2422A43 GOTO 2432A44 GOTO 2442A45 GOTO 2452A46 GOTO 2462A47 GOTO 2472A48 GOTO 2482A49 GOTO 2492A4A GOTO 24A2A4B GOTO 24B2A4C GOTO 24C2A4D GOTO 24D2A4E GOTO 24E2A4F GOTO 24F2A50 GOTO 2502A51 GOTO 2512A52 GOTO 2522A53 GOTO 2532A54 GOTO 254

Page 359: le PIC_16F84 livre

359

2A55 GOTO 2552A56 GOTO 2562A57 GOTO 2572A58 GOTO 2582A59 GOTO 2592A5A GOTO 25A2A5B GOTO 25B2A5C GOTO 25C2A5D GOTO 25D2A5E GOTO 25E2A5F GOTO 25F2A60 GOTO 2602A61 GOTO 2612A62 GOTO 2622A63 GOTO 2632A64 GOTO 2642A65 GOTO 2652A66 GOTO 2662A67 GOTO 2672A68 GOTO 2682A69 GOTO 2692A6A GOTO 26A2A6B GOTO 26B2A6C GOTO 26C2A6D GOTO 26D2A6E GOTO 26E2A6F GOTO 26F2A70 GOTO 2702A71 GOTO 2712A72 GOTO 2722A73 GOTO 2732A74 GOTO 2742A75 GOTO 2752A76 GOTO 2762A77 GOTO 2772A78 GOTO 278

2A79 GOTO 2792A7A GOTO 27A2A7B GOTO 27B2A7C GOTO 27C2A7D GOTO 27D2A7E GOTO 27E2A7F GOTO 27F2A80 GOTO 2802A81 GOTO 2812A82 GOTO 2822A83 GOTO 2832A84 GOTO 2842A85 GOTO 2852A86 GOTO 2862A87 GOTO 2872A88 GOTO 2882A89 GOTO 2892A8A GOTO 28A2A8B GOTO 28B2A8C GOTO 28C2A8D GOTO 28D2A8E GOTO 28E2A8F GOTO 28F2A90 GOTO 2902A91 GOTO 2912A92 GOTO 2922A93 GOTO 2932A94 GOTO 2942A95 GOTO 2952A96 GOTO 2962A97 GOTO 2972A98 GOTO 2982A99 GOTO 2992A9A GOTO 29A2A9B GOTO 29B2A9C GOTO 29C

Page 360: le PIC_16F84 livre

360

2A9D GOTO 29D2A9E GOTO 29E2A9F GOTO 29F2AA0 GOTO 2A02AA1 GOTO 2A12AA2 GOTO 2A22AA3 GOTO 2A32AA4 GOTO 2A42AA5 GOTO 2A52AA6 GOTO 2A62AA7 GOTO 2A72AA8 GOTO 2A82AA9 GOTO 2A92AAA GOTO 2AA2AAB GOTO 2AB2AAC GOTO 2AC2AAD GOTO 2AD2AAE GOTO 2AE2AAF GOTO 2AF2AB0 GOTO 2B02AB1 GOTO 2B12AB2 GOTO 2B22AB3 GOTO 2B32AB4 GOTO 2B42AB5 GOTO 2B52AB6 GOTO 2B62AB7 GOTO 2B72AB8 GOTO 2B82AB9 GOTO 2B92ABA GOTO 2BA2ABB GOTO 2BB2ABC GOTO 2BC2ABD GOTO 2BD2ABE GOTO 2BE2ABF GOTO 2BF2AC0 GOTO 2C0

2AC1 GOTO 2C12AC2 GOTO 2C22AC3 GOTO 2C32AC4 GOTO 2C42AC5 GOTO 2C52AC6 GOTO 2C62AC7 GOTO 2C72AC8 GOTO 2C82AC9 GOTO 2C92ACA GOTO 2CA2ACB GOTO 2CB2ACC GOTO 2CC2ACD GOTO 2CD2ACE GOTO 2CE2ACF GOTO 2CF2AD0 GOTO 2D02AD1 GOTO 2D12AD2 GOTO 2D22AD3 GOTO 2D32AD4 GOTO 2D42AD5 GOTO 2D52AD6 GOTO 2D62AD7 GOTO 2D72AD8 GOTO 2D82AD9 GOTO 2D92ADA GOTO 2DA2ADB GOTO 2DB2ADC GOTO 2DC2ADD GOTO 2DD2ADE GOTO 2DE2ADF GOTO 2DF2AE0 GOTO 2E02AE1 GOTO 2E12AE2 GOTO 2E22AE3 GOTO 2E32AE4 GOTO 2E4

Page 361: le PIC_16F84 livre

361

2AE5 GOTO 2E52AE6 GOTO 2E62AE7 GOTO 2E72AE8 GOTO 2E82AE9 GOTO 2E92AEA GOTO 2EA2AEB GOTO 2EB2AEC GOTO 2EC2AED GOTO 2ED2AEE GOTO 2EE2AEF GOTO 2EF2AF0 GOTO 2F02AF1 GOTO 2F12AF2 GOTO 2F22AF3 GOTO 2F32AF4 GOTO 2F42AF5 GOTO 2F52AF6 GOTO 2F62AF7 GOTO 2F72AF8 GOTO 2F82AF9 GOTO 2F92AFA GOTO 2FA2AFB GOTO 2FB2AFC GOTO 2FC2AFD GOTO 2FD2AFE GOTO 2FE2AFF GOTO 2FF2B00 GOTO 3002B01 GOTO 3012B02 GOTO 3022B03 GOTO 3032B04 GOTO 3042B05 GOTO 3052B06 GOTO 3062B07 GOTO 3072B08 GOTO 308

2B09 GOTO 3092B0A GOTO 30A2B0B GOTO 30B2B0C GOTO 30C2B0D GOTO 30D2B0E GOTO 30E2B0F GOTO 30F2B10 GOTO 3102B11 GOTO 3112B12 GOTO 3122B13 GOTO 3132B14 GOTO 3142B15 GOTO 3152B16 GOTO 3162B17 GOTO 3172B18 GOTO 3182B19 GOTO 3192B1A GOTO 31A2B1B GOTO 31B2B1C GOTO 31C2B1D GOTO 31D2B1E GOTO 31E2B1F GOTO 31F2B20 GOTO 3202B21 GOTO 3212B22 GOTO 3222B23 GOTO 3232B24 GOTO 3242B25 GOTO 3252B26 GOTO 3262B27 GOTO 3272B28 GOTO 3282B29 GOTO 3292B2A GOTO 32A2B2B GOTO 32B2B2C GOTO 32C

Page 362: le PIC_16F84 livre

362

2B2D GOTO 32D2B2E GOTO 32E2B2F GOTO 32F2B30 GOTO 3302B31 GOTO 3312B32 GOTO 3322B33 GOTO 3332B34 GOTO 3342B35 GOTO 3352B36 GOTO 3362B37 GOTO 3372B38 GOTO 3382B39 GOTO 3392B3A GOTO 33A2B3B GOTO 33B2B3C GOTO 33C2B3D GOTO 33D2B3E GOTO 33E2B3F GOTO 33F2B40 GOTO 3402B41 GOTO 3412B42 GOTO 3422B43 GOTO 3432B44 GOTO 3442B45 GOTO 3452B46 GOTO 3462B47 GOTO 3472B48 GOTO 3482B49 GOTO 3492B4A GOTO 34A2B4B GOTO 34B2B4C GOTO 34C2B4D GOTO 34D2B4E GOTO 34E2B4F GOTO 34F2B50 GOTO 350

2B51 GOTO 3512B52 GOTO 3522B53 GOTO 3532B54 GOTO 3542B55 GOTO 3552B56 GOTO 3562B57 GOTO 3572B58 GOTO 3582B59 GOTO 3592B5A GOTO 35A2B5B GOTO 35B2B5C GOTO 35C2B5D GOTO 35D2B5E GOTO 35E2B5F GOTO 35F2B60 GOTO 3602B61 GOTO 3612B62 GOTO 3622B63 GOTO 3632B64 GOTO 3642B65 GOTO 3652B66 GOTO 3662B67 GOTO 3672B68 GOTO 3682B69 GOTO 3692B6A GOTO 36A2B6B GOTO 36B2B6C GOTO 36C2B6D GOTO 36D2B6E GOTO 36E2B6F GOTO 36F2B70 GOTO 3702B71 GOTO 3712B72 GOTO 3722B73 GOTO 3732B74 GOTO 374

Page 363: le PIC_16F84 livre

363

2B75 GOTO 3752B76 GOTO 3762B77 GOTO 3772B78 GOTO 3782B79 GOTO 3792B7A GOTO 37A2B7B GOTO 37B2B7C GOTO 37C2B7D GOTO 37D2B7E GOTO 37E2B7F GOTO 37F2B80 GOTO 3802B81 GOTO 3812B82 GOTO 3822B83 GOTO 3832B84 GOTO 3842B85 GOTO 3852B86 GOTO 3862B87 GOTO 3872B88 GOTO 3882B89 GOTO 3892B8A GOTO 38A2B8B GOTO 38B2B8C GOTO 38C2B8D GOTO 38D2B8E GOTO 38E2B8F GOTO 38F2B90 GOTO 3902B91 GOTO 3912B92 GOTO 3922B93 GOTO 3932B94 GOTO 3942B95 GOTO 3952B96 GOTO 3962B97 GOTO 3972B98 GOTO 398

2B99 GOTO 3992B9A GOTO 39A2B9B GOTO 39B2B9C GOTO 39C2B9D GOTO 39D2B9E GOTO 39E2B9F GOTO 39F2BA0 GOTO 3A02BA1 GOTO 3A12BA2 GOTO 3A22BA3 GOTO 3A32BA4 GOTO 3A42BA5 GOTO 3A52BA6 GOTO 3A62BA7 GOTO 3A72BA8 GOTO 3A82BA9 GOTO 3A92BAA GOTO 3AA2BAB GOTO 3AB2BAC GOTO 3AC2BAD GOTO 3AD2BAE GOTO 3AE2BAF GOTO 3AF2BB0 GOTO 3B02BB1 GOTO 3B12BB2 GOTO 3B22BB3 GOTO 3B32BB4 GOTO 3B42BB5 GOTO 3B52BB6 GOTO 3B62BB7 GOTO 3B72BB8 GOTO 3B82BB9 GOTO 3B92BBA GOTO 3BA2BBB GOTO 3BB2BBC GOTO 3BC

Page 364: le PIC_16F84 livre

364

2BBD GOTO 3BD2BBE GOTO 3BE2BBF GOTO 3BF2BC0 GOTO 3C02BC1 GOTO 3C12BC2 GOTO 3C22BC3 GOTO 3C32BC4 GOTO 3C42BC5 GOTO 3C52BC6 GOTO 3C62BC7 GOTO 3C72BC8 GOTO 3C82BC9 GOTO 3C92BCA GOTO 3CA2BCB GOTO 3CB2BCC GOTO 3CC2BCD GOTO 3CD2BCE GOTO 3CE2BCF GOTO 3CF2BD0 GOTO 3D02BD1 GOTO 3D12BD2 GOTO 3D22BD3 GOTO 3D32BD4 GOTO 3D42BD5 GOTO 3D52BD6 GOTO 3D62BD7 GOTO 3D72BD8 GOTO 3D82BD9 GOTO 3D92BDA GOTO 3DA2BDB GOTO 3DB2BDC GOTO 3DC2BDD GOTO 3DD2BDE GOTO 3DE2BDF GOTO 3DF2BE0 GOTO 3E0

2BE1 GOTO 3E12BE2 GOTO 3E22BE3 GOTO 3E32BE4 GOTO 3E42BE5 GOTO 3E52BE6 GOTO 3E62BE7 GOTO 3E72BE8 GOTO 3E82BE9 GOTO 3E92BEA GOTO 3EA2BEB GOTO 3EB2BEC GOTO 3EC2BED GOTO 3ED2BEE GOTO 3EE2BEF GOTO 3EF2BF0 GOTO 3F02BF1 GOTO 3F12BF2 GOTO 3F22BF3 GOTO 3F32BF4 GOTO 3F42BF5 GOTO 3F52BF6 GOTO 3F62BF7 GOTO 3F72BF8 GOTO 3F82BF9 GOTO 3F92BFA GOTO 3FA2BFB GOTO 3FB2BFC GOTO 3FC2BFD GOTO 3FD2BFE GOTO 3FE2BFF GOTO 3FF3000 MOVLW 003001 MOVLW 013002 MOVLW 023003 MOVLW 033004 MOVLW 04

Page 365: le PIC_16F84 livre

365

3005 MOVLW 053006 MOVLW 063007 MOVLW 073008 MOVLW 083009 MOVLW 09300A MOVLW 0A300B MOVLW 0B300C MOVLW 0C300D MOVLW 0D300E MOVLW 0E300F MOVLW 0F3010 MOVLW 103011 MOVLW 113012 MOVLW 123013 MOVLW 133014 MOVLW 143015 MOVLW 153016 MOVLW 163017 MOVLW 173018 MOVLW 183019 MOVLW 19301A MOVLW 1A301B MOVLW 1B301C MOVLW 1C301D MOVLW 1D301E MOVLW 1E301F MOVLW 1F3020 MOVLW 203021 MOVLW 213022 MOVLW 223023 MOVLW 233024 MOVLW 243025 MOVLW 253026 MOVLW 263027 MOVLW 273028 MOVLW 28

3029 MOVLW 29302A MOVLW 2A302B MOVLW 2B302C MOVLW 2C302D MOVLW 2D302E MOVLW 2E302F MOVLW 2F3030 MOVLW 303031 MOVLW 313032 MOVLW 323033 MOVLW 333034 MOVLW 343035 MOVLW 353036 MOVLW 363037 MOVLW 373038 MOVLW 383039 MOVLW 39303A MOVLW 3A303B MOVLW 3B303C MOVLW 3C303D MOVLW 3D303E MOVLW 3E303F MOVLW 3F3040 MOVLW 403041 MOVLW 413042 MOVLW 423043 MOVLW 433044 MOVLW 443045 MOVLW 453046 MOVLW 463047 MOVLW 473048 MOVLW 483049 MOVLW 49304A MOVLW 4A304B MOVLW 4B304C MOVLW 4C

Page 366: le PIC_16F84 livre

366

304D MOVLW 4D304E MOVLW 4E304F MOVLW 4F3050 MOVLW 503051 MOVLW 513052 MOVLW 523053 MOVLW 533054 MOVLW 543055 MOVLW 553056 MOVLW 563057 MOVLW 573058 MOVLW 583059 MOVLW 59305A MOVLW 5A305B MOVLW 5B305C MOVLW 5C305D MOVLW 5D305E MOVLW 5E305F MOVLW 5F3060 MOVLW 603061 MOVLW 613062 MOVLW 623063 MOVLW 633064 MOVLW 643065 MOVLW 653066 MOVLW 663067 MOVLW 673068 MOVLW 683069 MOVLW 69306A MOVLW 6A306B MOVLW 6B306C MOVLW 6C306D MOVLW 6D306E MOVLW 6E306F MOVLW 6F3070 MOVLW 70

3071 MOVLW 713072 MOVLW 723073 MOVLW 733074 MOVLW 743075 MOVLW 753076 MOVLW 763077 MOVLW 773078 MOVLW 783079 MOVLW 79307A MOVLW 7A307B MOVLW 7B307C MOVLW 7C307D MOVLW 7D307E MOVLW 7E307F MOVLW 7F3080 MOVLW 803081 MOVLW 813082 MOVLW 823083 MOVLW 833084 MOVLW 843085 MOVLW 853086 MOVLW 863087 MOVLW 873088 MOVLW 883089 MOVLW 89308A MOVLW 8A308B MOVLW 8B308C MOVLW 8C308D MOVLW 8D308E MOVLW 8E308F MOVLW 8F3090 MOVLW 903091 MOVLW 913092 MOVLW 923093 MOVLW 933094 MOVLW 94

Page 367: le PIC_16F84 livre

367

3095 MOVLW 953096 MOVLW 963097 MOVLW 973098 MOVLW 983099 MOVLW 99309A MOVLW 9A309B MOVLW 9B309C MOVLW 9C309D MOVLW 9D309E MOVLW 9E309F MOVLW 9F30A0 MOVLW A030A1 MOVLW A130A2 MOVLW A230A3 MOVLW A330A4 MOVLW A430A5 MOVLW A530A6 MOVLW A630A7 MOVLW A730A8 MOVLW A830A9 MOVLW A930AA MOVLW AA30AB MOVLW AB30AC MOVLW AC30AD MOVLW AD30AE MOVLW AE30AF MOVLW AF30B0 MOVLW B030B1 MOVLW B130B2 MOVLW B230B3 MOVLW B330B4 MOVLW B430B5 MOVLW B530B6 MOVLW B630B7 MOVLW B730B8 MOVLW B8

30B9 MOVLW B930BA MOVLW BA30BB MOVLW BB30BC MOVLW BC30BD MOVLW BD30BE MOVLW BE30BF MOVLW BF30C0 MOVLW C030C1 MOVLW C130C2 MOVLW C230C3 MOVLW C330C4 MOVLW C430C5 MOVLW C530C6 MOVLW C630C7 MOVLW C730C8 MOVLW C830C9 MOVLW C930CA MOVLW CA30CB MOVLW CB30CC MOVLW CC30CD MOVLW CD30CE MOVLW CE30CF MOVLW CF30D0 MOVLW D030D1 MOVLW D130D2 MOVLW D230D3 MOVLW D330D4 MOVLW D430D5 MOVLW D530D6 MOVLW D630D7 MOVLW D730D8 MOVLW D830D9 MOVLW D930DA MOVLW DA30DB MOVLW DB30DC MOVLW DC

Page 368: le PIC_16F84 livre

368

30DD MOVLW DD30DE MOVLW DE30DF MOVLW DF30E0 MOVLW E030E1 MOVLW E130E2 MOVLW E230E3 MOVLW E330E4 MOVLW E430E5 MOVLW E530E6 MOVLW E630E7 MOVLW E730E8 MOVLW E830E9 MOVLW E930EA MOVLW EA30EB MOVLW EB30EC MOVLW EC30ED MOVLW ED30EE MOVLW EE30EF MOVLW EF30F0 MOVLW F030F1 MOVLW F130F2 MOVLW F230F3 MOVLW F330F4 MOVLW F430F5 MOVLW F530F6 MOVLW F630F7 MOVLW F730F8 MOVLW F830F9 MOVLW F930FA MOVLW FA30FB MOVLW FB30FC MOVLW FC30FD MOVLW FD30FE MOVLW FE30FF MOVLW FF3400 RETLW 00

3401 RETLW 013402 RETLW 023403 RETLW 033404 RETLW 043405 RETLW 053406 RETLW 063407 RETLW 073408 RETLW 083409 RETLW 09340A RETLW 0A340B RETLW 0B340C RETLW 0C340D RETLW 0D340E RETLW 0E340F RETLW 0F3410 RETLW 103411 RETLW 113412 RETLW 123413 RETLW 133414 RETLW 143415 RETLW 153416 RETLW 163417 RETLW 173418 RETLW 183419 RETLW 19341A RETLW 1A341B RETLW 1B341C RETLW 1C341D RETLW 1D341E RETLW 1E341F RETLW 1F3420 RETLW 203421 RETLW 213422 RETLW 223423 RETLW 233424 RETLW 24

Page 369: le PIC_16F84 livre

369

3425 RETLW 253426 RETLW 263427 RETLW 273428 RETLW 283429 RETLW 29342A RETLW 2A342B RETLW 2B342C RETLW 2C342D RETLW 2D342E RETLW 2E342F RETLW 2F3430 RETLW 303431 RETLW 313432 RETLW 323433 RETLW 333434 RETLW 343435 RETLW 353436 RETLW 363437 RETLW 373438 RETLW 383439 RETLW 39343A RETLW 3A343B RETLW 3B343C RETLW 3C343D RETLW 3D343E RETLW 3E343F RETLW 3F3440 RETLW 403441 RETLW 413442 RETLW 423443 RETLW 433444 RETLW 443445 RETLW 453446 RETLW 463447 RETLW 473448 RETLW 48

3449 RETLW 49344A RETLW 4A344B RETLW 4B344C RETLW 4C344D RETLW 4D344E RETLW 4E344F RETLW 4F3450 RETLW 503451 RETLW 513452 RETLW 523453 RETLW 533454 RETLW 543455 RETLW 553456 RETLW 563457 RETLW 573458 RETLW 583459 RETLW 59345A RETLW 5A345B RETLW 5B345C RETLW 5C345D RETLW 5D345E RETLW 5E345F RETLW 5F3460 RETLW 603461 RETLW 613462 RETLW 623463 RETLW 633464 RETLW 643465 RETLW 653466 RETLW 663467 RETLW 673468 RETLW 683469 RETLW 69346A RETLW 6A346B RETLW 6B346C RETLW 6C

Page 370: le PIC_16F84 livre

370

346D RETLW 6D346E RETLW 6E346F RETLW 6F3470 RETLW 703471 RETLW 713472 RETLW 723473 RETLW 733474 RETLW 743475 RETLW 753476 RETLW 763477 RETLW 773478 RETLW 783479 RETLW 79347A RETLW 7A347B RETLW 7B347C RETLW 7C347D RETLW 7D347E RETLW 7E347F RETLW 7F3480 RETLW 803481 RETLW 813482 RETLW 823483 RETLW 833484 RETLW 843485 RETLW 853486 RETLW 863487 RETLW 873488 RETLW 883489 RETLW 89348A RETLW 8A348B RETLW 8B348C RETLW 8C348D RETLW 8D348E RETLW 8E348F RETLW 8F3490 RETLW 90

3491 RETLW 913492 RETLW 923493 RETLW 933494 RETLW 943495 RETLW 953496 RETLW 963497 RETLW 973498 RETLW 983499 RETLW 99349A RETLW 9A349B RETLW 9B349C RETLW 9C349D RETLW 9D349E RETLW 9E349F RETLW 9F34A0 RETLW A034A1 RETLW A134A2 RETLW A234A3 RETLW A334A4 RETLW A434A5 RETLW A534A6 RETLW A634A7 RETLW A734A8 RETLW A834A9 RETLW A934AA RETLW AA34AB RETLW AB34AC RETLW AC34AD RETLW AD34AE RETLW AE34AF RETLW AF34B0 RETLW B034B1 RETLW B134B2 RETLW B234B3 RETLW B334B4 RETLW B4

Page 371: le PIC_16F84 livre

371

34B5 RETLW B534B6 RETLW B634B7 RETLW B734B8 RETLW B834B9 RETLW B934BA RETLW BA34BB RETLW BB34BC RETLW BC34BD RETLW BD34BE RETLW BE34BF RETLW BF34C0 RETLW C034C1 RETLW C134C2 RETLW C234C3 RETLW C334C4 RETLW C434C5 RETLW C534C6 RETLW C634C7 RETLW C734C8 RETLW C834C9 RETLW C934CA RETLW CA34CB RETLW CB34CC RETLW CC34CD RETLW CD34CE RETLW CE34CF RETLW CF34D0 RETLW D034D1 RETLW D134D2 RETLW D234D3 RETLW D334D4 RETLW D434D5 RETLW D534D6 RETLW D634D7 RETLW D734D8 RETLW D8

34D9 RETLW D934DA RETLW DA34DB RETLW DB34DC RETLW DC34DD RETLW DD34DE RETLW DE34DF RETLW DF34E0 RETLW E034E1 RETLW E134E2 RETLW E234E3 RETLW E334E4 RETLW E434E5 RETLW E534E6 RETLW E634E7 RETLW E734E8 RETLW E834E9 RETLW E934EA RETLW EA34EB RETLW EB34EC RETLW EC34ED RETLW ED34EE RETLW EE34EF RETLW EF34F0 RETLW F034F1 RETLW F134F2 RETLW F234F3 RETLW F334F4 RETLW F434F5 RETLW F534F6 RETLW F634F7 RETLW F734F8 RETLW F834F9 RETLW F934FA RETLW FA34FB RETLW FB34FC RETLW FC

Page 372: le PIC_16F84 livre

372

34FD RETLW FD34FE RETLW FE34FF RETLW FF3800 IORLW 003801 IORLW 013802 IORLW 023803 IORLW 033804 IORLW 043805 IORLW 053806 IORLW 063807 IORLW 073808 IORLW 083809 IORLW 09380A IORLW 0A380B IORLW 0B380C IORLW 0C380D IORLW 0D380E IORLW 0E380F IORLW 0F3810 IORLW 103811 IORLW 113812 IORLW 123813 IORLW 133814 IORLW 143815 IORLW 153816 IORLW 163817 IORLW 173818 IORLW 183819 IORLW 19381A IORLW 1A381B IORLW 1B381C IORLW 1C381D IORLW 1D381E IORLW 1E381F IORLW 1F3820 IORLW 20

3821 IORLW 213822 IORLW 223823 IORLW 233824 IORLW 243825 IORLW 253826 IORLW 263827 IORLW 273828 IORLW 283829 IORLW 29382A IORLW 2A382B IORLW 2B382C IORLW 2C382D IORLW 2D382E IORLW 2E382F IORLW 2F3830 IORLW 303831 IORLW 313832 IORLW 323833 IORLW 333834 IORLW 343835 IORLW 353836 IORLW 363837 IORLW 373838 IORLW 383839 IORLW 39383A IORLW 3A383B IORLW 3B383C IORLW 3C383D IORLW 3D383E IORLW 3E383F IORLW 3F3840 IORLW 403841 IORLW 413842 IORLW 423843 IORLW 433844 IORLW 44

Page 373: le PIC_16F84 livre

373

3845 IORLW 453846 IORLW 463847 IORLW 473848 IORLW 483849 IORLW 49384A IORLW 4A384B IORLW 4B384C IORLW 4C384D IORLW 4D384E IORLW 4E384F IORLW 4F3850 IORLW 503851 IORLW 513852 IORLW 523853 IORLW 533854 IORLW 543855 IORLW 553856 IORLW 563857 IORLW 573858 IORLW 583859 IORLW 59385A IORLW 5A385B IORLW 5B385C IORLW 5C385D IORLW 5D385E IORLW 5E385F IORLW 5F3860 IORLW 603861 IORLW 613862 IORLW 623863 IORLW 633864 IORLW 643865 IORLW 653866 IORLW 663867 IORLW 673868 IORLW 68

3869 IORLW 69386A IORLW 6A386B IORLW 6B386C IORLW 6C386D IORLW 6D386E IORLW 6E386F IORLW 6F3870 IORLW 703871 IORLW 713872 IORLW 723873 IORLW 733874 IORLW 743875 IORLW 753876 IORLW 763877 IORLW 773878 IORLW 783879 IORLW 79387A IORLW 7A387B IORLW 7B387C IORLW 7C387D IORLW 7D387E IORLW 7E387F IORLW 7F3880 IORLW 803881 IORLW 813882 IORLW 823883 IORLW 833884 IORLW 843885 IORLW 853886 IORLW 863887 IORLW 873888 IORLW 883889 IORLW 89388A IORLW 8A388B IORLW 8B388C IORLW 8C

Page 374: le PIC_16F84 livre

374

388D IORLW 8D388E IORLW 8E388F IORLW 8F3890 IORLW 903891 IORLW 913892 IORLW 923893 IORLW 933894 IORLW 943895 IORLW 953896 IORLW 963897 IORLW 973898 IORLW 983899 IORLW 99389A IORLW 9A389B IORLW 9B389C IORLW 9C389D IORLW 9D389E IORLW 9E389F IORLW 9F38A0 IORLW A038A1 IORLW A138A2 IORLW A238A3 IORLW A338A4 IORLW A438A5 IORLW A538A6 IORLW A638A7 IORLW A738A8 IORLW A838A9 IORLW A938AA IORLW AA38AB IORLW AB38AC IORLW AC38AD IORLW AD38AE IORLW AE38AF IORLW AF38B0 IORLW B0

38B1 IORLW B138B2 IORLW B238B3 IORLW B338B4 IORLW B438B5 IORLW B538B6 IORLW B638B7 IORLW B738B8 IORLW B838B9 IORLW B938BA IORLW BA38BB IORLW BB38BC IORLW BC38BD IORLW BD38BE IORLW BE38BF IORLW BF38C0 IORLW C038C1 IORLW C138C2 IORLW C238C3 IORLW C338C4 IORLW C438C5 IORLW C538C6 IORLW C638C7 IORLW C738C8 IORLW C838C9 IORLW C938CA IORLW CA38CB IORLW CB38CC IORLW CC38CD IORLW CD38CE IORLW CE38CF IORLW CF38D0 IORLW D038D1 IORLW D138D2 IORLW D238D3 IORLW D338D4 IORLW D4

Page 375: le PIC_16F84 livre

375

38D5 IORLW D538D6 IORLW D638D7 IORLW D738D8 IORLW D838D9 IORLW D938DA IORLW DA38DB IORLW DB38DC IORLW DC38DD IORLW DD38DE IORLW DE38DF IORLW DF38E0 IORLW E038E1 IORLW E138E2 IORLW E238E3 IORLW E338E4 IORLW E438E5 IORLW E538E6 IORLW E638E7 IORLW E738E8 IORLW E838E9 IORLW E938EA IORLW EA38EB IORLW EB38EC IORLW EC38ED IORLW ED38EE IORLW EE38EF IORLW EF38F0 IORLW F038F1 IORLW F138F2 IORLW F238F3 IORLW F338F4 IORLW F438F5 IORLW F538F6 IORLW F638F7 IORLW F738F8 IORLW F8

38F9 IORLW F938FA IORLW FA38FB IORLW FB38FC IORLW FC38FD IORLW FD38FE IORLW FE38FF IORLW FF3900 ANDLW 003901 ANDLW 013902 ANDLW 023903 ANDLW 033904 ANDLW 043905 ANDLW 053906 ANDLW 063907 ANDLW 073908 ANDLW 083909 ANDLW 09390A ANDLW 0A390B ANDLW 0B390C ANDLW 0C390D ANDLW 0D390E ANDLW 0E390F ANDLW 0F3910 ANDLW 103911 ANDLW 113912 ANDLW 123913 ANDLW 133914 ANDLW 143915 ANDLW 153916 ANDLW 163917 ANDLW 173918 ANDLW 183919 ANDLW 19391A ANDLW 1A391B ANDLW 1B391C ANDLW 1C

Page 376: le PIC_16F84 livre

376

391D ANDLW 1D391E ANDLW 1E391F ANDLW 1F3920 ANDLW 203921 ANDLW 213922 ANDLW 223923 ANDLW 233924 ANDLW 243925 ANDLW 253926 ANDLW 263927 ANDLW 273928 ANDLW 283929 ANDLW 29392A ANDLW 2A392B ANDLW 2B392C ANDLW 2C392D ANDLW 2D392E ANDLW 2E392F ANDLW 2F3930 ANDLW 303931 ANDLW 313932 ANDLW 323933 ANDLW 333934 ANDLW 343935 ANDLW 353936 ANDLW 363937 ANDLW 373938 ANDLW 383939 ANDLW 39393A ANDLW 3A393B ANDLW 3B393C ANDLW 3C393D ANDLW 3D393E ANDLW 3E393F ANDLW 3F3940 ANDLW 40

3941 ANDLW 413942 ANDLW 423943 ANDLW 433944 ANDLW 443945 ANDLW 453946 ANDLW 463947 ANDLW 473948 ANDLW 483949 ANDLW 49394A ANDLW 4A394B ANDLW 4B394C ANDLW 4C394D ANDLW 4D394E ANDLW 4E394F ANDLW 4F3950 ANDLW 503951 ANDLW 513952 ANDLW 523953 ANDLW 533954 ANDLW 543955 ANDLW 553956 ANDLW 563957 ANDLW 573958 ANDLW 583959 ANDLW 59395A ANDLW 5A395B ANDLW 5B395C ANDLW 5C395D ANDLW 5D395E ANDLW 5E395F ANDLW 5F3960 ANDLW 603961 ANDLW 613962 ANDLW 623963 ANDLW 633964 ANDLW 64

Page 377: le PIC_16F84 livre

377

3965 ANDLW 653966 ANDLW 663967 ANDLW 673968 ANDLW 683969 ANDLW 69396A ANDLW 6A396B ANDLW 6B396C ANDLW 6C396D ANDLW 6D396E ANDLW 6E396F ANDLW 6F3970 ANDLW 703971 ANDLW 713972 ANDLW 723973 ANDLW 733974 ANDLW 743975 ANDLW 753976 ANDLW 763977 ANDLW 773978 ANDLW 783979 ANDLW 79397A ANDLW 7A397B ANDLW 7B397C ANDLW 7C397D ANDLW 7D397E ANDLW 7E397F ANDLW 7F3980 ANDLW 803981 ANDLW 813982 ANDLW 823983 ANDLW 833984 ANDLW 843985 ANDLW 853986 ANDLW 863987 ANDLW 873988 ANDLW 88

3989 ANDLW 89398A ANDLW 8A398B ANDLW 8B398C ANDLW 8C398D ANDLW 8D398E ANDLW 8E398F ANDLW 8F3990 ANDLW 903991 ANDLW 913992 ANDLW 923993 ANDLW 933994 ANDLW 943995 ANDLW 953996 ANDLW 963997 ANDLW 973998 ANDLW 983999 ANDLW 99399A ANDLW 9A399B ANDLW 9B399C ANDLW 9C399D ANDLW 9D399E ANDLW 9E399F ANDLW 9F39A0 ANDLW A039A1 ANDLW A139A2 ANDLW A239A3 ANDLW A339A4 ANDLW A439A5 ANDLW A539A6 ANDLW A639A7 ANDLW A739A8 ANDLW A839A9 ANDLW A939AA ANDLW AA39AB ANDLW AB39AC ANDLW AC

Page 378: le PIC_16F84 livre

378

39AD ANDLW AD39AE ANDLW AE39AF ANDLW AF39B0 ANDLW B039B1 ANDLW B139B2 ANDLW B239B3 ANDLW B339B4 ANDLW B439B5 ANDLW B539B6 ANDLW B639B7 ANDLW B739B8 ANDLW B839B9 ANDLW B939BA ANDLW BA39BB ANDLW BB39BC ANDLW BC39BD ANDLW BD39BE ANDLW BE39BF ANDLW BF39C0 ANDLW C039C1 ANDLW C139C2 ANDLW C239C3 ANDLW C339C4 ANDLW C439C5 ANDLW C539C6 ANDLW C639C7 ANDLW C739C8 ANDLW C839C9 ANDLW C939CA ANDLW CA39CB ANDLW CB39CC ANDLW CC39CD ANDLW CD39CE ANDLW CE39CF ANDLW CF39D0 ANDLW D0

39D1 ANDLW D139D2 ANDLW D239D3 ANDLW D339D4 ANDLW D439D5 ANDLW D539D6 ANDLW D639D7 ANDLW D739D8 ANDLW D839D9 ANDLW D939DA ANDLW DA39DB ANDLW DB39DC ANDLW DC39DD ANDLW DD39DE ANDLW DE39DF ANDLW DF39E0 ANDLW E039E1 ANDLW E139E2 ANDLW E239E3 ANDLW E339E4 ANDLW E439E5 ANDLW E539E6 ANDLW E639E7 ANDLW E739E8 ANDLW E839E9 ANDLW E939EA ANDLW EA39EB ANDLW EB39EC ANDLW EC39ED ANDLW ED39EE ANDLW EE39EF ANDLW EF39F0 ANDLW F039F1 ANDLW F139F2 ANDLW F239F3 ANDLW F339F4 ANDLW F4

Page 379: le PIC_16F84 livre

379

39F5 ANDLW F539F6 ANDLW F639F7 ANDLW F739F8 ANDLW F839F9 ANDLW F939FA ANDLW FA39FB ANDLW FB39FC ANDLW FC39FD ANDLW FD39FE ANDLW FE39FF ANDLW FF3A00 XORLW 003A01 XORLW 013A02 XORLW 023A03 XORLW 033A04 XORLW 043A05 XORLW 053A06 XORLW 063A07 XORLW 073A08 XORLW 083A09 XORLW 093A0A XORLW 0A3A0B XORLW 0B3A0C XORLW 0C3A0D XORLW 0D3A0E XORLW 0E3A0F XORLW 0F3A10 XORLW 103A11 XORLW 113A12 XORLW 123A13 XORLW 133A14 XORLW 143A15 XORLW 153A16 XORLW 163A17 XORLW 173A18 XORLW 18

3A19 XORLW 193A1A XORLW 1A3A1B XORLW 1B3A1C XORLW 1C3A1D XORLW 1D3A1E XORLW 1E3A1F XORLW 1F3A20 XORLW 203A21 XORLW 213A22 XORLW 223A23 XORLW 233A24 XORLW 243A25 XORLW 253A26 XORLW 263A27 XORLW 273A28 XORLW 283A29 XORLW 293A2A XORLW 2A3A2B XORLW 2B3A2C XORLW 2C3A2D XORLW 2D3A2E XORLW 2E3A2F XORLW 2F3A30 XORLW 303A31 XORLW 313A32 XORLW 323A33 XORLW 333A34 XORLW 343A35 XORLW 353A36 XORLW 363A37 XORLW 373A38 XORLW 383A39 XORLW 393A3A XORLW 3A3A3B XORLW 3B3A3C XORLW 3C

Page 380: le PIC_16F84 livre

380

3A3D XORLW 3D3A3E XORLW 3E3A3F XORLW 3F3A40 XORLW 403A41 XORLW 413A42 XORLW 423A43 XORLW 433A44 XORLW 443A45 XORLW 453A46 XORLW 463A47 XORLW 473A48 XORLW 483A49 XORLW 493A4A XORLW 4A3A4B XORLW 4B3A4C XORLW 4C3A4D XORLW 4D3A4E XORLW 4E3A4F XORLW 4F3A50 XORLW 503A51 XORLW 513A52 XORLW 523A53 XORLW 533A54 XORLW 543A55 XORLW 553A56 XORLW 563A57 XORLW 573A58 XORLW 583A59 XORLW 593A5A XORLW 5A3A5B XORLW 5B3A5C XORLW 5C3A5D XORLW 5D3A5E XORLW 5E3A5F XORLW 5F3A60 XORLW 60

3A61 XORLW 613A62 XORLW 623A63 XORLW 633A64 XORLW 643A65 XORLW 653A66 XORLW 663A67 XORLW 673A68 XORLW 683A69 XORLW 693A6A XORLW 6A3A6B XORLW 6B3A6C XORLW 6C3A6D XORLW 6D3A6E XORLW 6E3A6F XORLW 6F3A70 XORLW 703A71 XORLW 713A72 XORLW 723A73 XORLW 733A74 XORLW 743A75 XORLW 753A76 XORLW 763A77 XORLW 773A78 XORLW 783A79 XORLW 793A7A XORLW 7A3A7B XORLW 7B3A7C XORLW 7C3A7D XORLW 7D3A7E XORLW 7E3A7F XORLW 7F3A80 XORLW 803A81 XORLW 813A82 XORLW 823A83 XORLW 833A84 XORLW 84

Page 381: le PIC_16F84 livre

381

3A85 XORLW 853A86 XORLW 863A87 XORLW 873A88 XORLW 883A89 XORLW 893A8A XORLW 8A3A8B XORLW 8B3A8C XORLW 8C3A8D XORLW 8D3A8E XORLW 8E3A8F XORLW 8F3A90 XORLW 903A91 XORLW 913A92 XORLW 923A93 XORLW 933A94 XORLW 943A95 XORLW 953A96 XORLW 963A97 XORLW 973A98 XORLW 983A99 XORLW 993A9A XORLW 9A3A9B XORLW 9B3A9C XORLW 9C3A9D XORLW 9D3A9E XORLW 9E3A9F XORLW 9F3AA0 XORLW A03AA1 XORLW A13AA2 XORLW A23AA3 XORLW A33AA4 XORLW A43AA5 XORLW A53AA6 XORLW A63AA7 XORLW A73AA8 XORLW A8

3AA9 XORLW A93AAA XORLW AA3AAB XORLW AB3AAC XORLW AC3AAD XORLW AD3AAE XORLW AE3AAF XORLW AF3AB0 XORLW B03AB1 XORLW B13AB2 XORLW B23AB3 XORLW B33AB4 XORLW B43AB5 XORLW B53AB6 XORLW B63AB7 XORLW B73AB8 XORLW B83AB9 XORLW B93ABA XORLW BA3ABB XORLW BB3ABC XORLW BC3ABD XORLW BD3ABE XORLW BE3ABF XORLW BF3AC0 XORLW C03AC1 XORLW C13AC2 XORLW C23AC3 XORLW C33AC4 XORLW C43AC5 XORLW C53AC6 XORLW C63AC7 XORLW C73AC8 XORLW C83AC9 XORLW C93ACA XORLW CA3ACB XORLW CB3ACC XORLW CC

Page 382: le PIC_16F84 livre

382

3ACD XORLW CD3ACE XORLW CE3ACF XORLW CF3AD0 XORLW D03AD1 XORLW D13AD2 XORLW D23AD3 XORLW D33AD4 XORLW D43AD5 XORLW D53AD6 XORLW D63AD7 XORLW D73AD8 XORLW D83AD9 XORLW D93ADA XORLW DA3ADB XORLW DB3ADC XORLW DC3ADD XORLW DD3ADE XORLW DE3ADF XORLW DF3AE0 XORLW E03AE1 XORLW E13AE2 XORLW E23AE3 XORLW E33AE4 XORLW E43AE5 XORLW E53AE6 XORLW E63AE7 XORLW E73AE8 XORLW E83AE9 XORLW E93AEA XORLW EA3AEB XORLW EB3AEC XORLW EC3AED XORLW ED3AEE XORLW EE3AEF XORLW EF3AF0 XORLW F0

3AF1 XORLW F13AF2 XORLW F23AF3 XORLW F33AF4 XORLW F43AF5 XORLW F53AF6 XORLW F63AF7 XORLW F73AF8 XORLW F83AF9 XORLW F93AFA XORLW FA3AFB XORLW FB3AFC XORLW FC3AFD XORLW FD3AFE XORLW FE3AFF XORLW FF3C00 SUBLW 003C01 SUBLW 013C02 SUBLW 023C03 SUBLW 033C04 SUBLW 043C05 SUBLW 053C06 SUBLW 063C07 SUBLW 073C08 SUBLW 083C09 SUBLW 093C0A SUBLW 0A3C0B SUBLW 0B3C0C SUBLW 0C3C0D SUBLW 0D3C0E SUBLW 0E3C0F SUBLW 0F3C10 SUBLW 103C11 SUBLW 113C12 SUBLW 123C13 SUBLW 133C14 SUBLW 14

Page 383: le PIC_16F84 livre

383

3C15 SUBLW 153C16 SUBLW 163C17 SUBLW 173C18 SUBLW 183C19 SUBLW 193C1A SUBLW 1A3C1B SUBLW 1B3C1C SUBLW 1C3C1D SUBLW 1D3C1E SUBLW 1E3C1F SUBLW 1F3C20 SUBLW 203C21 SUBLW 213C22 SUBLW 223C23 SUBLW 233C24 SUBLW 243C25 SUBLW 253C26 SUBLW 263C27 SUBLW 273C28 SUBLW 283C29 SUBLW 293C2A SUBLW 2A3C2B SUBLW 2B3C2C SUBLW 2C3C2D SUBLW 2D3C2E SUBLW 2E3C2F SUBLW 2F3C30 SUBLW 303C31 SUBLW 313C32 SUBLW 323C33 SUBLW 333C34 SUBLW 343C35 SUBLW 353C36 SUBLW 363C37 SUBLW 373C38 SUBLW 38

3C39 SUBLW 393C3A SUBLW 3A3C3B SUBLW 3B3C3C SUBLW 3C3C3D SUBLW 3D3C3E SUBLW 3E3C3F SUBLW 3F3C40 SUBLW 403C41 SUBLW 413C42 SUBLW 423C43 SUBLW 433C44 SUBLW 443C45 SUBLW 453C46 SUBLW 463C47 SUBLW 473C48 SUBLW 483C49 SUBLW 493C4A SUBLW 4A3C4B SUBLW 4B3C4C SUBLW 4C3C4D SUBLW 4D3C4E SUBLW 4E3C4F SUBLW 4F3C50 SUBLW 503C51 SUBLW 513C52 SUBLW 523C53 SUBLW 533C54 SUBLW 543C55 SUBLW 553C56 SUBLW 563C57 SUBLW 573C58 SUBLW 583C59 SUBLW 593C5A SUBLW 5A3C5B SUBLW 5B3C5C SUBLW 5C

Page 384: le PIC_16F84 livre

384

3C5D SUBLW 5D3C5E SUBLW 5E3C5F SUBLW 5F3C60 SUBLW 603C61 SUBLW 613C62 SUBLW 623C63 SUBLW 633C64 SUBLW 643C65 SUBLW 653C66 SUBLW 663C67 SUBLW 673C68 SUBLW 683C69 SUBLW 693C6A SUBLW 6A3C6B SUBLW 6B3C6C SUBLW 6C3C6D SUBLW 6D3C6E SUBLW 6E3C6F SUBLW 6F3C70 SUBLW 703C71 SUBLW 713C72 SUBLW 723C73 SUBLW 733C74 SUBLW 743C75 SUBLW 753C76 SUBLW 763C77 SUBLW 773C78 SUBLW 783C79 SUBLW 793C7A SUBLW 7A3C7B SUBLW 7B3C7C SUBLW 7C3C7D SUBLW 7D3C7E SUBLW 7E3C7F SUBLW 7F3C80 SUBLW 80

3C81 SUBLW 813C82 SUBLW 823C83 SUBLW 833C84 SUBLW 843C85 SUBLW 853C86 SUBLW 863C87 SUBLW 873C88 SUBLW 883C89 SUBLW 893C8A SUBLW 8A3C8B SUBLW 8B3C8C SUBLW 8C3C8D SUBLW 8D3C8E SUBLW 8E3C8F SUBLW 8F3C90 SUBLW 903C91 SUBLW 913C92 SUBLW 923C93 SUBLW 933C94 SUBLW 943C95 SUBLW 953C96 SUBLW 963C97 SUBLW 973C98 SUBLW 983C99 SUBLW 993C9A SUBLW 9A3C9B SUBLW 9B3C9C SUBLW 9C3C9D SUBLW 9D3C9E SUBLW 9E3C9F SUBLW 9F3CA0 SUBLW A03CA1 SUBLW A13CA2 SUBLW A23CA3 SUBLW A33CA4 SUBLW A4

Page 385: le PIC_16F84 livre

385

3CA5 SUBLW A53CA6 SUBLW A63CA7 SUBLW A73CA8 SUBLW A83CA9 SUBLW A93CAA SUBLW AA3CAB SUBLW AB3CAC SUBLW AC3CAD SUBLW AD3CAE SUBLW AE3CAF SUBLW AF3CA0 SUBLW B03CB1 SUBLW B13CB2 SUBLW B23CB3 SUBLW B33CB4 SUBLW B43CB5 SUBLW B53CB6 SUBLW B63CB7 SUBLW B73CB8 SUBLW B83CB9 SUBLW B93CBA SUBLW BA3CBB SUBLW BB3CBC SUBLW BC3CBD SUBLW BD3CBE SUBLW BE3CBF SUBLW BF3CC0 SUBLW C03CC1 SUBLW C13CC2 SUBLW C23CC3 SUBLW C33CC4 SUBLW C43CC5 SUBLW C53CC6 SUBLW C63CC7 SUBLW C73CC8 SUBLW C8

3CC9 SUBLW C93CCA SUBLW CA3CCB SUBLW CB3CCC SUBLW CC3CCD SUBLW CD3CCE SUBLW CE3CCF SUBLW CF3CD0 SUBLW D03CD1 SUBLW D13CD2 SUBLW D23CD3 SUBLW D33CD4 SUBLW D43CD5 SUBLW D53CD6 SUBLW D63CD7 SUBLW D73CD8 SUBLW D83CD9 SUBLW D93CDA SUBLW DA3CDB SUBLW DB3CDC SUBLW DC3CDD SUBLW DD3CDE SUBLW DE3CDF SUBLW DF3CE0 SUBLW E03CE1 SUBLW E13CE2 SUBLW E23CE3 SUBLW E33CE4 SUBLW E43CE5 SUBLW E53CE6 SUBLW E63CE7 SUBLW E73CE8 SUBLW E83CE9 SUBLW E93CEA SUBLW EA3CEB SUBLW EB3CEC SUBLW EC

Page 386: le PIC_16F84 livre

386

3CED SUBLW ED3CEE SUBLW EE3CEF SUBLW EF3CF0 SUBLW F03CF1 SUBLW F13CF2 SUBLW F23CF3 SUBLW F33CF4 SUBLW F43CF5 SUBLW F53CF6 SUBLW F63CF7 SUBLW F73CF8 SUBLW F83CF9 SUBLW F93CFA SUBLW FA3CFB SUBLW FB3CFC SUBLW FC3CFD SUBLW FD3CFE SUBLW FE3CFF SUBLW FF3E00 ADDLW 003E01 ADDLW 013E02 ADDLW 023E03 ADDLW 033E04 ADDLW 043E05 ADDLW 053E06 ADDLW 063E07 ADDLW 073E08 ADDLW 083E09 ADDLW 093E0A ADDLW 0A3E0B ADDLW 0B3E0C ADDLW 0C3E0D ADDLW 0D3E0E ADDLW 0E3E0F ADDLW 0F3E10 ADDLW 10

3E11 ADDLW 113E12 ADDLW 123E13 ADDLW 133E14 ADDLW 143E15 ADDLW 153E16 ADDLW 163E17 ADDLW 173E18 ADDLW 183E19 ADDLW 193E1A ADDLW 1A3E1B ADDLW 1B3E1C ADDLW 1C3E1D ADDLW 1D3E1E ADDLW 1E3E1F ADDLW 1F3E20 ADDLW 203E21 ADDLW 213E22 ADDLW 223E23 ADDLW 233E24 ADDLW 243E25 ADDLW 253E26 ADDLW 263E27 ADDLW 273E28 ADDLW 283E29 ADDLW 293E2A ADDLW 2A3E2B ADDLW 2B3E2C ADDLW 2C3E2D ADDLW 2D3E2E ADDLW 2E3E2F ADDLW 2F3E30 ADDLW 303E31 ADDLW 313E32 ADDLW 323E33 ADDLW 333E34 ADDLW 34

Page 387: le PIC_16F84 livre

387

3E35 ADDLW 353E36 ADDLW 363E37 ADDLW 373E38 ADDLW 383E39 ADDLW 393E3A ADDLW 3A3E3B ADDLW 3B3E3C ADDLW 3C3E3D ADDLW 3D3E3E ADDLW 3E3E3F ADDLW 3F3E40 ADDLW 403E41 ADDLW 413E42 ADDLW 423E43 ADDLW 433E44 ADDLW 443E45 ADDLW 453E46 ADDLW 463E47 ADDLW 473E48 ADDLW 483E49 ADDLW 493E4A ADDLW 4A3E4B ADDLW 4B3E4C ADDLW 4C3E4D ADDLW 4D3E4E ADDLW 4E3E4F ADDLW 4F3E50 ADDLW 503E51 ADDLW 513E52 ADDLW 523E53 ADDLW 533E54 ADDLW 543E55 ADDLW 553E56 ADDLW 563E57 ADDLW 573E58 ADDLW 58

3E59 ADDLW 593E5A ADDLW 5A3E5B ADDLW 5B3E5C ADDLW 5C3E5D ADDLW 5D3E5E ADDLW 5E3E5F ADDLW 5F3E60 ADDLW 603E61 ADDLW 613E62 ADDLW 623E63 ADDLW 633E64 ADDLW 643E65 ADDLW 653E66 ADDLW 663E67 ADDLW 673E68 ADDLW 683E69 ADDLW 693E6A ADDLW 6A3E6B ADDLW 6B3E6C ADDLW 6C3E6D ADDLW 6D3E6E ADDLW 6E3E6F ADDLW 6F3E70 ADDLW 703E71 ADDLW 713E72 ADDLW 723E73 ADDLW 733E74 ADDLW 743E75 ADDLW 753E76 ADDLW 763E77 ADDLW 773E78 ADDLW 783E79 ADDLW 793E7A ADDLW 7A3E7B ADDLW 7B3E7C ADDLW 7C

Page 388: le PIC_16F84 livre

388

3E7D ADDLW 7D3E7E ADDLW 7E3E7F ADDLW 7F3E80 ADDLW 803E81 ADDLW 813E82 ADDLW 823E83 ADDLW 833E84 ADDLW 843E85 ADDLW 853E86 ADDLW 863E87 ADDLW 873E88 ADDLW 883E89 ADDLW 893E8A ADDLW 8A3E8B ADDLW 8B3E8C ADDLW 8C3E8D ADDLW 8D3E8E ADDLW 8E3E8F ADDLW 8F3E90 ADDLW 903E91 ADDLW 913E92 ADDLW 923E93 ADDLW 933E94 ADDLW 943E95 ADDLW 953E96 ADDLW 963E97 ADDLW 973E98 ADDLW 983E99 ADDLW 993E9A ADDLW 9A3E9B ADDLW 9B3E9C ADDLW 9C3E9D ADDLW 9D3E9E ADDLW 9E3E9F ADDLW 9F3EA0 ADDLW A0

3EA1 ADDLW A13EA2 ADDLW A23EA3 ADDLW A33EA4 ADDLW A43EA5 ADDLW A53EA6 ADDLW A63EA7 ADDLW A73EA8 ADDLW A83EA9 ADDLW A93EAA ADDLW AA3EAB ADDLW AB3EAC ADDLW AC3EAD ADDLW AD3EAE ADDLW AE3EAF ADDLW AF3EB0 ADDLW B03EB1 ADDLW B13EB2 ADDLW B23EB3 ADDLW B33EB4 ADDLW B43EB5 ADDLW B53EB6 ADDLW B63EB7 ADDLW B73EB8 ADDLW B83EB9 ADDLW B93EBA ADDLW BA3EBB ADDLW BB3EBC ADDLW BC3EBD ADDLW BD3EBE ADDLW BE3EBF ADDLW BF3EC0 ADDLW C03EC1 ADDLW C13EC2 ADDLW C23EC3 ADDLW C33EC4 ADDLW C4

Page 389: le PIC_16F84 livre

389

3EC5 ADDLW C53EC6 ADDLW C63EC7 ADDLW C73EC8 ADDLW C83EC9 ADDLW C93ECA ADDLW CA3ECB ADDLW CB3ECC ADDLW CC3ECD ADDLW CD3ECE ADDLW CE3ECF ADDLW CF3ED0 ADDLW D03ED1 ADDLW D13ED2 ADDLW D23ED3 ADDLW D33ED4 ADDLW D43ED5 ADDLW D53ED6 ADDLW D63ED7 ADDLW D73ED8 ADDLW D83ED9 ADDLW D93EDA ADDLW DA3EDB ADDLW DB3EDC ADDLW DC3EDD ADDLW DD3EDE ADDLW DE3EDF ADDLW DF3EE0 ADDLW E03EE1 ADDLW E13EE2 ADDLW E23EE3 ADDLW E33EE4 ADDLW E43EE5 ADDLW E53EE6 ADDLW E63EE7 ADDLW E73EE8 ADDLW E8

3EE9 ADDLW E93EEA ADDLW EA3EEB ADDLW EB3EEC ADDLW EC3EED ADDLW ED3EEE ADDLW EE3EEF ADDLW EF3EF0 ADDLW F03EF1 ADDLW F13EF2 ADDLW F23EF3 ADDLW F33EF4 ADDLW F43EF5 ADDLW F53EF6 ADDLW F63EF7 ADDLW F73EF8 ADDLW F83EF9 ADDLW F93EFA ADDLW FA3EFB ADDLW FB3EFC ADDLW FC3EFD ADDLW FD3EFE ADDLW FE3EFF ADDLW FF

Page 390: le PIC_16F84 livre

390

LEXIQUE

Page 391: le PIC_16F84 livre

391

AdressePrenez une longue rue, avec une infinité de maisons toutes pareilles.Ce qui les différencie est le numéro figurant au-dessus de chaque porte(l’adresse).

De même, dans un système à mémoires, chaque emplacement (que dans lesµC PIC on appelle registre ou ile) est rangé l’un à côté de l’autre.Ce qui les différencie est le numéro de la position qu’ils occupent dansl’espace mémoire dans lequel ils sont rangés.Ce numéro de position s’appelle adresse.

AssemblageAprès avoir écrit un programme source, il faut l’assembler.L’assemblage est une étape importante dans la phase de développementd’un programme.La tâche de l’assembleur est de traduire le programme source en langagemachine (programme objet), de construire la table des symboles utilisée parle programme, d’indiquer les éventuelles erreurs et de les compter.

Directives d’assemblageLes directives d’assemblage sont des instructions que l’on donneexclusivement à l’assembleur. Elles ne sont pas traduites en langagemachine.Les directives d’assemblage permettent entre autres :

Page 392: le PIC_16F84 livre

392

- l’affectation de symboles et d’étiquettes à des valeurs numériques (EQU...)- la gestion de la mémoire et l’implantation du programme

objet (ORG...)- la définition de constantes et de textes codés en ASCII- de définir la partie du programme à assembler et les programmes qu’il convient d’inclure dans la phase d’assemblage (INCLUDE, END...)

L’assemblage terminé, les directives d’assemblage ne jouent plus aucunrôle.

Digit CarryLe Digit Carry est l’un des flags du registre d’état.C’est l’indicateur que l’on appelle retenue auxiliaire, ou retenueintermédiaire ; c’est à dire le débordement du quartet de poids faible d’unoctet sur son quartet de poids fort.

Par exemple, soit à additionner 9 + 9 (décimal), soit :

Quartets de Quartets de poids fort poids faible

0000 1001 + 0000 1001 _________________ = 0001 0010 ↑←↓

La retenue s’est propagée. Elle met à 1 l’indicateur de retenue intermédiaire.

Page 393: le PIC_16F84 livre

393

Environnement de Développement Intégré

I. D. E. Integrated Development Environment (Environnement deDéveloppement Intégré).

On appelle Environnement de Développement Intégré l’ensembledes fenêtres et palettes se trouvant immédiatement à la disposition del’utilisateur pour mener à bien une application.C’est un programme qui regroupe en une seule entité plusieurs modules,représentant l’ensemble des outils dont on a besoin, ou dont on pourraitavoir besoin au cours d’un travail.A titre d’exemple, MPLAB, dans son I. D. E. comprend :

- un Editeur- un Assembleur- un Débogueur- un Simulateur et- un Programmateur.

Include

Cette instruction inclut un fichier source dans un programme pour quecelui-ci s’y ajoute.Cela revient à copier son contenu dans un listing, sans qu’il soit nécessairede réécrire une à une toutes les instructions qui le composent.Exemple : INCLUDE « P16F84.INC »On peut inclure un ou plusieurs fichiers, en faisant chaque fois appel àl’instruction INCLUDE.INCLUDE est une instruction qui s’adresse à l’assembleur ou aucompilateur.L’effet produit par l’instruction INCLUDE est exactement le même quecelui qu’on obtiendrait si l’on écrivait – à l’endroit où celle-ci figure dans leprogramme – toutes les lignes du fichier inséré.Les instructions INCLUDE peuvent être imbriquées jusqu’à 6 niveaux.Le nom du fichier peut être écrit de deux façons :

Page 394: le PIC_16F84 livre

394

- soit précédé par le signe < et terminé par le signe >- soit précédé par le signe ″ et terminé par le signe ″

Si le fichier à inclure ne se trouve pas dans le même environnement danslequel on se trouve, un chemin d’accès doit lui être expressément indiqué.L’ordre en est le suivant : nom du répertoire, nom du dossier, nom dufichier.

InterruptionUne interruption est un événement externe, qui se produit à un instantaléatoire, sans préavis, qui demande au µC d’abandonner ce qu’il est entrain de faire, et de diriger toute son attention ailleurs.

Autrement dit, une interruption est la possibilité d’interrompre à toutmoment le déroulement du programme principal, pour permettre au µC deprendre en compte un événement dont la fréquence est aléatoire mais dontl’importance est plus grande que celle de la tâche qu’il est occupé à traiter.Dès lors, le µC termine l’exécution de l’instruction qu’il a en cours,mémorise l’adresse suivante (pour y revenir ensuite), et se branche à unsous-programme (sous-programme d’interruption) pour effectuer desopérations prioritaires.Une fois que le sous-programme d’interruption a été traité, lemicrocontrôleur revient au programme principal.

Les interruptions peuvent être masquables ou non masquables.

Si elles sont masquables, elles n’arrêtent pas forcément le µC.C’est le programmeur qui examine leur importance et qui décide.Si plusieurs interruptions peuvent surgir en même temps, c’est leprogrammeur qui leur affecte un degré de priorité, et juge sur ce que leprocesseur doit faire.

Par contre, les interruptions non masquables arrêtent le processeur sansconditions.

Page 395: le PIC_16F84 livre

395

Pile (Stack)La pile (Stack) est une zone de la mémoire RAM dans laquelle sontmémorisées les adresses de retour chaque fois qu’on fait appel à uneinstruction CALL, c’est à dire chaque fois que le programme arrêtel’exécution séquentielle des instructions et se débranche pour aller exécuterles instructions contenues dans un sous-programme.

La pile du µC 16F84 peut mémoriser jusqu’à 8 adresses.En fait, tout en disposant d’un bus interne de 13 lignes et pouvant, parconséquent, adresser jusqu'à 1 1111 1111 1111 (1FFF)la pile du 16F84 est bridée à 11 1111 1111 ( 3FF)du fait que ce modèle de microcontrôleur est limité à 1K de mémoire.

Comme la pile ne possède que 8 emplacements, il est évident qu’on peutimbriquer jusqu’à 8 appels à sous-programme, en sachant quemalheureusement il n'existe aucun flag avertissant que la pile est pleine.D’où la nécessité de la surveiller, au risque de constater de drôlesd’anomalies, car ces 8 cases mémoire sont disposées comme en anneau, detelle sorte que si l’on enregistrait un 9ème appel à sous-programme, la 9ème

valeur d’adresse prendrait la place de la première, avec toutes lesconséquences qu’on peut imaginer.

La pile est adressée par un compteur spécial appelé Pointeur de Pile.

Program Counter (EEPROM)Le Program Counter est un compteur dont la tâche est d’adresser lamémoire dans laquelle sont logées les instructions du programme.C’est l’organe qui fournit au programme les adresses de la mémoire où setrouvent les instructions à exécuter.En règle générale ces adresses sont successives, se suivent l’une aprèsl’autre sans discontinuer. Sauf lorsque dans un programme figurent lesinstructions CALL et GOTO. Dans ces cas le programme n’exécute pas

Page 396: le PIC_16F84 livre

396

l’instruction rangée juste après la précédente, mais il se branche ailleurs,aiguillé par le PC qui, lui-même, obéit alors aux ordres de CALL et GOTO.

Du fait que le 16F84 possède une mémoire de programme de 1Kinstructions, le PC (Program Counter) de ce µC utilise un bus de 10 lignesdont l’étendue va de l’adresse 000 jusqu’à l’adresse 3FF (1.024 adressesau total, dont les cinq premières réservées) :

11 1111 1111 (en binaire) 3 F F ( en hexa )

NB : Bien que cela ne concerne pas le 16F84, il est bon de savoirque le Program Counter de certains modèles de PIC est organisé en deuxbytes : l’un fournissant la partie basse de l’adresse, l’autre fournissant lapartie haute.

Alors que les adresses de la partie basse sont disponibles enpermanence, celles de la partie haute sont fournies par le registre PCLATH(Program Counter Latch).

Le vecteur de RESETA la mise sous tension, avant d’obéir à l’une quelconque des instructions duprogrammeur, le µC obéit à une instruction pré-définie par son fabricant,que personne ne peut ni supprimer ni modifier.Cette instruction est l’instruction RESET.

Elle oblige tout programme à démarrer obligatoirement à partir de l’adresse000 .

En ce sens l’instruction RESET est un vecteur : le µC s’y rend, dirigé parune force suprême (celle qu’exerce sur lui le programme résident).

Un Reset peut avoir lieu : 1) en coupant l’alimentation générale ; 2) en mettant à la masse, même fugitivement, la patte MCLR ; 3) en activant le timer du Watch Dog (chien de garde intégré).

Page 397: le PIC_16F84 livre

397

L’exécution de tout programme doit donc impérativement commencer àpartir de l’adresse 000.

En programmation, la directive qui force le programme à démarrer del’emplacement 000 est ORG.On écrit : ORG 000

Watch Dog TimerLe Watch Dog Timer (timer chien de garde) est un chrono cadencé par unoscillateur RC se trouvant à l’intérieur du µC et ne demandant aucuncomposant externe, indépendant de l’horloge qui pilote le µC .Sa caractéristique principale est que chaque fois qu’il arrive au bout ducomptage, il génère une interruption.D’où la nécessité de régulièrement le mettre à zéro avant qu’il n’atteigne lafin du comptage.Utilisé seul (sans pré-diviseur) il a une période de 18 millisecondes. S’il estprécédé par le pré-diviseur, sa période dépend du taux de division qu’on luia imposé, et peut aller jusqu’à 2,3 secondes.

Page 398: le PIC_16F84 livre

398

Sommaire

Copyright............................................................................... Page 2Dédicace............................................................................... Page 3Avant-propos........................................................................ Page 5Du contrôleur au microcontrôleur........................................ Page 7Le microcontrôleur 16F84................................................... Page 8 - Présentation générale...................................................... Page 8 - Brochage du PIC 16F84................................................. Page 9 - Le cortège des invariants................................................ Page 10 - Pilotage par quartz.......................................................... Page 11 - Pilotage par oscillateur RC........................................ Page 12Les Entrées/Sorties.............................................................. Page 13Organisation de la mémoire du PIC 16F84......................... Page 14Les registres spéciaux.......................................................... Page 23 - EEADR........................................................................... Page 24 - EECON1......................................................................... Page 25 - EECON2......................................................................... Page 26 - EEDATA........................................................................ Page 27 - FSR File Select Register)............................................... Page 28 - INTCON (INTerrupt CONtrol)...................................... Page 29 - OPTION.......................................................................... Page 33 - PCL (Program Counter Low)......................................... Page 36 - PCLATH Program Counter LATch High)..................... Page 37 - PORTA-PORTB............................................................ Page 38 - STATUS Registre d’état).............................................. Page 40 - TMR0 (Timer 0)............................................................. Page 42 - TRISA-TRISB............................................................... Page 43La Programmation............................................................... Page 44 - Différentes façons de programmer................................. Page 44Avantages et inconvénients de la programmation en langage ASSEMBLEUR................................................ Page 45Avantages et inconvénients de la programmation en langage BASIC............................................................... Page 46Les outils nécessaires pour programmer en langage ASSEMBLEUR................................................. Page 47Les outils nécessaires pour programmer en langage BASIC............................................................... Page 48Structure d’un programme................................................... Page 49Canevas d’un programme.................................................... Page 50

Page 399: le PIC_16F84 livre

399

Programmation en langage ASSEMBLEUR....................... Page 51Les instructions du 16F84.................................................... Page 52 - Classement par lettre alphabétique................................. Page 54 - Classement par genre...................................................... Page 56 - Classement par type....................................................... Page 58 - Classement par ordre croissant d’encodage.................. Page 60 - ADDLW........................................................................ Page 61 - ADDWF........................................................................ Page 62 - ANDLW........................................................................ Page 64 - ANDWF........................................................................ Page 66 - BCF............................................................................... Page 68 - BSF............................................................................... Page 70 - BTFSC............................................................................. Page 72 - BTFSS............................................................................. Page 74 - CALL.............................................................................. Page 76 - CLRF.............................................................................. Page 78 - CLRW............................................................................. Page 79 - CLRWDT....................................................................... Page 80 - COMF............................................................................ Page 81 - DECF............................................................................. Page 83 - DECFSZ........................................................................ Page 84 - GOTO............................................................................ Page 86 - INCF.............................................................................. Page 87 - INCFSZ......................................................................... Page 88 - IORLW.......................................................................... Page 90 - IORWF.......................................................................... Page 92 - MOVF........................................................ ................... Page 94 - MOVLW..................................................... .................. Page 96 - MOVWF...................................................... . ............... Page 97 - NOP.............................................................. ................ Page 98 - OPTION..................................................... .................. Page 99 - RETFIE........................................................................ Page 100 - RETLW......................................................................... Page 101 - RETURN....................................................................... Page 102 - RLF................................................................................ Page 103 - RRF............................................................................... Page 105 - SLEEP........................................................................... Page 107 - SUBLW......................................................................... Page 108 - SUBWF......................................................................... Page 109 - SWAPF.......................................................................... Page 110 - TRIS.............................................................................. Page 111

Page 400: le PIC_16F84 livre

400

- XORLW........................................................................ Page 113 - XORWF........................................................................ Page 115Encodage des instructions.................................................. Page 117 - Signification des lettres utilisées pour l’encodage des instructions............................................ Page 117Exemples de programmes écrits en langage ASSEMBLEUR............................................................ Page 118 - Programme 1................................................................ Page 118

- Organigramme.................................................. Page 118- Fichier à extension .asm................................... Page 119- Fichier à extension .hex.................................... Page 120

- Programme 2................................................................ Page 121- Organigramme.................................................. Page 121- Fichier à extension .asm................................... Page 122- Fichier à extension .hex.................................... Page 124

- Programme 3............................................................... Page 125- Organigramme.................................................. Page 125- Fichier à extension .asm................................... Page 126- Fichier à extension .hex.................................... Page 129

- Programme 4.................................................................. Page 130- Organigramme.................................................... Page 130- Fichier à extension .asm..................................... Page 131- Fichier à extension .hex...................................... Page 133

- Programme 5.................................................................. Page 134-Fichier à extension .asm...................................... Page 134

- Programme 6.................................................................. Page 137-Fichier à extension .asm...................................... Page 137

- Programme 7.................................................................. Page 140-Fichier à extension .asm...................................... Page 140

MPLAB............................................................................... Page 143 - Qu’est-ce que MPLAB.................................................. Page 143 - Comment obtenir MPLAB............................................ Page 145 - Caractéristiques requises par le PC pour l’installation de MPLAB.................................................................... Page 146 - Comment installer MPLAB.......................................... Page 147 - Comment désinstaller MPLAB..................................... Page 157 - Comment démarrer avec MPLAB................................ Page 158Première étape : création du projet..................................... Page 160 - Créer un projet.............................................................. Page 160 - Comment créer un projet.............................................. Page 161Deuxième étape : écriture du programme source............... Page 165

Page 401: le PIC_16F84 livre

401

Troisième étape : conversion du programme source en programme objet.......................................................... Page 169Quatrième étape : correction des erreurs............................ Page 176Cinquième étape : simulation du programme..................... Page 177 - Mode pas à pas.............................................................. Page 178 - Mode Step Over............................................................ Page 181 - Mode exécution automatique........................................ Page 183 - Ouverture de fenêtres.................................................... Page 184Programmation en langage BASIC................................ Page 187

- Symbol................................................................ Page 189- Les variables de type B et W.............................. Page 190- Les variables de bit............................................. Page 191- Dénomination des lignes de PORTS.................. Page 192- Configuration des bits de chaque Port................ Page 193

- Port A................................................... Page 193- Port B................................................... Page 194

- Lecture des Ports................................................ Page 195- Les Constantes................................................... Page 196- Les Labels.......................................................... Page 197- Les Commentaires............................................. Page 198

Le set d’instructions du MEL PicBASIC........................... Page 199- Classement par ordre alphabétique.................... Page 200- Classement par genre......................................... Page 201

- BRANCH............................................ Page 202- BUTTON............................................ Page 203- CALL................................................... Page 205- DEBUG............................................... Page 206- DIRS.................................................... Page 207- EEPROM............................................ Page 208- END..................................................... Page 209

- FOR...NEXT........................................ Page 210- GOSUB................................................ Page 214- GOTO.................................................. Page 216- HIGH................................................... Page 217- I2Cin.................................................... Page 218- I2Cout.................................................. Page 221- If... Then.............................................. Page 222- INPUT................................................. Page 223- LET...................................................... Page 224- LOOKdown…..................................... Page 225- LOOKup.............................................. Page 226

Page 402: le PIC_16F84 livre

402

- LOW.................................................... Page 227- NAP..................................................... Page 228- OUTPUT............................................. Page 229- PAUSE................................................ Page 230- PEEK................................................... Page 231- PINS.................................................... Page 232- POKE.................................................. Page 234- POT..................................................... Page 235- PULSin................................................ Page 237- PULSout.............................................. Page 239- PWM................................................... Page 240- RANDOM........................................... Page 244- READ.................................................. Page 245- RETURN............................................. Page 246- REVERSE............................................ Page 247- SERin................................................... Page 248- SERout................................................. Page 250- SLEEP.................................................. Page 253- SOUND................................................ Page 254- TOGLE................................................ Page 256- TRISA.................................................. Page 257- WRITE................................................. Page 258

Exemples de programmes écrits en langage PicBASIC..... Page 259 - Programme 1................................................................. Page 260 - Programme 2................................................................. Page 261 - Programme 3................................................................. Page 263 - Programme 4................................................................. Page 264 - Programme 5................................................................. Page 265 - Programme 6................................................................. Page 266 - Programme 7................................................................. Page 268 - Programme 8................................................................. Page 269 - Programme 9................................................................. Page 270 - Programme 10............................................................... Page 271 - Programme 11............................................................... Page 272 - Programme 12............................................................... Page 273 - Programme 13............................................................... Page 274 - Programme 14............................................................... Page 275 - Programme 15............................................................... Page 276 - Programme 16............................................................... Page 277 - Programme 17…........................................................... Page 278BIBLE pour désassembler à la main..............................…. Page 279

Page 403: le PIC_16F84 livre

403

Lexique............................................................................... Page 390 - Adresse......................................................................... Page 391 - Assemblage................................................................... Page 391 - Directives d’assemblage............................................... Page 391 - Digit Carry.................................................................... Page 392 - Environnement de Développement Intégré.................. Page 393 - Include.......................................................................... Page 393 - Interruption............................................................... ... Page 394 - Pile (Stack)................................................................... Page 395 - Program Counter (EEPROM)....................................... Page 395 - Le vecteur de Reset....................................................... Page 396 - Watch Dog Timer......................................................... Page 397 Sommaire.......................................................................... Page 398