les microcontroleurs pic16f84

Upload: mohcine-jabri

Post on 11-Oct-2015

67 views

Category:

Documents


5 download

TRANSCRIPT

LES MICROCONTROLEUR PIC16F84

PISAK S.

Le pic16F84

LES MICROCONTROLEURS PIC16F84

I LES MICROCONTROLEURS

1) 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 1:

figure 1

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

(les priphriques ont pour tche de connecter le processeur avec le monde extrieur dans les deux sens . Soit le processeur fournit des informations vers lextrieur (priphrique de sortie ), soit il en reoit (priphrique dentre ).

2) Intrt des microcontrleurs:

Les microcontrleurs sont de taille tellement rduite quils peuvent tre sans difficult implants sur lapplication mme quils sont censs piloter. Leur prix et leurs performances simplifient normment la conception de systme lectronique et informatique. Lutilisation des microcontrleurs ne connat de limite que lingniosit des concepteurs, on les trouve dans nos cafetires, les magntoscopes, les radios ..Une tude mene en lan 2004 montre quen moyenne, un foyer amricain hberge environ 240 microcontrleurs.

II PRESENTATION GENERALE DU PIC 16F84

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

2) Architecture interne

La structure gnrale du PIC 16F84 comporte 4 blocs comme le montre la figure 2:

-Mmoire de programme

-Mmoire de donnes

-Processeur

-Ressources auxiliaires ( priphriques )

figure 2

(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 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 ) charge de faire des calculs.

-un registre de travail not W sur lequel travail lUAL.

(les ressources auxiliaires qui sont dans le cas du PIC16F84

-ports dentres et de sorties.

-temporisateur.

-interruptions

-chien de garde

-mode sommeil

Ces ressources seront analyses dans la suite du cours.

III STRUCTURE INTERNE DU PIC 16F84

1) Brochage et caractristiques principales

Le PIC16F84 est un circuit intgr de 18 broches ( figure 3):

figure 3

(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 ) . Nous reviendrons en dtail sur lhorloge au paragraphe 3.

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

2) Structure interne

La structure interne du PIC16F84 est donne figure 4: ( 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 )

figure 4

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 ( work ). Nous allons tudier prsent plus en dtail le fonctionnement du PIC.

3) 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 5:

figure 5

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 ( Voir figure 6 et 7 ).

figure 6

figure 7

4) 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 que nous allons voir plus loin ). On parle de fonctionnement squentiel. La figure 8 va nous permettre de mieux comprendre le fonctionnement:

figure 8

(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 ( voir figure 7 ). 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.

5) La mmoire de donnes RAM

Si lon regarde la mmoire de donne RAM, on saperoit que celle-ci est un peu particulire comme le montre la figure 9:

On constate en effet que cette mmoire est 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 et nous verrons au chapitre suivant leurs rles.

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.

figure 9

6) Les registresNous avons vu au chapitre prcdent que 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. (non utilise dans le projet de cette anne )

