Tutorials - PIC

 

PIC12F508/509 e 16F505


Qualche nota sul PC

Può essere utile un chiarimento sulla funzione delle pagine della memoria programma, che è uno dei punti più seccanti della struttura dei PIC.
Il PC può indirizzare un' area di 512 bytes.
Come un istruzione del programma viene eseguita, il PC conterrà l'indirizzo della prossima istruzione del programma da eseguire. Il valore di PC è aumentato di uno ogni ciclo di istruzione, salvo nel caso in cui l' istruzione cambia il contenuto del PC; queste sono, ad esempio, le istruzioni che comprendono un salto.

Per una istruzione GOTO, i bit da 0 a 8 del PC sono contenuti nella codifica dell' istruzione.
Il Program Counter basso (PCL) è mappato per PC per occupare questi 8 bit. Il bit 9 viene fornito come copia del bit 5 (PA0) dello STATUS.
Avendo a disposizione un massimo di 512 bytes di RAM, questo bit resterà a 0. Con 1k di memoria programma, occorreranno tutti e 9 i bit, con il PA0 che definisce quale blocco da 512 è accessibile.
I bit 10 e 11 del PC restano a 0, non essendo necessari per indirizzare la limitata quantità di memoria disponibile.
Per una istruzione CALL, ovvero ogni istruzione in cui il
PCL è la destinazione, i bit 7:0 del PC sono nuovamente
forniti dall' istruzione stessa.
Tuttavia, PC <8> non ha spazio nella parola di istruzione, ma è sempre
eliminato, portandolo a 0.
PA0 diventa il bit 9 di PC e seleziona la pagina. 
Istruzioni in cui il PCL è la destinazione, o che lo modificano sono MOVWF PC, addwf PC e BSF PC, 5.

Quanto sopra è da considerare nel senso seguente:

  • un GOTO indirizza la prima o la seconda pagina della memoria programma a seconda del valore assegnato a PA0. 
     
  • per una CALL o qualsiasi istruzione che modifica il PCL, poichè  PC<8> è azzerato, tutte le chiamate di subroutine o salti calcolati sono limitati ai primi 256 bytes di qualsiasi pagina di memoria di programma (lunga 512 parole).

Ovvero:

bcf     STATUS, PA0
goto    target

produce un salto all' indirizzo target che si trova in pagina 0 (primi 512 bytes), mentre

bsf     STATUS, PA0
goto    target

produce un salto all' indirizzo target che si trova in pagina 1 ! 

Inoltre, va tenuta sempre presente una cosa fondamentale:

  Lo stack dei Baseline è costituito solamente da due livelli.
Quindi è possibile chiamare una subroutine 1 che a sua volta chiami una subroutine 2, ma quest' ultima NON può chiamare una terza subroutine dato che i due livelli dello stack sono già pieni. Non essendo disponibile un meccanismo di verifica dell' overflow, un errore sullo stack manda in crash il programma.

Per riassumere:

  • PIC12F508 ha una sola pagina di memoria programma e non richiede manovre per l' accesso. Chiamate di subroutine o salti calcolati sono limitati ai primi 256 bytes di questa pagina
  • PIC12F509  ha due pagina di memoria programma. Utilizza PA0 dello STATUS per l' accesso alla seconda pagina. Chiamate di subroutine o salti calcolati sono limitati ai primi 256 bytes di qualsiasi pagina
  • PIC16F505 è identico a 12F509 per quanto riguarda la memoria programma.

na panoramica sul Program Counter la trovate qui.

Maggiori chiarimenti su pagine e banchi nei Baseline le trovate qui


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 08/05/13.