📄 timer0.c
字号:
#include "global.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include "timer0.h"
#include "ir.h"
//#define max_relay_hold_time_counter 25
UCHAR relay_hold_time_table[4] = {10,25,100,200};//SEL3 SEL4 == 11
UCHAR relay1_hold_finish_flag = 1;
UCHAR relay2_hold_finish_flag = 1;
UCHAR relay3_hold_finish_flag = 1;
UCHAR relay4_hold_finish_flag = 1;
UCHAR relay1_hold_start_flag = 0;
UCHAR relay2_hold_start_flag = 0;
UCHAR relay3_hold_start_flag = 0;
UCHAR relay4_hold_start_flag = 0;
UCHAR relay1_hold_time_counter = 0;
UCHAR relay2_hold_time_counter = 0;
UCHAR relay3_hold_time_counter = 0;
UCHAR relay4_hold_time_counter = 0;
UCHAR max_relay_hold_time_counter = 0;
//定时器T0初始化
void timer0_init(void)
{
TCCR0 = 0x00;//停止定时器
TCNT0 = 0x64;//初始值
//OCR0 = 0x63;//匹配值
TIMSK |= 0x01;//中断允许
TCCR0 = 0x05;//启动定时器
max_relay_hold_time_counter = relay_hold_time_table[0];
}
//T0溢出中断服务程序
//#pragma interrupt_handler timer0_ovf_isr:10
//void timer0_ovf_isr(void)
SIGNAL(SIG_OVERFLOW0)
{
static UCHAR last_fun_sel_val = 0;
UCHAR current_fun_sel_val = 0;
current_fun_sel_val = ((FUN_SEL_PORT & 0b01100000)>>5);
if(last_fun_sel_val != current_fun_sel_val)
{
max_relay_hold_time_counter = relay_hold_time_table[current_fun_sel_val];
last_fun_sel_val = current_fun_sel_val;
}
TCNT0 = 0x64;
//RELAY1
if(relay1_hold_start_flag == 1)
{
relay1_hold_time_counter++;
if(relay1_hold_time_counter >= max_relay_hold_time_counter)
{
relay1_hold_time_counter = 0;
relay1_hold_start_flag = 0;
result_out_control(0,FALSE);
}
}
//RELAY2
if(relay2_hold_start_flag == 1)
{
relay2_hold_time_counter++;
if(relay2_hold_time_counter >= max_relay_hold_time_counter)
{
relay2_hold_time_counter = 0;
relay2_hold_finish_flag = 1;
relay2_hold_start_flag = 0;
result_out_control(1,FALSE);
}
}
//RELAY3
if(relay3_hold_start_flag == 1)
{
relay3_hold_time_counter++;
if(relay3_hold_time_counter >= max_relay_hold_time_counter)
{
relay3_hold_time_counter = 0;
relay3_hold_finish_flag = 1;
relay3_hold_start_flag = 0;
result_out_control(2,FALSE);
}
}
//RELAY4
if(relay4_hold_start_flag == 1)
{
relay4_hold_time_counter++;
if(relay4_hold_time_counter >= max_relay_hold_time_counter)
{
relay4_hold_time_counter = 0;
relay4_hold_finish_flag = 1;
relay4_hold_start_flag = 0;
result_out_control(3,FALSE);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -