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
 
   
   
 |