You are on page 1of 3

http://www.didel.

com/

info@didel.com

http://www.bricobot.ch/

info@bricobot.ch

http://www.didel.com/pic/Architecture.pdf

Architecture des PICs


Ce document prsente larchitecture des microcontrleurs PICs pour un lecteur qui na pas de connaissances particulires, sans rentrer dans trop de dtail. Il complte les cours Kidule, 628, 877 et dautres documents qui montrent comment programmer et insistent plus sur le rpertoire dinstructions. Un premier modle simplifi du PIC Un microcontrleur a comme premire mission de lire des entres, et dcider les valeurs assigner aux sorties. Les PICs 16Fxxx peuvent tre vus en premire approche comme comportant des ports dentre-sortie plus ou moins complets et spcialiss, avec leurs registres de direction associs. Les port A, B, C sont aux adresses 5, 6, 7 (l'assembleur le sait, il n'y a pas besoin de le lui dire). Les registres de direction TrisA, TrisB et TrisC dfinissent si le Fig 1 Modle pour les ports et les 2 mmoires du PIC 16F870 bit du port est en entre ou en sortie, comme on verra plus loin. Une mmoire en criture et lecture prolonge la zone des entres-sorties et registres de contrle et stocke les variables (compteurs, registres de calcul, valeurs temporaires). Les instruction sont dans une mmoire programme, en lecture seulement (lcriture se fait avec un programmateur partir du programme traduit en binaire). Elles sont excutes lune aprs lautre en gnral et analyses par le dcodeur dinstructions. Un registre W joue un rle particulier et fait penser aux plaques tournantes dans les anciennes gares de locomotives. La loco est une valeur qui passe par W pour aller dans le hangar (ports ou variables), vers la gare (entres-sorties) ou dans le dpt (test, modifications). Lorsque le processeur excute par exemple l'instruction "Move W,PortA", une impulsion charge le registre appel PortA ou RA (register A). Les sorties qui ont t prpares en sortie copient cette information. W --> registre interne --> sorties. Si on relit avec un "Move PortA,W", on lit directement l'tat des broches. A partir de la position DebVar, l'utilisateur peut placer ses variables, compteurs, bits d'tat, etc. Il faut passer par le registre W (Work register) pour initialiser une variable une valeur diffrente de zro. Le rsultat des oprations entre W et un registre n'est pas ncessairement dans W; la destination peut tre le registre, ce qui est souvent trs efficace. On a donc des instruction comme
Move #Valeur,W ; Le nombre Valeur est copi dans W Move W,MaVariable ; Le contenu de W est copi dans MaVariable Clr Compteur ; Initilalise la variable compteur avec la valeur zro (200000000) Add W,Total ; Additionne le contenu de W au contenu de Total, et met le rsultat dans Total

Le registre F ou STATUS (flags, tat) ladresse 3 mmorise en particulier deux bits que l'on trouve dans tous les processeurs: C est le "Carry", activ par une addition avec dpassement de capacit, ou par un dcalage. Z est le "zro bit", activ si le rsultat d'une opration est nul (les 8 bits du rsultat transfr dans W ou dans un registre sont nuls). Toutes les instructions n'agissent pas sur Z et sur C: la feuille de codage prcise pour chaque intruction les bits modifis. Le programme est dans une mmoire spare des variables (architecture dite de "Harvard"). Le processeur dmarre en 0 (nous parlerons des interruptions plus tard) et excute chaque instruction en 1 microseconde ( 4MHz), sauf les sauts qui demandent deux microsecondes.

Un programme commence toujours par une initialisation des registres de direction des ports utiliss. Si on ne fait rien, les ports sont en entre aprs un Reset. Il faut aussi initialiser les variables, compteurs dont la valeur l'enclenchement est importante. On donne un nom aux variables, en listant dans les programmes simples leur emplacement mmoire. Var1= 16'20 (mieux: DebVar+0), Var2 = 16'21 (DebVar+1) Un programme doit spcifier le processeur, pour que lassembleur vrifie que les instructions sont compatibles. Il dfinit ensuite les noms constantes et les variables ; le programme en mmoire ne contient que des nombres, mais cest illisible pour nous. Le programme est structur en modules, routines, tableaux, avec des commentaires de structure. La mise en page facilite la lecture, et SmileNG est fier de ses squences boa. Le programme se termine par un .End qui dit l'assembleur que son travail de traduction est termin. Les lignes suivantes sont ignores. Cela peut tre le mode d'emploi de votre programme. Documentez le but et la structure autant que possible dans votre programme et pas ailleurs. Aprs le .End, il n'y a plus besoin de ; ou \ devant les lignes, et les lignes peuvent avoir plus de 96 caractres. Un peu plus sur l'architecture du PIC Les bits Z, C et D, runis dans un registre de "fanions" (flag register F ou STATUS) sont trs importants et nous donneront un peu de fil retordre. Le bit Z est activ par quelques instructions pour signaler que le rsultat de l'opration est nul. Par exemple l'instruction "XOR Var,W" calcule le ou exclusif de la variable Var et du contenu du registre W. Z est activ si le rsultat est nul, ce qui veut dire que Var et W avaient le mme contenu (aprs excution de l'instruction la variable Var est inchange et W vaut zro dans ce cas). "Move W,Var" ne modifie pas Z, mais "Move Var,W" modifie Z (Z=1 si Var contient zro). Test Var est en fait un Move Var,Var, et modifie Z. Mais Test TMR0 ne doit pas tre utilis pour savoir si TMR0 est zro ! Il faut, au dbut, regarder chaque fois la feuille de codage (voir plus loin) pour vrifier ce que fait exactement l'instruction. Le bit C est activ s'il y a dpassement de capacit dans une addition, soustraction ou dcalage. Le bit D n'est activ que par l'addition et la soustraction; il est utile pour calculer en dcimal, mais il est rarement utilis. Banques Avec ses instructions de 14 bits, les PICs nont pas assez de bits pour slectionner assez de registres et variables. On prend les bits qui manquent dans le registre Status. Cest comme les pages dun livre. En page 0 (Bank0) on a les ports (jusqu ladresse 20) et en gnral toutes les variables de lutilisateur. En Bank1 on a les registres Tris et dautres registres pour priphriqes. Si on change de banque, il ne faut pas oublier de revenir ! Si on veut lire en Eeprom par exemple, il faut accder des registres qui sont dans deux banques diffrentes, les banques 3 et 2 (avec le 16F877).
Move Move Clr Set Move Move Move Move Move #3,W W,Status EECON1:#EEPGD ; En banque 3 EECON1:#RD #2,W W,Status EeData,W ; en banque 2 #0,W W,Status ; banque 0 pour la suite

