ELEMANIA
PIC16F690 - Il meccanismo dei banchi
Indirizzo in memoria di un registro del PIC

Come si è già detto, per poter accedere ad un registro (cioè a una parola in RAM) è necessario specificare sia l'indirizzo di memoria che il banco a cui appartiene. Perché questa complicazione?

Il motivo nasce dal fatto che per indirizzare 512 byte di memoria occorrerebbero 9 bit (infatti 29 = 512). Tuttavia il formato delle istruzioni del PIC consente, per motivi di lunghezza della parola e per una scelta progettuale, di usare solo 7 bit per l'indirizzo. La figura seguente mostra una tipica suddivisione dei bit di un'istruzione del PIC: 4 bit sono riservati al codice operativo (Op-code), 3 bit servono per specificare quale fra i bit di un registro si desidera modificare (bit address) e i rimanenti 7 bit servono per indicare il registro (locazione di memoria) su cui l'istruzione opera (Register address):

Con 7 bit si possono indirizzare solo 27 = 128 locazioni di memoria. Ecco spiegata la ragione della divisione della RAM in banchi. Per specificare un registro (cioè un indirizzo in memoria) bisogna prima indicare il banco di appartenenza e poi l'indirizzo (a 7 bit) del registro stesso nel banco. Con questo trucco si riesce a indirizzare l'intera RAM del PIC usando un numero ridotto di bit.

L'indirizzo del banco (formato da 2 bit) si trova nello Status Register. Tale indirizzo viene aggiunto automaticamente a quello fornito dall'istruzione e si ottiene in tale modo un indirizzo a 9 bit in grado di indirizzare l'intera memoria del PIC:

 

Il meccanismo dei banchi di memoria

Approfondiremo più avanti il linguaggio assembly del PIC. Tuttavia, data la sua importanza, ci occuperemo subito del meccanismo della selezione dei banchi di memoria. Supponiamo per esempio di voler accedere al registro PIE1 che si trova all'indirizzo relativo 0C (in esadecimale) sul banco uno:

Supponiamo per semplicità di voler azzerare (clear) tutti i bit del nostro registro. Per poter usare un registro occorre per prima cosa selezionare il banco di memoria di appartenenza. La selezione del banco di memoria avviene settando opportunamente i bit 5 (RP0) e 6 (RP1) dello Status Register nel seguente modo:

RP1 RP0 Banco
0 0 0
0 1 1
1 0 2
1 1 3

Lo Status Register (SR) è mappato all'indirizzo 03 in tutti i banchi. Dunque per accedere al registro PIE1 dovremmo prima selezionare il banco 1 settando i bit di SR, nel seguente modo (sulle istruzioni BSF e BCF vedi più avanti):

         BSF 03,5 ; setta a 1 il bit 5 di SR
         BCF 03,6 ; resetta a 0 il bit 6 di SR
 
         CLRF 0C ;  pulisce (azzera) il contenuto del registro (usando l'indirizzo relativo)

In realtà, come vedremo meglio nel seguito, l'assembly del PIC consente di semplificare grandemente l'accesso a un registro usando le costanti predefinite, nel seguente modo:

         BANKSEL PIE1 ; seleziona il banco dove si trova il registro PIE1
 
         CLRF PIE1 ; pulisce (azzera) il contenuto del registro (usando il nome del registro)

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it