You are on page 1of 60

Universit Abdelmalek Essadi Facult des Sciences Dpartement de Physique - TETOUAN

LES MICROCONTROLEURS DE LA FAMILLE PIC DE MICROCHIP


(PIC 16F84) (MASTER MECATRONIQUE)

Pr. Naima Amar Touhami Anne Universitaire : 2011/2012

Page1/60

Chapitre 0 : Introduction Gnrale


IDu microprocesseur au microcontrleur
La dcouverte du microprocesseur et la fabrication du premier circuit commence en 1970, ou la socit INTEL met au point le premier microprocesseur, le 4004. On nimagine pas lpoque que cette rvolution industrielle donnera naissance lordinateur individuel. Depuis leur puissance de calcul et lintgration des transistors les constituants nont cess dvoluer. On retrouve les microprocesseurs dans la plupart des applications, que ce soit pour piloter une centrale, lintrieur dun ordinateur ou bien encore pour remplacer le programmateur dune machine laver. Les microprocesseurs ne sont jamais employs seuls, des circuits priphriques leur sont toujours associs pour pouvoir tre intgrs au sein dune application (figure ci-dessous) un des avantages dun montage base de microprocesseur par rapport un montage en logique cble, est sa souplesse demploi, en effet nous entrons dans le domaine de la logique programmable ou le fonctionnement du montage, dpend dun programme log dans une mmoire, celui-ci peut tre modifi pour changer les quations rgissant lapplication, sans toutefois entrainer de changement au niveau du cblage des entres sorties

Page2/60

II. Les microcontroleurs


Les microprocesseurs que nous venons de voir possdent un avantage sur la logique cabl, en effet pour modifier le fonctionnement dune application il suffit de modifier le programme sans refaire de cblage. Les microcontroleurs possdent quant eux la puissance dun microprocesseur mais ils ont ont un aventage plus, en effet ils possdent dans la mme boitier, les priphriques intgrs (figure ci-dessous). Cela veut dire que le programme de lapplication est en interne et non plus dans un circuit mmoire externe et que les priphriques dentres- sorties sont galement intgrs, ce qui fait lconomie de nombreuses circuits priphriques. Cette ceractristique fait que les montages deviennent encore plus simple et la programmation plus . Un microcontroleur seul peut donc grer une application, sans faire appel forcement dautres circuits associs

Sur la figure cidessus le microcontroleur possde en interne la mmoire programme contenant le programme de lapplication ainsi que le port dentres- sorties qui va permettre au microcontroleurs de sinterfacer avec lapplication. On le voit ici, par rapport au schma base de microprocesseur prsent dans la premiere figure, on a encore franchi un degr dintgration en rassemblant tous les circuits necessaires au fonctionnement dune application dans le mme boitier.

Page3/60

Chapitre 1 : Systmes de numrotation


I. Systmes : binaire, dcimal et hexadcimal
On va commencer par un rappel sur les systmes de numrotation, puisquil est difficile de programmer srieusement un microcontrleur sans savoir ce quest un bit, ou comment convertir les notations dcimales en hexadcimales. Nous sommes habitus, depuis notre enfance utiliser le systme numrique dcimal, tel point que nous ne voyons mme plus la manire dont ce systme fonctionne, tant cest devenu un automatisme. Dcimal, pourquoi ? Parce quil utilise une numrotation 10 chiffres. Nous dirons que cest un systme en BASE 10. La position des chiffres a galement une grande importance, les chiffres les moins significatifs se situent droite du nombre, et leur importance augmente au fur et mesure du dplacement vers la gauche. En effet, dans le nombre 502, le 5 une plus grande importance que le 2. En ralit, chaque chiffre, que lon peut appeler DIGIT, une valeur qui dpend de son RANG. Quel est ce rapport ? Il sagit tout simplement de llvation de la BASE utilise lev la puissance de son RANG. Reprenons, par exemple notre nombre 502. Que signifie-t-il ? Et bien, tout simplement que sa valeur est gale 2 multipli par la base (10) leve la puissance du rang du chiffre, cest dire 0. Remarquez ici une chose trs importante : le comptage du rang seffectue toujours de droite gauche et en commenant par 0. Pour notre nombre 502, sa valeur est donc en ralit : 502 = 2*10 + 0*101 + 5*10. Cela ne pose aucun problme pour vous de compter sur vos 10 doigts, mais pour les ordinateurs, cela nest pas si simple. Ils ne savent faire la distinction quentre 2 niveaux (prsence ou absence de tension). Le systme de numrotation dcimal est donc inadapt. On comprendra immdiatement que le seul systme adapt est donc un systme en base 2, appel systme binaire. Ce systme ne comporte donc que 2 chiffres, savoir 0 et 1. Comme, de plus, les premiers ordinateurs (et les pics) travaillent avec des nombres de 8 chiffres binaires, on a donc appel ces nombres des octets (ou bytes en anglais). Le chiffre 0 ou 1 est appel un BIT (unit binaire, ou BInary uniT) .

Page4/60

Pour nous, on adoptera les conventions suivantes : tout nombre dcimal est crit tel quel, ou en utilisant la notation Dxxx ; tout nombre binaire est crit suivant la forme Bxxxxxxxx dans lesquels les x valent 0 ou 1. Analysons maintenant un nombre binaire, soit loctet : B10010101. Quelle est donc sa valeur en dcimal ? Et bien, cest trs simple, on applique le mme algorithme que pour le dcimal. Partons de la droite vers la gauche, on trouve donc : B10010101 = 1*2 + 0*21 + 1*2 + 0*23 + 1* 24 + 0*25 + 0*26 + 1*27 B 10010101 = 1+4+16+128 = 149 On procde simplement de la manire suivante (il y en a dautres) : Quel est le plus grand exposant de 2 contenu dans 149 ? Rponse 7 (27 = 128) On sait donc que le bit 7 vaudra 1. Une fois fait, il reste 149-128 = 21 Le bit 6 reprsente 64, cest plus grand que 21, donc b6 = 0 Le bit 5 reprsente 32, cest plus grand que 21, donc b5 = 0 Le bit 4 reprsente 16, donc a passe, b4 = 1, il reste 21-16 = 5 Le bit 3 reprsente 8, cest plus grand que 5, donc b3 = 0 Le bit 2 reprsente 4, donc b2 = 1, reste 5-4 = 1 Le bit1 reprsente 2, cest plus grand que 1, donc b1 = 0 Le bit 0 reprsente 1, cest ce quil reste, donc b1=1, reste 0 Le nombre binaire obtenu est donc B10010101, qui est bien notre octet de dpart. Notez que si on avait trouv un nombre de moins de 8 chiffres, on aurait complt avec des 0 placs gauche du nombre. En effet, B00011111 = B 11111, de mme que 0502 = 502. Pensez toujours complter les octets de faon obtenir 8 bits, car cest impos par la plupart des assembleurs. Notez que la plus grande valeur pouvant tre reprsente par un octet est donc : B11111111. Si vous faites la conversion, vous obtiendrez 255. Tout nombre suprieur 255 ncessite donc plus dun octet pour tre reprsent. La reprsentation de nombres binaires nest pas vidente grer, et crire une succession de 1 et de 0 reprsente une grande source derreurs. Il fallait donc trouver une solution plus pratique pour reprsenter les nombres binaires. On a donc dcid de couper chaque octet en 2 (QUARTET) et de reprsenter chaque partie par un chiffre. Comme un quartet peut varier de b0000 b1111, on constate que lon obtient une valeur comprise entre 0 et 15. Cela fait 16 combinaisons. Les 10 chiffres du systme dcimal ne suffisaient donc pas pour coder ces valeurs.

Page5/60

Plutt que dinventer 6 nouveaux symboles, il a t dcid dutiliser les 6 premires lettres de lalphabet comme CHIFFRES. Ce systme de numrotation en base 16 a donc t logiquement appel systme hexadcimal. Notez que ce systme est simplement une reprsentation plus efficace des nombres binaires, et donc que la conversion de lun lautre est instantane. Dans la suite de ces leons, nous noterons un nombre hexadcimal en le faisant prcder de 0x. Tableau de conversion des diffrents quartets (un demi-octet)

Binaire B0000 B0001 B0010 B0011 B0100 B0101 B0110 B0111 B1000 B1001 B1010 B1011 B1100 B1101 B1110 B1111

