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