Esercitazioni ASM - PIC18

 


ESERCITAZIONE # 12b


I file:

  • LCDuni_comset.def
  • LCDuni_macros.asm
  • LCDuni8s_18F.asm
  • LCDcharlib18.def

non richiedono modifiche e possono essere lasciati nella cartella originale del package: basta che nel sorgente siano indicati i corretti path di accesso.

LCDuni_comset.def contiene le definizioni dei comandi standard dei controller HD44780 compatibili. Questo file non va modificato.

Non va modificato anche il file LCDuni_macros.asm , che contiene le macro utilizzate dal driver.  Sono disponibili varie macro per facilitare l' uso dei comandi del controller.

Macro

Funzione

SETTABLE xxx Setta i pointer TBLPTR per l' accesso alla tabella xxx
LCDCHAR 'x'  Invia al display il carattere 'x'
LCDCMD xxx Invia al display il comando x
LCDDDAdr  xxx Punta l' indirizzo xxx in DDRAM
LCDCGAdr  xx Punta l' indirizzo xx in CGRAM
LCDCLR Cancella il display senza spostare il cursore
LCDHOME Cancella il display e porta il cursore all' home
LCDCURRIGHT Sposta il cursore di una posizione a destra
LCDCURLEFT Sposta il cursore di una posizione a sinistra
LCDCUROFF Rende il cursore invisibile
LCDCURON Rende visibile il cursore
LCDCURONB Rende visibile il cursore in modo lampeggiante
LCDBCKSP Un backspace (una posizione a sinistra e cancella)
LCDLINE x Porta il cursore all' inizio della linea x
LCDLPOS x, yy macro Porta il cursore alla posizione yy della riga x
**LCDCGRAMCHAR aa, ccc 

Invia alla locazione aa di CGRAM il carattere della tabella ccc. Ogni carattere è composto da 8 bytes 

**LCDOutsrt xxx,tt

Invia una stringa xxx al display, La stringa è chiusa da 0x00.
La stringa si trova in una qualunque posizione in memoria programma.
Il valore tt stabilisce una cadenza tra carattere e carattere. Se 0 non c'è             ritardo.

Es.: LCDOutsrt STRNG_1, 50  invia al display la stringa STRNG_1 con cadenza 50*5ms tra i caratteri

**LCDstring 'sting',ee,tt

Invia una stringa ‘string’ al display.                                           
La stringa fa parte della dichiarazione della macro.
Il valore ee indica la lunghezza della stringa di caratteri che verranno inviati al display. 
Il valore tt stabilisce una cadenza tra carattere e carattere pari a tt x 5 ms.             Se 0 non c'è  ritardo.

Es.: LCDstring 'Messaggio', 9, 0  invia al display la stringa in oggetto, di 9 caratteri, senza temporizzazioni

 

** indica macro che saranno compilate solo per LCDSHORTDRIVE = 0 .

Le macro, una volta dichiarate, saranno richiamabili a piacere durante lo svolgimento del programma che fa uso di questo driver.  Si ricorda che le macro vengono compilate dall' Assembler, ma non occupano spazio in memoria programma fino a che non sono richiamate.

Può essere interessante considerare il fatto che alcune macro determinano un messaggio di errore se i parametri passati sono al di fuori del range previsto. Ad esempio. la macro che sposta il cursore all' inizio di una specifica linea, determina un errore se il numero di linea indicato supera quelli stabiliti dal modello locale per quel determinato modulo LCD.

;*************************************************************
; LCDLINE - Call a specified beginning of line
; Es.: LCDLINE 3 move cursor to the beginning of line 3
;*************************************************************

LCDLINE macro line_num
 #if (line_num == 1)
LCDDDADR LCDL1              ; first line
 #else
  #if
(line_num == 2)
LCDDDADR LCDL2              ; second line
  #else
   #if
(line_num == 3)
LCDDDADR LCDL3              ; third line
   #else
    #if
(line_num == 4)
LCDDDADR LCDL4              ; fourth line
    #else
 
ERROR "Wrong line number specified in LCDLINE"
    #endif
   #endif
  #endif
 #endif

      endm

Analoga funzione presentano la macro LCDLPOS e le macro di indirizzamento in DDRAM e CGRAM, LCDDDAdr  e LCDCGAdr .Ad esempio:

;*************************************************************
; LCDDDADR - Call a specified DDRam address
; Use : LCDDDADR xx with xx any valid DDRam address
; if out of range, error
;*************************************************************

LCDDDADR macro DDRamAdr

Local value = DDRamAdr | b'10000000'    ; mask command
 #if ((DDRamAdr > 0x67 && LCDTYPE == 0x0) || (DDRamAdr > 0x73 && LCDTYPE == 0x1))
 ERROR "DDRAM Address over range in LCDDDadr"
 #else
   movlw   value
   call    LCDWrCmd
 #endif
         endm

Le macro   LCDOutsrt e LCDstring vengono compilate solamente se si è scelta la versione estesa del driver. La motivazione è che queste necessitano di una locazione RAM in più rispetto al resto del driver 


 

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