Hexadcimal 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF

Dcimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Pour reprsenter un octet il faut donc 2 digits hexadcimaux. Par exemple, notre nombre B10010101 est reprsent en hexadcimal par 0x95. Si vous faites la conversion de lhexadcimal vers le dcimal, vous utilisez le mme principe que prcdemment, et vous obtenez 0x95 = 9*161 + 5*16 = 149. Le plus grand nombre hexadcimal de 2 digits pouvant tre reprsent : 0xFF, soit 15*16 + 15 = 255. Aprs avoir converti les nombres dans diffrents formats, vous allez voir quil est galement trs simple de raliser des oprations sur ces nombres dans nimporte quel format. Page6/60

Il suffit pour cela deffectuer les mmes procdures quen dcimal. Exemple : B1011 + B 0110 On procde exactement de la mme faon que pour une opration en dcimal. B1011 + B 1110 --------------On additionne les chiffres de droite, et on obtient 1+0 = 1. On crit 1 On additionne 1 + 1, et on obtient 10 (2 nexiste pas en binaire). On crit 0 et on reporte 1 On additionne 0+1+le report et on obtient 10. On crit 0 et on reporte 1 On additionne 1+1+le report et on obtient 11. On crit 1 et on reporte 1 Reste le report que lon crit, soit 1. La rponse est donc B11001, soit 25. Les 2 nombres de dpart tant B1011, soit 11, et B1110, soit 14. Vous procderez de la mme manire pour les nombres hexadcimaux, en sachant que : 0xF + 0x1 = 0x10, soit 15+1 = 16.

II. Quelques oprations utiles dans la programmation des PICs


Les oprations indispensables connatre dans la programmation des pics et autres microcontrleurs sont :

II.1. Le complment
Que vous trouverez galement sous les formes inversion ou NOT ou encore complment 1. Cest tout simple, cela consiste inverser tous les bits de loctet. Exemple : NOT B10001111 donne B01110000 . Vous voyez ici que pour les oprations boolennes, il est plus facile de travailler en binaire. A quoi sert-elle ? Par exemple lire une valeur dont les niveaux actifs ont t inverss, raliser des nombres ngatifs, ou autres.

Page7/60

II.2. La fonction ET ou AND


Appele galement multiplication bit bit, ou AND . Elle consiste appliquer un mot sur un autre mot et multiplier chaque bit par le bit de mme rang. Pour faire une opration ET , il faut donc toujours 2 octets. Les diffrentes possibilits sont donnes ci-dessous, ce type de tableau sappelle table de vrit Bit1 Bit2 AND 0 0 1 1 0 1 0 1 0 0 0 1

On voit donc que la seule possibilit pour obtenir un 1 est que le Bit1 ET le Bit2 soient 1 . Ceci correspond une multiplication. 1*1 = 1, 0*1 = 0, 1*0 = 0. Exemple : Soit B11001100 AND B 11110000 donne B11000000 A quoi sert cette instruction ? Et bien, elle est utilise pour MASQUER des bits qui ne nous intressent pas. Prenez lexemple ci-dessus : Le 2me octet contient 4 bits 1 et 4 bits 0. Regardez le rsultat obtenu : Les 4 premiers bits de loctet 1 sont conservs (1100), lemplacement des 4 autres nous trouvons des 0. On peut donc laide de cette instruction positionner un ou plusieurs bits dans un mot 0 sans connatre son contenu.

II.3. La fonction OU ou OR
Encore appele OR, elle permet, comme son nom lindique, de positionner un bit 1 si le Bit1 OU le Bit2 est 1. La table de vrit suivante explique le fonctionnement de cette fonction. Bit1 Bit2 0 0 1 1 0 1 0 1 OR 0 1 1 1

Page8/60

Exemple : B10001000 OR B11000000 donne B11001000 A quoi sert cette instruction ? Et bien, tout simplement elle permet de forcer nimporte quel bit dun mot 1 sans connatre son contenu. Vous voyez que dans lexemple prcdent, les 2 premiers bits ont t forcs au niveau 1, indpendamment de leur niveau prcdent.

II.4. La fonction OU EXCLUSIF ou EXCLUSIF OR ou XOR


Elle est souvent appele XOR. Elle se comporte comme la fonction OR, un dtail prs. Pour obtenir 1, il faut que le Bit1 soit 1 OU que le Bit2 soit 1 lEXCLUSION des deux bits ensemble. Si les 2 bits sont 1, alors le rsultat sera 0. Voici donc la table de vrit.

Bit1 Bit2 XOR 0 0 1 1 Exemple : B10001000 XOR B11000000 donne B01001000 A quoi sert cette instruction ? et bien tout simplement inverser un ou plusieurs bits dans un mot sans toucher aux autres. Dans lexemple prcdent, vous voyez qu lemplacement des 2 bits 1 du 2me octet, les bits correspondants du 1er octet ont t inverss. 0 1 0 1 0 1 1 0

II.5. Bascule D
Avant dtudier larchitecture interne dun PIC, nous allons faire un bref rappel sur les bascules, pour nous amener jusquau circuit registre constituant essentiel dans larchitecture dun PIC. Il existe en logique combinatoire diffrentes bascules ayant chacune des caractristiques et un mode de fonctionnement propre. Nous allons tudier ici le fonctionnement de lune delles : la bascule D Page9/60

Une bascule D peut tre construite laide de 4 portes NAND et dun inverseur tel que reprsent sur la figure suivante :

a. Mode de fonctionnement
Tant que lentre de validation H est au niveau logique bas (0V) la sortie des portes NAND (3 et 4) est au niveau logique haut, en effet un 0V appliqu sur une des entres dune porte NAND provoque la mise au niveau logique 1 de la sortie de cette porte, on dit que le 0 est llment absorbant sur une NAND (voir la table de vrit). La sortie des portes 3 et 4 restera bloque au niveau 1 tant que lentre H est 0, ce qui sigifie que le signal prsent sur lentre D (data) ne modifiera pas les sorties des portes 3 et 4 (sortie R et sortie S). la sortie Q de bascule D restira donc dans ltat prcdent, on peut dire que la bascule D a mmoris ltat antrieur (voir table de vrit de bascule D).

Passons maintenant lentre H au niveau logique 1, pour une porte NAND le niveau logique 1 sur lune de ses entres reprsente llment neutre, c-a-d que la sortie de la porte ne prendera alors que letat de la deuxime entre logique. Si lentre D est au niveau logique 1 la sortie de la porte 4 S passe au niveau logique 1 de la sortie de la porte 1 appele Q. Un inverseur est insr entre le signal dentre D et la porte 3 de ce fait sachant que nous avons mis prcdement D a 1 cela signifie que la sortie de la porte 3 est au niveau logique 1. La deuxime entre de la porte 2 est connecte sur la sortie de la porte 1 qui est au niveau logique 1, de ce fait la sortie Q barre de la porte 2 est donc au niveau logique 0. On peut dire que la sortie Q dune bascule D recopie ltat de lentre D tant que le signal de validation H est au niveau logique 1. Si le signal H est au niveau logique 0, alors Page10/60

la bascule peut tre assimile a une cellule mmoire de 1 bit, car elle memorise letat antrieur de la sortie Q.

Table de vrit de bascule D

b. Comment utiliser le bascule D pour former un mmoire statique


Nous venons de voir le fonctionnement dune bascule D unique, celle-ci peut tre assimile une cellule mmoire de 1 bit (en effet on ne mmorise quune seule information binaire), pour raliser par exemple une mmoire de 8 bits (1 octet), on pourra juxtaposer 8 bascules D comme reprsent sur le schma de la figure ci-dessous. La donne mmoriser est reprsente via les interrupteurs sur les entres Data des bascules D (D0 D7) puis lorsque lon veut mmoriser lt de ces 8 entres, il suffit dappliquer une impulsion sur la broche de validation H (remarquer que toutes les entres de validation H sont relies ensembles). Les 8 leds connectes sur les sorties Q donnent letat du contenu de chaque bascule.

Cette mmoire de 8 bits peut galement sappeler registre 8 bits. Dans larchitecture interne dun microcontroleur PIC nous retrouverons de nombreux registres semblables celui-ci. Le pic 16F84 possde 15 registres ayant chacun une fonction bien dfinie. Page11/60

Chapitre 2 : Les microcontrleurs


I. Quest ce quun microcontrleur :
Cest un ordinateur mont dans un circuit intgr. Les avances technologiques en matire dintgration, ont permis dimplanter sur une puce de silicium de quelques millimtres carrs la totalit des composants qui forment la structure de base dun ordinateur. Leur prix varie de quelques Euros une dizaine d'Euros pour les plus complexes. Comme tout ordinateur, on peut dcomposer la structure interne dun microprocesseur en trois parties : - Les mmoires - Le processeur - Les priphriques Cest ce quon peut voir sur la figure ci-dessous :

Les mmoires sont charges de stocker le programme qui sera excut ainsi que les donnes ncessaires et les rsultats obtenus Le processeur est le cur du systme puisquil est charg dinterprter les instructions du programme en cours dexcution et de raliser les oprations quelles contiennent. Au sein du processeur, lunit arithmtique et logique interprte, traduit et excute les instructions de calcul (addition, soustraction, oprations logique (OU, ET, NON, OU exclusif) Les priphriques ont pour tche de connecter le processeur avec le monde extrieur dans les deux sens. Soit le processeur fournit des informations vers Page12/60

lextrieur (priphrique de sortie), soit il en reoit (priphrique dentre). Ceci peut tre vrifi travers des bus, qui sont les liaisons lectriques qui vhiculent les informations entre les diffrents composants du systme lectronique. On peut distinguer trois types de bus :

Bus de donnes : Cest sur ces lignes que circulent les donnes du programme. Sur un bus de donnes de 8bits = 8 fils on fera circuler quun octet la fois. Il est BI-DIRECTIONNEL Bus dadresse : Il est parcouru par des informations qui permettent de localiser le ou les botiers concerns par lchange dinformation. On parle alors de ladresse de linformation. Il est UNIDIRECTIONNEL (le microprocesseur impose sa valeur), il transporte une adresse produite par le microprocesseur. Cette adresse spcifie lorigine ou la destination des donnes qui transitent. Pour un bus de 16 bits, le microprocesseur peut accder 2^16 = 65 535 adresses diffrentes. Un seul composant (ROM, RAM ) est slectionn ( par son adresse) la fois. Le dcodage du bus dadresse permet de valider le composant slectionn. (Rle du dcodeur dadresse) Bus de contrle: Cest un ensemble de lignes relativement indpendantes qui permettent de : - Synchroniser le systme : Horloge - Raliser linitialisation de lunit centrale (Reset) - Contrler les changes (lecture, criture)

Page13/60

II.

Les diffrentes familles des PICs (Microcontrleurs)


Une PIC nest rien dautre quun microcontrleur. Il existe trois familles de PIC : - Base-Line : Les instructions sont codes sur 12 bits - Mid-Line : Les instructions sont codes sur 14 bits - High-End : Les instructions sont codes sur 16 bits

Un PIC est identifi par un numro de la forme suivant : xx(L)XXyy zz - xx : Famille du composant (12, 14, 16, 18) - L : Tolrance plus importante de la plage de tension - XX : Type de mmoire de programme C - EPROM ou EEPROM CR - PROM F - FLASH - yy : Identification - zz : Vitesse maximum du quartz Exemple : PIC 16F84 4, soit : - 16 : Mid-Line - F : FLASH - 84 : Type - 4 : Quartz 4MHz au maximum

Page14/60

Chapitre 3 : Prsentation gnral du PIC 16F84


I. Classification du PIC 16F84
Le PIC 16F84 est un microcontrleur 8 bits. Il dispose donc d'un bus de donnes de huit bits. Puisquil traite des donnes de huit bits, il dispose dune mmoire de donne dans laquelle chaque emplacement (dfini par une adresse) possde huit cases pouvant contenir chacune un bit.

II. Architecture interne


La structure gnrale du PIC 16F84 comporte 4 blocs comme le montre la figure cidessous : Mmoire de programme Mmoire de donnes Processeur Ressources auxiliaires ( priphriques )

La mmoire de programme contient les instructions pilotant lapplication laquelle le microcontrleur est ddi. Il sagit dune mmoire non volatile (elle garde son contenu, mme en labsence de tension), elle est de type FLASH, cest dire Page15/60

quelle peut tre programme et efface par lutilisateur via un programmateur et un PC. La technologie utilise permet plus de 1000 cycles deffacement et de programmation. Pour le PIC 16F84 cette mmoire est dune taille de 1024*14 bits, cest dire quelle dispose de 1024 emplacements (de 000h 3FFh) contenant chacun 14 cases car dans le cas du PIC, les instructions sont codes sur 14 bits. On peut donc stocker 1024 instructions. La mmoire de donne est spare en deux parties : Une mmoire RAM de 68 octets puisque le bus de donne est de huit bits. Cette RAM est volatile (les donnes sont perdues chaque coupure de courant). On peut y lire et crire des donnes. Une mmoire EEPROM de 64 octets dans laquelle on peut lire et crire des donnes (de huit bits soit un octet) et qui possde lavantage dtre non volatile (les donnes sont conserves mme en labsence de tension). La lecture et lcriture dans cette mmoire de donnes sont beaucoup plus lentes que dans la mmoire de donnes RAM. Le processeur est form de deux parties: Une unit arithmtique et logique (UAL) est considre souvent comme tant le cur de lunit centrale UC, en effet cest elle qui va tre charge de deffectuer toutes les oprations de type arithmtique (addition, soustraction, etc..) ou bien logique (rotation, dcalage, complment, etc,). Selon lopration effectuer le dcodeur dinstruction enverra les signaux ncessaires lunit arithmtique et logique pour pouvoir accomplir lopration demande. Registre de travail (W) : lunit arithmtique et logique est en troite relation avec le registre de travail, cest un registre de travail qui correspond aux anciens accumulateurs sur les microprocesseurs et par lequel vont tre transit un bon nombre dinformations que ce soit donne a traite (pour raliser par exemple une addition, une soustraction, ets..) ou bien pour stocker le rsultat dune opration ou dun traitement. Exemple : Nous voulons soustraire deux nombres, comment lunit centrale va elle procder ? Page16/60

Dans un premier temps la premire valeur soustraire va tre stocke dans le registre de travail W, remarquez que le registre de travail est reli sur une des entres de lunit arithmtique et logique.

Puis la deuxime valeur soustraire est dirige vers une autre entre de lunit arithmtique et logique. Ensuite un code indiquant quune soustraction doit tre effectue est envoy vers lunit arithmtique et logique qui excute cette instruction.

Le rsultat de la soustraction est stocke dans le registre de travail qui lui-mme est reli au bus de donne interne, cela veut dire que le rsultat peut tre transfr en interne vers nimporte quel registre.

Nous verrons par la suite lorsque nous ralisons des programmes que le registre de travail est trs intressant, en effet laccs certain registres du PIC ne peut se faire directement, nous sommes obligs de passer la valeur lire ou crire par ce fameux registre de travail. Le fait que le registre de travail soit reli au bus de donnes interne permet celui-ci dtre en relation avec le reste de larchitecture du PIC (RAM, EEPROM, TIMER, PORTS A et B, etc)

Page17/60

Les ressources auxiliaires qui sont dans le cas du PIC16F84 -

Ports dentres et de sorties. Temporisation Interruptions


Chien de garde Mode sommeil

Ces ressources seront traites dans la suite du cours.

III. Structure interne du PIC 16F84


III.1. Brochage et caractristiques principales
Le PIC16F84 est un circuit intgr de 18 broches :

Lalimentation du circuit est assure par les pattes VDD et VSS. Elles permettent lensemble des composants lectroniques du PIC de fonctionner. Pour cela on relie VSS (patte 5) la masse (0 Volt) et VDD (patte 14) la borne positive de lalimentation qui doit dlivrer une tension continue comprise entre 3 et 6 Volts. Le microcontrleur est un systme qui excute des instructions les unes aprs les autres une vitesse (frquence) qui est fixe par une horloge interne au circuit. Cette horloge doit tre stabilise de manire externe au moyen dun cristal de quartz connect aux pattes OSC1/CLKIN (patte 16) et OSC2/CLKOUT (patte 15).

Page18/60

La patte 4 est appele MCLR. Elle permet lorsque la tension applique est gale 0V de rinitialiser le microcontrleur. Cest dire que si un niveau bas (0 Volt ) est appliqu sur MCLR le microcontrleur sarrte, place tout ses registres dans un tat connu et se redirige vers le dbut de la mmoire de programme pour recommencer le programme au dbut (adresse dans la mmoire de programme: 0000). A la mise sous tension, la patte MCLR tant zro, le programme dmarre donc ladresse 0000, (MCLR=Master Clear Reset). Les broches RB0 RB7 et RA0 RA4 sont les lignes dentres/sorties numriques. Elles sont au nombre de 13 et peuvent tre configures en entre ou en sortie. Ce sont elles qui permettent au microcontrleur de dialoguer avec le monde extrieur (priphriques). Lensemble des lignes RB0 RB7 forme le port B et les lignes RA0 RA4 forment le port A. Certaines de ces broches ont aussi dautres fonctions (interruption, timer). Exemple de PORT A configur en sortie.

C2
27p

C1
27p

X1 U1
CRYSTAL 16 15 4 17 18 1 2 3 6 7 8 9 10 11 12 13

R1
1K

OSC1/CLKIN OSC2/CLKOUT MCLR

RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7

R16
470

D8
LED-YELLOW

PIC16F84A

Exemple de PORT B configur en entre.

C2
27p

C1
27p

X1 U1
CRYSTAL 16 15 4 17 18 1 2 3 6 7 8 9 10 11 12 13

R4
150

SW4
RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 SW-SPST

R1
1K

OSC1/CLKIN OSC2/CLKOUT MCLR

PIC16F84A

Page19/60

III.2.

Structure interne

La structure interne du PIC16F84 est donne dans la figure ci-dessous : structure HARVARD : la mmoire de programme et la mmoire de donnes sont spares contrairement l'architecture Von Neuman qui caractrise d'autres fabricants de microcontrleurs)

On retrouve sur ce schma la mmoire de programme, la mmoire RAM de donnes, la mmoire EEPROM, les ports A et B, ainsi que la partie processeur avec lUAL et le registre de travail W. Nous allons tudier prsent plus en dtail le fonctionnement du PIC.

a. La mmoire de donnes RAM et EEPROM


Si lon regarde la mmoire de donne RAM, on saperoit que celle-ci est un peu particulire comme le montre la figure ci-dessous : On constate en effet que cette mmoire est Page20/60

spare en deux pages (page 0 et page 1). De plus, on remarque que tant pour la page 0 que pour la page 1, les premiers octets sont rservs (SFR pour Special File Register). Ces emplacements sont en effet utiliss par le microcontrleur pour configurer lensemble de son fonctionnement, on les appelle registres spcifiques. Le bus dadresse qui permet dadresser la RAM est compos de 7 fils ce qui veut dire quil est capable dadresser 128 emplacements diffrents. Or, chaque page de la RAM est compose de 128 octets, le bus dadresse ne peut donc pas accder aux deux pages, cest pourquoi on utilise une astuce de programmation qui permet de diriger le bus dadresse soit sur la page 0, soit sur la page 1. Cela est ralis grce un bit dun registre spcifique (le bit RP0 du registre STATUS) dont nous verrons le fonctionnement plus loin. La RAM de donnes proprement dite se rduit donc la zone note GPR (Registre usage gnrale ) qui stend de ladresse 0Ch ( 12 en dcimale ) jusqu 4Fh ( 79 en dcimale) soit au total 68 registres en page 0 et autant en page 1, mais on constate que les donnes crites en page 1 sont rediriges en page 0 cela signifie quau final lutilisateur dispose uniquement de 68 registres ( donc 68 octets de mmoire vive) dans lesquels il peut crire et lire volont en sachant qu la mise hors tension, ces donnes seront perdues.

Page21/60

STATUS

STATUS

Page22/60

Mmoire EEPROM (Electrically Erasable Programmable Read Only Memory) La mmoire EEPROM est une particularit du PIC 16F84, cest une zone comportant 64 octets mise la disposition de lutilisateur et dont la particularit est de pouvoir tre sauvegarde mme en absence dalimentation. Cette mmoire peut tre trs utile pour par exemple : mmoriser le nombre de passage vers un programme, mmoriser un code dfaut, mmoriser une valeur invariable (ex : =3.14), mmoriser un code daccs, mmoriser la version dun programme, etc Il est noter toutefois que les temps pour accder cette mmoire sont relativement longs par rapport un accs en RAM par exemple. La premire case de la mmoire EEPROM dbute ladresse hexadcimale 2100h. Un code spcifique permet lors du transfert du fichier compil dcrire dans la mmoire EEPROM. Quatre registres spcifiques (EEDATA, EEADR, EECON1 et EECON2) permettent les accs lEEPROM que ce soit en lecture ou en criture.

b.

Les ports dentres/sorties

Pour dialoguer avec lextrieur, le PIC 16F84 vous permet disposition 13 EntresSorties programmables individuellement soit en entre ou en sortie. Ces 13 entres-sorties sont rparties en deux ports : -le port A : RA0 RA4 -le port B : RB0 RB7

Chaque ligne peut tre configure soit en entre, soit en sortie, et ceci indpendamment lune de lautre. Pour cela on utilise les registres TRISA et TRISB. Le bit de poids faible (b0) du registre TRISA correspond la ligne RA0, le bit b1 de TRISA correspond RA1 et ainsi de suite. Il en est de mme pour le port B et le registre TRISB (b0 de TRISB correspond RB0 b7 correspond RB7). Si lon veut placer une ligne en sortie il suffit de mettre le bit correspond dans TRISA ou TRISB 0 (retenez 0 comme Page23/60

Output=sortie). Si lon veut placer une ligne en entre, il suffit de placer le bit correspondant dans TRISA ou TRISB 1 (retenez 1 comme Input=entre). Les bits des deux registres PORTA et PORTB permettent soit de lire ltat dune ligne si celle-ci est en entre, soit de dfinir le niveau logique dune ligne si celle-ci est en sortie. Lors dun RESET, toutes les lignes sont configures en entres.

Port A Les bits a7 a5 des registres TRISA et PORTA ne correspondent rien car il ny a que 5 lignes (a0 a4).

La particularit pour le port A (voir tableau) concerne la ligne RA4 qui peut tre utilise soit en entre-sortie, soit en entre dhorloge pour le timer, nous revienderons ultrieurement lorsque nous aborderons le timer sur le rle exact du fonctionnemenrt de RA4.

Synoptique du port A pour RA0- RA3

Page24/60

Port B Sur le port B toutes les lignes sont configurable bien sur soit en entre ou en sortie. La broche RB0/INT peut tre utilise comme entre dinterruption (figure ci-dessous), dans ce cas il est possible de configurer le dclenchement dune interruption par rapport ltat de cette ligne soit sur un front montant ou descendant, tout cela est configurable par des bits positionner dans diffrents registres interne lors de la phase de programmation.

Les lignes RB4 RB7 peuvent galement tres utilises comme entres dinterruption (figure cidessous) dans ce cas un changement dtat sur une de ces entres provoque un branchement du programme principal vers un sous programme dinterruption ? enfin il existe un autre particularit des broches RB6 et RB7, en effet celles-ci sont utilises lors de la phase de transfert du programme que vous avez ralis et compil vers la mmoire programme du PIC.

Page25/60

Tableau des lignes RB0 - RB7

c.

Les registres
La mmoire de donnes RAM contenait des registres spcifiques qui permettent de

configurer le PIC, nous allons les dtailler un un et voir comment on peut accder la page 0 ou la page 1. Afin de faciliter la comprhension, les registres les plus utiliss sont encadrs. Adresse 00 et 80, INDF. Cette adresse ne contient pas de registre physique, elle sert pour ladressage indirect. Adresse 01, TMR0. Contenu du Timer (8 bits). Il peut tre incrment par lhorloge (fosc/4) c'est dire tous les 4 coups d'horloge ou par la broche RA4. Adresse 02 et 82, PCL .8 bits de poids faibles du compteur ordinal PC. Les 5 (138) bits de poids forts sont dans PCLATH. Adresse 03 et 83 , STATUS Registre dtat. Les cinq bits de poids faible de ce registre sont en lecture seule, ce sont des tmoins caractrisant le rsultat de lopration ralise par lUAL chaque fois que lon devra faire un test au cours dun programme nous allons utiliser sans le savoir le registre dtat qui est en relation avec le rsultat de la dernire opration demande au microcontrleur PIC. Cest un registre qui contient 8 bits ayant chacun un rle bien particulier Les bits de registre dtat :

