LIST ;############################################################# ; Fichero : LCD1602.inc #include ; Autor : Juan Mu¤oz. ; Fecha: Abril 2001. ; Versi¢n: 0.0 ; Funci¢n : Subrutinas para el Control de un LCD1602. ;############################################################# NOLIST ;------------------------------------------------------------- ; Rutinas de presentaci¢n de mensajes en LCD ;------------------------------------------------------------- DATO_A EQU 0x0C ;Variable de temporizaci¢n DATO_B EQU 0x0D ;Variable de temporizaci¢n ;------------------------------------------------------------- ;LCD_BUSY: Lectura del Flag busy & direcci¢n. ;------------------------------------------------------------- LCD_BUSY bsf PORTA,1 ;Pone el LCD en modo lectura bsf STATUS,5 ;Selecciona el banco 1 movlw 0xff movwf TRISB ;Puerta B como entrada bcf STATUS,5 ;Selecciona el banco 0 bsf PORTA,2 ;Activa el LCD nop L_BUSY btfsc PORTB,7 ;Chequea bit de Busy goto L_BUSY bcf PORTA,2 ;Desactiva LCD bsf STATUS,5 ;Selecciona banco 1 clrf TRISB ;Puerta B salida bcf STATUS,5 ;Selecciona el banco 0 bcf PORTA,1 ;Pone LCD en modo WR return ;------------------------------------------------------------- ;LCD_E: Pulso de Enable ;------------------------------------------------------------- LCD_E bsf PORTA,2 ;Activa se¤al E nop ;Espera 1 uS bcf PORTA,2 ;Desactiva se¤al E return ; ;------------------------------------------------------------- ;LCD_DATO: Escritura de datos en DDRAM o CGRAM ;------------------------------------------------------------- LCD_DATO bcf PORTA,0 ;Desactiva RS (modo comando) movwf PORTB ;Valor ASCII a sacar por PORTB call LCD_BUSY ;Espera a que se libere el LCD bsf PORTA,0 ;Activa RS (modo dato). goto LCD_E ;Genera pulso en la se¤al E ;------------------------------------------------------------- ;LCD_REG: Escritura de comandos en el LCD ;------------------------------------------------------------- LCD_REG bcf PORTA,0 ;Desactiva RS (modo comando) movwf PORTB ;Saca el c¢digo de la instrucci¢n call LCD_BUSY ;Espera se libere el LCD goto LCD_E ;Genera pulso en la se¤al E ; ;------------------------------------------------------------- ;LCD_INI: Inicializaci¢n del LCD ;------------------------------------------------------------- LCD_INI movlw b'00111000' ;Caracteres 5-7,datos de 8 bits. call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) movlw b'00111000' call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) movlw b'00111000' call LCD_REG ;C¢digo de instrucci¢n call DELAY_5MS ;5ms.(Especificaci¢n de Fabricante) return ;------------------------------------------------------------- ;DELAY_5MS: Genera una temporizaci¢n de 5 mS ;------------------------------------------------------------- DELAY_5MS movlw 0x1a movwf DATO_B ;Carga la variable DATO_B clrf DATO_A ;Carga la variable DATO_A DELAY_1 decfsz DATO_A,1 ;Decrementa la variable DATO_A goto DELAY_1 decfsz DATO_B,1 ;Decrementa la variable DATO_B goto DELAY_1 return LIST