Tips & Tricks - PIC

 

 


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

 


 

Copyright © afg . Tutti i diritti riservati.
Aggiornato il 17/05/12 .