Dopo aver fatto un pò di pratica, passiamo ora alla
teoria. Iniziamo a vedere com'è fatto internamente un PIC, quali dispositivi contiene e
come interagiscono tra loro.
Nella figura seguente viene riprodotto lo schema a blocchi semplificato
dell'architettura interna del PIC16F84 che ci aiuterà a seguire meglio
quanto verrà spiegato. Le parti evidenziate in giallo, sono le componenti che di volta in
volta andremo ad analizzare.
Iniziamo dalla memoria EEPROM
e dal REGISTER FILE.

La EEPROM è una memoria speciale,
non cancellabile elettricamente, utilizzata nel PIC per memorizzare il programma da
eseguire.
La sua capacità di memorizzazione è di 1024 locazioni
ognuna in grado di contenere un opcode a 14 bit
ovvero una istruzione base del PIC. Il programma più complesso che potremo realizzare
non potrà essere quindi più lungo di 1024 istruzioni.
Gli indirizzi riservati alla EEPROM vanno da 0000H a 03FFH.
Il PIC può solamente eseguire le istruzioni memorizzate in queste locazioni. Non può in
alcun modo leggere, scrivere o cancellare quanto in esse contenuto.
Per scrivere, leggere e cancellare queste locazioni è necessario un
dispositivo esterno denominato programmatore. Un esempio di programmatore
è il nostro YAPP! o il PICSTART-16+© prodotto dalla
Microchip o molti altri ancora disponibili in commercio.
La prima locazione di memoria, all'indirizzo 0000H, deve contenere la
prima istruzione che il PIC dovrà eseguire al reset e
per questo viene nominata Reset Vector.
Come ricorderete, nel source LED.ASM presentato
nella prima lezione era stata inserita la direttiva:
ORG 00H
per segnare l'inizio del programma. Questa direttiva tiene conto del
fatto che l'esecuzione del programma al reset parte dall'indirizzo 0000H dell'area
programma.
L'istruzione che segue immediatamente la direttiva ORG 00H:
bsf STATUS,RP0
sarà quindi la prima istruzione ad essere eseguita.

Il REGISTER FILE è un'insieme di locazioni di memoria RAM denominate REGISTRI.
Contrariamente alla memoria EEPROM destinata a contenere il programma, l'area di memoria
RAM è direttamente visibile dal programma stesso.
Quindi potremo scrivere, leggere e modificare tranquillamente ogni
locazione del REGISTER FILE nel nostro programma ogni volta che se ne presenti la
necessità.
L'unica limitazione consiste nel fatto che alcuni di questi registri
svolgono una funzione speciale per il PIC e non possono essere utilizzati per scopi
diversi da quelli per cui sono stati riservati. Questi registri speciali si trovano nelle
locazioni più basse dell'area di memoria RAM secondo quanto illustrato di seguito.
Le locazioni di memoria presenti nel REGISTER FILE sono
indirizzabili direttamente in uno spazio di memoria che va da 00H a 2FH
per un totale di 48 byte, denominato pagina 0. Un secondo spazio di
indirizzamento denominato pagina 1 va da 80H a AFH.
Per accedere a questo secondo spazio è necessario ricorrere ai due bit ausiliari RP0
e RP1 secondo le modalità che andremo a spiegare più avanti. Le prime 12 locazioni della pagina 0 (da 00H a 0BH)
e della pagina 1 (da 80H a 8BH) sono quelle riservate
alle funzioni speciali per il funzionamento del PIC e, come già detto, non possono essere
utilizzate per altri scopi.
Le 36 locazioni in pagina 0
indirizzate da 0CH a 2FH possono essere utilizzate
liberamente dai nostri programmi per memorizzare variabili, contatori, ecc.
Nel nostro esempio LED.ASM la
direttiva:
ORG 0CH
indica proprio l'indirizzo di inizio dell'area dati utilizzabile dal
nostro programma.
La direttiva che segue:
Count RES 2
riserva uno spazio di due locazioni, che il programma utilizzerà per
memorizzare i contatori di ritardo della subroutine Delay. |
 |

I registri specializzati del PIC vengono utilizzati molto di frequente
nei programmi.
Ad esempio, si ricorre alla coppia di registri specializzati TRISA
e TRISB, per definire quali linee di I/O sono in ingresso e quali in
uscita. Lo stesso stato logico delle linee di I/O dipende dal valore dei due registri PORTA
e PORTB.
Alcuni registri riportano lo stato di funzionamento dei dispositivi
interni al PIC o il risultato di operazioni aritmetiche e logiche.
E' necessario conoscere quindi esattamente quale funzione svolge ciascun
registro specializzato e quali effetti si ottengono nel manipolarne il contenuto.
Per facilitare le operazioni sui registri specializzati, nel file P16F84.INC (che come ricorderete era stato incluso nel
source LED.ASM con la direttiva INCLUDE)
la Microchip ha inserito una lista di nomi che identificano univocamente ciascun registro
specializzato e a cui sono associati gli indirizzi corrispondenti nell'area dei REGISTER
FILE.
Se, ad esempio, volessimo definire tutte le linee della porta B del PIC
in uscita agendo sul registro TRISB, potremmo scegliere di referenziare
direttamente il registro con il suo indirizzo:
movlw B'00000000'
movwf 06H
oppure, referenziare lo stesso registro con il suo nome simbolico:
movlw B'00000000'
movwf TRISB
avendo però l'accortezza di inserire la direttiva INCLUDE "P16F84.INC" nel nostro
source.
Nel passo successivo vedremo un altro
componente interno al PIC denominato ALU ed il registro W
conosciuto anche con il nome di accumulatore. |