Page26/60

Bit C (carry) : ce bit de registre detat va passer 1 lorsque le rsultat de la dernire opration arithmtique a provoqu une retenue ; Bit DC (digit carry) : ce bit de registre dtat va passer 1 lorsque le rsultat de la drenire opration arithmtique a provoqu une retenue sur les quatres premiers bits, ce bit sera utilis lorsque lon travallera en BCD (binaire cod dcimal) Bit z (zro) : ce bit de registre dtat va passer 1 lorsque le rsultat de la drniere opration est gal zro. Bit PD (power down) : ce bit de registre dtat va passer 0 lorsque le microcontroleur rencontre linstruction particuliere sleep (mise en sommeil) qui determine le mode de mise en veille de PIC en bloquant les impulsions dhorloge ncessaires au cadencement de tous les changes, le PIC attend alors un venement pour repartir. Bit TO (time out) : ce bit du registre dtat va passer 0 lorsque le chien de garde interne attient la fin de comptage que le programmeur lui dfinit. Le chien de garde (ou watch dog) peut tre dsactiv, il ne servira que lorsque nous voudrons savoir si le programme se droule correctement. RP0 et RP1 : sont deux bits qui permettent daccder deux zones de mmoire RAM diffrents (bank 0 et bank 1) IRP : bit de rserve pour application future, en ce qui conserne le PIC que nous tudions cest--dire le PIC 16F84 ce bit ne sert pas Adresse 04 et 84 , FSR . Registre de slection de registre : contient ladresse dun autre registre (adressage indirect, non utilis dans le projet) Adresse 05 , PORTA . Ce registre contient ltat des lignes du port. Adresse 06 , PORTB . Ce registre contient ltat des lignes du port. Adresse 08, EEDATA .Contient un octet lu ou crire dans lEEPROM de donnes. Adresse 09, EEADR. Contient ladresse de la donne lue ou crite dans lEEPROM de donnes. Page27/60

Adresse 0A et 8A, PCLATH . Voir ladresse 02 PCL. Adresse 0B et 8B , INTCON . Contrle des 4 interruptions GIE Masques : GIE : (Global Interrupt Enable) : masque global dinter. EEIE : (EEProm Interrupt Enable) autorise l'interruption venant de l'EEPROM. T0IE : (Timer 0 Interrupt Enable) dbordement du TIMER0 INTE: ( Interrupt Enable) autorise linterruption provoque par un changement d'tat sur broche RB0/INT RBIE: (RB Interrupt Enable) autorise les interruptions provoques par un changement d'tats sur l'une des broches RB4 RB7. Si ces bits sont mis 1, ils autorisent les interruptions pour lesquels ils sont ddis. Drapeaux : T0IF : (Timer 0 Interrupt Flag) dbordement du timer INTF ( Interrupt Flag) interruption provoque par la broche RB0/INT RBIF ( RB Interrupt Flag) interruption provoque par les broches RB4-RB7. Adresse 81 , OPTION 8 bits (tous 1 au RESET) affectant le comportement des E/S et des timers. autorise l'interruption provoque par le EEIE T0IE INTE RBIE T0IF INTF RBIF

RBPU/ INTEDG RTS

RTE

PSA

PS2 PS1

PS0

RBPU/ (RB Pull Up) Rsistances de tirage Vdd des entres du port B Si RBPU/=0 les rsistances de pull-up sont connectes en interne sur l'ensemble du port B. INTEDG (Interrupt Edge) slection du front actif de linterruption sur RB0/INT ( 1 pour front montant et 0 pour front descendant ). RTS (Real Timer Source) slection du signal alimentant le timer 0 : 0 pour horloge interne, 1 pour RA4/T0CLK RTE (Real Timer Edge) slection du front actif du signal timer ( 0 pour front montant). Page28/60

PSA (Prescaler assignment) 0 pour Timer 0 et 1 pour chien de garde WDT. PS2-0 (Prescaler 210 ) slection de la valeur du diviseur de frquence pour les timers. Adresse 85 , TRISA . Direction des donnes pour le port A : 0 pour sortir et 1 pour entrer. Adresse 86 , TRISB . Direction des donnes pour le port B : 0 pour sortir et 1 pour entrer. Adresse 88 , EECON1 Contrle le comportement de lEEPROM de donnes.

EEIF

WRERR WREN WR

RD

EEIF (EEProm Interrupt Flag) passe 1 quand lcriture est termine. WRERR (Write Error) 1 si erreur dcriture. WREN (Write Enable) : 0 pour interdire lcriture en EEPROM de donnes. WR (Write) 1 pour crire une donne. Bit remis automatiquement 0 RD (Read) : 1 pour lire une donne. Bit remis automatiquement 0 Adresse 89 , EECON2 . Registre de scurit dcriture en EEPROM de donnes.

d. Le Timer
Dans la majeure partie des applications, il est ncessaire de contrler le temps; afin de ne pas occuper le microcontrleur qu' cette tche, on le dcharge en utilisant un timer. Le pic 16F84 dispose de deux timers, un usage gnral (le TMR0 ) et un autre utilis pour le chien de garde (watch dog WDG ). Le TMR0 est un compteur ascendant (qui compte) de 8 bits qui peut tre charg avec une valeur initiale quelconque. Il est ensuite incrment chaque coup d'horloge jusqu' ce que le dbordement ait lieu (passage de FF 00); Le principe est reprsent figure cidessous :

Page29/60

Le TMR0 peut remplir deux fonctions: -Temporisateur ou contrle du temps. Son entre d'incrmentation est alors l'horloge qui correspond au cycle instruction (Fosc/4). -Compteur d'vnements. Dans ce cas les impulsions d'entres du timer sont fournies par la patte RA4/TOCK1 ; le choix s'effectue grce au bit RTS du registre OPTION.

e. Interruptions
L'interruption est un mcanisme fondamental de tout processeur. Il permet de prendre en compte des vnements extrieurs au processeur et de leur associer un traitement spcifique. Il faut noter que l'excution d'une instruction n'est jamais interrompue; c'est la fin de l'instruction en cours lors de l'arrive de l'vnement que le sous-programme d'interruption est excut. Dans le cas du PIC 16F84, il existe 4 sources d'interruption: - INT : Interruption externe, broche RB0/INT - TMR0 : Fin de comptage - PORTB : Changement d'tat du port B (RB7-RB4) - EEPROM : Fin d'criture en EEPROM

f. Pointeur de pile
Le pointeur de pile (stack pointer) est un registre pouvant mmoriser huit adresses diffrentes, on dit que le pointeur de pile est huit niveaux. Le rle du pointeur de pile consiste mmoriser ladresse courante lorsque le programme principal est drout vers un sous-programme. En effet lors dun saut vers un sous-programme le compteur de programme se charge avec ladresse de celui-ci, lorsque le sous-programme se termine le compteur de programme doit repointer alors la case mmoire suivant linstruction de saut (voir figure cidessous) pour pouvoir reprendre le programme principal. Le pointeur de la pile va alors Page30/60

rechercher automatiquement ladresse quil a mmorise et il recharge le compteur de programme avec cette adresse. Le pointeur de pile sera sollicit ds que dans un programme il y aura un sous-programme. Comme nous le verrons par la suite lors dun programme fonctionnant avec une interruption le pointeur de pile aura le mme rle de sauvegarde de ladresse courante. Les huit niveaux du pointeur de pile veulent signifier que lon peut imbriquer huit sous programmes. Il est noter que le pointeur de pile est autonome c--d quil gre tout seul la mmorisation et la restitution dune adresse

Un sous programme est une suite dinstructions correspondant une fonction bien dfinie laquelle votre programme principal fera appel plusieurs fois. En simplifiant le faite dcrire un ou plusieurs sous-programme vous evitera dcrire plusieurs fois le mme chose, do une conomie de la place en mmoire programme et bien sur une conomie de temps.

g.

Chien de garde

