Tutorials - PIC

 

 

Il Program Counter


Il Program Counter nei PIC18F

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:

  • PCL, che contiene i bit da 0 a 7. Questo registro è mappato in memoria come gli altri SFR ed è accessibile direttamente in lettura e scrittura
  • PCH, che contiene i bit da 8 a 15. Questo registro non è accessibile direttamente e può essere  scritto solo attraverso un meccanismo che coinvolge il registro PCLATH.
  • PCU, che contiene i bit da 16 a 21. Anche questo registro non è accessibile direttamente e può essere  scritto solo attraverso un meccanismo che coinvolge il registro PCLATU.

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.


Argomenti collegati:


Vediamo ora alcune soluzioni del problema del paging per i PIC con memoria programma paginata.


    

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 12/01/13 .