Osservando la mappa della EEPROM si noterà che esiste un'area di 127 locazioni (indirizzi 2000-207F) che non sono destinate al programma. Queste locazioni servono per memorizzare in EEPROM alcune informazioni di configurazione (cioè dati che non devono essere modificati da programma, ma che vengono scritti direttamente in EEPROM):
Di particolare interesse per il programmatore in questa area di memoria è la Configuration Word (all'indirizzo 2007h). Questa parola serve per settare la configurazione iniziale di alcuni dispositivi interni al PIC al momento dell'accensione del microcontrollore. In pratica svolge la funzione che nei vecchi apparati elettrici veniva svolta dai cosiddetti dip switch (o dai jumper o, ancora prima, dai fusibili): schiere di microinterruttori mediante i quali era possibile configurare il comportamento di una scheda al momento dell'accensione.
I diversi bit della Configuration Word sono mostrati nella figura qui sotto:
Il significato dei nomi dei bit (come riportato dal manuale) è il seguente:
Per una spiegazione dettagliata delle funzioni di ogni bit della Configuration Word rimandiamo alla lettura del manuale del componente. Nelle prossime lezioni considereremo invece solo le funzioni più importanti e più utilizzate nel normale funzionamento del PIC.
La Configuration Word deve essere scritta al momento della programmazione del PIC, cioè quando il firmware viene scritto sulla memoria interna del PIC. Supponendo qui di usare l'ambiente di sviluppo MPLAB-IDE per la scrittura del firmware, vediamo brevemente le opzioni disponibili.
MPLAB offre diversi modi per settare i bit della Configuration Word. Il primo fa uso del menu Configure/Configuration bits di MPLAB. Per poter modificare il valore dei bit di configurazione bisogna prima togliere il segno di spunta alla voce Configuration Bits set in code e quindi, dopo aver assegnato i valori desiderati, rimetterla:
Un altro modo consiste invece nell'usare la direttiva __CONFIG (con due underscore '_' all'inizio). Di solito questa direttiva viene posta all'inizio del programma assembly (prima della direttiva ORG) per specificare il valore dei diversi bit, per esempio in questo modo:
__CONFIG B'11000011100100'
ORG 0 ; indirizzo iniziale in memoria EPROM
... ; seguono le istruzioni del programma
Con la precedente scrittura, per esempio, viene settato l'oscillatore interno, disabilitato il timer Watchdog, abilitato il Master Clear etc., esattamente come nell'esempio precedente (che faceva uso del menu Configure).
Un modo ancora più comodo consiste nell'uso delle costanti predefinite del PIC. In pratica l'attivazione o il reset di ogni bit del registro di configurazione corrisponde a una costante letterale. Per esempio _FCMEN_ON serve per settare il bit _FCMEN, mentre _FCMEN_OFF serve per resettarlo. Il significato delle costanti predefinite è il seguente:
Nome della costante | Significato |
_FCMEN_ON | abilita il fail safe clock |
_FCMEN_OFF | disabilita il fail safe clock |
_IESO_ON | abilita l'Internal/External Oscillator Switchover |
_IESO_OFF | disabilita l'Internal/External Oscillator Switchover |
_BOR_ON | abilita il Brown-out Reset |
_BOR_NSLEEP | abilita il Brown-out Reset durante il normale funzionamento e lo disabilita nello stato di Sleep |
_BOR_SBODEN | il Brown-out Reset è controllato dal bit SBOREN |
_BOR_OFF | disabilita il Brown-out Reset |
_CPD_ON | abilita il Data memory code protection |
_CPD_OFF | disabilita il Data memory code protection |
_CP_ON | abilita il Program memory code protection |
_CP_OFF | disabilita il Program memory code protection |
_MCLRE_ON | abilita il Master Clear Reset |
_MCLRE_OFF | disabilita il Master Clear Reset (pin RA3/MCLR usanto come input) |
_PWRTE_OFF | disabilita il Power-up Timer |
_PWRTE_ON | abilita il Power-up Timer |
_WDT_ON | abilita il Watchdog Timer |
_WDT_OFF | disabilita il Watchdog Timer |
_LP_OSC | oscillatore esterno LP |
_XT_OSC | oscillatore esterno XT |
_HS_OSC | oscillatore esterno HS |
_EC_OSC | oscillatore esterno EC |
_INTRC_OSC_NOCLKOUT | oscillatore interno senza uscita di clock (CLKOUT) |
_INTRC_OSC_CLKOUT | oscillatore interno con uscita di clock (CLKOUT) |
_EXTRC_OSC_NOCLKOUT | oscillatore esterno RC senza uscita di clock (CLKOUT) |
_EXTRC_OSC_CLKOUT | oscillatore esterno RC con uscita di clock (CLKOUT) |
_INTOSCIO | oscillatore interno con I/O sui pin RA4 e RA5 |
_INTOSC |
oscillatore interno con CLKOUT
sul pin RA4 e I/O sul pin RA5 |
_EXTRCIO | oscillatore esterno con I/O sui pin RA4 e RA5 |
_EXTRC |
oscillatore esterno con CLKOUT
sul pin RA4 e I/O sul pin RA5 |
Qui sotto è mostrato un esempio di uso delle costanti predefinite, con i valori di default suggeriti nel file template del pic16f690 (bisogna concatenare i valori fra loro con l'operatore &):
INCLUDE <P16F690.INC>
__CONFIG _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF &
_INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF
ORG 0 ; indirizzo iniziale in memoria EPROM
Di solito in effetti (a meno che non si vogliano usare funzioni particolari) questo è il modo normalmente utilizzato. Infatti è anche il più pratico, in quanto è sufficiente copiare la stringa precedente all'inizio del proprio programma per settare i bit di configurazione.
Sito realizzato in base al
template offerto da
http://www.graphixmania.it