Sunteți pe pagina 1din 3

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 ESTADO,5


clrf PTAB_T
clrf PTAA_T
bcf 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 0X40 ; <---DIRECCION INICIAL DEL 1ER CARACTER


call CGRAM_DIR

movlw .31 ; <--1ra fila del caracter


call MOSTRAR_CARACTER

movlw 0X41 ;1
call CGRAM_DIR
movlw .04
call MOSTRAR_CARACTER

movlw 0X42 ;2
call CGRAM_DIR
movlw .14
call MOSTRAR_CARACTER

movlw 0X43 ;3
call CGRAM_DIR
movlw .10
call MOSTRAR_CARACTER

movlw 0X44 ;5
call CGRAM_DIR
movlw .14
call MOSTRAR_CARACTER

movlw 0X45 ;6
call CGRAM_DIR
movlw .4
call 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 PTAA_T,1 ; E=1 ; Inicio escrtura


bcf PTAA_T,1 ; E=0

2
C:\prueba_lcd_1\caracteres.asm

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
;-----------------------------

;//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
; ------------------------------------------------

S-ar putea să vă placă și