Le chien de garde (Watch dog) est un dispositif matriel et logiciel qui permet de se prmunir contre les plantages accidentels ou le microprocesseur sarrte ou excute nimporte quoi. Lide est de provoquer un RESET du CPU si le programme ne tourne pas normalement. Le PIC16F84 est muni dun circuit interne qui assure cette fonction sans quil soit besoin de composants extrieurs. Il utilise le timer interne qui par consquent ne peut plus dans ce cas tre utilis pour une autre tche. Lorsque le registre TMR0 atteint 255 un RESET est appliqu, il faut donc viter quil natteigne jamais cette valeur en le mettant zro priodiquement par le programme. Cette remise zro est effectue par linstruction CLRWDT. Page31/60

h. Mode sommeil
Lorsque le PIC n'a rien faire (par exemple lors de l'attente d'une mesure extrieure), ce mode est utilis pour limiter sa consommation : le PIC est mis en sommeil (le programme s'arrte) jusqu' son rveil (le programme repart). Ce mode est principalement utilis pour les systmes embarqus fonctionnant sur pile. La mise en sommeil est ralise grce l'instruction sleep. La squence suivante est excute : - Le chien de garde est remis 0 (quivalent clrwdt) - Le bit PD (STATUS.3) est mis 0 - L'oscillateur est arrt ; le PIC n'excute plus d'instruction

i. Principe de fonctionnement du PIC


