Codigo para PIC16F877A Teclado-Lcd Reloj 24h
Codigo para PIC16F877A Teclado-Lcd Reloj 24h
Codigo para PIC16F877A Teclado-Lcd Reloj 24h
processor 16f877a
include <p16f877a.inc>
; Oscilador XT, Watchdog Timer OFF, Power-up Timer ON, Brown-out Reset OFF,
; Se pueden cambiar para aumentar velocidad del reloj y checar los cambios
; Direccion que se usa como variable para saber posicion y valor a cambiar
; Valores limites que se usan para comparar contra el conteo del reloj
limiteUni EQU h'3A' ; Valor ASCII ';' 1 despues del '9' (unidades)
; Renombrar Puertos
call LCDini
call ResetCont
call pausa1seg
call pausa1seg
;*******************************************************************************
;********************INCREMENTO DE UNIDADES DE
SEGUNDO**************************
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
;*******************************************************************************
;*******************INCREMENTO DE DECENAS DE
SEGUNDO****************************
movwf LCD
call comando
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
;*******************************************************************************
;********************INCREMENTO DE UNIDADES DE
MINUTOS**************************
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
;*******************************************************************************
;*******************INCREMENTO DE DECENAS DE
MINUTOS****************************
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
movwf LCD
call comando
movwf LCD
call dato
movwf LCD
call comando
movwf LCD
call dato
call pausa1seg
;*******************************************************************************
;*********************************SUBRUTINAS************************************
movwf uSeg
movwf dSeg
movwf uMin
movwf dMin
movwf uHrs
movwf dHrs
movlw '0'
movwf LCD
call dato
call dato
movlw ':'
movwf LCD
call dato
movlw '0'
movwf LCD
call dato
call dato
movlw ':'
movwf LCD
call dato
movlw '0'
movwf LCD
call dato
call dato
return
iorlw rsOFF
movwf PORTA
call pausa5ms
movlw enOFF
iorlw rsOFF
movwf PORTA
call pausa5ms
return
; Manda la orden de envio de datos al LCD con RS=1 mas un pulso de 5ms en E
movwf PORTA
call pausa5ms
movlw enOFF
iorlw rsON
movwf PORTA
call pausa5ms
return
movwf Cont2
movwf Cont1
goto loop1
decfsz Cont2,1
goto loop2
return
movwf Cont3
movwf Cont2
movwf Cont1
loop3: decfsz Cont1,1
goto loop3
decfsz Cont2,1
goto loop4
decfsz Cont3,1
goto loop5
return
movwf Cont3
movwf Cont2
movwf Cont1
goto loop6
decfsz Cont2,1
goto loop7
decfsz Cont3,1
goto loop8
return
movlw LCDfunction
movwf LCD
call comando
movlw dispCTRL1
movwf LCD
call comando
movlw clearLCD
movwf LCD
call comando
movlw dispMODE
movwf LCD
call comando
movlw PosDecHrs
movwf LCD
call comando
return
movlw PosDecHrs
movwf LCD
call comando ; Se posiciona en decenas de hora
movlw dispCTRL2
movwf LCD
goto Tecla1
goto Tecla2
goto Tecla3
movlw fila2
goto Tecla4
goto Tecla5
btfss teclado,columna3 ; Pregunta por tecla 6
goto Tecla6
movlw fila3
goto Tecla7
goto Tecla8
goto Tecla9
goto TeclaC
movlw fila4
goto Tecla0
goto TeclaExit
goto ScanKeys
; Comportamiento de tecla 0
goto ScanKeys
; Comportamiento de tecla 1
goto ScanKeys
; Comportamiento de tecla 2
goto ScanKeys
; Comportamiento de tecla 3
call CambiaDato
goto ScanKeys
; Comportamiento de tecla 4
call CambiaDato
goto ScanKeys
; Comportamiento de tecla 5
call CambiaDato
goto ScanKeys
; Comportamiento de tecla 6
call CambiaDato
goto ScanKeys
; Comportamiento de tecla 7
call CambiaDato
; Comportamiento de tecla 8
call CambiaDato
goto ScanKeys
; Comportamiento de tecla 9
call CambiaDato
; Comportamiento de tecla C
call comando
goto ScanKeys
; Comportamiento de tecla D
call comando
goto ScanKeys
; Comportamiento de tecla #
movlw dispCTRL1
movwf LCD
goto main
movwf LCD
movwf LCD
movf valor,0
movwf uSeg
goto FinCambia
movf valor,0
movwf dSeg
goto FinCambia
movf valor,0
movwf uMin
goto FinCambia
movf valor,0
movwf dMin
goto FinCambia
movf valor,0
movwf uHrs
goto FinCambia
CompDecHrs: movf posicion,0
sublw PosDecHrs
goto FinCambia
btfss STATUS,Z
incf posicion,0
movwf LCD
call comando
movwf uHrs
movwf LCD
call dato
incf posicion,0
movwf LCD
call comando
return
; Revisa si el proximo valor que se manda se traslapa con alguna posicion de ':'
BuscaPtos1: movf posicion,0 ; Copia la variable de posicion a W
movf posicion,0
movwf LCD
call comando
return
return
movf posicion,0
movwf LCD
call comando
return
; Revisa si el proximo valor que se manda se traslapa con alguna posicion de ':'
movf posicion,0
movwf LCD
call comando
return
return
movf posicion,0
movwf LCD
call comando
return
return
movlw PosDecHrs
movwf posicion
movwf LCD
call comando
goto ScanKeys
movlw PosUniSeg
movwf LCD
call comando
goto ScanKeys
btfss STATUS,Z
btfsc STATUS,Z
btfss STATUS,Z
btfss STATUS,Z
btfsc STATUS,Z
btfss STATUS,Z
btfss STATUS,Z
return ; Si Z=0 es valido
btfsc STATUS,Z
movf posicion,0
btfss STATUS,Z
goto NextComp1
btfss STATUS,Z
btfsc STATUS,Z
goto ScanKeys
movf posicion,0 ; Copia la variable de dHrs a W
btfss STATUS,Z
btfsc STATUS,Z
movf posicion,0
btfss STATUS,Z
goto NextComp2
btfss STATUS,Z
goto ScanKeys
btfss STATUS,Z
btfsc STATUS,Z
movf posicion,0
btfss STATUS,Z
goto NextComp3
btfss STATUS,Z
btfsc STATUS,Z
goto ScanKeys
btfss STATUS,Z
btfsc STATUS,Z
movf posicion,0
btfss STATUS,Z
goto NextComp4
btfsc STATUS,Z
goto ScanKeys
btfss STATUS,Z
return
END