Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

PIC18 e assembly: le prime istruzioni

Assembly PIC18 - PIC18 in C - Sommario - Novità - Tutorial - Progetti - Risorse - Non solo elettronica

Le istruzioni del PIC18 

Il PIC18 è un processore RISC che può eseguire 75 istruzioni diverse (nota 1). In questa pagina vedremo come interpretare le informazioni contenute nei fogli tecnici che descrivono un'istruzione. In genere è poco utile imparare a memoria tutte le istruzioni: è sufficiente conosce quelle usate più frequentemente e, soprattutto, imparare a leggere i fogli tecnici che le descrivono.

L'istruzione

Come primo esempio utilizzeremo l'istruzione movlw 0x55 della quale già abbiamo visto il funzionamento.

Le singole istruzioni del microcontrollore sono tutte descritte nella parte terminale dei fogli tecnici (nello specifico del PIC18F26K20 a partire da pagina 341, ma gli indici sono fatti per essere usati...). La struttura usata nella descrizione è simile per tutte le istruzioni:

L'istruzione MOVLW

Esaminiamo quanto viene scritto:

Qualche osservazione secondaria:

Gli Status Bits

Gli Status Bits sono una serie di 5 flag che identificano particolari situazioni generate dalle operazioni aritmetiche, logiche o di altro tipo. Ciascun flag è una variabile booleana e vale 0 oppure 1 (o anche: Vero oppure Falso) ed è indicato da una lettera:

In genere i flags sono utilizzati nelle istruzioni di salto condizionato, cioè per eseguire alcune istruzioni piuttosto che altre a seconda del risultato di una operazione

Usando il simulatore. il valore dei flag è mostrato accanto al valore del PC e del registro W, usando una lettera maiuscola oppure minuscola. Ad esempio:

flags

(certo non è il massimo di leggibilità...)

I salti

Il primo programma visto è formato da istruzioni eseguite in ordine sequenziale, cioè ordinatamente una dopo l'altra. Il PIC possiede varie istruzioni che permettono di eseguire le istruzioni non in ordine sequenziale: qui ne vedremo tre, molto simili ed indicate con il nome generico di salto.

Salto incondizionato

Questa istruzione permette di eseguire una istruzione posta in una qualunque cella della memoria programma, saltando in avanti o indietro all'interno del programma.

GOTO

Per esempio il programma appena mostrato, dopo l'esecuzione dell'istruzione goto 0x00002 eseguirà l'istruzione posta all'indirizzo di memoria 0x00002 (cioè addlw 0x01), all'interno di un ciclo infinito di incremento del contenuto di WREG. Prima di proseguire, eseguire passo passo il programma.

Facciamo riferimento al foglio tecnico: 

GOTO sui fogli tecnici

Come si legge nella descrizione il Program Counter assume un valore qualsiasi di 20 bit (5 cifre esadecimali), permettendo di eseguire una qualunque istruzione. (nota 2)

Il calcolo dell'indirizzo della cella in cui è contenuta l'istruzione che si vuole eseguire (0x00002 nell'esempio) è piuttosto noioso e deve essere rifatto ogni volta che di aggiunge o toglie un'istruzione. Per fortuna può essere calcolato automaticamente dall'assemblatore usando le label.

Branch (diramazione) incondizionato

L'istruzione bra, a partire dal nome, è molto simile alla precedente. Essa somma (o sottrae) al valore del Program Counter un numero compreso tra -1024 e 1023, permettendo al programma di andare avanti (o indietro) saltando fino ad un massimo di circa 1000 istruzioni rispetto all'istruzione stessa di bra.

A volte questo tipo di salto è indicato come salto relativo, mentre il goto è indicato come salto assoluto.

Queste istruzioni sono illustrate in questa pagina.

Branch condizionati

I salti condizionati permettono di eseguire un'istruzione piuttosto che un'altra  a seconda del valore di uno dei flag. Sono la base dei costrutti che ad alto livello vengono indicati come if-then-else oppure cicli while-do e for.

Queste istruzioni sono illustrate in questa pagina.

Quesiti

  1. [Avanzato] Assemblare "a mano" l'istruzione addlw 0x10: leggendo il foglio tecnico, scrivere la sequenza binaria ed esadecimale corrispondente. Usare l'assemblatore (o quanto mostrato nella pagina precedente) per verificare la correttezza.
  2. [Avanzato] Assemblare "a mano" l'istruzione sleep
  3. [Avanzato] Descrivere il funzionamento ed assemblare "a mano" l'istruzione andlw 0x20
  4. Eseguire lo stesso programma della pagina precedente usando come valori iniziali 0xE8; 0x70, 0xF0: come variano i flag C, Z, N, OV?
  5. Eseguire il programma mostrato in questa pagina: come variano i flag C, Z, N, OV?

Nota

  1. In realtà sono presenti anche otto istruzioni estese.
  2. Si noti che vengono impostati solo 20 dei 21 bit usati per indirizzare la memoria flash, in quanto il bit meno significativo è sempre zero. Quindi le celle sono al massimo 221 (2 MB) ma le istruzioni possono essere al massimo 220 da 2 byte ciascuna
  3. Inoltre c'è un riporto memorizzato nel flag C, ma in questo esempio non è rilevante

 

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


Assembly PIC18

Inoltre potrebbe essere utile la pagina: PIC18 - Suggerimenti, in ordine sparso

Licenza Creative Commons Attribuzione 4.0 Internazionale


EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3