9.- START: il Vettore del RESET
Una volta definito l' ambiente di lavoro del microcontroller possiamo
iniziare con le istruzioni vere e proprie del programma, iniziando dal Vettore
di RESET.
PAGE
;####################################################################
;====================================================================
;=
RESET VECTOR
=
;====================================================================
RES_VECT CODE 0x0000 ; processor reset vector
|
Solitamente al vettore del Reset segue strettamente in memoria il
Vettore dell' Interrupt; se questo viene usato, occorre che il programma inizi
indirizzando la locazione dove stanno le istruzioni oltre il vettore di
interrupt, saltando con un goto.
START:
PAGESEL
MAIN
GOTO
MAIN
|
E' possibile, se l' interrupt non viene usato, proseguire direttamente con
le istruzioni.
START:
nop
; reserved for ICD2
btfsc selector
; check selction bit
bra sel1
; if=1 goto first selection
call WichReset
; check the reset origin
|
Però è probabilmente scelta migliore la prima, in quanto consente
facilmente di recuperare lo spazio del Vettore di Interrupt e aggiungerlo se
necessario.
10.- Interrupt
Se alla locazione di memoria programma 00h i PIC hanno il Vettore di Reset,
poco oltre (ad esempio, 04h) hanno il Vettore di Reset.
Occorrerà quindi definirlo:
;####################################################################
#if
INTRPT == 1
;--------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;--------------------------------------------------------------------
ORG 0x0004
;####################################################################
;====================================================================
;= INTERRUPT MANAGEMENT =
;====================================================================
intmanager
; USER INTERRUPT SERVICE ROUTINE GOES HERE
; 16F1827 family automatically handles context restoration for W,
; STATUS, BSR, FSR and PCLATH. Shadow registers store these SFR
; and may be modified since they are readable and writable for
; modification to the context restoration.
RETFIE
; return from interrupt
#endif
|
In questo caso l' inserzione della gestione dell' interrupt è
condizionata da uno dei parametri di compilazione definiti precedentemente;
questa è una via per liberare spazio se il Vettore non è usato e per
inserirlo automaticamente se usato.
La gestione dell' interrupt può essere consequenziale o posta altrove, a
seconda della lunghezza e delle scelte personali.
In processori con memoria a pagine può essere opportuno gestire l' interrupt
in pagina 0 per questioni di accesso, ma può benissimo stare in un altro
banco:
ORG 0x0004
PAGESEL intmanager
GOTO
intmanager |
|