| 
    
      
        | Esercitazioni
          PIC - Assembly |  
 La Configurazione - Direttiva __configEsaurite queste premesse, che riguardano la definizione dell' ambiente di
  compilazione, occorre ancora considerare un  fatto
fondamentale:  il microcontroller dispone di un set di istruzioni, di
memoria, ecc, ma sopratutto ha una struttura hardware di base che va predisposta
per poter effettuare quanto desideriamo. Questo è necessario perchè le risorse
interne del microcontroller possono essere destinate ad un numero virtualmente
illimitato di applicazioni ed il costruttore fa in modo che un certo componente
sia quanto più possibile flessibile per adeguarsi a tutte le circostanze. Occorre, quindi, una preparazione di partenza dell' ambiente interno del
microcontroller, definendo quanto serve a quello che vogliamo fargli fare. 
  Questa operazione di adattamento è compresa nel sorgente del programma, ma non
fa parete delle istruzioni; si definisce CONFIGURAZIONE. Altri dettagli sulla configurazione li
  trovate qui. La messa in atto di quanto definiamo in questa configurazione consiste nell'
avere variato il livello di alcuni bit in uno o più registri speciali, detti 
Configuration Word  
  
    
      | ;#################################################################### ;====================================================================
 ;=                             
        CONFIGURAZIONE                     
        =
 ;====================================================================
 __config  _CP_OFF & _MCLRE_OFF &
        _IntRC_OSC & _IOFSCS_4MHZ & _MCPU_ON  & _WDT_OFF
 |  Questa riga, apparentemente criptica, raccoglie come una catena di  AND
(&) le assegnazioni dei bit della
Configuration Word,  che comandiamo al compilatore di applicare nel giusto
  modo.
 Le label   _CP_OFF,  _MCLRE_OFF,
ecc, sono derivate dal file p12F519.inc che è stato incluso all' inizio.
  Il loro significato è chiarito nel foglio dati de componente.
 
  
    
      |  Ogni label elencata sottintende uno dei bit della  Configuration Word, che, per
        default,
        nel chip nuovo o cancellato, sono tutti a livello 1
(valore della Flash cancellata) e vanno impostati
diversamente se dobbiamo utilizzarli non nel modo di default. Il comando 
__config fa si che durante la programmazione del chip questa  Configuration Word
venga programmata come indicato. |  
 Se omettiamo completamente la configurazione, ben difficilmente i parametri del
        default saranno adeguati alla nostra applicazione; ad esempio per la
        configurazione dell'oscillatore o l'abilitazione del watchdog. Il
        risultato sarà un mancato funzionamento del programma. Non è
  necessario configurare tutti i bit: è, invece, possibile programmarne
  solamente una parte, ovvero quelli che interessano la nostra applicazione,
  lasciando in default gli altri. Quello che importa è che ci si renda conto
  dell' operazione che si sta eseguendo. 
  
    
      |  Va invece considerato che : 
          ogni chip, pur avendo numerosi parametri della Configuration Word
            simili ad altri chip, potrà necessitare di una propria specifica
            configurazione, dipendente dalle risorse integrate. omettendo elementi della configurazione relativi a funzioni usate
            nel programma ne impedirà il corretto funzionamento o creerà
            problemi difficili da diagnosticare.una errata scelta dei parametri della configurazione impedirà il
            funzionamento del programma |  In relazione al primo punto, ad esempio, alcuni chip consentono di
  utilizzare il pin MCLR come ingresso digitale; se si vuole approfittare di
  questa opzione, occorre selezionarla nella configurazione.In relazione al punto due, ad esempio, il modulo Watchdog è un elemento
  presente in tutti i PIC; se non si prvede di gestirlo da programma, va
  obbligatoriamente disabilitato nella configurazione, altrimenti impedirà il
  corretto funzionamento del programma.
 Per quanto riguarda il punto tre, ad esempio, i PIC possono consentire
  numerose forme di oscillatore primario; se non viene selezionata quella
  corrispondente all' hardware impostato, il microcontroller non
  funzionerà.
 
 
Osserviamo che la direttiva __config
  è preceduta da __
(doppia sottolineatura), che la indica come elemento riservato del compilatore. Le label oggetto sono invece precedute da _ (una
sottolineatura) per differenziarle dalla scrittura normale.
 Per quanto detti prima:
 
    __config non può iniziare in prima colonna e scrivere __config
  è uguale a scrivere  __CONFIG. 
  La trattazione della configurazione può occupare alcune pagine del foglio dati,
