Hola, quisiera que me ayudaran a solucionar mi problema por favor, debo realizar un reloj con una especie de alarma, eh conseguido que el reloj funcione y la alarma tambien, pero en el momento en que se inicia la alarma se detiene el reloj, les dejo el programa para que me puedan ayudar.
Programa
#include <16F877A.h>
#use delay (clock = 20000000)
#fuses HS, NOWDT
#include <lcd.c>
#byte trisa = 0x85
#byte trisb = 0x86
#byte porta = 0x05
#byte portb = 0x06
int h = 0;
int m=0;
int s=0;
int ch=0;
int cm=0;
int x=0;
void main (void)
{
trisb =0x00;
lcd_init();
delay_ms(10);
lcd_gotoxy(1,1);
printf(lcd_putc,"Ajuste encendido");
h = 0;
m=0;
s=0;
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
for(;

{
if (bit_test(porta,0)==0)
{
delay_ms(1000);
x++;
}
if (x==2)
{
if(bit_test(porta,1)==0)
{
if(s>=60)
{
s = 0;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,1)==0)
s++;
}
if(bit_test(porta,2)==0)
{
if(s==-1)
{
s = 59;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,2)==0)
s--;
}
}
if (x==3)
{
if(bit_test(porta,1)==0)
{
if(m>=60)
{
m = 0;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,1)==0)
m++;
}
if(bit_test(porta,2)==0)
{
if(m==-1)
{
m = 59;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,2)==0)
m--;
}
}
if (x==4)
{
if(bit_test(porta,1)==0)
{
if(h>=24)
{
h= 0;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,1)==0)
h++;
}
if(bit_test(porta,2)==0)
{
if(h==-1)
{
h=23;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(100);
if(bit_test(porta,2)==0)
h--;
}
}
if (x==0)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Ajuste encendido");
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u", ch,cm,);
if(bit_test(porta,1)==0)
{
if(cm>=60)
{
cm = 0;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u", ch,cm,);
delay_ms(100);
if(bit_test(porta,1)==0)
cm=cm+5;
}
if(bit_test(porta,2)==0)
{
if(cm==-5)
{
cm=55;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u", ch,cm,);
delay_ms(100);
if(bit_test(porta,2)==0)
cm=cm-5;
}
}
if (x==1)
{
if(bit_test(porta,1)==0)
{
if(ch>=24)
{
ch= 0;
}
lcd_gotoxy(1,1);
printf(lcd_putc,"Ajuste encendido");
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u", ch,cm,);
delay_ms(100);
if(bit_test(porta,1)==0)
ch++;
}
if(bit_test(porta,2)==0)
{
if(ch==-1)
{
ch=23;
}
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u", ch,cm,);
delay_ms(100);
if(bit_test(porta,2)==0)
ch--;
}
}
if (x==5)
{
for (;

{
if (s==0)
{
if (h==ch)
{
if (m==cm)
{
lcd_gotoxy(1,1);
printf(lcd_putc," Boiler on ");
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
bit_set (portb,3);
bit_set (portb,4);
delay_ms (1000);
bit_clear (portb,4);
delay_ms (5000);
bit_clear (portb,3);
}
}
}
lcd_gotoxy(1,1);
printf(lcd_putc," Boiler off ");
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
delay_ms(1000);
s++;
if (s==60)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
s=0;
m++;
if (m==60)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
m=0;
h++;
if (h==24)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Hora:%02u:%02u:%02u ",h,m,s);
h=0;
}
}
}
}
}
}
}