Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
break;
default:
break;
}
}
#int_ext
void cuentaseg()
{
switch (modo)
{
case 0: //caso reloj
banderaleerclk=1;
break;
case 1: //caso cronometro
if (sec >0)
{
sec--;
}
else if(sec==256)
{
min--;
sec=59;
}
if (min==5 && sec==0) //en 5 minutos aviso alarma
{output_high(pin_b1);}
if(min==4 && sec==56) //corta alarma
{output_low(pin_b1);}
if(min==0 && sec==5) //alarma final
{output_high(pin_b1);}
if (min==0 && sec==0)
{
//aviso de cuenta cero
{output_low(pin_b1);}
modo=0 ; //vuelve a función reloj
}
break;
}
}
#int_timer0
void tmr_error()
{
disable_interrupts(INT_TIMER0);
set_timer0(0);
if(input(pin_c1)==0)
{
banderaescribirhora=1;
}
}
void main()
{
PORTD=0;
PORTB=0;
PORTA=0x00;
set_tris_c(0b11111100);
set_tris_d(0x00);
Set_tris_a(0x00);
set_tris_b(0xf1);
// ds1307_init();
// ds1307_am(hr);
ds1307_get_time(hr,min,sec);
if((sec & 0b10000000)==0b10000000) //PARA INICIAR SOLO LA PRIMERA VEZ
{
ds1307_init();
ds1307_am(hr);
}
setup_timer_0(RTCC_INTERNAL |RTCC_DIV_256);
set_timer0(0);
ext_int_edge(L_TO_H);
enable_interrupts(int_ext);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
delay_ms(2000);
while(1) //se repite indefinidamente
{
if(input(pin_c1)==0 && banderapause==1)
{
enable_interrupts(INT_TIMER0);
}
else
{
disable_interrupts(INT_TIMER0);
}
switch (modo)
{
case 0:
if(banderaleerclk==1)
{
banderaleerclk=0;
disable_interrupts(GLOBAL);
ds1307_get_time(hr,min,sec);
enable_interrupts(GLOBAL);
}
if (banderaescribirhora==1){
banderaescribirhora=0;
if(banderapause==1 && modo==0) //si está en reloj y interrupción deshabilitada
{
ds1307_set_date_time (10, 06, 15, 2, hr, min, sec); /// se escribe en el displositivo
ds1307_am(hr);
}
}
muestra();
break;
case 1:
muestra2();
}
}
}