;lcd_ej_5.asm Programa de ejemplo que envia el caracter "*" hacia todas las posiciones del LCD ;por autoincremento.  ---www.pictronic.com --- info@pictronic.com

	list		p=16F84		;modelo de PIC
	include		"P16F84.inc"		;libreria de definiciones para el 16F84
	__config	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;palabra de configuración	

;declaramos los tres registros que utilizan las subrutinas de "lcd_db4.inc"

CONT0	equ	0x0C	
CONT1	equ	0x0D
LCD_TEMP	equ	0x0E

;variables para el programa principal

CONTA_0	equ	0x0F		;registro para la rutina de retardo
CONTA_1	equ	0x10		;   "           "     "     "      "      "
COLUMNA	equ	0x12		;registro contador de columnas (16)
LINEA	equ	0x13		;registro contador de lineas (2)

;inicio del programa

		org		0x00
		goto		INICIO
		org		0x05

		include		"lcd_db4.inc"		;incluye las subrutinas de control LCD

INICIO	call		LCD_UP		;configura TRISB para el LCD
		call		LCD_INI		;inicia el LCD
		movlw		0x0C			;comando apaga cursor
		call		LCD_REG

;Bucle del programa principal.

BUCLE	movlw		0x01		;borra y home
		call		LCD_REG
		movlw		.2		;carga contador lineas
		movwf		LINEA
BUCLE_0	movlw		.16		;carga contador columnas
		movwf		COLUMNA
BUCLE_1	movlw		'*'		;envia un "*"
		call		LCD_DATO
		call		RETARDO	;espera un tiempo
		decfsz		COLUMNA,F	;comprueba si ha enviado 16 caracteres
		goto		BUCLE_1	;no, sigue enviando
		decfsz		LINEA,F	;si, comprueba si estaba en la segunda linea
		goto		SIGUE		;no, sigue a la segunda linea 
		goto		BUCLE	;vuelta a empezar todo el bucle	
SIGUE		movlw		0xC0		;salta a primesa col. segunda linea
		call		LCD_REG
		goto		BUCLE_0	;sigue enviando	

;subrutina de retardo que determina la velocidad de la secuencia de envio

RETARDO	decfsz		CONTA_0,F
goto		RETARDO
decfsz		CONTA_1,F
goto		RETARDO
return		

		end