(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 (13-8) 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 (drapeaux ou flag en anglais) caractrisant le rsultat de lopration ralise par lUAL. Le bit RP0 est lui en lecture /criture et cest lui qui permet de slectionner la page dans la mmoire RAM .

Si RP0=0 on accde la page 0 et si RP0=1 on accde la page 1 .

RP0TO/PD/ZDCC

Au reset, seul le bit RP0 de slection de page est fix ( RP0=0: page 0 )

TO/ (Time Out): dbordement du timer WDT

PD/: (Power Down) caractrise lactivit du chien de garde WDT

Z (zro) rsultat nul pour une opration arithmtique et logique.

DC(digit carry) retenue sur un quartet ( 4 bits )

C(carry) retenue sur un octet ( 8 bits ).

(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 A ( voir chapitre sur les ports ).(adresse 06 , PORTB . Ce registre contient ltat des lignes du port B ( voir chapitre sur les ports ).

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

(adresse 0A et 8A, PCLATH . Voir ladresse 02 PCL.

(adresse 0B et 8B , INTCON .Contrle des 4 interruptions

GIEEEIET0IEINTERBIET0IFINTFRBIF

Masques:

GIE: (Global Interrupt Enable): masque global dinter.

EEIE: (EEProm Interrupt Enable)autorise l'interruption venant de l'EEPROM.

T0IE: (Timer 0 Interrupt Enable) autorise l'interruption provoque par le 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 , OPTION8 bits (tous 1 au RESET) affectant le comportement des E/S et des timers.

RBPU/ (RB Pull Up) Rsistances de tirage Vdd des entres du port B ( voir le dtail du fonctionnement au chapitre port ).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).

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 ( voir chapitre sur les ports ).

(adresse 86 , TRISB . Direction des donnes pour le port B: 0 pour sortir et 1 pour entrer ( voir chapitre sur les ports ).

(adresse 88 , EECON1 Contrle le comportement de lEEPROM de donnes.

EEIFWRERRWRENWRRD

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.Une donne ne peut tre crite quaprs avoir crit successivement 0x55 et 0xAA dans ce registre.

7) Les ports dentres/sorties

Le PIC16F84 est quip de 13 lignes dentres/sorties 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 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.

(particularit du portA: les bits b7 b5 des registres TRISA et PORTA ne correspondent rien car il ny a que 5 lignes ( b0 b4 ) . RA4 est une ligne collecteur ouvert, cela veut dire que configure en sortie cette broche assure 0Volt ltat bas, mais qu ltat haut, il est ncessaire de fixer la valeur de la tension grce une rsistance de tirage (pull up en anglais)

(particularit du portB:il est possible de connecter de faon interne sur chaque ligne une rsistance de tirage ( pull up ) dont le rle consiste fixer la tension de la patte (configur en entre ) un niveau haut lorsque quaucun signal nest appliqu sur la patte en question. Pour connecter ces rsistances, il suffit de placer le bit RBPU/ du registre OPTION 0 .

8) 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 ( boucle de comptage qui monopolise le micro ), 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 peur 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 10 :

figure 10

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). Il est possible d'utiliser un pr-diviseur de frquence que nous verrons plus loin.

-Compteur d'vnements. Dans ce cas les d'impulsions d'entres du timer sont fournies par la patte RA4/TOCK1

le choix s'effectue grce au bit RTS du registre OPTION.

Le pic 16F84 dispose d'un diviseur de frquence qui peut tre assign soit au chien de garde, soit au TMR0 ( uniquement un la fois ). L'assignation du pr diviseur se fait grce au bit PSA du registre OPTION. La structure interne du TMR0 est donc la suivante ( figure 11 ):

figure 11

Suivant que le pr-diviseur est assign au chien de garde ou au TMR0, la valeur de la pr-division n'est pas la mme, il faut donc tre vigilant lors de la programmation comme le montre la figure 12 :

figure 12

Enfin, vu que le timer ne peut que compter, cela oblige une petite gymnastique lors de l'introduction de la valeur de pr chargement :

exemple :

On veut que le timer nous indique par la mise un du drapeau T0IF l'coulement d'une dure de 20ms ( la frquence d'horloge tant de 4MHz ) d'o Fosc/4=1ssi on choisit une pr division de 256 , on aura donc

20000 s / 256 =78Il ne faut pas charger le TMR0 avec 78 mais avec le complment deux de cette valeur ( car le timer compte et ne dcompte pas ) d'o

256-78=178

soit en hexadcimale la valeur B2h charger dans le registre TMR0.

9) Mise en oeuvre

Lutilisation et la mise en uvre trs simple des PICs les a rendus extrmement populaire au point que la socit qui les fabrique ( MICROCHIP ) est en passe de devenir le leader mondial dans le domaine des microcontrleurs devant MOTOROLA et INTEL.

Il suffit dalimenter le circuit par ses deux broches VDD et VSS, de fixer sa vitesse de fonctionnement laide dun quartz ( figure13) et dlaborer un petit systme pour permettre de rinitialiser le microcontrleur sans avoir couper lalimentation ( figure 14 ).

figure 13

figure 14

Il suffit ensuite dcrire le programme en langage assembleur ou en C sur un ordinateur grce au logiciel MPLAB de MICROCHIP ( logiciel gratuit ) puis de le compiler pour le transformer en langage machine et le transfrer dans le PIC grce un programmateur. Lors de la mise sous tension, tous les registres spcifiques sont placs dans un tat dtermin comme le montre la figure 15

u=unchanged ; x=unknown ; -=unimplemented ( read as 0 ) ; q=value depends on condition

figure 15

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.

IV JEU DINSTRUCTIONS

Afin de comprendre la fonction de chaque instruction, la notation adopte pour les donnes et adresses manipules par les instructions est fort simple et est la suivante:

-f reprsente un registre

-b reprsente un numro de bit en sachant que 0 correspond toujours au bit de poids faible ( le plus droite dans le registre )

-k reprsente une donne aussi appel littral

Un certain nombre dinstructions ( ADDWF , ANDWF , etc.. ) utilise une notation spciale prsente sous la forme:

ADDWF f,dO f indique le registre et o d peut prendre deux valeurs (0 ou 1), ce qui change le comportement de linstruction . Si d est 0, le rsultat est plac dans le registre de travail W, la valeur dans le registre f est alors inchange, alors que si d est 1, le rsultat est plac dans le registre f.

Un autre type dinstruction mrite quelques claircissements, ce sont les instructions de branchement conditionnel. Prenons comme exemple:

BTFSC f,bQui va vouloir dire ( Bit Test File Skip if Clear ) qui signifie que lon va tester le bit b du registre f ( b peut prendre une valeur de 0 7 pour un registre 8 bits ) .Il peut alors y avoir deux solutions:

-Soit le bit test est 1, donc la condition teste nest pas ralise, le programme continue alors son droulement normalement en squence avec linstruction juste en dessous.

-Soit le bit test vaut 0, donc la condition teste est ralise et le programme saute linstruction qui suit le BTFSC dans le programme.

Cette faon de programmer peut paratre trange, mais avec de lhabitude, elle savre trs pratique et permet de raliser des programmes compacts et performants.

Les 35 instructions sont donc les suivantes:

(ADDLW ( Add Literal to W )syntaxe:ADDLWk

Opration:W+k(W

Bits dtat du registre STATUS affects: C,DC,Z

on ajoute au registre de travail la valeur k et on place le rsultat dans le registre de travail W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(ADDWF (Add W to F )syntaxe:ADDWFf,d

Opration:W+f(f si d=1 ou W+f(W si d=0

Bits dtat du registre STATUS affects: C,DC,Z

on ajoute le contenu de W et le contenu de f et on place le rsultat dans f si d=1 ou dans W si d=0

dure:

1 cycle instruction ( 4 cycles dhorloge )

(ANDLW ( And Literal and W )syntaxe:ANDLWk

Opration:W ET k(W

Bit dtat du registre STATUS affect: Z

on effectue un ET logique entre le contenu de W et le littral k , on place le rsultat dans W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(ANDWF ( And W with F )syntaxe:ANDWFf,d

Opration:W ET f(f si d=1 ou W ET f(W si d=0

Bit dtat du registre STATUS affect:Z

on effectue un ET logique entre le contenu de W et le contenu de f , on place le rsultat dans W si d=0 ou dans f si d=1

dure:

1 cycle instruction ( 4 cycles dhorloge )

(BCF ( Bit Clear F )syntaxe:BCF

f,b

Opration:0(b(f)

Bits dtat du registre STATUS affects:aucuns

on met 0 le bit b du registre f

dure:

1 cycle instruction ( 4 cycles dhorloge )

(BSF ( Bit Set F )syntaxe:BSF

f,b

Opration:1(b(f)

Bits dtat du registre STATUS affects:aucuns

on met 1 le bit b du registre f

dure:

1 cycle instruction ( 4 cycles dhorloge )

(BTFSC ( Bit Test , Skip if Clear )syntaxe:BTFSCf,b

Opration:saut de linstruction qui suit si b(f)=0

Bits dtat du registre STATUS affects:aucuns

Si le bit b de f est nul, linstruction qui suit celle-ci est ignore et traite comme un NOP. Dans ce cas et dans ce cas seulement, linstruction BTFSC demande deux cycles pour sexcuter.

dure:

1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

(BTFSS ( Bit Test , Skip if Set )syntaxe:BTFSS

f,b

Opration:saut de linstruction qui suit si b(f)=1

Bits dtat du registre STATUS affects:aucuns

Si le bit b de f est 1, linstruction qui suit celle-ci est ignore et traite comme un NOP. Dans ce cas et dans ce cas seulement, linstruction BTFSS demande deux cycles pour sexcuter.

dure:

1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

(CALL (subroutine Call)syntaxe:CALL

label

Bits dtat du registre STATUS affects:aucuns

On sauvegarde ladresse de retour dans la pile puis on appelle le sous programme dfinit avec ltiquette label

dure:

2 cycles instruction ( 8 cycles dhorloge )

(CLRF ( Clear F )syntaxe:CLRF

f

Opration:0(F

Bit dtat du registre STATUS affect:Z

On met le contenu du registre f 0 et on positionne Z

dure:

1 cycle instruction ( 4 cycles dhorloge )

(CLRW ( Clear W )syntaxe:CLRW

Opration:0(W

Bit dtat du registre STATUS affect:Z

On met le contenu du registre W 0 et on positionne Z

dure:

1 cycle instruction ( 4 cycles dhorloge )

(CLRWDT ( Clear WatchDog Timer )syntaxe:CLRWDT

Opration:0(WDT et 0(pr diviseur du Timer

On met le contenu du registre du timer chien de garde 0 ainsi que le pr diviseur

dure:

1 cycle instruction ( 4 cycles dhorloge )

(COMF ( Complement F )

syntaxe:COMF

f,d

opration:/f(f si d=1 ou /f(W si d=0

Bit dtat du registre STATUS affect:Z

On complmente le contenu du registre f bit bit , le rsultat est plac dans f si d=1 , dans W si d=0 .

dure:

1 cycle instruction ( 4 cycles dhorloge )

(DECF ( Decrement F )

syntaxe:DECF

f,d

opration:f-1(f si d=1 ou f-1(W si d=0

Bit dtat du registre STATUS affect:Z

On diminue le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si d=0 ( dans ce cas f reste inchang ).

dure:

1 cycle instruction ( 4 cycles dhorloge )

(DECFSZ ( Decrement F ,Skip if Zero )

syntaxe:DECFSZf,d

opration:f-1(f si d=1 ou f-1(W si d=0 et saut si f-1=0

Bit dtat du registre STATUS affect:aucun

On diminue le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si d=0 (dans ce cas f reste inchang).Si le rsultat est nul, linstruction suivante est ignore et dans ce cas, cette instruction dure deux cycles.

dure:

1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

(GOTO ( branchement inconditionnel )syntaxe:GOTO

label

Bit dtat du registre STATUS affect:aucun

On effectue un saut dans le programme pour aller ladresse point par le label prcis dans GOTO

Dure:2 cycles ( 8 cycles dhorloge )

(INCF (Increment F)syntaxe:INCF

f,d

opration:f+1(f si d=1 ou f+1(W si d=0

Bit dtat du registre STATUS affect:Z

On augment le contenu du registre f dune unit, le rsultat est plac dans f si d=1 , dans W si d=0 ( dans ce cas f reste inchang ).

dure:

1 cycle instruction ( 4 cycles dhorloge )

(INCFSZ ( Increment F , Skip if Zero )syntaxe:INCFSZf,d

opration:f+1(f si d=1 ou f+1(W si d=0 et saut si f-1=0

Bit dtat du registre STATUS affect:aucun

On augmente le contenu du registre f dune unit, le rsultat est plac dans f si d=1, dans W si d=0 (dans ce cas f reste inchang).Si le rsultat est nul, linstruction suivante est ignore et dans ce cas, cette instruction dure deux cycles.

dure:

1 cycle instruction ( 4 cycles dhorloge ) ou 2 cycles

(IORLW ( Inclusive Or Literal with W )

syntaxe:IORLWk

opration:W OU k ( W

Bit dtat du registre STATUS affect:Z

On effectue un OU logique entre le contenu de W et le littral k , le rsultat est plac dans W .

dure:

1 cycle instruction ( 4 cycles dhorloge )

(IORWF ( Inclusive Or W with F )syntaxe:IORWFf,d

opration:W OU f(f si d=1 ou W OU f(W si d=0

Bit dtat du registre STATUS affect:Z

On effectue un OU entre le contenu de W et le contenu de f , on place le rsultat dans f si d=1, dans W si d=0

dure:

1 cycle instruction ( 4 cycles dhorloge )

(MOVF ( Move F )syntaxe:MOVF

f,d

opration:f(f si d=1 ou f(W si d=0

Bit dtat du registre STATUS affect:Z

On dplace le contenu de f dans f si d=1 ou de f dans W si d=0. Attention, le dplacement de f dans f semble priori inutile, mais il permet en fait de tester le contenu de f par rapport 0 et de positionner le bit Z

dure:

1 cycle instruction ( 4 cycles dhorloge )

(MOVLW ( Move Literal to W )syntaxe:MOVLWk

opration:k(W

Bit dtat du registre STATUS affect:aucun

On charge le contenu de W avec le littral k

dure:

1 cycle instruction ( 4 cycles dhorloge )

(MOVWF ( Move W to F )syntaxe:MOVWFf

opration:W(f

Bit dtat du registre STATUS affect:aucun

On charge le contenu de f avec le contenu de W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(NOP ( No Operation )syntaxe:NOP

opration:nant

Bit dtat du registre STATUS affect:aucun

On ne fait que consommer du temps machine ( un cycle dans ce cas )

dure:

1 cycle instruction ( 4 cycles dhorloge )

(RETFIE ( Return From Interrupt )syntaxe:RETFIE

opration:Pile( PC

Bit dtat du registre STATUS affect:aucun

On charge le compteur ordinal avec la valeur qui se trouve au sommet de la pile pour revenir au programme principal lorsque lexcution du sous programme est termine.

dure:

2 cycles instruction ( 8 cycles dhorloge )

(RETLW ( Return Literal to W )syntaxe:RETLW

k

opration:k(W , Pile(PC

Bit dtat du registre STATUS affect:aucun

On charge le contenu de W avec le littral k puis on charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme .

dure:

2 cycles instruction ( 8 cycles dhorloge )

(RETURN ( Return from subroutine )syntaxe:RETURN

opration:Pile(PC

Bit dtat du registre STATUS affect:aucun

On charge le compteur ordinal PC avec la valeur qui se trouve au sommet de la pile effectuent ainsi un retour de sous programme. Cest un RETLW simplifi .

dure:

2 cycles instruction ( 8 cycles dhorloge )

(RLF ( Rotate Left F through carry )syntaxe:RLF

f,d

opration:

Bit dtat du registre STATUS affect:C

On effectue une rotation gauche de un bit du contenu du registre f en passant par le bit de retenu C . Si d=1 le rsultat est plac dans f , si d=0 , le rsultat est plac dans W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(RRF ( Rotate Right F through carry )syntaxe:RRF

f,d

opration:

Bit dtat du registre STATUS affect:C

On effectue une rotation droite de un bit du contenu du registre f en passant par le bit de retenu C. Si d=1 le rsultat est plac dans f , si d=0, le rsultat est plac dans W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(SLEEP ( Sleep )syntaxe:SLEEP

opration:0(PD, 1(T0, 0(WDT , 0( pr diviseur

On place le circuit en mode sommeil avec arrt de loscillateur. Cette commande est utiliser avec prcaution, elle ncessite la connaissance du mode sommeil.

(SUBLW ( Substract W from Literal )syntaxe:SUBLW

k

opration:k-W(W

Bits dtat du registre STATUS affects:C,DC,Z

On soustrait le contenu du registre W du littral k et on place le rsultat dans W ( soustraction par la mthode du complment 2 ).

dure:

1 cycle instruction ( 4 cycles dhorloge )

(SUBWF ( Substract W from F )syntaxe:SUBWF

f,d

opration:f-W(W si d=0 ou f-W(f si d=1

Bits dtat du registre STATUS affects:C,DC,Z

On soustrait le contenu du registre W du contenu du registre f et on place le rsultat dans W si d=0, ou dans f si d=1 ( soustraction par la mthode du complment 2 ).

dure:

1 cycle instruction ( 4 cycles dhorloge )

(SWAPF ( Swap F )syntaxe:SWAPF

f,d

opration:f(0-3)(f(4-7) et f(4-7)(f(0-3) rsultat dans W ou f selon d

Bit dtat du registre STATUS affect:aucun

On change les quatre bits de poids forts avec les quatre bits de poids faibles et on place le rsultat dans W si d=0 , ou dans f si d=1

dure:

1 cycle instruction ( 4 cycles dhorloge )

(XORLW ( Exclusive Or Literal with W )syntaxe:XORLW

k

opration:W OU EXCLUSIF k(W

Bit dtat du registre STATUS affect:Z

On effectue un OU Exclusif entre W et le littral k, le rsultat est plac dans W

dure:

1 cycle instruction ( 4 cycles dhorloge )

(XORWF ( Exclusive Or W with F)syntaxe:XORWF

f,d

opration:W OU EXCLUSIF f(W si d=0 ou W OU EXCLUSIF f(f si d=1

Bit dtat du registre STATUS affect:Z

On effectue un OU Exclusif entre W et le contenu de f , le rsultat est plac dans W si d=0, sinon il est plac dans f .

dure:

1 cycle instruction ( 4 cycles dhorloge )

JEU D'INSTRUCTION

V Petite application (destine aux professeurs)

Afin de mettre en pratique des notions encore toutes fraches, il peut tre intressant de clturer ce cours par une sance de travaux dirigs. Commenons par le commencement avec un petit exemple qui n'a d'autre intrt que d'apprhender de faon simple un premier programme crit en assembleur.

Voici donc un exemple de programme dont la seule fonction et de recopier sur la patte RA0 (donc programme en sortie) l'tat de la patte RB0 ( donc programme en entre). Sur ce petit exemple, on peut alors aborder les notions d'algorithme et de structure de programmation avec les instructions spcifique aux logiciels de compilation (org, equ, end , les tiquettes, etc).

;dfinition des diffrentes tiquettes

;pour une structure de programme plus claire

;equ n'est pas une instruction PIC mais sert

;au compilateurstatusequh'0003'

;adresse du registre (page 0)

portaequh'0005'

;adresse porta (page0)

portbequh'0006'

;adresse port b (page 0)

trisaequh'0085'

;adresse trisa (page 1)

trisbequh'0086'

;adresse trisb (page 1)

RA0equh'0000'

;rang du bit RA0 dans porta

RB0equh'0000'

;rang du bit RB0 dans portb

RP0equh'0005'

;rang du bit RP0 dans status

;dbut du programme indiqu par l'instruction

;org qui est ncessaire au compilateur

org0000

;dbut du programme

;ncessairement l'adresse

;0000 pour tous les PICs

;initialisation de RA0 en sortie

bsfstatus,RP0;passage en page 1 de

;la mmoire de donnes

bcftrisa,RA0;mise 0 de RA0 (sortie)

;initialisation de RB0 en entre

bsftrisb,RB0;mise 1 de RB0 (entre)

,mais inutile en pratique

;car ralis aprs un RESET

;programme principal

;test de RB0 et recopie en RA0

boucbcfstatus,RP0;retour en page 0

btfssportb,RB0;test RB0 saute l'instruction si RB0=1

gotoeteind

;va l'tiquette eteint

gotoallum

;va l'tiquette allum

;mise 0 de RA0

eteintbcfporta,RA0;mise 0 de RA0

gotobouc

;retour la boucle de test

;mise 1 de RA0

allumbsfporta,RA0;mise 1 de RA0

gotobouc

;retour la boucle de test

;fin du programme

;utilis par le compilateur

end

1

RBPU/INTEDGRTSRTEPSAPS2PS1PS0

0

2

3

4

5

6

7

C

Registre f

0

1

2

3

4

5

6

7

C

Registre f

STATUS

STATUS

du registre intcon

il se produit un retard de deux cycles avant que le timer ne commence compter aprs un chargement

RPBU/

INTEDG

RTS

RTE

RTS

RTE

RTS

RTE

dbut

initialisation de RA0 en sortie

initialisation du portB en entre

RB0=0?

non

oui

RA0=0

RA0=1

Algorithme du programme

Page1/27