LIST	P=16F876
;===================== MAPA DE MEMORIA ==============================================
ESTADO		EQU	0x03
OPTION_REG	EQU	0x81
TRISA		EQU	0x85
TRISB		EQU	0x86
TRISC		EQU	0x87
PUERTAA		EQU	0x05
PUERTAB		EQU	0x06	
PUERTAC		EQU	0x07
INTCON		EQU	0x0B
PIE1		EQU	0x8C
PIE2		EQU	0x8D
;
CMD		EQU	0x20	
CONTA01		EQU	0x21
CONTA02		EQU	0x22
CONTA03		EQU	0x23
T_COMPRUEBA	EQU	0x24
TECLAORDEN	EQU	0x25
ULT_TECLA	EQU	0x26
CHAR		EQU	0x27	
DDRAM		EQU	0x28
DATO01		EQU	0x29
;
T2CON      	EQU     0x12
CCPR1L     	EQU     0x15
CCPR1H     	EQU     0x16
CCP1CON     	EQU     0x17
CCPR2L      	EQU     0x1B
CCPR2H      	EQU     0x1C
CCP2CON     	EQU     0x1D
PR2         	EQU     0x92
ADCON1     	EQU     0x9F
ADCON0		EQU	0x1F
PIR1		EQU	0x0C
ADRESL		EQU	0x9E
ADRESH		EQU	0x1E
;
;=====================	DEFINICIÓN DE CONSTANTES =====================================
	#define		RS	PUERTAA,0
	#define		RW	PUERTAA,2
	#define		E	PUERTAA,1
;===================== CAMBIO DE BANCO ===============================================
BANCO0	macro   ;MACRO PARA EL CAMBIO AL BANCO 0
		BCF	ESTADO,7
		BCF	ESTADO,6
		BCF	ESTADO,5
		ENDm
BANCO1	macro   ;MACRO PARA EL CAMBIO AL BANCO 1
		BCF	ESTADO,7
		BSF	ESTADO,5
		BCF	ESTADO,6
		ENDm
;
;===================== CONFIGURACIÓN DE PUERTOS Y REGISTROS DEL PIC ==================
	ORG	0x0000
	GOTO	INICIO
	ORG	0x0004
	GOTO 	INT
;
INICIO	BANCO1
	MOVLW	b'00000110'	;Puerta A como E/S digitales
	MOVWF	ADCON1
	CLRF	TRISA		;Puerta A en salida
	CLRF	TRISC		;Puerta C en salida
	MOVLW 	b'00010000'	;Bit 4 de la puerta B programado como entrada
	MOVWF	PUERTAB
	BANCO0
;
;====================== PROGRAMACIÓN DE LA PANTALLA =====================================
	MOVLW	b'00111000'	;Palabra de programación pantalla (Bus datos 8 bits 2 
				;líneas (son 4******))
	CALL	COMANDO		;Manda a la LCD la palabra de programación	
	MOVLW	b'00001110'	;Palabra de programación (Pantalla activa, cursor activo 
				;y sin parpadeo)
	CALL	COMANDO		;Manda a la LCD la palabra de programación
INICIO2	MOVLW	b'00000001'	;Palabra de programación (borra la pantalla)
	CALL	COMANDO		;Manda a la LCD la palabra de programación
	MOVLW	b'11010100'	;situa el cursor en la posicion 54 de la pantalla fila3
	CALL	COMANDO
	MOVLW	'P'	
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	'R'
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	' '
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'M'
	CALL	LETRA
	MOVLW	'P'	
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'Z'
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	'R'
	CALL 	LETRA
	MOVLW	' '
	CALL 	LETRA
	MOVLW	'P'	
	CALL 	LETRA
	MOVLW	'U'
	CALL 	LETRA
	MOVLW	'L'
	CALL 	LETRA
	MOVLW	'S'
	CALL 	LETRA 
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	' '
	CALL 	LETRA
	MOVLW	'*'
	CALL	LETRA
	GOTO	BUCLE
