Tutorials - PIC - Corso A&C

 

Esercitazioni PIC - Assembly


La Configurazione - Direttiva __config

Esaurite 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 :
  1. ogni chip, pur avendo numerosi parametri della Configuration Word simili ad altri chip, potrà necessitare di una propria specifica configurazione, dipendente dalle risorse integrate. 
  2. omettendo elementi della configurazione relativi a funzioni usate nel programma ne impedirà il corretto funzionamento o creerà problemi difficili da diagnosticare.
  3. 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.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 03/12/18.