TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mike bm en 12 de Marzo de 2014, 18:16:08

Título: Ayuda con reloj alarma
Publicado por: mike bm en 12 de Marzo de 2014, 18:16:08
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;
   }
   }
   }
   }
   }
}
}