;====================== PROGRAMA PRINCIPAL =============================================
BUCLE	GOTO BUCLE1
BUCLE1	GOTO BUCLE
;
;====================== PROGRAMA INTERRUPCIÓN ===========================================
INT	MOVLW	b'00000001'	;Palabra de programación (borra todo)
	CALL	COMANDO		;Manda a la LCD la palabra de programación
	MOVLW	'Q'	
	CALL 	LETRA
	MOVLW	'U'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	' '
	CALL 	LETRA
	MOVLW	'D'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'S'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	'?'
	CALL 	LETRA
	MOVLW	b'11000001'	;situa el cursor en la posicion 41 de la pantalla fila1
	CALL	COMANDO
	MOVLW	'A'	
	CALL 	LETRA
	MOVLW	')'
	CALL 	LETRA
	MOVLW	'V'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'L'
	CALL 	LETRA
	MOVLW	'O'
	CALL 	LETRA
	MOVLW	'C'
	CALL 	LETRA
	MOVLW	'I'
	CALL 	LETRA
	MOVLW	'D'
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	'D'
	CALL 	LETRA
	MOVLW	b'10010101'	;situa el cursor en la posicon 15 de la pantalla fila2
	CALL	COMANDO	
	MOVLW	'B'	
	CALL 	LETRA
	MOVLW	')'
	CALL 	LETRA
	MOVLW	'F'
	CALL 	LETRA
	MOVLW	'R'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'C'
	CALL 	LETRA
	MOVLW	'U'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'N'
	CALL 	LETRA
	MOVLW	'C'
	CALL 	LETRA
	MOVLW	'I'
	CALL 	LETRA
	MOVLW	'A'
	CALL 	LETRA
	MOVLW	b'11010101'	;situa el cursor en la posicion 55 de la pantalla fila3
	CALL	COMANDO
	MOVLW	'C'	
	CALL 	LETRA
	MOVLW	')'
	CALL 	LETRA
	MOVLW	'T'
	CALL 	LETRA
	MOVLW	'E'
	CALL 	LETRA
	MOVLW	'N'
	CALL 	LETRA
	MOVLW	'S'
	CALL 	LETRA
	MOVLW	'I'
	CALL 	LETRA
	MOVLW	'O'
	CALL 	LETRA
	MOVLW	'N'
	CALL 	LETRA
	GOTO	TECLADOON
;============== INICIO TECLADO ======================================================
TECLADOON
	BANCO1		
	MOVLW	b'11110000'	;RB7 a RB4 entradas RB3 a RB0 salidas
	MOVWF	PUERTAB
	BCF	OPTION_REG,7	;habilita resistencia de pull-up del puertoB
	BANCO0
;
;============== TECLADO LEE (lee el teclado obteniendo el orden de la tecla pulsada)======================
TECLADOLEE
	CLRF	TECLAORDEN	;todavia no ha comenzado el chequeo del teclado
	MOVLW	b'11111110'	;va a chequear la primera fila
FILA
	MOVWF	PUERTAB		;activa la fila correspondiente
COLUMNA1
	BTFSC	PUERTAB,4	;chequa la primera columna buscando un 0
	CALL	GUARDA1
	INCF	TECLAORDEN,1	;chequa la siguiente letra (incrementa el valor de TECLAORDEN en 1)(,1 el resultado se almacena en TECLAORDEN)
COLUMNA2
	BTFSC	PUERTAB,5	;chequa la segunda columna buscando un 0
	GOTO	GUARDA2
	INCF	TECLAORDEN,1
COLUMNA3
	BTFSC	PUERTAB,6	;chequa la tercera columna buscando un 0
	GOTO	GUARDA3
	INCF	TECLAORDEN,1
COLUMNA4
	BTFSC	PUERTAB,7	;chequa la cuarta columna buscando un 0
	GOTO	GUARDA4
	INCF	TECLAORDEN,1
FINCOLUMNAS			;comprueba si ha chequeao la ultima tecla(ve si el contenido de TECLAORDEN es igual al numero de teclas del teclado)
	MOVLW	ULT_TECLA
	SUBWF	TECLAORDEN,1
	BTFSC	ESTADO,0	;chequea el bit c de ESTADO si es 0 salta una instruccion
	GOTO	TECLA_NO
	BSF	ESTADO,0	;activa el bit c de ESTADO
	RLF	PUERTAB,0	;rota PUERTAB a la izq el bit de menos peso pasa al carry (c) (,0 el resultado se guarda en w)(apunta a la siguiente fila)
	GOTO	FILA
