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.
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
Caracter EQU 0x20 ; Caràcter o codi a enviar Retard1 EQU 0x21 ; Variables de retard Retard2 EQU 0x22 Retard3 EQU 0x23
PSECT code, class=CODE, delta=2, abs main: movlw 10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla bsf RP1 ; Tria el banc 2 movlw 00000101B movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf RP1 bsf RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf BRGH ; Configuració de velocitat bcf BRG16 ; Paràmetre de velocitat de 8 bits movlw 25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf SYNC ; Comunicació asíncrona bcf TX9 ; Comunicació de 8 bits bcf RP0 ; Tria el banc 0 bsf SPEN ; Activa comunicació sèrie bsf RP0 ; Tria el banc 1 bsf TXEN ; Activa comunicació bcf 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 10000000B ; 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 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 main
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.
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
Caracter EQU 0x20 ; Caràcter o codi a enviar Retard1 EQU 0x21 ; Variables de retard Retard2 EQU 0x22 Retard3 EQU 0x23
PSECT code, class=CODE, delta=2, abs main: movlw 10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla bsf RP1 ; Tria el banc 2 movlw 00000101B movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf RP1 bsf RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf BRGH ; Configuració de velocitat bcf BRG16 ; Paràmetre de velocitat de 8 bits movlw 25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf SYNC ; Comunicació asíncrona bcf TX9 ; Comunicació de 8 bits bcf RP0 ; Tria el banc 0 bsf SPEN ; Activa comunicació sèrie bsf RP0 ; Tria el banc 1 bsf TXEN ; Activa comunicació bcf 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 01000000B ; Posa el bit de caràcter especial a 1 movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00000000B ; Primera filera movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00001110B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00010001B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00010001B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00001010B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00001010B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00011011B movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia movlw 00000000B ; Darrera filera movwf Caracter ; Ho guarda a la variable call EnviaL ; Ho envia ; Fi caràcters especials 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 10000000B ; 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 10000000B ; 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 10000000B ; 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 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 main
El següent programa fa el mateix que el primer que hem vist però guardant els textos amb la directiva IRP i recuperant-los modificant el comptador de programa.
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
Caracter EQU 0x20 ; Caràcter o codi a enviar Compt EQU 0x21 ; Comptador per al bucle d'enviar text AdreL EQU 0x22 ; Adreça per al salt AdreH EQU 0x23 ; Adreça per al salt Retard1 EQU 0x24 ; Variables de retard Retard2 EQU 0x25 Retard3 EQU 0x26
PSECT code, class=CODE, delta=2, abs main: bsf RP1 ; Tria el banc 2 movlw 00000101B movwf ANSEL ; Configura AN0 i AN2 com entrada analògica clrf ANSELH ; Desactiva les altres entrades analògiques bcf RP1 bsf RP0 ; Tria el banc 1 clrf TRISC ; Tot el port C és de sortida clrf TRISB ; Tot el port B és de sortida bsf BRGH ; Configuració de velocitat bcf BRG16 ; Paràmetre de velocitat de 8 bits movlw 25 ; Velocitat de 9600 baud movwf SPBRG ; Paràmetre de velocitat bcf SYNC ; Comunicació asíncrona bcf TX9 ; Comunicació de 8 bits bcf RP0 ; Tria el banc 0 bsf SPEN ; Activa comunicació sèrie bsf RP0 ; Tria el banc 1 bsf TXEN ; Activa comunicació bcf RP0 ; Tria el banc 0 movlw 10 ; Retard de 2 s call Rets ; Esperem que arrenqui la pantalla 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 ZERO ; 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 10000000B ; 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 ZERO ; 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: IRP valors, 'P', 'I', 'C' retlw valors ENDM Text2: IRP valors, 'k', 'i', 't' retlw valors ENDM ; ; Enviem caràcters a visualitzar ; EnviaL: movf Caracter,w ; Agafa el caràcter movwf TXREG ; L'envia nop nop ; Espera 2 us btfss 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 main

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