Un microcontrleur excute des instructions. On dfinit le cycle instruction comme le temps ncessaire lexcution dune instruction. Attention de ne pas confondre cette notion avec le cycle dhorloge qui correspond au temps ncessaire lexcution dune opration lmentaire (soit un coup d'horloge). Une instruction est excute en deux phases : La phase de recherche du code binaire de linstruction stock dans la mmoire de programme La phase dexcution ou le code de linstruction est interprt par le processeur et excut. Chaque phase dure 4 cycles dhorloge comme le montre la figure ci dessous:

On pourrait donc croire quun cycle instruction dure 8 cycles dhorloge mais larchitecture particulire du PIC lui permet de rduire ce temps par deux. En effet, comme les instructions issues de la mmoire de programme circulent sur un bus diffrent de celui sur lequel circulent les donnes, ainsi le processeur peut effectuer la phase de recherche dune instruction pendant quil excute linstruction prcdente. Page32/60

j. Droulement dun programme


Le droulement dun programme seffectue de faon trs simple. A la mise sous tension, le processeur va chercher la premire instruction qui se trouve ladresse 0000 de la mmoire de programme, lexcute puis va chercher la deuxime instruction ladresse 0001 et ainsi de suite (sauf cas de saut ou dappel de sous programme). On parle de fonctionnement squentiel. La figure ci dessous va nous permettre de mieux comprendre le fonctionnement :

Page33/60

On constate sur cette figure que la mmoire de programme contient 1024 emplacements (3FF en hexadcimale) contenant 14 bits (de 0 13). Une instruction occupe un emplacement qui est dfini par une adresse. Le processeur peut alors slectionner l'emplacement souhait grce au bus dadresse et il peut lire son contenu (ici linstruction) grce son bus dinstruction. Cet adressage seffectue laide dun compteur ordinal appel PC qui lors de la mise sous tension dmarre zro puis sincrmente de 1 tous les quatre coups dhorloge, on excute bien ainsi les instructions les unes la suite des autres. Mais il arrive que dans un programme on fasse appel un sous programme dont ladresse de linstruction ne se trouve pas juste aprs celle qui est en train dtre excute. Cest le rle de la pile qui sert emmagasiner de manire temporaire ladresse dune instruction. Elle est automatiquement utilise chaque fois que lon appelle un sous programme et elle permet une fois que lexcution du sous programme est termine de retourner dans le programme principal juste aprs lendroit o lon a appel le sous programme. On constate que cette pile possde huit niveaux, cela signifie quil nest pas possible dimbriquer plus de huit sous programmes, car au-del de huit, le processeur ne sera plus capable de retourner ladresse de base du programme principal. Ladresse 0000 est rserve au vecteur RESET, cela signifie que cest cette position que lon accde chaque fois quil se produit une rinitialisation (0 volts sur la patte MCLR). Cest pour cette raison que le programme de fonctionnement du microcontrleur doit toujours dmarrer cette adresse. Ladresse 0004 est assigne au vecteur dinterruption et fonctionne de manire similaire celle du vecteur de Reset. Quand une interruption est produite et valide, le compteur ordinal PC se charge avec 0004 et linstruction stocke cet emplacement est excute.

k. Mise en uvre
Lutilisation et la mise en uvre trs simple des PICs les a rendus extrmement populaire. Il suffit dalimenter le circuit par ses deux broches VDD et VSS, de fixer sa vitesse de fonctionnement laide dun quartz et dlaborer un petit systme pour permettre de rinitialiser le microcontrleur sans avoir couper lalimentation

Page34/60

Il suffit ensuite dcrire le programme en langage assembleur ou en C sur un ordinateur grce au logiciel MPLAB de MICROCHIP ou sur MikroC puis de le compiler pour le transformer en langage machine et le transfrer dans le PIC grce un programmateur. Il ne nous reste plus qu voir le jeu dinstruction de programmation en assembleur du PIC et cest l que rside tout lintrt puisquil ne dispose que de 35 instructions qui lui permettent de raliser toutes les tches.

Page35/60

Chapitre 4 : Jeux dinstructions


I. Classement des instructions du PIC
Pour simplifier nous allons classer arbitrairement les trente cinq instructions selon quatre critres qui sont : + Instructions de branchement et de contrle + Instructions relatives au registre de travail w + Instructions relatives aux registres file dutilisation spciale ou gnrale + Instructions relatives au traitement sur un bit spcifique dun registre.

II. Instructions de branchement et de contrle


Ces instructions concenent en particulier tous les types de branchement, ainsi que les retours de sous programme et diffrents mode de fonctionnement, tel que le mode de sommeil.

II.1

Instruction : CALL

Rle : Cette instruction sert excuter un sous programme. Ds que le PIC rencontre cette mnmonique le compteur de programme CP se charge avec ladresse du sous programme excuter, auparavant il y a une sauvegarde de ladresse courante du CP, en fin de sous Page36/60

programme une deuxime instruction (RETURN) que nous verrons plus loin sert revenir la position ou tait le programme avant dtre drout. Quand doit on utiliser cette instruction : Cette instruction sera utilise lorsque dans votre programme vous avez ralis un sous programme et que vous voulez y accder. Syntaxe : CALL tiquette Une tiquette correspond un mot situ en dbut de sous programme. Sur MPLAB ltiquette se place en dbut de ligne. Ltiquette correspond une adresse dans le programme. Nombre de cycle(s) dhorloge ncessaires : 2 Exemple dutilisation :

II.2
de PIC.

Instruction : CLRWDT

Rle : Cette instruction sert mettre zro le watchdog, de sorte de ne pas effectuer un reset Quand doit on utiliser cette instruction : Cette instruction sera utilise lorsque vous utiliser le watchdog, celui-ci permet entre autre de vrifier le bon droulement dun programme. Si par exemple votre programme doit imprativement appeler une routine rgulirement et pour tre sur que cette routine est appele, on place en gnral le reset du chien de garde dans ce sous programme, ainsi si le programme est plant il ne passe pas par la routine, le watchdog nest pas ranim et dclenche alors le reset du microcontrleur. Syntaxe : CLRWDT Page37/60

Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

II.3

Instruction : GOTO

Rle : Cette instruction sert brancher le programme vers une autre adresse, le compteur de programme charge ladresse du saut, attention la diffrence par rapport linstruction call est que ladresse de retour nest pas mmorise dans la pile ce qui fait que le programme continu lendroit de saut (figure ce dessous). Cette instruction sera utilise principalement avec un branchement conditionnel qui forcera le saut (goto) si une condition est vraie ou fausse. Quand doit on utiliser cette instruction : Cette instruction sera utilise lorsque vous testez une condition, si cette condition est vraie alors on excute le goto vers un traitement sinon on continue le traitement en cours. Syntaxe : GOTO tiquette Nombre de cycle(s) dhorloge ncessaires : 2 Exemple dutilisation :

Page38/60

II.4

Instruction : RETFIE

Rle : Cette instruction doit tre utilise imprativement lorsque votre programme fonctionne sous interruption. Cette instruction se place en fin de sous programme juste avant le dclanchement de lvnement qui a provoqu linterruption. Nous laborerons ce genre de programme dont lintrt rside dans le fait qu nimporte quel endroit de votre programme un vnement (une interruption) peut drouter celui-ci pour excuter une routine (un sous programme) prioritaire. Quand doit on utiliser cette instruction : uniquement si on utilise les interruptions, elle se place en fin de sous programme. Syntaxe : RETFIE Nombre de cycle(s) dhorloge ncessaires : 2 Exemple dutilisation :

II.5

Instruction : RETLW

Rle : Cette instruction est identique linstruction RETURN, elle sert en fin de sous programme faire revenir le compteur de programme linstruction suivant le saut la routine (sous programme). Linstruction RETLW permet en plus de charger une valeur dans le registre de travail W au moment o elle est active.

Page39/60

Quand doit on utiliser cette instruction : Dans un programme comportant un sous programme et lorsque lon souhaite sortir de la routine avec une valeur qui peut bien sur dpendre du traitement dans le sous programme. Syntaxe : RETLW + valeur Nombre de cycle(s) dhorloge ncessaires : 2 Exemple dutilisation :

II.6

Instruction : SLEEP

Rle : Cette instruction met le microcontrleur en mode sommeil ce qui signifie que loscillateur interne est bloqu et que le programme est arrt. Pour sortir de ce mode il faut imprativement une interruption, un signal watchdog ou un reset de PIC. Quand doit on utiliser cette instruction : Dans un programme qui ne travail par exemple que sur interruption, on peut passer en mode basse consommation avec linstruction sleep pour conomiser la source dnergie. Syntaxe : SLEEP Nombre de cycle(s) dhorloge ncessaires : 2 Exemple dutilisation :

Page40/60

III.
travail W

Instructions concernant le registre de travail W

Ces instructions concernent tous les types de traitement appliqus sur le registre de

II.1

Instruction : ADDLW

Rle : Cette instruction additionne le contenu de registre de travail W avec une valeur immdiate, le rsultat est stock dans W. Quand doit on utiliser cette instruction : Sur le PIC on doit souvent pour accder un registre banalis passer par un registre W. si on veut additionner une valeur avec un registre de son choix on utilisera linstruction ADDLW puis on transfrera le contenu dans le registre banalis. Syntaxe : ADDLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

III.2 Instruction : ANDLW


Rle : Cette instruction fait un et logique entre le contenu du registre de travail W et la valeur immdiate (oprande), le rsultat est stock dans W. Quand doit on utiliser cette instruction : On utilise souvent le ET LOGIQUE lorsque lon veut slectionner un ou plusieurs bits dun registre, on parle de masque. Syntaxe : ANDLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page41/60

III.3 Instruction : IORLW


Rle : Cette instruction fait un ou logique entre le contenu du registre de travail W et la valeur immdiate (oprande), le rsultat est stock dans W. Quand doit on utiliser cette instruction : On utilise cette instruction pour par exemple avoir deux entres de commandes pour une sortie. Syntaxe : IORLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

III.4 Instruction : MOVLW


Rle : Cette instruction charge le contenu du registre W avec une valeur immdiate, lancien contenu est alors cras. Quand doit on utiliser cette instruction : cette instruction est normment utilise, car le registre W est comme une plaque tournante de PIC, cest par lui que lon accdera tous nos registres banaliss (variables) que lon aura dclar laide de la syntaxe EQU. Syntaxe : MOVLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page42/60

III.5 Instruction : SUBLW


Rle : Cette instruction soustrait le contenu du registre de travail W avec une valeur immdiate, le rsultat est stock dans W. Quand doit on utiliser cette instruction : sur le PIC on doit souvent pour accder un registre banalis passer par le registre W. si on veut soustraire une valeur du registre de son choix on utilisera linstruction SUBLW puis on transfrera le contenu dans le registre banalis Syntaxe : SUBLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

III.6 Instruction : XORLW


Rle : Cette instruction fait un ou exclusif entre le contenu du registre de travail W avec une valeur immdiate, le rsultat est stock dans W. Quand doit on utiliser cette instruction : on utilise cette pour par exemple comparer le contenu dun registre avec une valeur Syntaxe : XORLW + valeur Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

III.7 Instruction : CLRW


Rle : Cette instruction met le contenu du registre de travail W zro. Quand doit on utiliser cette instruction : tant donn que lon utilise le registre de travail W, il est dans certain cas ncessaire de partir avec une valeur nulle dans ce registre. Syntaxe : CLWR Page43/60

Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

IV. Instructions concernant les registres banaliss


Ces instructions concernent tous le type de traitement appliqus sur un registre banalis, un registre banalis peut tre par exemple une variable que vous avez dclar, il peut y en avoir 68 au maximum, taille de la RAM du PIC. Chaque registre banalis possde une taille de 8 bits (1 octet)

IV .1 Instruction : ADDWF (ADD W and F)


Rle : Cette instruction additionne le contenu du registre de travail W avec le contenu dun registre banalis, le rsultat est stock dans W si loprande d=0 sinon le rsultat sera stock dans le registre banalis Quand doit on utiliser cette instruction : lorsque lon veut additionner une valeur avec un registre banalis. Syntaxe : ADDWF + f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page44/60

IV.2 Instruction : ANDWF (AND W and F)


Rle : Cette instruction fait un et logique entre le contenu du registre de travail W et le contenu du registre spcifi f, selon loprande, le rsultat est soit stock dans W (d=0), soit stock dans le registre (d=1). Quand doit on utiliser cette instruction : on utilise souvent le ET LOGIQUE lorsque lon veut slectionner un ou plusieurs bits dun registre, on parle alors de masque. Syntaxe : ANDWF + f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

IV.3 Instruction : CLRF (Clear f)


Rle : Cette instruction met le contenu du registre spcifi dadresse f zro. Quand doit on utiliser cette instruction : Etant donn que lon utilise souvent les registres banaliss il est dans certain cas ncessaire de partir avec une valeur nulle dans le registre. Syntaxe : CLRF f f : adresse du registre banalis Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page45/60

IV.4 Instruction : COMF (Complement f)


Rle : Cette instruction fait une opration de complment sur le contenu du registre spcifi dadresse f, en fait les 0 sont remplacs par des 1 et vice versa, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : lorsqu lon doit raliser une opration de complment sur un registre. Syntaxe : COMF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

IV.5 Instruction : DECF (Decrement f)


Rle : Cette instruction fait une dcrmentation (contenu -1) sur la valeur du registre spcifi f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : lorsqu lon doit raliser une soustraction unitaire sur un registre, pour raliser une temporisation ou un dcomptage par exemple. Syntaxe : DECF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation : Dans lexemple qui suit nous allons raliser une temporosation et pour ce faire nous utilisons linstruction BTFSS qui dtaill plus loin ainsi que le flag Z du registre STATUS, ce Page46/60

flag ou bit indique sil vaut 1 que le rsultat de la premire opration effectu vaut 0 et vice versa.

IV.6 Instruction : DECFSZ (Decrement f, skip if zro)


Rle : Cette instruction est double, elle fait une dcrmentation (contenu -1 comme linstruction DECF) sur la valeur du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1), puis teste ensuite si le contenu du registre spcifi vaut zro et dans ce cas saute la prochaine instruction. Quand doit on utiliser cette instruction : cette instruction est souvent utilise pour raliser une temporisation ou un dcomptage par exemple. Syntaxe : DECFSZ f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 ou 2 selon rsultat du test Exemple dutilisation : Reprenons lexemple de la temporisation ralis avec linstruction DECF, nous voyons ici quil y a une ligne en moins pour raliser le mme programme.

Page47/60

IV.7 Instruction : INCF (INcrement f, skip if zro)


Rle : Cette instruction fait une incrmentation (contenu +1) sur la valeur du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : lorsquon doit raliser une addition unitaire sur un registre, pour raliser un compteur, on peut ainsi dterminer par exemple le nombre de dfauts constats sur une machine. Syntaxe : INCF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 ou 2 selon rsultat du test Exemple dutilisation :

Page48/60

IV.8 Instruction : INCFSZ (INcrement f)


Rle : Cette instruction est semblable DECFSZ, elle fait une incrmentation (contenu +1, comme linstruction INCF) sur la valeur du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1), puis teste ensuite si le contenu du registre spcifi vaut zro et dans ce cas saute la prochaine instruction Quand doit on utiliser cette instruction : cette instruction est souvent utilise pour raliser une temporisation ou un comptage par exemple. Syntaxe : INCFSZ f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 ou 2 selon rsultat du test Exemple dutilisation : Dans cette exemple nous allons faire une boucle (ou une temporisation) de 256 tops dhorloge, puis quand le contenu du registre (8bits) est 255 et quon lui ajoute +1 il revient zro.