Ceci nest pas une bonne faon dcrire, poisque tous les autres bits du registre Status sont mis zro. On utilise les instructions Set et Clr bits, Les macros dfinies dans les fichies xxSet.asi ont la forme
.Macro Bank0to3 Set Status :#RB0 Set Status :#RB1 .Endmacro

Ces commutations de banque embtent dans linitialisation des priphrique, et les programmes PicTest sont l pour donner des exemples dinitialisation. Dans le programme de lutilisateur, on change rarement de banque et pour des interventions trs spciales.

Registre de configuration Prenons lexemple de loscillateur. Un client veut mettre un quartz externe, un autre se contente de la prcision dun oscillateur interne. Le fabricant ne vas pas faire deux microcontleurs diffrents. Un bit dans une mmoire spciale va choisir le mode. Ce bit est dans un registre de configuration, ladresse 2007 en gnral. Ceci explique les lignes qui terminent un programme (elles peuvent aussi se mettre avant le programme) :
.Loc .16 16'2007 16'3F39

Registre de direction Tris Pour les spcialistes ! On a dit que les registres de directions sont en banque 1. Si le PortA est ladresse 5, TrisA est ladresse 1685, mais cest une adresse que lassembleur naccepte pas, puisquil ny a que 7 lignes dadresse (maximum 167F). TrisA est donc dclar = 5 et linstruction Move W,TrisA doit tre prcde de Set Status:RB0 pour que laccs se fasse dans la bonne banque. Si on crit Move W,PortA, le rsultat est le mme puisque PortA = 5. Historiquement, trois instructions ont t dfinies pour transfrer directement W dans le registre de direction A, B, C, quelles que soit la banque slectionne. Ces instructions nexistent pas pour les ports D, E, etc. Le problme est que Calm a not ces instructions Move W, TrisA Move TrisB Move W,TrisC, et accepte actuellement les instructions Move W,TrisD Move W,TrisE qui nont pas deffet. Dans un futur proche, Move W,TrisD Move W,TrisE (pour les processeurs 40 pattes) devront sexcuter avec la banque 1 slectionne. En attendant, linitialisation des ports peut scrire comme suit : Set Status:#RP0 ; ou macro Bank1 Move #0,W ; sorties Move W,TrisA ; mme effet dans toutes les banques Move W,TrisB Move W,TrisC Move W,PortD ;TrisD Move W,PortE ;TrisE Clr Status:#RP0 ; ou macro Bank0 Pile des adresses de retour Les PICs ont une pile de 8 positions (2 positions pour les 10F 12F). Si on dborde, la plante est assure. Le processeur continue excuter des instructions, et peut retomber sur votre programme ! On ne peut pas initialiser/rinitialiser cette pile. Cela permet de faire des choses interdites dans dautres processeurs, comme mettre une sortie derreur dans une routine avec un Jump. Limitation mmoire Les adresses des PIC de la famille 16F ont 12 bits, ce qui limite 14k de mmoire. Le 16F877 en a plus, difficile exploiter, voir www.didel.com/pic/MultiPages.pdf Instructions et structuration Notre meilleur texte (le plus rcent) utilise le kit Eval2840/877 http://www.didel.com/pic/Cours877.pdf et offre des exercice progressifs et des exemples qui permettent de crer ses propres applications avec des PICs de toute taille. Programmer dans nimporte quel langage ncessite une bonne comprhension de lenvironnement de programmation, qui dpends de lapplication. Programmer en C est dit plus facile car les initialisations, commutations de banque, etc, sont caches et les applications choisies demandent en gnral de calculer et afficher des textes, ce que lon apprend lcole. Grer des bits et des priphriques nest pas plus facile en C quen assembleur. Alors courage !
jdn 090820/090922/100926

You might also like