ELEMANIA
PIC16F690 - Memoria RAM: registri
Memoria RAM, registri e banchi

Ogni parola della RAM interna del PIC viene detta registro (register). Questa denominazione potrebbe inizialmente confondere coloro che, abituati alla programmazione di microprocessori tradizionali come lo Z80, considerano la RAM come un integrato esterno al microprocessore e i registri come una piccola area di memoria interna al µP stesso.

Nel caso del PIC però la RAM è interna al microcontrollore e dunque non c'è più la distinzione fra memoria e registri: ogni locazione di memoria costituisce un registro per il PIC.

La memoria RAM è suddivisa in 4 banchi (Bank0, Bank1, Bank2, Bank3) ciascuno di 128 Byte (per un totale di 512 Byte di RAM, anche se in realtà non tutte le locazioni sono disponibili e utilizzate). I banchi a loro volta sono divisi internamente in un'area dedicata ai cosiddetti SFR (Special Function Register) e in un'area che invece contiene i GPR (General Purpose Register). La figura seguente mostra la suddivisione in banchi con i relativi indirizzi:

Le aree di memoria colorate in grigio nella figura precedente non sono implementate; qualsiasi lettura in queste locazioni ritorna sempre con valore zero, mentre le scritture non hanno effetto.

Osservando la mappa di memoria nella figura precedente osserviamo che alcuni registri (locazioni di memoria) hanno lo stesso nome e la stessa posizione in tutti i banchi (per esempio il registro STATUS occupa la quarta locazione di ogni banco). Non si tratta in realtà in questi casi di locazioni di memoria distinte, ma di indirizzi diversi associati alla stessa locazione fisica. In altre parole: scrivendo un valore nella locazione STATUS del banco 0, lo stesso identico valore viene scritto nel registro STATUS dei banchi 1, 2 e 3.

La locazione di indirizzo zero (la prima) di ogni banco serve per implementare il meccanismo di indirizzamento indiretto e non corrisponde a una locazione fisica di memoria.

Indirizzi assoluti e indirizzi relativi

Si dice indirizzo assoluto di un registro del PIC, il suo indirizzo completo a 9 bit, cioè un numero che varia da 00h a1FFh. L'indirizzo relativo è invece l'indirizzo del registro all'interno del banco, cioè rispetto all'indirizzo iniziale del banco che lo contiene.

Facciamo un esempio. Il registro PIE1 del banco 1 ha come indirizzo assoluto 8Ch (esadecimale). Il suo indirizzo relativo (rispetto all'indirizzo base 80h del banco 1) è 0Ch.

La distinzione è importante perché, come vedremo più avanti, l'assembler del PIC consente di usare entrambe le notazioni per indicare un registro (ovvero si può usare sia l'indirizzo relativo che quello assoluto). Tuttavia, in entrambi i casi, bisogna prima selezionare il banco di appartenenza del registro. In altre parole, l'uso dell'indirizzo assoluto nei programmi in assembly è consentito, ma non elimina la necessità di specificare prima il banco di appartenenza del registro. Per questa ragione è meglio usare sempre solo indirizzi relativi, che non inducono in confusione (anche se molti programmatori e gli stessi programmi esemplificativi distribuiti da MicroChip, fanno ampio uso degli indirizzi assoluti).

Si noti che nella mappa di memoria in figura precedente, tutti gli indirizzi dei registri sono indicati come indirizzi assoluti. Per ottenere l'indirizzo relativo di un registro basta sottrarre dal suo indirizzo assoluto l'indirizzo iniziale del banco in cui si trova. Per esempio il registro ANSEL del banco 2 ha indirizzo assoluto 11Eh (esadecimale). L'indirizzo base del banco 2 è 100h. Perciò l'indirizzo relativo di ANSEL nel banco 2 è 11Eh - 100h = 1Eh.

 

Registro W (Working Register)

Fa eccezione all'organizzazione in banchi precedentemente illustrata, il registro W (Working Register). Il registro W è il registro più importante del PIC e può in qualche modo essere paragonato all'accumulatore presente nello Z80 e in altri microprocessori. Per esempio, come vedremo meglio in seguito, le istruzioni con due operandi implicano sempre l'uso del registro W.

A differenza degli altri registri del PIC che in realtà, come si è detto, sono locazioni in RAM dotate di un proprio indirizzo, il registro W è l'unico registro "autonomo", cioè non mappato in RAM. Per comprendere la differenza si consideri questa coppia di istruzioni in assembly del PIC:

         CLRW ; azzera il contenuto del registro W

         BSF 03,5        ; Seleziona il banco uno
         BCF 03,6        ; Seleziona il banco uno 
         CLRF 01         ; azzera il registro di indirizzo 01 sul banco 1 (OPTION_REG)

Si osservi come le istruzioni che agiscono su W non richiedano né la selezione di un banco di memoria né l'uso di un indirizzo, a differenza di quanto accade con gli altri registri,

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it