Page49/60

IV.9 Instruction : IORWF (Inclusive OR W with F)


Rle : Cette instruction fait un ou logique entre le contenu du registre de travail W et le contenu du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : on utilise cette instruction pour raliser par exemple un ou logique entre le registre W et une valeur qui nest pas fige et qui dpend du contenu dun registre Syntaxe : IORLW f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page50/60

IV.10 Instruction : EXORWF (EXclusive OR W with F)


Rle : Cette instruction fait un ou exclusif entre le contenu du registre de travail W et le contenu du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : souvent pour comparer le contenu de deux registres on utilise un ou exclusif, si le rsultat vaut 0 alors les contenus des registres sont identiques. Syntaxe : IORLW f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

IV.11 Instruction : MOVF (Move f)


Rle : Cette instruction copie le contenu du registre spcifi dadresse f sur lui-mme ou bien dans le registre W, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Le fait de copier un registre sur lui-mme peut apparaitre absurde mais cela permet entre autre de tester le flag z (zro) du registre dtat et ainsi permettre de savoir si le contenu du registre vaut zro. Quand doit on utiliser cette instruction : une utilisation peut tre envisage lorsquon veut copier un registre banalis vers un deuxime registre de mme type, dans un premier temps on copie le registre dans le registre de travail W (MOVF registre W) puis ensuite on transfert le contenu du registre de travail W vers le registre de destination avec linstruction MOVWF. Syntaxe : IORLW f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Page51/60

Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

IV.12 Instruction : MOVWF (Move w to f)


Rle : Cette instruction copie le contenu du registre de travail W vers le registre spcifi dadresse f. Quand doit on utiliser cette instruction : cette instruction sera souvent utilise cest elle qui permettra de charger une valeur dans un registre. Encore une fois nous voyons que le registre de travail W a une place importante dans le PIC. Syntaxe : MOVWF f f : adresse du registre banalis Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation : voir exemple prcdent (instruction MOVF)

IV.13 Instruction : NOP (No oPration)


Rle : Cette instruction ne ralise aucune opration. Quand doit on utiliser cette instruction : cette instruction est particulirement utilise lorsque lon veut introduire un retard dans un programme, tout en sachant que linstruction NOP prend un cycle machine. Syntaxe : NOP Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation : Notre applicarion est cadense avec un quartz de 4MHz, il faut savoir quen interne le PIC divice la frquence du quartz par 4 ce qui fait une horloge 1MHz, donc un cycle machine

Page52/60

dure 1 micro seconde (1us) . nous souhaitons avoir une temporisation (ou un retard) dans une boucle de programme de 5us, pour ce faire nous allons insrer 5 instructions de type NOP. Toutefois pour des temporisations trs longues il est bien certain que lon nutilisera pas ce genre dartifice, il faudra raliser une temporisation avec le dcomptage dun registre par exemple.

IV.14 Instruction : RLF (Rotate Left f throught carry)


Rle : Cette instruction excute une rotation gauche du contenu du registre spcifi dadresse f, le bit situ le plus gauche est transfr dans la carry et la valeur prcdente de la carry est transfr dans le bit 0 du registre. Selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : il y a des nombreuses applications pour cette instruction, allant dun simple chenillard a une multiplication par 2 par exemple. Syntaxe : RLF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page53/60

IV.15 Instruction : RRF (Rotate Right f throught carry)


Rle : Cette instruction excute une rotation droite du contenu du registre spcifi dadresse f, le bit situ le plus doite est transfr dans la carry et la valeur prcdente de la carry est transfr dans le bit 0 du registre. Selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : il y a des nombreuses applications pour cette instruction, allant dun simple chenillard a une multiplication par 2 par exemple. Syntaxe : RRF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page54/60

IV.16 Instruction : SUBWF (SUBstract W from F)


Rle : Cette instruction excute une soustraction entre le contenu du registre spcifi dadresse f et le contenu du registre W, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : on utilise cette instruction pour raliser par exemple une soustraction conditionnelle, la valeur soustraire est dynamique car est peut voluer, cest en fait le contenu dun registre. Syntaxe : SUBWF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page55/60

IV.17 Instruction : SWAPF (SWAP nibbles in F)


Rle : Cette instruction permet dchanger les quatre bits de poids faible par les quatre bits de poids fort du contenu du registre spcifi dadresse f, selon loprande d, le rsultat est soit stock dans W (d=0), soit stock dans le registre f (d=1). Quand doit on utiliser cette instruction : on utilise souvent cette instruction lorsquon travaille sous interruption afin de sauvegarder le registre STATUS (registre dtat) car linstruction SWAPF la particularit de naffecter aucun flag du registre dtat. Syntaxe : SWAPF f,d f : adresse du registre banalis d : direction pour le stockage du rsultat (0= rsultat dans W, 1= rsultat dans le registre banalis dont ladresse est f) Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

V.
V.1
f.

Instructions sur un bit dun registre

Instruction : BCF (bit Clear F)

Rle : Cette instruction permet de faire une RAZ du bit indiquer (0 7) du spcifi dadresse Quand doit on utiliser cette instruction : cette instruction est trs utilise elle permet de travailler rapidement sur un bit dun registre sans modifier le reste de registre. Syntaxe : BCF f,b f : adresse du registre banalis Page56/60

b : numro du bit remettre zro, ce nombre est compris entre 0 et 7. Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

V.2

Instruction : BSF (bit Set F)

Rle : Cette instruction permet de faire une mise 1 du bit indiquer (0 7) du spcifi registre dadresse f. Quand doit on utiliser cette instruction : cette instruction est trs utilise elle permet de forcer rapidement 1 la valeur dun bit dun registre sans modifier le reste de registre. Syntaxe : BSF f,b f : adresse du registre banalis b : numro du bit remettre 1, ce nombre est compris entre 0 et 7. Nombre de cycle(s) dhorloge ncessaires : 1 Exemple dutilisation :

Page57/60

V.3

Instruction : BTFSC (bit Test F Skip if Clear)

Rle : Cette instruction permet de faire un test du bit indiqu (0 7) du spcifi registre dadresse f et de sauter la prochaine instruction si la valeur de bit vaut zro. Quand doit on utiliser cette instruction : cette instruction est trs puissante est utilise pour faire des branchements conditionnels, on oriente le programme selon la valeur du bit test. Par exemple on peut tester ltat dun bit dun port configur en entre, sur lequel est connect un interrupteur, tant que cet interrupteur est actionn le programme ne dmarre pas (interrupteur type coup de poing par exemple) elle permet de forcer rapidement 1 la valeur dun bit dun registre sans modifier le reste de registre. Syntaxe : BTFSC f,b f : adresse du registre banalis b : numro du bit remettre zro, ce nombre est compris entre 0 et 7. Nombre de cycle(s) dhorloge ncessaires : 1 ou 2 ( selon le rsultat de test) Exemple dutilisation : Un interrupteur est connect sur le port A sur la broche RA0 (bit 0 du port A) on dmarre le programme uniquement si linter est ouvert

Page58/60

V.4

Instruction : BTFSS (bit Test F Skip if Set)

Rle : Cette instruction permet de faire un test du bit indiqu (0 7) du spcifi registre dadresse f et de sauter la prochaine instruction si la valeur de bit vaut 1. Quand doit on utiliser cette instruction : cette instruction est trs puissante est utilise pour faire des branchements conditionnels, on oriente le programme selon la valeur du bit test. Par exemple on peut tester ltat dun bit dun port configur en entre, sur lequel est connect un interrupteur, tant que cet interrupteur est actionn le programme ne dmarre pas. Syntaxe : BTFSS f,b f : adresse du registre banalis b : numro du bit remettre zro, ce nombre est compris entre 0 et 7. Nombre de cycle(s) dhorloge ncessaires : 1 ou 2 ( selon le rsultat de test) Exemple dutilisation : Un interrupteur est connect sur le port A sur la broche RA0 (bit 0 du port A) on dmarre le programme uniquement si linter est actionn.

Page59/60

JEU D'INSTRUCTION

Page60/60

You might also like