Tutorials - PIC

 

PIC 10F200/202/204/206


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.


 

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