ma il nostro template ne raccoglie un riassunto. Questo riassunto è un testo, sotto
forma di commento e che, quindi, non entra a far parte della compilazione.Volutamente
  è posto alla fine del sorgente, in modo da non disturbare durante la sua
  lettura, pur essendo disponibile per la consultazione. Posto alla fine del sorgente,
  dopo la direttiva di chiusura della compilazione, non entra neppure a
  far parte del file .lst.La
sua presenza ci aiuta ad orientarci
rapidamente tra le varie opzioni senza bisogno di consultare altra
documentazione.
 
Ecco, ad esempio, le opzioni possibili per il PIC12F519: 
  
    
      | ;#################################################################### ;====================================================================
 ;=                         Opzioni CONFIG                           =
 ;====================================================================
 ;
 ; Protezione del programma
 ; -------------------------
 ;_CP_ON                 protezione abilitata
 ;_CP_OFF                protezione disabilitata
 
 ; Pin MCLR
 ; ---------
 ;_MCLRE_ON GP3/MCLR come MCLR;
 ;_MCLRE_OFF GP3/MCLR come GP3
 
 ; Pull-up MCLR
 ; -------------
 ;_MCPU_ON               abilitato
 ;_MCPU_OFF              disabilitato
 
 ; Watchdog
 ; ---------
 ;_WDT_ON                abilitato
 ;_WDT_OFF               disabilitato
 
 ; Oscillatore
 ; ---------------------------------------------
 ;_FOSC_LP        ; osc. esterno LP con 18ms DRT
 ;_LP_OSC         ; alias
 ;_FOSC_XT        ; osc. esterno XP con 18ms DRT
 ;_XT_OSC         ; alias
 ;_FOSC_INTRC     ; osc. interno con 1.125ms DRT
 ;_IntRC_OSC      ; alias
 ;_FOSC_EXTRC     ; osc. esterno RC con 1.125ms DRT
 ;_ExtRC_OSC      ; alias
 
        ; Internal Oscillator; --------------------
 ;_IOFSCS_4MHZ           4 MHz
 ;_IOFSCS_8MHZ           8 MHz
 |  Queste informazioni le troviamo nel file p12f519.inc che
  abbiamo incluso all' inizio del testo sorgente. 
 
Due note importanti sulla configurazione
Due note importanti: 
  
    
      |  Le operazioni per la creazione delle variabili di base, possono essere
        svolte anche nell' ambiente di sviluppo o con script dell' Assembler,
        mentre la configurazione può essere impostata anche nell' ambiente di
        gestione del programmatore.
 In entrambi i casi si tratta di pratiche da evitare assolutamente:
        lasciare allo script dell' ambiente di compilazione o, peggio, al
        software di programmazione, l'impostazione di questa prima parte
        significa perdere una componente essenziale della documentazione del
        programma e ritrovarsi poi a distanza di tempo a non essere in grado di
        ricostruire, se non a fatica, questi elementi mancanti.
 La loro scrittura nel sorgente ne automatizza la compilazione, evita
        gravi errori e costituisce una documentazione adeguata a far si che i
        programma sia leggibile a distanza di tempo o da altri.
 Quindi, se avete l' abitudine di scrivere i dati di configurazione
        durante la programmazione o definirli come elementi di ambiente nell'
        assemblaggio, abbandonatela e passate ad una stesura sensata del
        sorgente.
 |  Esistono diversi ambienti di sviluppo che non prevedono una dichiarazione
  della Configuration Word nel sorgente, rimandandola alle definizioni generali
  della compilazione, assieme al tipo di processore. In questi casi  è decisamente
  opportuno inserire nel sorgente una riga di commento che ricordi quale è la
configurazione fissata per quel dato programma  e tutti gi eventuali
  elementi necessaria a creare una documentazione autonomamente valida.
 
  
    
      |  Altra
        pratica da evitare con cura  è quella di impostare il
        valore da attribuire alla Configuration Word come un esadecimale,
        ad esempio: __config  H'FFCE' Questo rende incomprensibile la linea in quanto per capirne il
        significato occorre consultare il foglio dati e fare manualmente l' AND
        dei vari parametri, con il rischio di sbagliare e diventa difficilmente
        realizzabile per PIC complessi come i 18F dove si hanno più Configuration
        Word . Inoltre rende la linea praticamente non portabile tra
        processori diversi, dove sono probabili variazioni delle funzioni dei
        singoli bit della Configuration Word .    |  In queste esercitazioni troverete sempre la forma che consente la maggiore
  chiarezza e eleggibilità del sorgente. 
  
 |