Tutorials - PIC18 by Data Sheet

 

Dichiarazione delle costanti in FLASH


Può essere utile fare qui una breve digressione sul tema della dichiarazione delle costanti in FLASH attraverso l' Assembly.

Infatti l' area di Memoria Programma non contiene solamente i bytes del programma intesi come opcodes, ma anche tutti quei dati o tabelle che sono necessari al suo funzionamento.
E si possono ricordare le lookup tables per la conversione di dati, per l' aggiustamento di misurazioni o la generazione di segnali; e, inoltre, le stringhe di messaggi o di caratteri, ecc.

Tutte queste costanti vanno inserite attraverso il sorgente nelle giuste posizioni di memoria e sarnno poi accessibili attraverso il sistema delle istruzioni TBL ora viste.


DB

Un primo modo offerto dall' Assembly per caricare questi dati è l' assegnazione con la direttiva DB (Declare Byte): 

   ORG     0x100

    DB  0x30, 0x31
   
DB  0x20, 0x40

il che origina in memoria la seguente situazione: 

   0x100  =  0x30
   0x101  =  0x31
   0x102  =  0x20
   0x103  =  0x40

La scrittura dei valori a coppie non è casuale, in quanto MPASM, per i PIC18, lavora a word (16 bit), per cui:

   ORG     0x100

    DB  0x30
    DB  0x31
    DB  0x20
    DB  0x40

origina:

   0x100  =  0x30
   0x101  =  0x00
   0x102  =  0x31
   0x103  =  0x00
   0x104  =  0x20
   0x105  =  0x00
   0x106  =  0x40
   0x107  =  0x00

ovvero completa una linea di 1 byte portando a 0 il byte successivo.

MPASM contiene questo meccanismo di "parità" dovuto al fatto che, come abbiamo visto, le istruzioni del set enhanced sono su 2 o 4 bytes. Un tentativo di porre una istruzione a partire da un byte dispari da origine ad una segnalazione di errore. Per evitare la situazione impropria, MPASM "riempie" i byte dispari delle assegnazioni DB in modo da evitare che una situazione tipo:

   ORG     0x100

data DB  0x30
   
    movlw  data

faccia ritrovare l' istruzione a partire da 0x101. 

 


DW

Uno statement specifico che assegna 1 word è DW, che, per i PIC18 funziona come DB:

setup    DW 39, "Diagnostic", (d_list*2+d_offset)
limit    DW base-1
 

 


DA

Altro statement per l' assegnazione di costanti è DA:

        ORG  0x100   
        
DA "abcdef"
limiti   DA "12345678"
 

origina:

   0x100  =  30E2 31E4 32E6 3380
   0x108  =  18B2 19B4 1AB6 0000

In sostanza DA genera un numero packed a 14 bit rappresentante due caratteri ASCII a 7 bit. E' utile per immagazzinare stringhe numeriche nella Memoria Programma.


DATA

Per inizializzare una o più words nella Program Memory con dati di qualsiasi genere è l' uso dello statement  DATA.
Le stringhe possono essere costituite anche da caratteri ASCII, inclusi tra apici, come pure possono essere trattati singoli caratteri, che vengono impaccati nel byte basso della word, azzerando l' altro byte

message   DATA   "Test 1-2-3"    ; stringa di testo
         DATA   'Y'             ; carattere singolo
         DATA   1, 2, ext_label ; costanti + label esterna
         DATA   base+10         ; costante
         DATA   start           ; label rilocabile 

 


DT

Per generare delle tabelle RETLW si utilizza lo statement DT.
Si possono tabellare sia caratteri ASCII che valori numerici

table     DT  "Questo è un messaggio",0
table1    DT
  primovalore, secondo valore, terzo valore 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 06/12/10.