Galera estou aqui voando no programinha ,onde pertendo fazer uso do TIMER1 dentro de uma função para que Conte 3 segundos e sai fora !
configurei o TIMER1 para que desborde a cada segundo , depois quero que na função "temp" quando solicitada o timer Conte 3 segundo e volta ao estado de espera ate que a função seja novamente solicitada, não sei o que o que estou a fazer errado que o programa não acende o led por 3 segundo!
Pessoal o que estou fazendo no programa que não roda a função "temp"
cpp code
#include <16F876A.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use standard_io(B)
#use standard_io(A)
//#use standard_io(C)
#include <lcd.c>
#include <ds1307.c>
// Set an alarm time of 15:21:05 for testing.
int8 alarm_hrs = 15;
int8 alarm_min = 21;
int8 alarm_sec = 50;
int16 cont;
int con_3min=0;
int8 check_alarm(int8 hrs, int8 min, int8 sec);
void temp (void);
#int_TIMER1 //Interr. Timer1
void temp1s(void) //
{
set_timer1(3036); //62.500 * 8 (prescaler) = 0,5 seg
/* cont++;
if(cont == 2){ //0,5 seg x 10 son 5 segundos.
con_3min++;
cont = 0;
}*/
}
//============================
void main()
{
int8 sec;
int8 min;
int8 hrs;
int8 day;
int8 month;
int8 yr;
int8 dow;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //configuraçao TMR1
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
set_timer1(3036);
lcd_init();
ds1307_init();
// Set date for -> 15 June 2005 Tuesday
// Set time for -> 15:20:55
ds1307_set_date_time(15,6,5,0,15,21,45);
while(1)
{
delay_ms(100);
ds1307_get_time(hrs,min,sec);
ds1307_get_date(day,month,yr,dow);
lcd_gotoxy(1,1);
printf(lcd_putc,"%02d:%02d:%02d",day,month,yr);
lcd_gotoxy(1,2);
printf(lcd_putc,"%02d:%02d:%02d",hrs,min,sec);
if(check_alarm(hrs, min, sec))
temp();
}
}
//=============================================
int8 check_alarm(int8 hrs, int8 min, int8 sec)
{
if((hrs == alarm_hrs) &&
(min == alarm_min) &&
(sec == alarm_sec))
return(TRUE);
else
return(FALSE);
}
void temp (void)
{
//set_timer1(3041); //62.500 * 8 (prescaler) = 0,5 seg
cont=0;
if(get_timer1()==0)
cont++;
if(cont == 2){ //0,5 seg x 10 son 5 segundos.
con_3min++;
cont = 0;}
if(con_3min == 180)
{
con_3min = 0;
output_high(pin_A1);
}
}