ESERCITAZIONE # 1
Template e CONFIG
Vediamo, per iniziare, come organizzare un semplice programma
utilizzando l' ambiente di sviluppo di MPLAB
e un template di base ridotto, ricavato da quello più completo disponibile nell'
area di download.
Questo esempio riguarda essenzialmente la configurazione iniziale del
processore.
La sezione del sorgente che interessa il CONFIG è compresa nella prima
parte del testo.
In genere si dichiara la configurazione subito dopo aver definito quale è
il processore usato.
Ricordiamo che le linee dedicate al CONFIG NON SONO ISTRUZIONI, ma si
tratta di assegnazioni all' hardware di base che
vengono fissate nel processore una volta per tutte all' atto della
programmazione, anche se in alcuni casi potranno essere modificate
successivamente via software.
Una descrizione particolareggiata delle funzioni del CONFIG è consultabile
qui.
Vediamo nei dettagli il listato sorgente.
1 - nel testo sorgente,
la colorazione dei vari campi ricalca uno standard di fatto per il
quale si utilizza generalmente il blu per i codici di istruzione e
alcuni statements, il viola per le direttive, il verde per i commenti,
il nero per gli altri campi. Questa colorazione, che dipende dall'
editor usato e non ha alcuna influenza sulla compilazione, ha lo scopo
di rendere più agevole una rapida lettura del sorgente.
2 - nella scrittura del
sorgente, gli elementi grafici --- o ===
o *** o simili, imposti come commenti,
non hanno alcuna influenza nella compilazione, ma sono utili come
separatori e evidenziatori delle varie aree del sorgente stesso,
migliorandone la leggibilità. Ognuno potrà impostarli con lo stile
che preferisce.
|
E' sempre opportuno avere una testata di descrizione del programma e delle sue funzioni. Si
tratta di righe "di commento", iniziate con ; (in inglese semicolon)
che non hanno alcun effetto sulla compilazione, ma sono indispensabili come
documentazione del lavoro.
;*****************************************************************
; Esercitazioni PIC18 - Esercitazione # 1
;*****************************************************************
; Template e CONFIG - Esempio di applicazione
; Author : afg
; Version : E18_1_00
; Date : 09/10/2010
;-----------------------------------------------------------------
; Descrizione: Il sorgente imposta le definizioni di base per il
; processore e impone una configurazione.
;-----------------------------------------------------------------
; Note : Processore PIC18F2321
; Oscillatore interno a 1 MHz (clock interno 250 us)
; senza la necessità di componenti esterni
; Debug con MPLAB IDE e PickKit3
; Previsto per funzionare con tutti gli enhanced
;*****************************************************************
|
Inizia il vero e proprio sorgente, con gli elementi di definizione del
processore.
- La direttiva LIST attiva la funzione
di listato del testo del risultato della compilazione (file .lst).
- La definizione P= stabilisce a quale
processore è dedicato il sorgente
- La direttiva radix
impone una radice decimale nei valori numerici di default
- Lo statement #include inserisce le
definizioni scritte nel file header relativo al processore
Questi file "nomeprocessore.inc" si
trovano nella directory C:\Programmi\Microchip\MPASM Suite (se
MPLAB è stato installato usando i default).
Si tratta di file di testo ASCII che contengono le label che definiscono le
varie componenti del processore. Questo permette di utilizzare nel sorgente label
al posto di valori assoluti per quanto riguarda tutti gli SFR e gli altri
elementi propri di quel determinato chip: la presenza dell' include collegherà,
durante la compilazione, la label stessa al valore assoluto
dell' indirizzo del registro del processore.
LIST P=18F2321 ; Utilizziamo il PIC18F2321
radix dec
; con base decimale per le operazioni
; matematiche
#include "P18F2321.INC"
; Include l' header file
; questo header è fornito dallo stesso Assembler e non richiede
; alcun file addizionale
|
Segue ora la configurazione del processore.
Va notato che, come è impostato il setup del progetto, i dati di configurazione
del processore in fase di debug sono tratti da questa area del sorgente; ovvero,
MPLAB deduce dalle linee seguenti i codici da fissare nella memoria del
processore per ottenere la configurazione voluta, senza la necessità di alcuna
azione manuale.
Questa impostazione è di gran lunga preferibile a quella manuale, sempre
possibile, ma che non è documentata nel sorgente ed è visibile solo dalla finestra relativa
del menu dell' ambiente di sviluppo o del programmatore. Mentre automatizzando la configurazione dal sorgente si avrà maggiore
elasticità ed efficienza.
|
Qui è utilizzata una configurazione minima. I commenti chiariscono le funzioni
configurate.
;---------------------------------------------------------------------
; Configurazione minima dei debug del processore
;
; Background debugger enabled su RB6 e RB7 per il debug con il
; Pickit o altro, attraverso ICSP/ICD
CONFIG DEBUG = ON
; Single-Supply ICSP disabled
CONFIG LVP = OFF
; Uso dell' oscillatore interno, port su RA7 e FOSC/4 su RA6
CONFIG OSC = INTIO1
; PWRT disabled per il debug
CONFIG PWRT = OFF
; Brown-out in hardware only
CONFIG BOR = ON
; Soglia BOR 4.2V
CONFIG BORV = 1
; Funzione del pin MCLR abilitata
CONFIG MCLRE = ON
; WDT disabilitato
CONFIG WDT = OFF |
Assegniamo un paio di locazioni in RAM con la direttiva CBLOCK/ENDC.
Nel caso di questo programma, non hanno alcuna funzione. Serviranno nelle
esercitazioni successive.
;----------------------------------------------------------------------
;Assegna registri di memoria RAM
CBLOCK 0x00 ; blocco di RAM a partire da 0x00
d1 ; riserva 2 bytes per un contatore
d2
ENDC ; fine blocco RAM
|
Al momento non abbiamo alcun altro elemento da inserire, per cui varie aree
del template base saranno vuote.
Va tenuto presente che il template è una guida, non un obbligo e può essere
modificato e ritagliato a seconda delle esigenze del momento e del gusto
personale, pur dovendo mantenersi come linea guida per una programmazione
ordinata ed efficace.
;----------------------------------------------------------------------
; Equates
; area vuota |
Tutto quanto scritto finora è esclusivamente una "introduzione"
indispensabile al programma vero e proprio, che inizia con la direttiva ORG,
la quale assegna una locazione di inizio nella memoria programma (flash).
Dato che il processore posiziona il program counter sulla locazione 00h
al momento del reset, da qui dovrà iniziare il programma.
Qui sono inserite due linee senza alcuna funzione particolare, giusto per
ottenere un file .hex dalla compilazione.
;=====================================================================
; Inizio programma
; Il programa non fa praticamente nulla:
; - la prima linea con label Start è un no-operation
; - la seconda linea è un loop goto che rimanda indefinitamente a Start
ORG 0x00
; Programma inizia a 0x00 - vettore del reset
Start nop
goto Start
;=====================================================================
; Subroutines
; area vuota
;********************************************************************
; Direttiva di fine sorgente
END
|
La fine del sorgente è determinata dalla direttiva END.
1 - E' molto importante notare che END non è la fine
del "programma" e che non ha
nulla a che vedere con la logica del programma.
Non è un codice di istruzione del processore, ma
una direttiva dell' Assembler, che indica al compilatore dove termina il testo
da compilare.
2 - END
è una direttiva "singola" che non ha controparte (come ad esempio if/endif,
CBLOCK/ENDC, ecc.) :
essa chiude la lista
sorgente che è iniziata con il primo carattere del testo.
3 - Qualsiasi cosa si trovi
scritta dopo END non sarà
presa in alcuna considerazione dal compilatore.
4 - La mancanza di questa direttiva nel sorgente produrrà un errore
nella compilazione.
|
Questo esercizio non ha alcuna funzione se non quella di verificare se il
vostro modo di utilizzare MPLAB è corretto.
In particolare, nel setup dell' ambiente è impostato SIM come tool di
debug e quindi non occorre neppure un hardware di supporto.
Semplicemente è fornita una base da compilare. Il risultato saranno i file
classici (.lis, .hex, ecc) che potranno essere visualizzati cercandoli nella
cartella dell' esercizio (se si sono seguiti i consigli iniziali).
Non dovrà essere segnalato alcun errore.
Volendo avviare SIM, nello step-by-step le istruzioni circoleranno tra il
nop e il goto Start indefinitamente.
Se tutto è ok, si può passare all' esercizio successivo.
Se si incontrano errori nella compilazione è opportuno verificarli con la
lista di descrizione degli errori e correggere dove si è sbagliato.
Il file compresso di questa esercitazione è scaricabile dall'
area di download.
|