| 
    
  
    
  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 | 
       
    
   
    
   
   
          |