Il PROGRAM COUNTER
Il Program Counter, o PC, è il contatore ordinale del
processore, ovvero il sistema con cui vengono messe in sequenza e avanzate le
istruzioni.
|
La sua caratteristica, come per tutti i PIC, è quella di
essere inizializzato al reset in modo da partire con il conteggio dalla
locazione 0000h, ovvero dal vettore del RESET.
In questa locazione si troverà la PRIMA istruzione che
verrà eseguita.
La sua lunghezza in bytes e la sua funzione stabilirà il
valore successivo del PC, che andrà a puntare all' istruzione logicamente
seguente.
|
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.
Il PC ha una ampiezza di 21 bit e quindi occupa tre registri
da 8 bit ciascuno:
-
PCL, Program Counter Low, con i bit 0-7; è
scrivibile e leggibile direttamente.
-
PCH, Program Counter High, con i bit 8-15; non è
scrivibile e leggibile direttamente. e si può modificare solo
attraverso PCLATH
-
PCU, Program Counter Upper, con i bit 16-21; non
è scrivibile e leggibile direttamente. e si può modificare solo
attraverso PCLATU
Il contenuto di PCLATH e PCLATU è trasferito al PC ad ogni
operazione di scrittura di PCL. Così pure per la lettura, incui 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.
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.
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.
NOTA:
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.
|
Il $
Particolare cura si dovrà mettere in atto, quindi, nel caso si abbia l' abitudine
di
utilizzare il segno $ negli indirizzi.
Qui alcune pagine
di dettaglio.
AVVERTENZA:
E' vietato modificare il PC con istruzioni a 32 bit, come la movff.
Quindi:
movff
indirizzo, PCL
dovrà essere sostituito da:
movf
indirizzo, w
movwf PCL
|