Il PC nei Baseline: banchi e
pagine
|
Avvertenza: la situazione derivata dalla "paginazione" della
memoria programma e dai "banchi" della RAM riguarda
essenzialmente l' Assembly, che non dispone di meccanismi automatici per
lo scambio delle pagine e dei banchi, cosa che invece è effettuata dai linguaggi a più
alto livello.
In ogni caso, la conoscenza dell' esistenza di pagine e banchi e dei
meccanismi a cui si ricorre per superare queste limitazioni costituisce un
elemento chiave per comprendere la struttura dei PIC.
Qui facciamo riferimento alle caratteristiche comuni ai PIC
Baseline.
BANCHI e PAGINE
Occorre considerare un elemento essenziale per comprendere il
funzionamento dei PIC ed utilizzarli correttamente.
Le istruzioni di questi microcontroller sono di tipo RISC, ovvero in numero
ridotto e se osserviamo da
vicino il codice binario che compone una istruzione, costituito da 12
bit, possiamo vedere come
una parte, spesso minoritaria, di essi sia riservata alla codifica dell' istruzione vera
e propria, mentre i rimanenti siano dedicati ad aggiungere alcuni elementi
necessari allo svolgimento dell' operazione.
Si possono dividere gli opcodes in alcuni gruppi, a seconda della funzione:
- istruzioni auto referenti, che non necessitano di parametri
aggiuntivi.
In questo primo gruppo, tutti i bit sono dedicati alla codifica, in quanto l'
istruzione non richiede di essere accompagnata da altre informazioni. Ad
esempio, nop (no
operation) o clrwdt
(clear wdt).
Bit |
Mnemonico |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
NOP |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
CLRWDT |
- istruzioni relative a "literal", ovvero a numeri
La codifica delle istruzioni del secondo gruppo comprende la
chiave dell' istruzione nei primi 4 bit più significativi e riserva gli
altri 8 bit per il numero "literal" con cui l' istruzione opera (quindi con la
possibilità di trattare numeri a 8 bit, da 00h a
FFh). Ad esempio movlw,
addlw.
Queste istruzioni si basano sul registro W.
Bit |
Mnemonico |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
1 |
0 |
0 |
k |
MOVLW k |
1 |
1 |
0 |
1 |
k |
IORLW k |
- istruzioni per comandare bit
Le istruzioni del terzo gruppo operano su singoli bit contenuti in un
"file", ovvero in una locazione dell' area RAM, che comprende i
registri speciali (SFR) e la RAM dati vera e propria. Sono bsf
e bcf.
A questo gruppo possiamo
attribuire anche le istruzioni come btfsc
e decfsz che agiscono su un bit specifico di un "file" specifico, ma che possono
anche generare
un salto sull' avanzamento Program Counter. Però, qui non è necessario specificare
l' indirizzo di destinazione del salto dato che riguarda sempre e solo l'
istruzione successiva.
Le tipiche istruzioni del terzo gruppo richiedono
- 3 bit per definire a quale
bit di un "file" da 8 bit è diretta l' operazione
- più altri 5 bit
per definire a quale "file" appartiene il bit.
Con 5 bit è
possibile definire indirizzi di "file" compresi tra 00h e 1Fh (2^5 =
32).
Bit |
Mnemonico |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
1 |
0 |
0 |
b |
f |
BCF f,b |
0 |
1 |
0 |
1 |
b |
f |
BSF f,b |
- istruzioni di chiamata o di salto
Questo quarto gruppo comprende le istruzioni che operano una modifica
diretta sul Program Counter. Per i Baseline sono goto, call.
Bit |
Mnemonico |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
0 |
0 |
1 |
k |
CALL k |
1 |
0 |
1 |
k |
GOTO k |
Oltre al codice dell' istruzione vera e propria,i 9 bit meno
significativi per goto
e 8 bit per call sono riservati all' indirizzo di destinazione del salto.
Con 8 bit è possibile indirizzare da 00h a FFh (2^8=256)
e con 9 bit da 00h a 1FFh (2^9=512).
Dunque ci troviamo in questa situazione:
- le istruzioni che operano sulla RAM possono indirizzare direttamente uno
spazio da 00h a 1Fh
- le istruzioni che originano salti del PC possono operare così:
- goto da 000h a 1FFh della memoria programma.
- call da 000h a 0FFh
Queste limitazioni sono intrinseche al fatto che gli opcodes si
estendono su 12 bit , nei quali devono convivere il codice dell'
istruzione e gi altri elementi; questo genera alcune
difficoltà nell' uso dei PIC quando l' ampiezza della RAM e/o della memoria
programma superino i limiti indicati.
Si tratta del
- problema dei banchi, relativi alla RAM
- e delle pagine,
relative alla memoria programma
con cui si trova a combattere il
programmatore e che è uno
degli aspetti più "antipatici" di questi microcontroller, principalmente per chi
programma in Assembly.
Ricordiamo che i PIC sono basati sulla struttura
Harvard, per cui la memoria programma e la RAM (e i registri di controllo)
sono su due bus diversi, indipendenti e di diversa ampiezza.
Quindi, l' indirizzo 00h dell'area RAM non ha nulla a che fare con l' indirizzo
00h di memoria programma, che si trova nella Flash.
|
Se ci sono problemi ad interpretare i codici esadecimali e binari, può
essere utile consultare queste
pagine.
|