Esercitazioni ASM - PIC18

 


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.

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 04/04/11.