Professional Documents
Culture Documents
Page1/60
Page2/60
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
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.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
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.
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.
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
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.
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
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
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
RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7
R16
470
D8
LED-YELLOW
PIC16F84A
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
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.
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.
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.
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
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
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
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
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
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
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
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 :
Page41/60
Page42/60
Page44/60
Page45/60
flag ou bit indique sil vaut 1 que le rsultat de la premire opration effectu vaut 0 et vice versa.
Page47/60
Page48/60
Page49/60
Page50/60
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.
Page53/60
Page54/60
Page55/60
V.
V.1
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
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
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
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