Nella memoria programma (User Memory Space) dobbiamo rilevare alcuni punti
salienti:
Come detto, si tratta di memoria in tecnologia Flash, che
conserva i dati scritti anche in mancanza di tensione di alimentazione, per
un periodo che il costruttore dichiara di almeno 100 anni.
Questo spazio servirà per inserire istruzioni di salto
alle routines di gestione degli eventi.
Va però ben compreso questo meccanismo dei vettori, per
evitare confusioni o interpretazioni errate.
Vettore di RESET:
La locazione 0000h viene forzata nel PC al momento del
RESET. Questo fa si che la prima istruzione che verrà eseguita è quella
posta in questa locazione e da questa partirà la sequenza delle istruzioni
che compongono il programma.
Questa situazione è comune a tutti i sistemi a
microprocessore e, in generale, a tutti i sistemi che eseguono un programma,
anche se in altri componenti il vettore potrà trovarsi posizionato in altre
aree della memoria.
Dunque, a 0000h inizierà il programma. Il vettore di RESET,
dunque, è un elemento indispensabile, di cui non si può fare a meno.
Esso si trova nella memoria programma, scrivibile dall'
utente, proprio perchè ha a che fare con la sequenza delle istruzioni che
vengono inserite con il dispositivo di programmazione nella memoria del
chip.
Vettore Interrupt ad Alta Priorità (HP)
L' indirizzo 0008h viene forzato nel PC quando è
operativa una chiamata interrupt a priorità alta, oppure senza priorità.
Questo fa si che il flusso del programma sia interrotto e che riparta dall'
istruzione posta in questa locazione.
L' indirizzo successivo a quello abbandonato al momento dell' interrupt
sarà salvato nello Stack e ricaricato in PC all' istruzione RETFIE,
ripristinando la sequenza principale.
Altri microprocessori hanno vettori di interrupt più
complessi, ma anche questa situazione è comune a tutti i sistemi
computerizzati, in quanto è necessario che l' evento di interrupt trovi
subito una gestione sicura.
Dunque, a 0008h inizierà il programma di gestione dell' interrupt
HP. Dato che è possibile programmare se si intende utilizzare la
priorità o meno, nel caso di interrupt senza priorità, il vettore di
Interrupt è ancora 0008h.
Esso si trova nella memoria programma, scrivibile dall'
utente, proprio perchè ha a che fare con la sequenza delle istruzioni che
vengono inserite con il dispositivo di programmazione nella memoria del
chip.
Però va anche considerato che l' interrupt può non essere utilizzato dal
programma e quindi un vettore interrupt può non essere necessario.
Vettore Interrupt a Bassa Priorità
(LP)
L' indirizzo 0018h viene forzato nel PC quando è operativa
una chiamata interrupt a priorità bassa (e non viene considerato nel caso
in cui si sia selezionata una modalità di funzionamento con interrupt senza
priorità).
Questo fa si che il flusso del programma sia interrotto e che riparta dall'
istruzione posta in questa locazione quando il discriminatore della sorgente
di interrupt identifica un interrupt a bassa priorità.
Dunque, a 0018h inizierà il programma di gestione dell'
interrupt LP, che, come i precedenti, si trova nella memoria programma,
scrivibile dall' utente.
Però va considerato sia che l' interrupt può non essere utilizzato dal
programma sia che la gestione impostata sia senza priorità.e quindi il
vettore interrupt LP può non essere necessario,
Cosa si intende con " può non essere necessario"?
-
Se il programma non usa interrupt, non avverranno
mai chiamate a interrupt e il PC non verrà mai forzato ai valori 0008h
o 0018h.
Quindi, in queste condizioni, è come se i punti salienti dei vettori di
interrupt non esistessero è sarà possibile utilizzare la memoria
programma in modo continuo a partire da 0000h
Quindi, se non viene del tutto utilizzato l' interrupt, il
programma si può svolgere direttamente dalla locazione del vettore di
Reset, ignorando i vettori dell' interrupt (che, non essendo usati, sono
solamente celle di memoria Flash di uso generale).
;=============================================================================
;
VETTORE del RESET
- Nessun Interrupt utilizzato
;=============================================================================
ORG 0x00
nop
; per debugger
KILLINT
; blocca ogni interrupt
bcf INTCON,GIEL
bcf INTCON,GIEH
INITIO call InitIO ;
inizializza IO
call InitLCD
; inizializza LCD
; ecc
Il fatto che sia scritta l' area da 0008h a 0018h non
presenta alcun problema, nè logico, nè funzionale.
;=============================================================================
; VETTORE
INTERRUPT