C:\prueba_lcd_1\caracteres.asm ; REALIZADO POR EL ING. CESAR QUISPE, COMO PARTE DEL CURSO DE MICROCONTROLADORES ; SENATI-SURQUILLO. ; EL PRESENTE "CODIGO NUEVO" GRABA UN CARACTER PERSONALIZADO Y LUEGO LO VISUALIZA EN ; EL LCD. List P=16f84a INCLUDE "P16F84A.INC" __CONFIG _XT_OSC & _CP_OFF & _PWRTE_ON & _WDT_OFF org 0x00 goto inicio org 0x05 CBLOCK 0X0C ------------DAT_ROM <----AGREGAR ENDC inicio bsf clrf clrf bcf ESTADO,5 PTAB_T PTAA_T ESTADO,5 call inicializa_lcd call LCD_CURSOR_ON ; Debe encenderse el LCD luego de inicializarse. ;-------------------CODIGO NUEVO--------------------------------------------call CGRAM ;Esta funcion GRABA el caracter PERSONALIZADO al LCD call CLEAR_LCD ;Esta funcion "Retorna" el cursor al LCD(en el paso ;anterior el cursor se quedo en la CGROM movlw .00 ;Se carga el codigo ASCII o el Caracter ;por ejemplo podria ser : .64 o '@' ;En este caso se mostrara el byte GRABADO. call MOSTRAR_CARACTER;el codigo anterior se envia al LCD para mostrarlo. ;--------------------CODIGO NUEVO----------------------------------------------bucle goto bucle ;//////// Antes de llamar a esta funcion el dato debe estar en w ///////// ;/// SE EMPLEA TANTO PARA VISUALIZAR UN DATO EN EL LCD O PARA GRABAR ;/// UN NUEVO CARACTER EN LA CGROM. MOSTRAR_CARACTER movwf DAT_ROM bsf PTAA_T,0 ; RS=1 bcf PTAA_T,1 ; E=0 ;/////////////////// movfw DAT_ROM ;enviando la parte alta movwf PTAB_T bsf PTAA_T,1 ; E=1; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_40microseg ; Debe durar 50 microsegundos SWAPF DAT_ROM,0 ;enviando la parte BAJA movwf PTAB_T bsf PTAA_T,1 ; E=1; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_40microseg ; Debe durar 50 microsegundos return ;/////////////////FN LEER CARACTER 1 C:\prueba_lcd_1\caracteres.asm ;ESTA FUNCION GRABA UN CARACTER EN LA CGRAM (UN CARACTER ; PERSONALIZADO EN EL LCD Y ES EL SIGUIENTE. ;000 11111 -->Dir a grabar =0x40 DATO a grabar=31 ;000 00100 -->Dir a grabar =0x40 DATO a grabar=04 ;000 01110 -->Dir a grabar =0x40 DATO a grabar=14 ;000 01010 -->Dir a grabar =0x40 DATO a grabar=10 ;000 01110 -->Dir a grabar =0x40 DATO a grabar=14 ;000 00100 -->Dir a grabar =0x40 DATO a grabar=04 ;000 11111 -->Dir a grabar =0x40 DATO a grabar=31 CGRAM movlw call 0X40 ; CGRAM_DIR <---DIRECCION INICIAL DEL 1ER CARACTER movlw call .31 ; <--1ra fila del caracter MOSTRAR_CARACTER movlw call movlw call 0X41 ;1 CGRAM_DIR .04 MOSTRAR_CARACTER movlw call movlw call 0X42 ;2 CGRAM_DIR .14 MOSTRAR_CARACTER movlw call movlw call 0X43 ;3 CGRAM_DIR .10 MOSTRAR_CARACTER movlw call movlw call 0X44 ;5 CGRAM_DIR .14 MOSTRAR_CARACTER movlw call movlw call 0X45 ;6 CGRAM_DIR .4 MOSTRAR_CARACTER movlw 0X46 ; <---DIRECCION FINAL 1ER CARACTER, EL SEGUNDO CARACTER COMIENZA EN 0X47 call CGRAM_DIR movlw .31 ; <--Ultima fila del caracter call MOSTRAR_CARACTER return ;//CGRAM_DIR ESTA FUNCION UBICA EL CURSOR EN LA CGRAM, LA DIRECCION ; VIENE EN W /////// CGRAM_DIR ; byte a envar llego en EN W movwf DAT_ROM bcf PTAA_T,0 ; RS=0 bcf PTAA_T,1 ; E=0 ;------------------------------------------movfw DAT_ROM movwf PTAB_T bsf bcf PTAA_T,1 PTAA_T,1 ; E=1 ; Inicio escrtura ; E=0 2 C:\prueba_lcd_1\caracteres.asm call retardo_1.7mseg SWAPF movwf DAT_ROM,0 PTAB_T bsf bcf PTAA_T,1 PTAA_T,1 ; Tiempo q tarda en escribirse un comando ; E=1 ; Inicio escrtura ; E=0 call retardo_1.7mseg ; Tiempo q tarda en escribirse un comando ; ----------------------------------------------return ;----------------------------;//CLEAR LCD, UBICA EL CURSOR AL INICIO DE LA DDRAM/////// CLEAR_LCD ; W=0000 0001 movlw 0x01 movwf DAT_ROM bcf PTAA_T,0 ; RS=0 bcf PTAA_T,1 ; E=0 ;------------------------------------------movfw DAT_ROM movwf PTAB_T bsf PTAA_T,1 ; E=1 ; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_1.7mseg ; Tiempo q tarda en escribirse un comando SWAPF DAT_ROM,0 movwf PTAB_T bsf PTAA_T,1 ; E=1 ; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_1.7mseg ; Tiempo q tarda en escribirse un comando ; ----------------------------------------------return ;####### RETURN HOME##### ; UBICA EL CURSOR EN LA DIRECCION DE LA DRAM ; PRIMERA POSICION DEL LCD. RETURN_HOME ; byte a envar=0000 0010 bcf PTAA_T,0 ; RS=0 bcf PTAA_T,1 ; E=0 ;---------------------------movlw b'00000010' movwf PTAB_T bsf PTAA_T,1 ; E=1 ; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_1.7mseg ; Tiempo q tarda en escribirse un comando movlw b'00100000' movwf PTAB_T bsf PTAA_T,1 ; E=1 ; Inicio escrtura bcf PTAA_T,1 ; E=0 call retardo_1.7mseg ; Tiempo q tarda en escribirse un comando return ; ------------------------------------------------ 3