'****************************************************************
'* Name : RELOJ.BAS *
'* Author : [prof.martintorres@educ.ar] *
'* Notice : Copyright (c) 2016 [EduTecInformal] *
'* : All Rights Reserved *
'* Date : 5/31/2015 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
; CONFIGURACION PARA LA PROGRAMACION DEL PIC
@ device xt_osc ; oscilador externo XT
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz
' Define registros y bits del LCD
Define LCD_DREG PORTB
Define LCD_DBIT 0
Define LCD_RSREG PORTB
Define LCD_RSBIT 4
Define LCD_EREG PORTB
Define LCD_EBIT 5
;CONFIGURACION DE ENTRADAS AL PIC 146F84a
Symbol Hrs_button = PORTA.0 ; BOTON DE AJUSTE PARA HORA
Symbol Mins_button = PORTA.1 ; BOTO0N DE AJUSTE PARA MINUTOS
;CREACION DE VARIABLES
Ticks VAR byte ; (61 ticks = 1 sec)
Hour VAR byte
Minute VAR byte
Second VAR byte
Disp VAR byte ; Disp = 1 to ACTULIZA LCD
Delay VAR byte
TRISB = 0 ; PORTB is SALIDA
TRISA = 3 ; RA0,RA1 SON ENTRADAS
PAUSE 500 ; ESPERA 0.5sec PARA INICIALIZAR LCD
; RUTINA PARA PONER A CERO VARIABLES CEREADAS
Hour = 0
Minute = 0
Second = 0
Ticks = 0
OPTION_REG = $05 ; prescaler = 64
ON INTERRUPT GOTO ISR ; IR A RUTINA ISR
INTCON = $A0
LCDOUT $FE, 1 ;LIMPIA LCD
;INCIO DEL PROGRMA
LOOP:
;RUTINA PARA CHEQUEAR EL INCREMENTO DEL BOTON HORA CUANDO ES ACCIONADO
IF Hrs_button = 0 THEN
Hour = Hour + 1
IF Hour = 24 THEN Hour = 0
Gosub Debounce
ENDIF
;;RUTINA PARA CHEQUEAR EL INCREMENTO DEL BOTON MINUTO CUANDO ES ACCIONADO
IF Mins_button = 0 THEN
Minute = Minute +1
IF Minute = 60 THEN Minute = 0
Gosub Debounce
ENDIF
;RUTINA PARA MOSTRAR VLORES EN EL lcd DE H:M:S
IF Disp = 1 THEN
LCDOUT $FE, 2
LCDOUT DEC2 Hour, ":",DEC2 Minute, ":",DEC2 Second
Disp = 0
ENDIF
GOTO LOOP
; RUTINA DE RETARDO PARA LEER BOTONES
Debounce:
FOR Delay = 1 To 200
Pause 1
NEXT Delay
Disp = 1
RETURN
; RUTINA PARA EJECUCION DE UN SEGUNDO
DISABLE
ISR:
Ticks = Ticks + 1
IF Ticks < 61 THEN NoUpdate
;RUTINA DE TIEMPO SEGUNDO , MINUTO Y HORAS
Ticks = 0
Second = Second + 1
IF Second = 60 THEN
Second = 0
Minute = Minute + 1
IF Minute = 60 THEN
Minute = 0
Hour = Hour + 1
IF Hour = 24 THEN
Hour = 0
ENDIF
ENDIF
ENDIF
Disp = 1 ; ACTUALIZA LDC
; RUTINA DE LACULMINACION DEL TIEMPO DE ACTIVACION
NoUpdate:
INTCON.2 = 0
Resume
ENABLE
END