La memoria
Riserviamo per ultima una trattazione della memoria, che interesserà principalmente chi vuole capire più a fondo
il funzionamento dei PIC e chi programma in Assembly; meno importante per
chi programma in C o simili.
In questi PIC troviamo due tipi di memoria:
- un' area di memoria FLASH, che comprende la memoria programma (program
memory), la configuration word e il registro ID
- un' area di memoria RAM che comprende la RAM dati e gli SFR
Trovate
qui qualche chiarimento, se occorre, per quanto riguarda il problema di
banchi e pagine.
Memoria programma
|
PIC10F200/204 hanno un program counter (PC) da 9 bit, in grado di indirizzare un programma
512 x 12 (ricordiamo
che l' ampiezza delle istruzione dei Baseline è 12 bit, mentre il bus
dati è a 8 bit - ved. architettura
Harvard).
Solamente il primi 256 x 12 (0000h-00FFh) sono fisicamente disponibili.
Un accesso all' area non implementata causerà un wrap-around
verso l' area implementata.
Il vettore di reset, ovvero la locazione a cui va posta la prima
istruzione del programma, si trova, come solito per i PIC, a 0000h.
In effetti, l' istruzione iniziale è quella posta alla
locazione 00FFh contiene il valore di calibrazione dell'oscillatore
interno. Questo valore non deve essere cancellato o sovra scritto,
come abbiamo visto nelle pagine dedicate al clock.
Lo stack a 12 bit è di soli due livelli, quindi limita il numero
degli annidamenti di chiamate a subroutine. Non ci sono meccanismi che
indichino un overflow o underflow dello stack; quindi è
responsabilità del programmatore di evitare questi errori.
Nel set Baseline
non ci sono istruzioni di manipolazione dello stack.
|
|
PIC10F200/204 hanno un program counter (PC) da 10 bit, in grado di indirizzare un programma
1k x 12.
Solamente il primi 512 x 12 (0000h-01FFh) sono fisicamente disponibili.
Un accesso all' area non implementata causerà un wrap-around
verso l' area implementata.
Il vettore di reset, ovvero la locazione a cui va posta la prima
istruzione del programma, si trova, come solito per i PIC, a 0000h.
In effetti, l' istruzione iniziale è quella posta alla
locazione 01FFh contiene il valore di calibrazione dell'oscillatore
interno. Questo valore non deve essere cancellato o sovra scritto,
come abbiamo visto nelle pagine dedicate al clock.
Lo stack è identico agli altri PIC10F2xx
|
La memoria FLASH conserva quanti scritto anche al mancare della tensione di
alimentazione, quindi il contenuto delle locazioni da 0000h a 01FFh resta
invariato fino a che non viene volontariamente cancellato e/o riscritto.
Memoria RAM
La memoria di dati è composto di registri o byte di RAM, ovvero di memoria
scrivibile e leggibile a volontà, ma che perde quanto contenuto al momento in
cui la tensione scende sotto un valore minimo di mantenimento o viene a
mancare del tutto. .Nella stessa area sono implementati i registri di
controllo SFR.
In effetti, Microchip divide i registri in due gruppi funzionali:
- Special Function Registers (SFR)
- e registri di uso generale (General Purpose Register - GPR).
I registri SFR includono TMR0, il Program Counter (PCL), lo STATUS, i registri di I/O e il file
di indirizzamento indiretto (FSR). Inoltre, sono SFR anche tutti i
registri utilizzati per controllare la configurazione delle risorse interne.
I registri di uso generale sono la vera e propria RAM dati, sotto il comando delle
istruzioni del programma.
|
L' area RAM occupa un solo banco, per cui non esiste la necessità
di commutare banchi per accedere a queste risorse di memoria. Questo
rende semplice la gestione in Assembly.
Per il PIC10F100/204 ci sono:
- 7 SFR, da 00h a 06h.
- 16 bytes di RAM da 10h a 1Fh
La zona di RAM tra 07h e 0Fh non è implementata e la lettura rende
00.
Quindi la RAM realmente utilizzabile per i dati va da 10h a 1Fh.
Va ben compreso che, seppure General Purpose Register e SFR sono
entrambi "RAM", i primi non vanno usati per conservate dati,
poichè sono in relazione con la gestione delle varie funzioni del
processore; solamente i GPR saranno da impiegare come aree di memoria
volatile per i dati. |
|
Per il PIC10F202/206 la situazione è simile, con due piccole
differenze:
- 8 SFR, da 00h a 07h
- 24 bytes di RAM da 08h a 1Fh
L' area RAM dati, quindi è maggiore.
L' ottavo SFR (CMCON0) riguarda la gestione del comparatore.
|
Pure essendo i due chip del tutto simili, c'è da osservare la diversa
consistenza della memoria RAM:
Attenzione:
- la prima locazione di RAM dati in 10F200/204 si trova a 10h.
L' area tra 07h e 0Fh non è implementata.
- in 10F202/206, invece, la prima locazione di RAM dati
si trova a 08h.
|
SFR
Sono solo 7 o 8 i registri speciali SFR. Può essere utile riportare anche la tabella riassuntiva, in cui
appaiono i valori di default al reset.
Possiamo notare che i registri TRISGPIO
e OPTION non appaiono nella mappa della memoria in quanto sono SFR speciali a
sola scrittura, accessibili rispettivamente ed esclusivamente con le
istruzioni tris e option.
La tabella riporta:
- l' indirizzo assoluto del registro nella mappa della memoria RAM
- il nome (label) del registro
- gli mnemonici relativi ai bit
- il valore di default al POR (x indica un valore casuale)
- la pagina del foglio dati dove sono sono descritti nel dettaglio questi
registri
CMCON0 riguarda la gestione del comparatore ed è esclusivo di
10F204/206.
|