Les mémoires
1Ko (mémoire flash)
Elle contient la suite des Instructions du programme
Chaque instruction occupe 14 bits
Elle utilise un bus dédié de 14 bits
Cette mémoire est non volatile
Elle ne peut être écrite et effacée que 1000 fois
Elle s'étend de 0000h à 03FFh
0000h contient le RESET VECTOR
0004h contient le INTERRUPT VECTOR
Mémoire programme (mémoire flash) | ||
Adresse en décimal | Adresse en hexadécimal | Contenu sur14 bits |
0 | 0000h | Reset Vector |
1 | 0001h | Instruction programme |
2 | 0002h | Instruction programme |
3 | 0003h | Instruction programme |
4 | 0004h | Interrupt Vector |
5 | 0005h | Instruction programme |
Instruction programme | ||
Instruction programme | ||
Instruction programme | ||
1023 | 03FFh | Instruction programme |
Cette mémoire programme peut être protégée contre la lecture par la directive __config
SFR (Special Function Register)
Il y a 15 registres directement adressables
Leur contenance est de 8 bits
Il sont en mémoire volatile (RAM statique)
Registres en RAM statique: SFR (SpecialFunction register) | |||||
Adresse en décimal | Adresse
en hexadécimal (Page 0) |
Nom du Registre | Adresse
en décimal (Page 1) |
Adresse en hexadécimal | Nom du Registre |
0 | 00h | INDF | 128 | 80h | INDF |
1 | 01h | TMR0 | 129 | 81h | OPTION_REG |
2 | 02h | PCL | 130 | 82h | PCL |
3 | 03h | STATUS | 131 | 83h | STATUS |
4 | 04h | FSR | 132 | 84h | FSR |
5 | 05h | PORT A | 133 | 85h | TRISA |
6 | 06h | PORT B | 134 | 86h | TRISB |
7 | 07h | 135 | 87h | ||
8 | 08h | EEDATA | 136 | 88h | EECON1 |
9 | 09h | EEADR | 137 | 89h | EECON2 |
10 | 0Ah | PCLATH | 138 | 8Ah | PCLATH |
11 | 0Bh | INTCON | 139 | 8Bh | INTCON |
Les registres sont adressés indirectement en utilisant le bit 5 (RP0) du registre STATUS:
RP0=0 correspond aux adresses de00hà 0Bh, on parle de banque ou de page 0 (Bank 0) (obtenu par l'instruction bcf STATUS,RP0)
RP0=1 correspond aux adresses de80h à 8Bh (Banque 1) (obtenu par l'instruction bsf STATUS,RP0)
Le bit 6 RP1 doit rester à 0, il donne accès à des banques 2 et 3 non disponibles sur le 16F84
RAM GPR (General Purpose register)
Il y a 68 cases mémoire directement adressables
Leur contenance est de 8 bits
Elles sont en mémoire volatile (RAM statique)
Mémoire de données en RAM Statique: GPR (General Purpose register) | ||
Adresse en décimal | Adresse en hexadécimal | Contenu sur 8 bits |
12 | 0Ch | Donnée |
13 | 0Dh | Donnée |
14 | 0Eh | Donnée |
Donnée | ||
Donnée | ||
Donnée | ||
Donnée | ||
79 | 4Fh | Donnée |
Pour l'accès à ces mémoires, l'état du bit 5 (RP0) du registre STATUS est indifférent
La zone EEPROM commence à 2100h, mais l'adressage ne peut être qu'indirect; l'adresse 2100h n'est utilisée que lors de l'écriture à la programmation du PIC
Il y a 64 cases mémoire de 8 bits
La mémoire EEPROM est on volatile, mais ne peut être écrite et effacée que 10 millions de fois, en outre l'accès est plus lent qu'avec la RAM
Mémoire de données en EEPROM | ||
Adresse en décimal | Adresse en hexadécimal | Contenu sur 8 bits |
0 | 00h | Donnée |
1 | 01h | Donnée |
2 | 02h | Donnée |
3 | 03h | Donnée |
Donnée | ||
Donnée | ||
Donnée | ||
63 | 3Fh | Donnée |
Ces mémoires peuvent être lues et écrites
La lecture peut se faire même si la mémoire programme a été mise en mode protégé
La mémoire EEPROM ne peut être adressée qu'indirectement:
Le contenu 8 bits de la case mémoire est dans le registre EEDATA (08h)
L'adresse de la case mémoire est dans le registre EEADR (09h)
Cette adresse ne peut aller que de 00h à 3Fh (64 cases mémoire)
Le temps d'écriture dépend de la tension d'alimentation et de la température
L'opération dans l'ordre est la suivante:
L'adresse est mise dans le registre EEADR (09h)
Le bit 0 RD du registre EECON1 (88h) est mis à 1 (par bsf EECON1,RD), il passera seul à 0 quand la lecture sera terminée
La lecture du contenu se fait par lecture du registre EEDATA (08h)
Exemple: (l'adresse de la case EEPROM à lire est dans le registre de travail W, le résultat sera dans W)
Ecriture de la mémoire EEPROM:
L'opération dans l'ordre est la suivante:
L'adresse est mise dans le registre EEADR (09h)
Le contenu à transférer est mis dans le registre EEDATA (08h)
Toutes les interruptions sont inhibées par mise à 0 du bit 7 GIE du registre INTCON (0Bh ou 8Bh)
L'écriture est autorisée par mise à 1 du bit 2 WREN du registre EECON1 (88h)
Mettre la valeur 55h dans le registre EECON2
Mettre la valeur AAh dans le registre EECON2
Lancer l'écriture dans l'EEPROM par mise à 1 du bit 1 WR du registre EECON1 (88h); ce bit passera seul à 0 quand l'écriture sera terminée, ce qui peut prendre une dizaine de millisecondes.
Remettre l'autorisation des interruptions par mise à 1 du bit 7 GIE du registre INTCON
Interdire l'écriture par mise à 0 du bit 2 WREN du registre EECON1 (88h)
Le Power up Timer de 72 ms interdit une écriture accidentelle à l'allumage
Lorsque l'écriture a eu lieu, le bit 4 (EEIF) du registre EECON1 (88h) passe à 1
Il peut être bon de vérifier que l'opération d'écriture s'est bien passée, le bit 3 WRERR du registre EECON1 (88h) est à 1 quand l'opération a été interrompue par un Reset MCLR ou un Watchdog; il faut alors recommencer, mais les valeurs dans EEDATA et EEADR sont toujours valables.
Une interruption peut être générée à la fin de cette écriture:
L' interruption est autorisée si le bit 6 (EEIE) du registre INTCON (0Bh ou 8Bh) est à 1
Exemple: (La valeur à écrire et l'adresse sont dans EEDATA etEEADR)
L'EEPROM peut aussi être écrite au moment de la programmation du PIC grâce à la directive DE après avoir précisé comme origine h'2100'
(mémoire flash)
Elle s'étend de h'2000' à h'2007' et contient des bits de configuration
Chaque mémoire occupe 14 bits mais tous ne sont pas accessibles
Cette mémoire est non volatile
Elle ne peut être écrite et effacée que 1000 fois
Elle n'est accessible qu'à la programmation du PIC
Cases Mémoire 2000h à 2003h:
Il est possible d'y inscrire des informations d'identification sur les 4 bits de poids faible grâce à la directive DE après avoir précisé comme origine h'2000'.
Case Mémoire 2007h:
Les bits 0 et 1 (FOSC0) et (FOSC1) déterminent le Type d'oscillateur utilisé
Mémoire programme 2007h | ||
Bit 1 (FOSC1) | Bit 0 (FOSC0) | Type d'oscillateur |
1 | 1 | RC (par défaut) |
1 | 0 | HS |
0 | 1 | XT |
0 | 0 | LP |
Le bit 2 (WDTE) autorise ou non le fonctionnement du Watchdog Timer
Mémoire de configuration 2007h | |
Bit 2 (WDTE) WatchDog Timer Enable | |
1 par défaut | Watch Dog actif |
0 | Watch Dog désactivé |
Le bit 3 (PWRTE) autorise ou non le fonctionnement du Power UP Timer produisant un délai de 72 ms à l'allumage qui prolonge le Power On Reset (POR)
Mémoire de configuration 2007h | |
Bit 3 (PWRTE) Power-Up Timer Enable | |
1 par défaut | Power-Up Timer désactivé |
0 | Power-Up Timer actif |
Ce délai dépend de la température et de la tension d'alimentation.
Le bits 4 (CP) Code Protection permet d'interdire la lecture du code programme dans le microcontroleur, son effacement est toujours autorisé, et les EEPROMS sont toujours lisibles.
Mémoire de configuration 2007h | |
Bits 4 (CP) Program memory Code Protection | |
1 par défaut | La lecture n'est pas protégée |
0 | La lecture est interdite |
Les 5 bits sont à 1 par défaut, soit
Code Protect | Power Up Timer | Watchdog | Oscillateur | |
bit 4 | bit 3 | bit 2 | bit 1, bit 0 | |
0->Oui | 0->Oui | 0->Non | 00->LP, 01->XT |
|
1->Non | 1->Non | 1->Oui | 10->HS, 11->RC |
On écrit dans la mémoire de configuration avec la directive __config
Retour au sommaire
© 1999-2009 A. Ducros F5AD