En aquest exemple volem enviar unes lletres a la pantalla. En el programa següent enviem "PIC" a la primera línia i "kit" a la segona. Hem posat els caràcters a enviar en el propi cos del programa però els podíem haver posat a la memòria de programa o a la memòria EEPROM i fer el programa més curt.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Control ; Bits de control (port B) Caracter ; Caràcter o codi a enviar (port C) Retard1 ; Variables per als cicles de retard Retard2 endc
org 0 Inici bsf STATUS,RP0 ; Banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bcf STATUS,RP0 ; Banc 0 call IniPant ; Inicialització del mode de funcionament de la pantalla movlw .128 call Retard ; Esperem 0,1 s call ConfPant ; Configuració de la pantalla movlw .128 call Retard ; Esperem 0,1 s ; Enviem l'adreça i els valors movlw 0x00 ; Adreça DDRAM (Filera 1 - Posició 1) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 'P' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'I' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'C' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0x40 ; Adreça DDRAM (2 - 1) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 'k' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'i' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 't' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia goto $
; ; Inicialització del mode de funcionament de la pantalla ; IniPant movlw 0 ; Comença un cicle de durada fixa (0,2 s) ; Temps que cal esperar després d'un reset call Retard ; Crida a la funció Retard, el paràmetre està a W movlw b'00100000' ; Function set - Configuració inicial 0010 al nibble de l'esquerra movwf Caracter ; Ho guarda a la variable call EnviaI ; Envia els 4 bits superiors ; Ara enviem la configuració 2 línea, 5x8 píxels 0010 1000 call EnviaI ; Enviem la part esquerra (ja ho teníem a Caracter) movlw b'10000000' ; I ara la part dreta (però posada a l'esquerra) movwf Caracter ; Ho guarda a la variable call EnviaI ; Envia els 4 bits superiors return ; Fi de la inicialització del mode de funcionament ; ; Configuració de la pantalla ; ConfPant movlw b'00001111' ; Display ON/OFF control - Activa la pantalla amb cursor intermitent movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw b'00000001' ; Clear display - Buida la pantalla i inicialitza movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw .5 ; El punt indica que es un valor decimal ; Comença un cicle de durada fixa (3,9 ms) call Retard ; Crida a la funció Retard, el paràmetre està a W movlw b'00000110' ; Entry mode - Buida la pantalla, sentit dreta i despl. automàtic movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia return ; Fi de la configuració de la pantalla ; ; Enviem caràcters ; EnviaC ; Enviem caràcters de control bcf Control,7 ; Desactiva E bcf Control,5 ; Desactiva RS goto Envia EnviaL ; Enviem caràcters a visualitzar bcf Control,7 ; Desactiva E bsf Control,5 ; Activa RS Envia call EnviaN ; Envia els 4 bits més alts swapf Caracter,f ; Permuta els nibbles call EnviaN ; Envia els 4 bits més alts swapf Caracter,f ; Torna a deixar els nibbles com estaven return ; Tornem al lloc des d'on hem vingut EnviaI ; Enviem nibbles de caràcters de control bcf Control,7 ; Desactiva E bcf Control,5 ; Desactiva RS EnviaN ; Enviem nibbles decfsz Retard1,f ; Funció de retard de 0,8 ms goto EnviaN movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us movf Caracter,w ; Llegeix el caràcter andlw 0xF0 ; Agafa els 4 bits més alts movwf PORTC ; Envia el byte bsf Control,7 ; Activa E movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us bcf Control,7 ; Desactiva E movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB return ; Tornem al lloc des d'on hem vingut ; ; Funció Retard, W conté el nombre de cicles de 771 us que cal fer ; Retard movwf Retard2 ; Ho copia a la variable Retard2 BucRet decfsz Retard1,f ; Decrementa la variable 1 ; si dona zero, no es fa la instrucció següent goto BucRet ; Salta, excepte si el resultat ha estat zero decfsz Retard2,f ; Decrementa la variable 2 goto BucRet ; Salta, excepte si el resultat ha estat zero return ; Tornem al lloc des d'on hem vingut end
En la següent versió de l'exemple hem afegit un caràcter especial (la lletra Ω) que l'hem guardat a la posició 0 de la CGRAM, que correspon als caràcters 0 i 8 de la taula de caràcters. Aquesta Ω la fem sortir a la posició 16 de la primera línia i també a la posició 15 de la segona; però en un cas la cridem com a caràcter 0 i a l'altre com a caràcter 8.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Control ; Bits de control (port B) Caracter ; Caràcter o codi a enviar (port C) Retard1 ; Variables per als cicles de retard Retard2 endc
org 0 Inici bsf STATUS,RP0 ; Banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bcf STATUS,RP0 ; Banc 0 call IniPant ; Inicialització del mode de funcionament de la pantalla movlw .128 call Retard ; Esperem 0,1 s call ConfPant ; Configuració de la pantalla movlw .128 call Retard ; Esperem 0,1 s ; Caràcters especials movlw 0x00 ; Adreça CGRAM iorlw b'01000000' ; Posa el bit de CGRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw b'00000100' ; Primera filera movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00001010' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00010001' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00010001' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00001010' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00001010' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00011011' movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00000000' ; Darrera filera movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia ; Fi caràcters especials movlw .128 call Retard ; Esperem 0,1 s ; Enviem l'adreça i els valors movlw 0x00 ; Adreça DDRAM (Filera 1 - Posició 1) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 'P' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'I' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'C' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0x40 ; Adreça DDRAM (2 - 1) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 'k' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 'i' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 't' ; Lletra movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0x0F ; Adreça DDRAM (1 - 16) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 0x00 ; Caràcter especial movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0x4E ; Adreça DDRAM (2 - 15) iorlw b'10000000' ; Posa el bit de DDRAM a 1 movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw 0x08 ; Caràcter especial movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia goto $
; ; Inicialització del mode de funcionament de la pantalla ; IniPant movlw .65 ; Comença un cicle de durada fixa (0,2 s) ; Temps que cal esperar després d'un reset call Retard ; Crida a la funció Retard, el paràmetre està a W movlw b'00100000' ; Function set - Configuració inicial 0010 al nibble de l'esquerra movwf Caracter ; Ho guarda a la variable call EnviaI ; Envia els 4 bits superiors ; Ara enviem la configuració 2 línea, 5x8 píxels 0010 1000 call EnviaI ; Enviem la part esquerra (ja ho teníem a Caracter) movlw b'10000000' ; I ara la part dreta (però posada a l'esquerra) movwf Caracter ; Ho guarda a la variable call EnviaI ; Envia els 4 bits superiors return ; Fi de la inicialització del mode de funcionament ; ; Configuració de la pantalla ; ConfPant movlw b'00001111' ; Display ON/OFF control - Activa la pantalla amb cursor intermitent movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw b'00000001' ; Clear display - Buida la pantalla i inicialitza movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia movlw .5 ; El punt indica que es un valor decimal ; Comença un cicle de durada fixa (3,9 ms) call Retard ; Crida a la funció Retard, el paràmetre està a W movlw b'00000110' ; Entry mode - Buida la pantalla, sentit dreta i despl. automàtic movwf Caracter ; Ho guarda a la variable call EnviaC ; Ho envia return ; Fi de la configuració de la pantalla ; ; Enviem caràcters ; EnviaC ; Enviem caràcters de control bcf Control,7 ; Desactiva E bcf Control,5 ; Desactiva RS goto Envia EnviaL ; Enviem caràcters a visualitzar bcf Control,7 ; Desactiva E bsf Control,5 ; Activa RS Envia call EnviaN ; Envia els 4 bits més alts swapf Caracter,f ; Permuta els nibbles call EnviaN ; Envia els 4 bits més alts swapf Caracter,f ; Torna a deixar els nibbles com estaven return ; Tornem al lloc des d'on hem vingut EnviaI ; Enviem nibbles de caràcters de control bcf Control,7 ; Desactiva E bcf Control,5 ; Desactiva RS EnviaN ; Enviem nibbles decfsz Retard1,f ; Funció de retard de 0,8 ms goto EnviaN movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us movf Caracter,w ; Llegeix el caràcter andlw 0xF0 ; Agafa els 4 bits més alts movwf PORTC ; Envia el byte bsf Control,7 ; Activa E movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us nop ; Espera 1 us bcf Control,7 ; Desactiva E movf Control,w ; Copia Control a l'acumulador movwf PORTB ; I ho posa al PORTB return ; Tornem al lloc des d'on hem vingut ; ; Funció Retard, W conté el nombre de cicles de 771 us que cal fer ; Retard movwf Retard2 ; Ho copia a la variable Retard2 BucRet decfsz Retard1,f ; Decrementa la variable 1 ; si dona zero, no es fa la instrucció següent goto BucRet ; Salta, excepte si el resultat ha estat zero decfsz Retard2,f ; Decrementa la variable 2 goto BucRet ; Salta, excepte si el resultat ha estat zero return ; Tornem al lloc des d'on hem vingut end

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.