;lcd_ej_6.asm Movimiento cíclico de un caracter a traves del display. 
; ---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	0x11		;registro contador de columna


;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		0x80		;primera posición primera linea
		movwf		COLUMNA
BUCLE_1	movlw		0x01		;borra display 
		call		LCD_REG
		movf		COLUMNA,W
		call		LCD_REG	;envia nueva posición
		movlw		'*'		;envia "*"
		call		LCD_DATO
		call		RETARDO	;espera un tiempo
		incf		COLUMNA,F		;incrementa posición
		movf		COLUMNA,W	;comprueba si ya llegó a...
		sublw		0x91		;...la ultima columna de la primera linea
		btfss		STATUS,Z
		goto		BUCLE_1	;no ha pasado, vuelve enviando 
		movlw		0xC0		;si ha llegado, carga primera posicion... 
		movwf		COLUMNA	;...segunda linea 
BUCLE_2	movlw		0x01		;borra display
		call		LCD_REG
		movf		COLUMNA,W
		call		LCD_REG	;envia posición
		movlw		'*'
		call		LCD_DATO	;envia "*"
		call		RETARDO	;espera un tiempo
		incf		COLUMNA,F		;incrementa posición
		movf		COLUMNA,W	;comprueba si ya llegó a...
		sublw		0xD0		;la ultima columna de la segunda linea 
		btfss		STATUS,Z	
		goto		BUCLE_2	;no, no ha llegado
		goto		BUCLE	;si ha llegado al final, vuelta a empezar
		


;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
