<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

 

La Programmation des pics
par Bigonoff
Premiere partie - pic 16f84 - Révision 4

Téléchargement des fichiers originels ici
Publié le 26/10/2001

10. Les modes d’adressage

Index coursIndex du cours
Chapitre précédent9. Le jeu d’instructions (Suite 2)
Chapitre suivant11. Réalisation d’un programme embarqué

 

10. Les modes d’adressage

Les instructions utilisent toutes une manière particulière d’accéder aux informations qu’elles manipulent. Ces méthodes sont appelées " modes d’adressage ".

Je vais simplement donner un petit exemple concret de ce qu’est chaque mode d’adressage. Supposons que vous vouliez mettre de l’argent dans votre poche :

10.1 L’adressage littéral ou immédiat

Avec l’ADRESSAGE IMMEDIAT ou ADRESSAGE LITTERAL, vous pouvez dire : ‘je mets 100F en poche’. La valeur fait IMMEDIATement partie de la phrase. Pas besoin d’un autre renseignement.

Exemple

  Movlw 0x55 ; charger la valeur 0x55 dans W


10.2 L’adressage direct

Avec l’ ADRESSAGE DIRECT, vous pouvez dire : je vais mettre le contenu du coffre numéro 10 dans ma poche. Ici, l’emplacement contenant la valeur utile est donné DIRECTement dans la phrase. Mais il faut d’abord aller ouvrir le coffre pour savoir ce que l’on va effectivement mettre en poche. On ne met donc pas en poche le numéro 10, mais ce qu’il contient.

Exemple

  Movf 0x10, W ; charger le contenu de l’emplacement 0x10 dans W


10.3 L’adressage indirect

Avec l’ ADRESSAGE INDIRECT , vous pouvez dire :

Le préposé du guichet numéro 3 va me donner le numéro du coffre qui contient la somme que je vais mettre en poche. Ici, vous obtenez le numéro du coffre INDIRECTement par le préposé au guichet. Vous devez donc allez demander à ce préposé qu’il vous donne le numéro du coffre que vous irez ouvrir pour prendre l’argent. On ne met donc en poche, ni le numéro du préposé, ni le numéro du coffre que celui-ci va vous donner. Il y a donc 2 opérations préalables avant de connaître la somme que vous empocherez.

Cette adressage fait appel à 2 registres, dont un est particulier, car il n’existe pas vraiment.
Examinons-les donc :

10.3.1 Les registres FSR et INDF

Ceux qui suivent sont déjà en train de chercher dans le tableau 4-2 après INDF.

INDF signifie INDirect File. Vous le voyez maintenant ? Et oui, c’est le fameux registre de l’adresse 0x00. Ce registre n’existe pas vraiment, ce n’est qu’un procédé d’accès particulier à FSR utilisé par la PIC pour des raisons de facilité de construction électronique interne.

Le registre FSR est à l’adresse 0x04 dans les 2 banques. Il n’est donc pas nécessaire de changer de banque pour y accéder, quelle que soit la banque en cours d’utilisation.

Dans l’exemple schématique précédent, le préposé au guichet, c’est le registre FSR. L’adressage indirect est un peu particulier sur les PICS, puisque c’est toujours à la même adresse que se trouvera l’adresse de destination. Comment cela se passe-t-il ?

  • Premièrement, nous devons écrire l’adresse pointée dans le registre FSR.
  • Ensuite, nous accédons à cette adresse pointée par le registre INDF.

On peut donc dire que INDF est en fait le registre FSR utilisé pour accéder à la case mémoire. Donc, quand on veut modifier la case mémoire pointée, on modifie FSR, quand on veut connaître l’adresse de la case pointée, on accède également à FSR. Si on veut accéder au CONTENU de la case pointée, on accède via INDF. Nous allons voir tout ceci par un petit exemple, mais avant :

ATTENTION

Le contenu du registre FSR pointe sur une adresse en 8 bits. Or, sur certaines PICs, la zone RAM contient 4 banques (16F876). L’adresse complète est donc une adresse sur 9 bits. L’adresse complète est obtenue, en adressage DIRECT, par l’ajout du bit 7 et 8 sous forme de RP0¨et RP1 (RP1 est inutilisé pour la 16F84 car seulement 2 banques) et par l’ajout du bit IRP dans le cas de l’adressage INDIRECT (inutilisé sur la 16F84). Veillez donc à toujours laisser IRP (dans le registre STATUS) et RP1 à 0 pour assurer la portabilité de votre programme.

Exemple

  movlw 0x50 ; chargeons une valeur quelconque
  movwf mavariable ; et plaçons-la dans la variable " mavariable "
       
  movlw mavariable ; on charge l’ADRESSE de mavariable, par
      ; exemple, dans les leçons précédentes, c’était
      ; 0x0E. (W) = 0x0E
  movwf FSR ; on place l’adresse de destination dans FSR.
      ; on dira que FSR POINTE sur mavariable
  movf INDF,w ; charger le CONTENU de INDF dans W.

LE CONTENU DE INDF EST TRADUIT PAR LA PIC COMME ETANT LE CONTENU DE L’EMPLACEMENT MEMOIRE POINTE PAR FSR  (W) = 0X50

10.4 Quelques exemples

Je vais me répéter, mais les modes d’adressages doivent impérativement être compris. En multipliant les exemples, j’espère que tout le monde pourra comprendre. Pour les habitués des processeurs divers, excusez ces répétitions. Les registres sont intialisés avec les valeurs précédentes.

  movlw mavariable  

C’est de l’adressage immédiat ou littéral ; donc on charge la VALEUR de mavariable, ce qui correspond en réalité à son ADRESSE. Donc 0x0E est placé dans (W). Ceci se reconnaît au " l " de l’instruction movlw

  movf mavariable , w  

Cette fois, c’est de l’adressage DIRECT, donc, on va à l’adresse mavariable voir ce qu’il y a à l’intérieur. On y trouve le CONTENU de mavariable, donc (w) = 0x50 (dans notre exemple).

  movf INDF , w  

Maintenant, c’est de l’adressage INDIRECT. Ce mode d’adressage se reconnaît immédiatement par l’utilisation du registre INDF. La PIC va voir dans le registre FSR, et lit l’adresse contenue, dans ce cas 0X0E. Elle va ensuite dans l’emplacement visé, et lit le CONTENU. Donc, dans (W) on aura le contenu de 0x0E, soit 0x50.

  movf FSR , w  

Ceci est un piège. C’est en effet de l’adressage DIRECT. On placera donc dans (W) le CONTENU du registre FSR, donc 0X0E sera mis dans (W).

 

Index cours
Index du cours
Chapitre précédent
9. Le jeu d’instructions (Suite 2)
Chapitre suivant
11. Réalisation d’un programme embarqué

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_cours10.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail