Il primo programma

Una visione di insieme delle finestre di MPLABX

In questa pagina vedremo come creare il primo progetto e come usare il simulatore per esplorare la struttura ed il contenuto delle memorie del microcontrollore che stiamo utilizzando. Non faremo uso di circuiti fisici perché è cosa complessa capire se un comportamento imprevisto nasce da un errore hardware oppure software.

La creazione di un nuovo progetto

Ciascun programma deve essere incluso in un progetto. La procedura per creare un progetto è guidata:

  1. Inizia ovviamente con Create New Project. Le scelte di default (Microchip embedded e Standalone Project) sono quelle in genere corrette
  2. Occorre quindi scegliere la variante di PIC18 (è facile sbagliare: molte sigle si assomigliano). L'esempio mostrato in questa pagina utilizza un PIC18F26K20, ma nulla cambia scegliendo un altro PIC18
  3. Se intendiamo utilizzare circuiti fisici (ma non è il caso qui mostrato) viene richiesto il modello di In-Circuit Debugger. In questo primo esempio sceglieremo invece il simulatore (Simulator)
  4. L'assemblatore da utilizzare (in seguito MPASM). Se sono presenti più versioni, potrebbe essere conveniente scegliere quella più aggiornata
  5. Il nome del progetto

Quando si crea un nuovo programma è necessario creare un nuovo progetto oppure fare una copia del vecchio progetto (tasto destro del mouse sul nome del progetto)

L'immagine seguente mostra le finestre principali di MPLAB X (nota 2):

Durante l'uso vengono aperte anche numerose altre finestre...

Le finestre di MPLAB

La memoria

Attraverso il simulatore è possibile esaminare lo stato del microcontrollore. Per esempio, attraverso la voce Window → PIC Memory view, è possibile esaminare il contenuto:

File Register  Program Memory

Si noti che queste due memorie hanno una struttura diversa:

Il primo programma

Scriviamo il primo programma, creando un file con estensione .asm. e salvandolo nella cartella virtuale Source Files. Quanto mostrato non fa assolutamente nulla di utile, ma ci servirà per prendere confidenza con il microcontrollore, l'ambiente di sviluppo ed i fogli tecnici.

Il primo programma

Cosa fa questo programma?

  1. Istruzione movlw 0x55: MOVe Letteral to W register - muove letteralmente nel registro W il numero esadecimale 0x55.
  2. Istruzione addlw 0x10: ADD Letteral to W register - somma letteralmente  0x10 al contenuto del registro  W, memorizzando il risultato nel registro W
  3. Istruzione addlw 0x10: ADD Letteral to W register - somma letteralmente  0x10 al contenuto del registro  W, memorizzando il risultato nel registro in W
  4. Istruzione addlw 0x10: ADD Letteral to W register - somma letteralmente  0x10 al contenuto del registro  W, memorizzando il risultato nel registro in W
  5. Istruzione sleep: SLEEP - addormenta il processore, cioè ne sospende l'attività

Se vogliamo riscrivere tale programma con uno pseudo-linguaggio:

0x55 → WREG
(WREG) + 0x10 → WREG
(WREG) + 0x10 → WREG
(WREG) + 0x10 → WREG
Fine

Se vogliamo riscrivere tale programma in C (o in un altro linguaggio ad alto livello):

WREG = 0x55;
WREG = WREG + 0x55;
WREG = WREG + 0x55;
WREG = WREG + 0x55;
exit

In totale tre diverse istruzioni, che esamineremo nel dettaglio una per una più avanti.

Alcune osservazioni:

Assembliamo il programma

Per assemblare il programma appena scritto occorre utilizzare l'icona evidenziata, osservando nella finestra di output l'assenza di errori.

Compilazione

Il programma compilato viene automaticamente caricato nella Program Memory del simulatore. Nella figura seguente possiamo osservare

Il codice di esempio compilato

Eseguiamo il programma

L'avvio del programma è gestito da una serie di icone la cui descrizione è mostrata scorrendoci sopra il mouse:

Simulazione - Avvio

Nell'ordine:

Se si desidera fermare il programma ad una certa istruzione, è possibile inserire un breakpoint (linea rossa nell'immagine seguente), cliccando sul corrispondente numero di riga. (nota 3)

Durante l'esecuzione passo-passo possiamo osservare:

Durante l'esecuzione

Inoltre (non mostrato in figura) è possibile osservare e modificare il contenuto della memoria RAM (File Registers).

Quesiti

  1. Durante l'esecuzione del programma di esempio, cosa contiene la cella di RAM con indirizzo 0?
  2. Cosa contiene la cella di memoria Flash con indirizzo 0?
  3. Cosa contiene la cella di RAM con indirizzo 0xFE8? Osservazioni?
  4. Cosa contiene la cella di RAM con indirizzo 0xFF9? Osservazioni? (domanda non banale. Potrebbe essere utile la consultazione dei fogli tecnici)
  5. Nel caso del PIC18F26K20, quante istruzioni potrà avere al massimo un programma?
  6. Nel caso del PIC18F25K20, quante istruzioni potrà avere al massimo un programma?
  7. La memoria RAM da quanti byte è costituita? (la risposta a questa domanda potrebbe essere poco accurata)

Note

  1. Gli uni sono rappresentati in esadecimale (1111 → F), per rendere il tutto leggibile anche agli umani
  2. Le finestre possono essere spostate, ridimensinate, chiuse... Per tornate alla situazione iniziale è utile la voce di menu Window → Reset Windows
  3. Spesso si desidera fermare il programma immediatamente al momento del reset (cioè all'esecuzione dell'istruzione posta all'indirizzo 0); per fare ciò è possibile attivare l'opzione Tools → Options → Embedded → Debug startup → Halt at reset vector. In alternativa potete inserire un breakpoint in corrispondenza della prima istruzione.

 

Data di creazione di questa pagina: gennaio 2017
Ultima modifica di questa pagina: 7 ottobre 2017


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima