Leçons de niveau 15

Utiliser les PIC 16F et 18F/Architecture du 16F84

Une page de Wikiversité.
Aller à : navigation, rechercher
Début de la boite de navigation du chapitre
Architecture du 16F84
Icône de la faculté
Chapitre no 2
Leçon : Utiliser les PIC 16F et 18F
Chap. préc. : Introduction
Chap. suiv. : Arithmétique et assembleur

Exercices :

Architecture du 16F84
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Utiliser les PIC 16F et 18F : Architecture du 16F84
Utiliser les PIC 16F et 18F/Architecture du 16F84
 », n'a pu être restituée correctement ci-dessus.

Architecture générale[modifier | modifier le wikicode]

Architecture mémoire[modifier | modifier le wikicode]

La donnée de base de PIC (16FXXX) est l’octet. L’octet comporte 8 bits. Le bit b0 est le bit de poids faible et le bit b7 est le bit de poids fort.

Mémoire programme (ou mémoire morte) : la mémoire programme du PIC 16F84 de Microchip est organisée en mots de 14 bits. Le bit b0 est aussi le bit de poids faible et le bit b13 est le bit de poids fort. L'adressage de cette mémoire programme se fait sur 10 bits. La mémoire mémoire programme comporte donc 1k x 14 bits.

Mémoire EEPROM : le PIC (16F84) dispose de 64 octets de mémoire EEPROM.

Mémoire donnée (ou RAM) : le PIC (16F84) dispose de deux banques de mémoire RAM (sélectionnées par le bit RP0 du registre STATUS) subdivisées en deux parties :

  • cases mémoires spéciales (registres spéciaux)
  • cases mémoires libres que vous pouvez utiliser à votre guise.

La mémoire du 16FXXX est organisée en banques sélectionnées par le(s) bit(s) RP0 (et RP1) du registre STATUS. Seul RP0 est utilisé pour le 16F84, soit deux banques. Seul RP0 est utilisé pour le 16F84, soit deux banques.

RAM et Registres du 16F84
Adr. Banque0 Banque1 Adr.
00h Indirect addr. Indirect addr. 80h
01h TMR0 OPTION_REG
02h PCL PCL 82h
03h STATUS STATUS
04h FSR FSR 84h
05h PORTA TRISA
06h PORTB TRISB 86h
07h -- --
08h EEDATA EECON1 88h
09h EEADR EECON2
0Ah PCLATH PCLATH 8Ah
0Bh INTCON INTCON
0Ch - 4Fh 68 cases mémoires idem banque 0 8Ch - CFH
50h - 7Fh inutilisé inutilisé D0H - FFH

La première partie de cette mémoire (les registres) est parfois appelée banc de registres.



Le modèle de programmation du PIC (16F84)[modifier | modifier le wikicode]

Le modèle de programmation d'un processeur désigne l’ensemble des registres et l’Unité Arithmétique et Logique (ALU) : c’est ce qu’il faut connaître pour faire de la bonne programmation.

Il peut être présenté de la manière très simplifiée suivante :

Le modèle très simplifié du 16FXXX

Remarquez les bits du registre de Status :

  • Z : zéro
  • C : retenue (Carry)
  • DC : demi-retenue (demi-carry)
  • IRP : sélection Banque en adressage indirect
  • PD : Power Down
  • RP1 : sélection banque
  • RP0: sélection banque
  • TO : Timer Overflow




Certains drapeaux sont manipulés d'une certaine manière par le matériel et d'une autre par le logiciel, mais tout cela sera abordé plus loin dans ce livre.

Le pointeur de pile n'est manipulé directement par aucune instruction. Il ne comporte qu'une profondeur de 8 niveaux. Cette fonctionnalité manquante complique la réalisation de compilateurs de langage évolué (C par exemple).

Le compteur programme est en fait composé de deux registres 8 bits :

  • PCL (02h/82h) pour les 8 bits de poids faibles (accessible en lecture/écriture)
  • PCLATH (0Ah/8Ah) pour les 5 bits de poids forts (accessible en lecture/écriture)

Le 16F84 gère seulement 10 bits des 13 bits du PC comme le montre la figure ci-dessus. Pour utiliser les 13 bits il faut utiliser un 16F877, comme l'indique aussi la figure.

Le modèle de programmation complet est plus complexe, en particulier à cause des registres. Ces registres ont été présentés dans la section précédente.

Réalisations de programmes assembleurs[modifier | modifier le wikicode]

Nous allons commencer doucement à présenter quelques instructions du PIC 16F84.

L'instruction mov dans tous ses états[modifier | modifier le wikicode]

L'instruction mov est une instruction destinée à transférer une donnée d'un point source vers un point destination. La source peut être : mémoire programme, le banc de registres et mémoire RAM (noté BR/RAM dans la suite), ou l’accumulateur W. La destination peut être BR/RAM, ou le registre W (qui ne fait pas partie du BR/RAM).

Les différentes sources définissent les modes d'adressage que nous nous proposons d'examiner maintenant.

Adressage Immédiat ou littéral (Immediate)[modifier | modifier le wikicode]

C'est l'adressage est le plus facile. L'opérande se trouve directement dans le programme derrière le code de l'instruction. La source est donc la mémoire programme.

Opérations littérales (adressage immédiat) et de contrôles pour 16FXXX
Mnémonique

Opérande

Description Cycles 14 bits Opcode status affected notes
MOVLW k chargement du littéral dans W 1 11 00xx kkkk kkkk

Vous avez dans ce tableau, à gauche le nom de l'instruction, puis une courte description en français suivie d'un nombre de cycle (pas très important pour la suite) enfin le code binaire de l'instruction (appelé aussi Opcode).

Ce tableau comporte assez d'information pour préciser que k est sur 8 bits. Il permet aussi de définir quelques notions.



Adressage Direct[modifier | modifier le wikicode]

L'adresse de l'opérande se trouve dans l'instruction.

Opérations orientées octets entre registre et mémoire (File en anglais)
Mnémonique

Opérande

Description Cycles 14 bits Opcode status affected notes
MOVF f,d déplacement de f vers W si d=0. Si d=1 déplacement F→F

mais en positionnant Z

1 00 1000 dfff ffff Z 1,2
MOVWF f déplacement de W vers f 1 00 0000 1fff ffff

Sauf spécification contraire, d vaut toujours, au choix :

  • 0 la destination est W et le contenu de l’emplacement mémoire n’est pas modifié.
  • 1 la destination est f (la lettre f) : dans ce cas le résultat est stocké dans l’emplacement mémoire.




Début de l'exemple


Fin de l'exemple


Bien comprendre le modèle de programmation[modifier | modifier le wikicode]

Il est important de bien comprendre le fonctionnement général d'un Microcontrôleur pour bien se persuader qu'une connaissance parfaite d'un état permet de trouver ses états suivants. Pour un micro-contrôleur, on appelle état, la connaissance (partielle) des valeurs des registres et des mémoires. Pour travailler sur ce modèle, il vous faut repérer le compteur programme et sa valeur, puis commencer à déassembler à partir de cette valeur.


Image logo représentative de la faculté Voir les exercices sur : Architecture du 16F84.