Tutorials - PIC18 by Data Sheet

 

Pagina 54-72

 


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



 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 04/05/11.