TECLA_NO
	BCF	ESTADO,0	;borra el bit c del registro ESTADO
	GOTO	FINCOLUMNAS
GUARDA1
	MOVF	TECLAORDEN,0	;guarda en w el valor de la tecla pulsada
	BSF	ESTADO,0	;como hay tecla pulsada pone c=1
	RETURN
GUARDA2
	MOVF	TECLAORDEN,0	;guarda en w el valor de la tecla pulsada
	BSF	ESTADO,0	;como hay tecla pulsada pone c=1
	GOTO	CHEQUEOC
	
GUARDA3	
	MOVF	TECLAORDEN,0	;guarda en w el valor de la tecla pulsada
	BSF	ESTADO,0	;como hay tecla pulsada pone c=1
	GOTO	CHEQUEOB
	
GUARDA4	
	MOVF	TECLAORDEN,0	;guarda en w el valor de la tecla pulsada
	BSF	ESTADO,0	;como hay tecla pulsada pone c=1
	GOTO	CHEQUEOA
	RETURN
;=====================CHEQUEOA=================================================================================
CHEQUEOA	;BTFSS	PUERTAB,7	;chequea letraA si es 1 salta una instruccion
		;GOTO	CHEQUEOB
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'Q'
		CALL 	LETRA
		MOVLW	'U'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'V'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	'C'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'S'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	'?'
		MOVLW	b'11000001'	;situa el cursor en la posicion 41 de la pantalla fila1
		CALL	COMANDO
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'1'
		CALL 	LETRA
		MOVLW	'5'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	b'10010101'	;situa el cursor en la posicon 15 de la pantalla fila2
		CALL	COMANDO
		MOVLW	'B'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'2'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO 	CHEQUEO2
;======================CHEQUEOB===================================================================================
CHEQUEOB	;BTFSS	PUERTAB,6	;chequea letraB si es 1 salta una instruccion
		;GOTO	CHEQUEOC
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'Q'
		CALL 	LETRA
		MOVLW	'U'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'F'
		CALL 	LETRA
		MOVLW	'R'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'C'
		CALL 	LETRA
		MOVLW	'U'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'N'
		CALL 	LETRA
		MOVLW	'C'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'S'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	'?'
		CALL 	LETRA
		MOVLW	b'11000001'	;situa el cursor en la posicion 41 de la pantalla fila1
		CALL	COMANDO
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'5'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	b'10010101'	;situa el cursor en la posicon 15 de la pantalla fila2
		CALL	COMANDO
		MOVLW	'B'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'9'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	CHEQUEO3
;======================CHEQUEOC====================================================================================
CHEQUEOC	;BTFSS	PUERTAB,5	;chequea letraC si es 1 salta una instruccion	
		;GOTO	CHEQUEOA
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'Q'
		CALL 	LETRA
		MOVLW	'U'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'T'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'N'
		CALL 	LETRA
		MOVLW	'S'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	'N'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'S'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	'?'
		CALL 	LETRA
		MOVLW	b'11000001'	;situa el cursor en la posicion 41 de la pantalla fila1
		CALL	COMANDO
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'1'
		CALL 	LETRA
		MOVLW	'5'
		CALL 	LETRA
		MOVLW	b'10010101'	;situa el cursor en la posicion 15 de la pantalla fila2
		CALL	COMANDO
		MOVLW	'B'
		CALL 	LETRA
		MOVLW	')'
		CALL 	LETRA
		MOVLW	'2'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	CHEQUEO4
;=====================CHEQUEO2=====================================================================================
CHEQUEO2	BTFSS	PUERTAB,7
		GOTO	CHEQUEO2B
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'1'
		CALL 	LETRA
		MOVLW	'5'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	INTER
