Hola electronando:
Este es un programa en PBP pero solamente es para reloj, es con un LCD que va conectado unicamente al puerto B d un pic 16F84 y utiliza 3 pulsantes conectados a RA0, RA1 y RA2 estos son para configurar hora minuto y segundo...
"Programa para reloj con pic 16f84 y LCD
"Definición de registros del LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_BITS4
DEFINE LCD_LINES 2
"Declaración de variables
hour var byte
minute var byte
second var byte
update var byte
cnt var word
flag var byte
h var byte
m var byte
s var byte
TRISB=%00001100
TRISA=%00111
OPTION_REG=2
on interrupt goto ISR
pause 1000
lcdout $FE,1,"CONFIGURAR HORA:"
h=0 : m=0 : s=0
strt:
flag=0
while flag=0
if PORTA.0=0 then
pause 500
h=h+1
if h > 23 then
h=0
endif
lcdout $FE,1,"HORA: ", dec2 h
endif
if PORTA.1=0 then
pause 500
m=m+1
if m > 59 then
m=0
endif
lcdout $FE,1,"MINUTO: ", dec2 m
endif
if PORTA.2=0 then
pause 500
s=s+1
if s > 59 then
s=0
endif
lcdout $FE,1,"SEGUNDO: ", dec2 s
endif
if PORTB.2=0 then
TMR0=131
INTCON=$A0
flag=1
hour=h
minute=m
second=s
cnt=0
endif
wend
loop:
if update=1 then
update=0
lcdout $FE,1
lcdout dec2 hour,":",dec2 minute,":",dec2 second
endif
if PORTB.3=0 then
h=hour
m=minute
s=second
INTCON=0
lcdout $FE,1,"CONFIGURAR HORA:"
goto strt
endif
goto loop
disable
ISR:
TMR0=131
cnt=cnt+1
if cnt<979 then noupdate "define el segundo exacto tomando en
update=1 "cuenta el tiempo que se demora en
cnt=0 "realizar las instrucciones 979
second=second+1
if second>59 then
second=0
minute=minute+1
if minute>59 then
minute=0
hour=hour+1
if hour>23 then
hour=0
endif
endif
endif
noupdate:
INTCON.2=0
resume
enable
end
A mi me funciona bien salvo que se me adelanta un poco, hay un bucle en el que se incrementan los segundos, minutos y horas, tienes que probar cual es el mejor tiempo para te hacerques mas a un segundo real.
Si tienes algún problema hazmelo saber.
Saludos desde ECUADOR!!!
LordLafebre