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 Caracter ; Caràcter o codi a enviar Retard1 ; Variables de retard Retard2 Retard3 endc
org 0 Inici movlw .10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla bsf STATUS,RP1 ; Tria el banc 2 movlw b'00000101' movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf STATUS,RP1 bsf STATUS,RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf TXSTA,BRGH ; Configuració de velocitat bcf BAUDCTL,BRG16 ; Paràmetre de velocitat de 8 bits movlw .25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf TXSTA,SYNC ; Comunicació asíncrona bcf TXSTA,TX9 ; Comunicació de 8 bits bcf STATUS,RP0 ; Tria el banc 0 bsf RCSTA,SPEN ; Activa comunicació sèrie bsf STATUS,RP0 ; Tria el banc 1 bsf TXSTA,TXEN ; Activa comunicació bcf STATUS,RP0 ; Tria el banc 0 movlw .254 ; Caràcter de control movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .1 ; Esborra la pantalla i posa el cursor a l'inici movwf Caracter ; Ho guarda a la variable call EnviaL ; 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 .254 ; Control de la posició del cursor movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .64 ; Filera 2 columna 1 iorlw b'10000000' ; Posa el bit de posicionat a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; 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 $
; ; Enviem caràcters a visualitzar ; EnviaL movf Caracter,w ; Agafa el caràcter movwf TXREG ; L'envia nop nop ; Espera 2 us btfss PIR1,TXIF ; El registre TXREG ha quedat lliure? goto $-1 ; No, doncs esperem return ; Tornem al lloc des d'on hem vingut ; ; Funció de retard de 0,2 W s ; Rets movwf Retard3 Bucles decfsz Retard1,f goto Bucles decfsz Retard2,f goto Bucles decfsz Retard3,f goto Bucles return end
Atenció: en alguns casos hem detectat problemes causats perquè s'envien coses a la pantalla abans que aquesta s'acabi d'inicialitzar. Si es detecta un mal funcionament de la pantalla, és recomanable posar un retard, per exemple d'aproximadament un segon, a l'inici del programa.
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 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.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Caracter ; Caràcter o codi a enviar Retard1 ; Variables de retard Retard2 Retard3 endc
org 0 Inici movlw .10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla bsf STATUS,RP1 ; Tria el banc 2 movlw b'00000101' movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf STATUS,RP1 bsf STATUS,RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf TXSTA,BRGH ; Configuració de velocitat bcf BAUDCTL,BRG16 ; Paràmetre de velocitat de 8 bits movlw .25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf TXSTA,SYNC ; Comunicació asíncrona bcf TXSTA,TX9 ; Comunicació de 8 bits bcf STATUS,RP0 ; Tria el banc 0 bsf RCSTA,SPEN ; Activa comunicació sèrie bsf STATUS,RP0 ; Tria el banc 1 bsf TXSTA,TXEN ; Activa comunicació bcf STATUS,RP0 ; Tria el banc 0 ; Caràcters especials movlw .254 ; Control de la posició movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0 ; Adreça de la primera línia iorlw b'01000000' ; Posa el bit de caràcter especial a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00000000' ; Primera filera movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw b'00001110' 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 ; Enviem l'adreça i els valors movlw .254 ; Caràcter de control movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .1 ; Esborra la pantalla i posa el cursor a l'inici movwf Caracter ; Ho guarda a la variable call EnviaL ; 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 .254 ; Control de la posició del cursor movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .64 ; Filera 2 columna 1 iorlw b'10000000' ; Posa el bit de posicionat a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; 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 .254 ; Control de la posició del cursor movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .15 ; Filera 1 columna 16 iorlw b'10000000' ; Posa el bit de posicionat a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0 ; Caràcter especial movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .254 ; Control de la posició del cursor movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .78 ; Filera 2 columna 15 iorlw b'10000000' ; Posa el bit de posicionat a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 0 ; Caràcter especial movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia goto $
; ; Enviem caràcters a visualitzar ; EnviaL movf Caracter,w ; Agafa el caràcter movwf TXREG ; L'envia nop nop ; Espera 2 us btfss PIR1,TXIF ; El registre TXREG ha quedat lliure? goto $-1 ; No, doncs esperem return ; Tornem al lloc des d'on hem vingut ; ; Funció de retard de 0,2 W s ; Rets movwf Retard3 Bucles decfsz Retard1,f goto Bucles decfsz Retard2,f goto Bucles decfsz Retard3,f goto Bucles return end
El següent programa fa el mateix que el primer que hem vist però guardant els textos amb la directiva dt i recuperant-los modificant el comptador de programa.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Caracter ; Caràcter o codi a enviar Compt ; Comptador per al bucle d'enviar text AdreL ; Adreça per al salt AdreH ; Adreça per al salt Retard1 ; Variables de retard Retard2 Retard3 endc
org 0 Inici movlw .10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla bsf STATUS,RP1 ; Tria el banc 2 movlw b'00000101' movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf STATUS,RP1 bsf STATUS,RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf TXSTA,BRGH ; Configuració de velocitat bcf BAUDCTL,BRG16 ; Paràmetre de velocitat de 8 bits movlw .25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf TXSTA,SYNC ; Comunicació asíncrona bcf TXSTA,TX9 ; Comunicació de 8 bits bcf STATUS,RP0 ; Tria el banc 0 bsf RCSTA,SPEN ; Activa comunicació sèrie bsf STATUS,RP0 ; Tria el banc 1 bsf TXSTA,TXEN ; Activa comunicació bcf STATUS,RP0 ; Tria el banc 0 movlw .254 ; Caràcter de control movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .1 ; Esborra la pantalla i posa el cursor a l'inici movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .3 ; Número de caràcters del primer missatge movwf Compt ; Ho guarda al comptador movlw high Text1 ; Carrega la part alta de l'adreça de la taula movwf AdreH ; Ho posa a la part alta de PC movlw low Text1 ; Carrega la part baixa de l'adreça de la taula movwf AdreL ; Ho guarda per posar-ho a PCL BucText1 call Llegir ; Llegeix el caràcter movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia incf AdreL,f ; Incrementa el punter btfsc STATUS,Z ; S'ha activat Z? incf AdreH,f ; Si s'ha activat, incrementem AdreH decfsz Compt ; Decrementa el comptador goto BucText1 ; Si no és zero, envia el següent movlw .254 ; Control de la posició del cursor movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .64 ; Filera 2 columna 1 iorlw b'10000000' ; Posa el bit de posicionat a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw .3 ; Número de caràcters del primer missatge movwf Compt ; Ho guarda al comptador movlw high Text2 ; Carrega la part alta de l'adreça de la taula movwf AdreH ; Ho posa a la part alta de PC movlw low Text2 ; Carrega la part baixa de l'adreça de la taula movwf AdreL ; Ho guarda per posar-ho a PCL BucText2 call Llegir ; Llegeix el caràcter movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia incf AdreL,f ; Incrementa el punter btfsc STATUS,Z ; S'ha activat Z? incf AdreH,f ; Si s'ha activat, incrementem AdreH decfsz Compt ; Decrementa el comptador goto BucText2 ; Si no és zero, envia el següent goto $
; ; Llegeix la taula amb els missatges ; Llegir movf AdreH,w ; Agafa l'adreça de destí movwf PCLATH ; Modifica el valor de PCLATH movf AdreL,w ; Agafa l'adreça de destí movwf PCL ; Modifica el valor de PCL (i, per tant, també el de PCH) Text1 dt "PIC" Text2 dt "kit" ; ; Enviem caràcters a visualitzar ; EnviaL movf Caracter,w ; Agafa el caràcter movwf TXREG ; L'envia nop nop ; Espera 2 us btfss PIR1,TXIF ; El registre TXREG ha quedat lliure? goto $-1 ; No, doncs esperem return ; Tornem al lloc des d'on hem vingut ; ; Funció de retard de 0,2 W s ; Rets movwf Retard3 Bucles decfsz Retard1,f goto Bucles decfsz Retard2,f goto Bucles decfsz Retard3,f goto Bucles return end

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