Nei PIC18F il Program Counter impegna 21 bit, ovvero può indirizzare
memoria programma da 0 a 2 M ed è costituito da tre
registri da 8 bit ciascuno:
Come per i PIC Base/Mid, anche qui il contenuto di PCLATH e
PCLATU è trasferito al PC ad ogni operazione di scrittura di PCL. Così
pure per la lettura: leggendo PCL si trasferiranno PCH e PCU a PCLATH e PCLATU
rispettivamente.
Questo sistema esiste per evitare problemi nel
trasferimento di tre registri che possono essere caricati in tre fasi ma
che devono essere usati contemporaneamente nella creazione dell' indirizzo.Non
c'è alcun bisogno, nella gestione ordinaria del programma, di maneggiare
questi bytes in quanto sono gestiti autonomamente dal meccanismo del Program
Counter.
Solamente se si intende operare sul PCL si avrà a che fare con questi
registri.
Se
l' ampiezza della memoria programma disponibile nel PIC è
inferiore a 32 k (ed è la maggioranza dei casi dei PIC più
correnti), sono sufficienti 16 bit per l' indirizzamento e, di
conseguenza, PCU/PCLATU è sempre a 0.
Per contro, PCU / PCLATU sarà significativo nell'
indirizzamento di memoria programma oltre i 32 k.
|
Siccome l' ampiezza minima di una istruzione enhanced è 2
bytes, per evitare un disallineamento il bit 0 di PC di PCL è sempre
posto a 0, ovvero sono raggiungibili solamente posizioni pari in memoria
programma
Per le istruzioni a 4 bytes, il PC si muoverà in due passi successivi,
mentre l' istruzione viene presa ed elaborata.
Il PC avanza, se non modificato,
con gli indirizzi dei memoria a step di 2 bytes, dato che la
dimensione minima di una istruzione enhanced è 2 bytes.
|
Ne deriva che una assegnazione come:
ORG 0x01
istruzione
è invalida nei PIC18 e verrà segnalata in fase di
assemblaggio come errore, come pure qualsiasi altro tentativo di
posizionare istruzioni ad indirizzi dispari.
Mentre non lo sarà:
ORG 0x02
istruzione
o qualsiasi altra assegnazione pari.
Infatti, partendo dalla locazione di Reset che è 0000h, la
prima 'istruzione occuperà 0000h e 0001h, la seconda 0002h e 0003h e così
via. Nel caso di istruzioni a 32 bit, saranno occupate 4 locazioni
consecutive. Se muovessimo il PC su valori dispari, cadremmo non all' inizio
di un opcode, ma sulla seconda metà, con le conseguenze immaginabili.
Uso del simbolo $
La differente lunghezza delle istruzioni ha estrema importanza per chi utilizza il
simbolo $ (alias Program Counter) al posto di una label.
Qui alcune pagine su
questo argomento.
Vediamo ora alcune soluzioni del problema del paging per i PIC con memoria
programma paginata.