Tutorials - PIC

 

PIC10F220/222


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

PIC10F220 ha un program counter (PC) 9 bit (PC) 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.

PIC10F222 ha 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.

L' area complessiva è di 512 e quindi non necessita di una divisone in pagine e non è richiesto alcun meccanismo particolare di accesso a tutte le locazioni.

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 al precedente.

 

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.

Per il PIC10F220 ci sono:
  • 9 SFR da 00h a 08h
  • 16 bytes di RAM da 10h a 1Fh 

Gli indirizzi da 09h a 0Fh non sono implementati; la lettura rende 0 e la scrittura non ha effetto.

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 PIC10F222 la situazione simile. Ci sono:
  • 9 SFR da 00h a 08h
  • 23 bytes di RAM da 09h a 1Fh

In entrambi i PIC 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.

Essendo, in ogni caso, l' area RAM limitata tra 00h e 1Fh non è necessaria la divisione in banchi tipica dei PIC con una quantità maggiore di risorse.

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 10F220 si trova a 10h. L' area tra 09h e 0Fh non è implementata.
  • in 10F222, invece, la prima locazione di RAM dati si trova a 09h.

 


SFR

Sono 11 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

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 06/05/13.