⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:

//**************************定时器初始化函数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;														//系统指示灯
		Dog_MC33984();													//MC33984喂狗
		fault_clk=1;													//故障清楚标志
		fault_flag=1;													//故障检测标志
		//启动继电器
		if(back_start)													//后启动计时
		{
			if(back_start_count<10)	back_start_count++;					//5s
		}
		//熄火电机
		if(chokez_flag)													//熄火器正转
		{
			if(choke_count==10)	MC33984_OUT[14].Byte=0x1a;				//5s
			else
			{
				choke_count++;
				if(MC33984_fault4.Bit.BIT4)	MC33984_OUT[14].Byte=0x1a;
				else						MC33984_OUT[14].Byte=0x1b;
			}

/*			if(choke_count==10)				MC33984_OUT[11].Byte=0;		//5s
			else
			{
				choke_count++;
				if(MC33984_fault3.Bit.BIT6)	MC33984_OUT[11].Bit.BIT0=0;	//无故障开	熄火电磁阀
				else						MC33984_OUT[11].Bit.BIT0=1;
			}
			
*/		}
		else if(chokef_flag)											//熄火器反转
		{
			if(choke_count==10)	MC33984_OUT[14].Byte=0x1a;				//5s
			else
			{
				choke_count++;
				if(MC33984_fault4.Bit.BIT5)	MC33984_OUT[14].Byte=0x1a;
				else						MC33984_OUT[14].Byte=0x1e;
			}
//			choke_count=0;
//			MC33984_OUT[11].Bit.BIT0=0;									//熄火电磁阀关
		}
	}
	//喂狗、开关量检测
	dog_count++;
	if(dog_count==27)													//110ms
	{
		dog_count=0;
		Dog_MC33389();													//MC33389喂狗
		
		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;
	}
	if(VACC_WAKE||INC_WAKE)
	{
		//CAN通信
		can_data_count++;
		if(can_data_count>=6)											//24ms	发送CAN数据
		{
//			can_data_count=0;
			CAN_DATA();
		}
		can_comm_count++;
		if(can_comm_count==11)	CAN_CMD();								//45ms	发送CAN命令
		else if(can_comm_count==12)										//50ms	发送CAN状态
		{
			can_comm_count=0;
			CAN_STR();
		}
		//MC33984故障检测
		if(fault_flag&&fault_ok==0)	FAULT_MC33984();					//0.5s
	}
	else if(MC33984_OUT[14].Byte==0x1a&&can_yb_flag==0&&can_qkz_flag==0)//无CAN接收	且熄火器停止工作
	{
		Sleep_33984();													//MC33984睡眠
		Sleep_33993();													//MC33993睡眠
		Sleep_33389();													//MC33389睡眠
	}
	//MC33984端口刷新
	out_count++;
	if(out_count==12)
	{
		out_count=0;
		
		if((MC33984_OUT[14].Byte==0x1b&&choke_fan)||(MC33984_OUT[14].Byte==0x1e&&choke_zheng))//熄火器工作
		{
			choke_zheng=0;
			choke_fan=0;
		}
		
		Out_MC33984();													//刷新MC33984端口
		
		if(MC33984_OUT[14].Byte==0x1a)									//桥
		{
			choke_fan=0;
			choke_zheng=0;
			
		}
		else if(MC33984_OUT[14].Byte==0x1e)
		{
			choke_zheng=0;
			choke_fan=1;
		}
		else if(MC33984_OUT[14].Byte==0x1b)
		{
			choke_zheng=1;
			choke_fan=0;
		}
	}

	TBCR_TACK =1;														//清除中断标志
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -