📄 timer.h
字号:
unsigned char sleep_count=0;
//**************************定时器初始化函数OK***********************************
static void Init_TBM(void) //时基定时器
{
TBCR_TBIE =1; //2 基础定时器中断使能
TBCR_TACK =1; //3 TBM中断标志清除
TBCR_TBR0 =1;
TBCR_TBR1 =1;
TBCR_TBR2 =0; //分频系数16384,4.096ms
/* TBR2 TBR1 TBR0 Divider Tap
TMBCLKSEL
0 1
0 0 0 32,768 4,194,304
0 0 1 8192 1,048,576
0 1 0 2048 262144
0 1 1 128 16,384
1 0 0 64 8192
1 0 1 32 4096
1 1 0 16 2048
1 1 1 8 1024
*/
TBCR_TBIF =1; //7 中断标志
TBCR_TBON =1; //0 启动定时器
//2E 0010 1110
}
//**************************定时器中断函数***********************************
void interrupt 17 INT_TBM(void) //4.096ms
{
//系统指示灯
LED_count++;
if(LED_count==122) //0.5s
{
LED_count=0;
LED=!LED;
fault_flag=1;
fault_clk=1;
}
//喂狗、开关量检测
dog_count++;
if(dog_count==27) //110ms
{
dog_count=0;
Dog_MC33389(); //MC33389喂狗
Dog_MC33984(); //MC33984喂狗
RD33993(0x00,0x00,0x00); //MC33993状态检测
MC33993_FLAG=1; //检测完成标志
if(can_yb_flag)
{
INC_WAKE=0;
can_yb_flag=0;
}
else if(INC_WAKE) can_yb_flag=1;
if(can_qkz_flag)
{
VACC_WAKE=0;
can_qkz_flag=0;
}
else if(VACC_WAKE) can_qkz_flag=1;
}
//后门电磁阀工作 1s
if(door_flag)
{
door_count++;
if(door_count==244)
{
door_count=0;
door_flag=0;
MC33984_OUT[13].Byte=0x1a;
}
}
//唤醒、休眠
if(VACC_WAKE||INC_WAKE)
{
//CAN通信
can_comm_count++;
if(can_comm_count==11) CAN_CMD(); //发送CAN命令
else if(can_comm_count==12)
{
can_comm_count=0;
CAN_STR(); //发送CAN状态
// sampling_flag=1;
}
//MC33984故障检测
if(fault_flag&&fault_ok==0) FAULT_MC33984(); //0.5s
}
else if(door_flag==0&&can_yb_flag==0&&can_qkz_flag==0)//门停止工作,且无CAN接收
{
// if(++sleep_count==100) {
Sleep_33984(); //MC33984睡眠
Sleep_33993(); //MC33993睡眠
Sleep_33389(); //MC33389睡眠
// }
}
//MC33984端口刷新
out_count++;
if(out_count==11)
{
out_count=0;
Out_MC33984();
}
TBCR_TACK =1; //清除中断标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -