Hola
Es muy facil.. solo tienes que abrir el bloc de notas, escribes las variables que necesiten tus rutinas, luego escribes las rutinas, por ejemplo, lcd_inicializacion..., lcd_envia_caracter, lcd_delay.. etc, las guardas poniendole un nombre digamos lcd.h, y luego en el programa que las vallas a usar simplemente pones un "include "C:directorio donde esta la libreria"", aca pongo un ejemplo para la lcd.. esto lo colocas en bloc de notas, y le pones un nombre puede ser LCD.INC o LCD.H bueno tu veras.
Codigo:
; ///////////////////////////////////////////////////////////////////////
; ////
; Este simplemente lo agregas al programa para usar las rutinas ////
; ////
; Include "LCD.H" ////
; ////
; ///////////////////////////////////////////////////////////////////////
Temp_1 equ 0x38
Temp_2 equ 0x39
;/////////////////////////////////////////////////
;/// Configuración PIC para el LCD. //////
;/////////////////////////////////////////////////
UP_LCD bsf STATUS,RP0 ;Banco 1
clrf PORTD ;Puerto d como salidas
movlw b"00011000"
movwf PORTA ;RA0-RA2 salidas, RA3-RA4 entradas
bcf STATUS,RP0 ;Banco 0
bcf PORTA,0 ;RS=0
bcf PORTA,2 ;E=0
return
;/////////////////////////////////////////////////
;/// Mira Flag de busy //////
;/////////////////////////////////////////////////
LCD_BUSY bsf PORTA,1 ;Pone el LCD en Modo RD
bsf STATUS,RP0
movlw H"FF"
movwf PORTD ;Puerta D como entrada
bcf STATUS,RP0 ;Selecciona el banco 0
bsf PORTA,2 ;Activa el LCD
nop
LCD_BUSY_1 btfsc PORTD,7 ;Chequea bit de Busy
goto LCD_BUSY_1
bcf PORTA,2 ;Desactiva LCD
bsf STATUS,RP0
clrf PORTD ;Puerta B salida
bcf STATUS,RP0
bcf PORTA,1 ;Pone LCD en modo WR
return
;/////////////////////////////////////////////////
;/// Habilitación (Enable) //////
;/////////////////////////////////////////////////
LCD_E bsf PORTA,2 ;Activa E
nop
bcf PORTA,2 ;Desactiva E
return
;/////////////////////////////////////////////////
;/// Escribe un dato en el LCD //////
;/////////////////////////////////////////////////
LCD_DATO bcf PORTA,0 ;Desactiva RS
movwf PORTD ;Valor Ascii a sacar por PortD
call LCD_BUSY ;Espera a que se libere el LCD
bsf PORTA,0 ;Activa RS
goto LCD_E ;Genera pulso de E
;/////////////////////////////////////////////////
;/// Envia Comando al LCD //////
;/////////////////////////////////////////////////
LCD_REG bcf PORTA,0 ;Desactiva RS
movwf PORTD ;Código de comando.
call LCD_BUSY ;LCD libre?.
goto LCD_E ;SI.Genera pulso de E.
;/////////////////////////////////////////////////
;/// Inicializa el LCD //////
;/////////////////////////////////////////////////
LCD_INI movlw b"00111000"
call LCD_REG ;Código de instrucción
call LCD_DELAY ;Temporiza
movlw b"00111000"
call LCD_REG ;Código de instrucción
call LCD_DELAY ;Temporiza
movlw b"00111000"
call LCD_REG ;Código de instrucción
call LCD_DELAY ;Temporiza
movlw b"00000001" ;Borra LCD y Home.
call LCD_REG
return
;/////////////////////////////////////////////////
;/// Delay para inicialización //////
;/////////////////////////////////////////////////
LCD_DELAY: clrwdt
movlw .10
movwf Temp_1
clrf Temp_2
LCD_DELAY_1: decfsz Temp_2,F
goto LCD_DELAY_1
decfsz Temp_1,F
goto LCD_DELAY_1
return
Para usarlo en el programa.. primero inicializas el LCD.. haces un
call LCD_INI
O para enviar un dato al LCD
movlw XX
call LCD_DATO
Espero te sirva
Saludos