;
;======================CHEQUEO2B=================================================================================
CHEQUEO2B	BTFSS	PUERTAB,6	
		GOTO	CHEQUEO2
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'2'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	INTER
;======================CHEQUEO3===================================================================================
CHEQUEO3	BTFSS	PUERTAB,7
		GOTO	CHEQUEO3B
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación	
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'5'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	INTER
;======================CHEQUEO3B===================================================================================
CHEQUEO3B	BTFSS	PUERTAB,6	
		GOTO	CHEQUEO3
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'9'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	INTER
;======================CHEQUEO4===================================================================================
CHEQUEO4	BTFSS	PUERTAB,7
		GOTO	CHEQUEO4B
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación	
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'1'
		CALL 	LETRA
		MOVLW	'5'
		CALL 	LETRA
		GOTO	INTER
;======================CHEQUEO4B=================================================================================
CHEQUEO4B	BTFSS	PUERTAB,6	
		GOTO	CHEQUEO4
		MOVLW	b'00000001'	;Palabra de programación (borra todo)
		CALL	COMANDO		;Manda a la LCD la palabra de programación
		MOVLW	'H'
		CALL 	LETRA
		MOVLW	'A'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'L'
		CALL 	LETRA
		MOVLW	'E'
		CALL 	LETRA
		MOVLW	'G'
		CALL 	LETRA
		MOVLW	'I'
		CALL 	LETRA
		MOVLW	'D'
		CALL 	LETRA
		MOVLW	'O'
		CALL 	LETRA
		MOVLW	' '
		CALL 	LETRA	
		MOVLW	'2'
		CALL 	LETRA
		MOVLW	'0'
		CALL 	LETRA
		GOTO	INTER
;===================== Vuelta a habilitar interrupciones ========================================================================
INTER	BANCO1
	MOVLW	b'10001000'	;Permitimos todas las interrupciones y activamos la de RB4...RB7	
	MOVWF	INTCON
	;CLRF	PIE1		;Ponemos a 0 el registro señalizador de interrupciones 1
	;CLRF 	PIE2		;Ponemos a 0 el registro señalizador de interrupciones 2
	BANCO0
	MOVLW 	b'11110000'	;Bit 4 de la puerta B programado como entrada
	MOVWF	PUERTAB
	GOTO 	INICIO2
;===================== Retardo de más de 1640us========================================================================
BUSY	MOVLW	b'00001001'	;Ponemos el contador a 09
	MOVWF	CONTA02		;Guardamos valor en CONTA01
UNO	MOVLW	b'01000000'	;Ponemos el contador a 40
	MOVWF	CONTA03 	;Guardamos el valor en CONTA01
DOS	DECFSZ	CONTA03,1	;Decrementamos CONTA01, si es cero salta
	GOTO 	DOS		;Vuelve
	DECFSZ	CONTA02,1	;Decrementamos CONTA02, si es cero salta
	GOTO 	UNO		;Volvemos a recargar CONTA01
	RETURN			;volver del retardo
;===================== Retardo de más de 40us========================================================================
BUSY1	MOVLW	b'00000001'	;Ponemos el contador a 01
	MOVWF	CONTA02		;Guardamos valor en CONTA01
UNO1	MOVLW	b'00011000'	;Ponemos el contador a 18
	MOVWF	CONTA03 	;Guardamos el valor en CONTA01
DOS2	DECFSZ	CONTA03,1	;Decrementamos CONTA01, si es cero salta
	GOTO 	DOS2		;Vuelve
	DECFSZ	CONTA02,1	;Decrementamos CONTA02, si es cero salta
	GOTO 	UNO1		;Volvemos a recargar CONTA01
	RETURN			;volver del retardo
;================= programación de lcd o escritura de comando =============================================================
COMANDO	MOVWF	CMD		;guarda el comando en memoria
	CALL	BUSY
	BCF	RS
	BCF	RW
	BSF	E
	MOVF	CMD,0		;lleva el comando al W
	MOVWF	PUERTAC		;lo saca por el bus de datos
	BCF	E
	RETURN
;================= escritura de caracteres ===================================================================
LETRA	MOVWF	CHAR		;guarda el comando en memoria
	CALL	BUSY1
	BSF	RS
	BCF	RW
	BSF	E
	MOVF	CHAR,0		;lleva el carácter al W
	MOVWF	PUERTAC		;lo saca por el bus de datos
	BCF	E
	RETURN

	END
