; ;----------------SUBRUTINA MANEJO de LCD-------------------- ; ;Registros necesarios para usar Subrutina MANEJO de LCD: ; ; aux - temp5 ; ;--Se aconseja ver el plano de conexiones para conocer ;--cuales son los pines del PIC necesarios. ; ;############################################################ ;Forma de uso: ;Llamar una sola vez (ATENCION) en el programa a subrutina LCD ; ;call lcd ; ;Luego (tantas veces como se desee) ; ;cuando deseamos escribir en el LCD - Ej: N ; ; movlw 81h; Carga dirección equivalente del display ; donde deseamos que aparezca el caracter. ; call instruc; Le informa al LCD ; movlw "N"; Carga el caracter deseado en ASCII en el acumulador ; call escrib; Le envia el caracter al LCD ;############################################################ ; ;*********************************************************** ;* ;*Esta subrutina cuenta a la vez de 3 subrutinas, que pueden ser ;*llamadas en forma independiente si se desea: ;* ;*Subrutina LCD - Inicializa el LCD para poder ser usado. ;*Subrutina INSTRC/ESCRIB--Permite enviar ordenes o datos al LCD. ;*Subrutina Retardo - Necesaria para la subrutina anterior. ; ;*********************************************************** ; ; ;-------Subrutina configura LCD -----(parte de Subr manejo de LCD)---- ;esta subrutina inicia la pantalla LCD ;esta subrutina no utiliza registros de proposito general lcd movlw 02h; carga w con literal 02h RB1=1 o sea E=1 habilito LCD call instruc; enviaremos este valor al portb y por lo tanto al LCD ;------------otra instruccion----------- movlw 28h; carga w con literal 28h ;la intrucc asociada dice: interfase de datos de 4 bits y se va a usar 2 lineas - ; corresponde a la intruccion ACTIVAR FUNCION call instruc; enviaremos este valor al portb y por lo tanto al LCD ;------------otra instruccion----------- movlw 06h; carga w con literal 06h ;la intrucc asociada dice: dato fijo en pantalla- corresponde a la intruccion ; SELECCIONAR MODO call instruc; enviaremos este valor al portb y por lo tanto al LCD ;------------otra instruccion----------- movlw 0Ch; carga w con literal 0Ch ;la intrucc asociada dice: encienda la pantalla y desactive el cursor- ; corresponde a la intruccion ; ENCENDER O APAGAR PANTALLA call instruc; enviaremos este valor al portb y por lo tanto al LCD ;------------otra instruccion----------- movlw 01h; carga w con literal 01h ;la intrucc asociada dice: BORRAR PANTALLA call instruc; enviaremos este valor al portb y por lo tanto al LCD return ;esta subrutina inicio la pantalla LCD ;----Fin Subrutina configura LCD --(parte de Subr manejo de LCD)--- ;-------Subrutina INSTRC/ESCRIB-----(parte de Subr manejo de LCD)--- ;Subrutina que manda una instruccion o dato al LCD ;Esta subrutina utiliza el registro de proposito general aux instruc bcf portb,0; RB0=0 o sea RS=0 es una instruccion para LCD goto dato2 escrib bsf portb,0; RB0=1 o sea RS=1 es una dato para LCD dato2 ;lo que se va hacer es para no alterar el contenido de los 4 bit menos ; significativos dell portb movwf aux; guarda contenido de w en aux movlw 0fh; carga 00001111 en w andwf portb,1; AND entre w=00001111 y portb y guarda resultado en portb ;lo que se termino de hacer es para no alterar el contenido de los 4 bit ; menos significativos dell portb movf aux,0; carga aux en w andlw b'11110000'; AND entre literal 11110000 y w en el cual esta copiado aux ; (guarda el resultdado en w) iorwf portb,1; OR entre w y portb - guarda resultado en portb bsf portb,1; RB1=1 o sea E=1 habilito LCD call retardo bcf portb,1; RB1=E=0 deshabilita LCD call retardo ;---terminó envio 4 bit MSB------- ;---comienza el envio de 4 bit LSB--- movlw 0fh; carga 00001111 en w andwf portb,1; AND entre w=00001111 y portb - guarda resultado en portb swapf aux,0; intercambia NIBLES de aux y lo guarda en w andlw b'11110000'; AND entre literal 11110000 y w en el cual esta copiado aux ; con los NIBLES intercambiados (guarda el resultdado en w) iorwf portb,1; OR entre w y portb - guarda resultado en portb ;lo que se termino de hacer es para no alterar el contenido de los 4 bit ; menos significativos dell portb bsf portb,1; RB1=1 o sea E=1 habilito LCD call retardo call retardo bcf portb,1; RB1=E=0 deshabilita LCD call retardo ;---termino el envio de lo 4bit LSB--- return ;---------Fin subrutina que manda instruccion o dato al LCD------ ;---------Fin Subrutina INSTRC/ESCRIB-----(parte de Subr manejo de LCD)-- ;---------Subrutina retardo----(parte de Subr manejo de LCD)------ ;Esta subrutina utiliza el registro de proposito general temp5 retardo movlw 0ffh; carga literal 0ffh en w movwf temp5; mueve contenido de w a temp5 decr decfsz temp5,1; decrementa temp5 y guarda resultado en temp5- salta la intruccion ; siguiente si temp5 es igual a cero goto decr movlw 0ffh; carga literal 0ffh en w movwf temp5; mueve contenido de w a temp5 decr2 decfsz temp5,1; decrementa temp5 y guarda resultado en temp5- salta la intruccion ; siguiente si temp5 es igual a cero goto decr2 return ;--------- Fin Subrutina retardo---(parte de Subr manejo de LCD)-- ;----------FIN DE SUBRUTINA MANEJO de LCD-----------------------------------------