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

📄 can.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
//中控控制命令ID18ff138b(c7fe2716)
#define		LOCAL_CMD_ADR0		0xc7
#define		LOCAL_CMD_ADR1		0xfe
#define		LOCAL_CMD_ADR2		0x27
#define		LOCAL_CMD_ADR3		0x16
//中控状态ID18ff132b(c7fe2856)
#define		LOCAL_STA_ADR0		0xc7
#define		LOCAL_STA_ADR1		0xfe
#define		LOCAL_STA_ADR2		0x28
#define		LOCAL_STA_ADR3		0x56

sys_data_type	CAN_FLAGS;

#define		VACC_WAKE		CAN_FLAGS.Bit.BIT0
#define		INC_WAKE		CAN_FLAGS.Bit.BIT1
#define		can_yb_flag		CAN_FLAGS.Bit.BIT2
#define		can_qkz_flag	CAN_FLAGS.Bit.BIT3

sys_data_type	CAN_STR0,CAN_STR1,CAN_STR2,CAN_STR3,CAN_STR4,CAN_STR5,CAN_STR6,CAN_STR7,	//CAN状态寄存器0~7
				CAN_CMD0,CAN_CMD1,CAN_CMD2,CAN_CMD3,CAN_CMD4,CAN_CMD5,CAN_CMD6,CAN_CMD7;	//CAN命令寄存器0~7

sys_data_type	CAN_YB0,CAN_YB1,CAN_YB2,CAN_YB3,CAN_YB4,CAN_YB5,CAN_YB6,CAN_YB7,					//仪表命令CAN接收缓存
				CAN_QKZC0,CAN_QKZC1,CAN_QKZC2,CAN_QKZC3,CAN_QKZC4,CAN_QKZC5,CAN_QKZC6,CAN_QKZC7,	//前控左命令CAN接收缓存
				CAN_QKZS0,CAN_QKZS1,CAN_QKZS2,CAN_QKZS3,CAN_QKZS4,CAN_QKZS5,CAN_QKZS6,CAN_QKZS7,	//前控左状态CAN接收缓存
				CAN_QKYC0,CAN_QKYC1,CAN_QKYC2,CAN_QKYC3,CAN_QKYC4,CAN_QKYC5,CAN_QKYC6,CAN_QKYC7,	//前控右命令CAN接收缓存
				CAN_QKYS0,CAN_QKYS1,CAN_QKYS2,CAN_QKYS3,CAN_QKYS4,CAN_QKYS5,CAN_QKYS6,CAN_QKYS7,	//前控右状态CAN接收缓存
				CAN_ZKC0,CAN_ZKC1,CAN_ZKC2,CAN_ZKC3,CAN_ZKC4,CAN_ZKC5,CAN_ZKC6,CAN_ZKC7,			//中控命令CAN接收缓存
				CAN_ZKS0,CAN_ZKS1,CAN_ZKS2,CAN_ZKS3,CAN_ZKS4,CAN_ZKS5,CAN_ZKS6,CAN_ZKS7,			//中控状态CAN接收缓存
				CAN_WKC0,CAN_WKC1,CAN_WKC2,CAN_WKC3,CAN_WKC4,CAN_WKC5,CAN_WKC6,CAN_WKC7,			//尾控命令CAN接收缓存
				CAN_WKS0,CAN_WKS1,CAN_WKS2,CAN_WKS3,CAN_WKS4,CAN_WKS5,CAN_WKS6,CAN_WKS7,			//尾控状态CAN接收缓存
				CAN_WKD0,CAN_WKD1,CAN_WKD2,CAN_WKD3,CAN_WKD4,CAN_WKD5,CAN_WKD6,CAN_WKD7;			//尾控数据CAN接收缓存

unsigned char	can_comm_count=0;
unsigned char	can_free_count=0;
//***********************MSCAN初始化子程序 OK************************
static void Init_MSCAN08(void)
{
	CMCR0  = 0x01;				//CAN模块为软复位状态
	CMCR1  = 0x00;				//时钟源为外部晶体/2  2M
	//CMCR1  = 0x04;				//时钟源为外部晶体/2  2M

	CBTR0  = 0x80;
	//SJW1,SJW0,10,3个周期同步。100000,20分频,为100KC。10100000 A0H
	CBTR1  = 0xfa;				//1,3个采样位,0000000,分频为0,波特率为100K 

	CIDAC  = 0x00;				//接收滤波为32位滤波,击中事件使用1个字节
	//标识符号验收寄存器0~3
	CIDAR0  = 0x00;				//滤波使它接收一帧08B7D8D2(45BFB1A4)
	CIDAR1  = 0x00;   
	CIDAR2  = 0x00;
	CIDAR3  = 0x00;
	//标识符屏蔽寄存器0~3
	CIDMR0  = 0xFF;   
	CIDMR1  = 0xFF;   
	CIDMR2  = 0xFF; 
	CIDMR3  = 0xFF;				//不进行过滤   

	CMCR0  = 0x00;				//把CAN模块设置为数据输入输出状态
	//while(CMCR0_SYNCH==0){;}	//等待同步

	CRIER  = 0x01;				//CAN接收中断使能
}
//*********************尾控状态CAN发送函数 OK**********************
void CAN_STR(void)
{
	unsigned char empty;
	unsigned char empty0;
	empty = CTFLG;           	        //读传送标志寄存器
	empty0 = empty&0x01;			    //屏蔽无用位,保留传送缓冲0状态标志。
	if(empty0 !=0)             		    //如果传送缓冲区0为空
	{
		DLR0   =  0x08;					//设置传送数据长度为8个字节。

		DSR00  =   CAN_STR0.Byte;			//传送本地状态数据
		DSR10  =   CAN_STR1.Byte;			
		DSR20  =   CAN_STR2.Byte;			
		DSR30  =   CAN_STR3.Byte;			
		DSR40  =   CAN_STR4.Byte;			
		DSR50  =   CAN_STR5.Byte;			
		DSR60  =   CAN_STR6.Byte;			
		DSR70  =   CAN_STR7.Byte;			

		IDR00  =   LOCAL_STA_ADR0;      		 //设置本地ID
		IDR10  =   LOCAL_STA_ADR1;
		IDR20  =   LOCAL_STA_ADR2;
		IDR30  =   LOCAL_STA_ADR3;

		TBPR0  =  0x05;					//设置优先级别
		CTFLG    =  0x01;					//启动发送
	}
}

//***********************CAN命令执行函数********
void  CAN_CMD(void)//ID1
{
	unsigned char empty;
	unsigned char empty0;
	empty = CTFLG;           	        //读传送标志寄存器
	empty0 = empty&0x04;			    //屏蔽无用位,保留传送缓冲0状态标志。
	if(empty0 !=0)             		    //如果传送缓冲区0为空
	{
		DLR2   =  0x08;					//设置传送数据长度为8个字节。

		DSR02  =   CAN_CMD0.Byte;			//传送本地状态数据
		DSR12  =   CAN_CMD1.Byte;			
		DSR22  =   CAN_CMD2.Byte;			
		DSR32  =   CAN_CMD3.Byte;			
		DSR42  =   CAN_CMD4.Byte;			
		DSR52  =   CAN_CMD5.Byte;			
		DSR62  =   CAN_CMD6.Byte;			
		DSR72  =   CAN_CMD7.Byte;			

		IDR02  =   LOCAL_CMD_ADR0;      		 //设置本地ID
		IDR12  =   LOCAL_CMD_ADR1;
		IDR22  =   LOCAL_CMD_ADR2;
		IDR32  =   LOCAL_CMD_ADR3;

		TBPR2  =  0x05;					//设置优先级别
		CTFLG    =  0x04;					//启动发送
	}
}
//******************** CAN接收中断子程序 OK**********************
void interrupt 20 CAN_Receive(void)
{
	void CAN_YB(void);
	void DOOR_OUT(void);
	void CAN_QKZC(void);
	unsigned char	REC_ID0,REC_ID1,REC_ID2,REC_ID3;
	REC_ID0=REC_IDR0;
	REC_ID1=REC_IDR1;
	REC_ID2=REC_IDR2;
	REC_ID3=REC_IDR3;
	//仪表ID18FF0088(C7FE0110)
	if(REC_ID2==0x01&&REC_ID3==0x10&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_YB0.Byte=REC_DSR0;
		//D0D1		D2D3		D4D5		D6D7
		//点火锁ON	点火锁S		排气制动	洗涤电机
		CAN_YB1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//雨刮间歇	雨刮低速	雨刮高速	左转向
		CAN_YB2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//右转向	喇叭	小灯一档	远光灯
		CAN_YB3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//近光灯	前雾灯		自动润滑	前门
		CAN_YB4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//后门		NC			NC			NC
		CAN_YB5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_YB6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//0~7系统电压
		CAN_YB7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//0~7雨刮间歇时长
		
		//紧急报警唤醒
		if(CAN_YB1.Bit.BIT6==0&&CAN_YB1.Bit.BIT7==0&&CAN_YB2.Bit.BIT0==0&&CAN_YB2.Bit.BIT1==0)	INC_WAKE=0;
		else																					INC_WAKE=1;
		//执行仪表CAN命令
		DOOR_OUT();
		if(VACC_WAKE||INC_WAKE)	CAN_YB();
		can_yb_flag=0;
	}
	//前控左命令ID18ff128b(c7fe2516)
	else if(REC_ID2==0x25&&REC_ID3==0x16&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_QKZC0.Byte=REC_DSR0;
		//D0D1		D2D3		D4D5		D6D7
		//电源开关	彩灯1开关	彩灯2开关	司机灯开关
		CAN_QKZC1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//厢灯开关1	厢灯开关2	厢灯开关3	冷启动开关
		CAN_QKZC2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//电视开关	除霜低速	除霜高速	离合器开关
		CAN_QKZC3.Byte=REC_DSR3;
		//D0D1D2	D3D4D5		D6D7
		//左后视镜	右后视镜	阅读灯开关
		CAN_QKZC4.Byte=REC_DSR4;
		//D0D1			D2D3		D4D5		D6D7
		//踏步灯开关	后雾灯开关	NC			NC
		CAN_QKZC5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_QKZC6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_QKZC7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		//电源唤醒
		if(CAN_QKZC0.Bit.BIT0==1&&CAN_QKZC0.Bit.BIT1==0)	VACC_WAKE=1;
		else	VACC_WAKE=0;
		//执行前控左CAN命令
		if(VACC_WAKE||INC_WAKE)	CAN_QKZC();
		can_qkz_flag=0;
	}
/*	//前控左状态ID18ff132b(c7fe2656)
	else if(REC_ID2==0x26&&REC_ID3==0x56&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_QKZS0.Byte=REC_DSR0;
		//D0D1		D2D3		D4D5		D6D7
		//左前小灯	示廓灯组	左近光灯	前左转向灯
		CAN_QKZS1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//左远光灯	顶踏步灯	开关有效电源 电子钟显示线
		CAN_QKZS2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//车内辅助灯 蜂鸣器		顶灯1		顶灯2
		CAN_QKZS3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//顶灯3		左前雾灯	空调控制电源司机灯
		CAN_QKZS4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//彩灯1		彩灯2		换气扇电源	左镜加热器
		CAN_QKZS5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//阅读灯左路 阅读灯右路	开关背光电源 电子钟变光线
		CAN_QKZS6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//电视机	电子钟记忆线 卫生间有人指示 左后视镜电机
		CAN_QKZS7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
	//前控右命令ID18ff138b(c7fe2716)
	else if(REC_ID2==0x27&&REC_ID3==0x16&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_QKYC0.Byte=REC_DSR0;
		//D0D1		D2D3		D4D5		D6D7
		//前门开关	NC		后门开关		NC
		CAN_QKYC1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//前围门开	前围门关	镜加热开关	屈膝开关
		CAN_QKYC2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			辅助灯开关
		CAN_QKYC3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//雨刮到位	电/气喇叭转换 ABS工作状态 NC
		CAN_QKYC4.Byte=REC_DSR4;
		//D0D1					D2D3			D4D5			D6D7
		//缓速器工作信号输入	ASR指示灯输入	ABS指示灯输入	NC
		CAN_QKYC5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_QKYC6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_QKYC7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
	//前控右状态ID18ff182b(c7fe2856)
	else if(REC_ID2==0x28&&REC_ID3==0x56&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_QKYS0.Byte=REC_DSR0;
		//D0D1		D2D3				D4D5		D6D7
		//右前小灯	开关背光电源 右近光灯	前右转向灯
		CAN_QKYS1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//右远光灯	洗涤电机	右前雾灯	右镜加热器
		CAN_QKYS2.Byte=REC_DSR2;
		//D0D1			D2D3			D4D5		D6D7
		//监视器电源	ABS ON档电源	雨刮高速	雨刮低速
		CAN_QKYS3.Byte=REC_DSR3;
		//D0D1			D2D3			D4D5			D6D7
		//前门电磁阀开	前门电磁阀关	除霜电机高速	除霜电机低速
		CAN_QKYS4.Byte=REC_DSR4;
		//D0D1		D2D3			D4D5			D6D7
		//音响电源	行驶记录仪电源	开关有效电源	缓速器控制电源输出
		CAN_QKYS5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//右后视镜电机		倒档信号			NC			NC
		CAN_QKYS6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_QKYS7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
	//中控命令ID18ff0f8a(c7fe1f14)
	else if(REC_ID2==0x1f&&REC_ID3==0x14&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_ZKC0.Byte=REC_DSR0;
		//D0D1			D2D3			D4D5			D6D7
		//后门防夹开关	后踏步灯开关	卫生间有人开关	手制动开关
		CAN_ZKC1.Byte=REC_DSR1;
		//D0D1				D2D3			D4D5			D6D7
		//左行李仓灯1开关	左行李仓灯2开关	左行李仓灯3开关	左行李仓灯4开关
		CAN_ZKC2.Byte=REC_DSR2;
		//D0D1				D2D3			D4D5			D6D7
		//右行李仓灯1开关	右行李仓灯2开关	右行李仓灯3开关	右行李仓灯4开关
		CAN_ZKC3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//刹车开关	NC			NC			NC
		CAN_ZKC4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//0~7气压1
		CAN_ZKC5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//0~7气压2
		CAN_ZKC6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//0~7燃油
		CAN_ZKC7.Byte=REC_DSR7;
		//D0D1			D2D3		D4D5		D6D7
		//润滑压力开关	低气压开关1	低气压开关2	燃油低开关
	}
	//中控状态ID18ff102b(c7fe2056)
	else if(REC_ID2==0x20&&REC_ID3==0x56&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_ZKS0.Byte=REC_DSR0;
		//D0D1			D2D3		D4D5		D6D7
		//侧左转向灯1	侧左转向灯2	侧右转向灯1	侧右转向灯2
		CAN_ZKS1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//左标志灯1	左标志灯2	左标志灯3	右标志灯1
		CAN_ZKS2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//右标志灯2	右标志灯3	左轮边灯	右轮边灯
		CAN_ZKS3.Byte=REC_DSR3;
		//D0D1			D2D3		D4D5		D6D7
		//左行李仓灯1	左行李仓灯2	左行李仓灯3	左行李仓灯4
		CAN_ZKS4.Byte=REC_DSR4;
		//D0D1			D2D3		D4D5		D6D7
		//右行李仓灯1	右行李仓灯2	右行李仓灯3	右行李仓灯4
		CAN_ZKS5.Byte=REC_DSR5;
		//D0D1			D2D3			D4D5		D6D7
		//前门底踏步灯	中门底踏步灯	屈膝电磁阀1	屈膝电磁阀2
		CAN_ZKS6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5			D6D7
		//气喇叭	电喇叭		后门电磁阀开	后门电磁阀关
		CAN_ZKS7.Byte=REC_DSR7;
		//D0D1			D2D3		D4D5		D6D7
		//卫生间电源	NC			NC			NC
	}
*/	//尾控命令ID18ff0c89(c7fe1912)
	else if(REC_ID2==0x19&&REC_ID3==0x12&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_WKC0.Byte=REC_DSR0;
		//D0D1			D2D3			D4D5			D6D7
		//润滑压力开关	机油压力开关	机油旁通开关	过热开关
		CAN_WKC1.Byte=REC_DSR1;
		//D0D1				D2D3		D4D5		D6D7
		//空滤器堵塞开关	水位传感器	NC			NC
		CAN_WKC2.Byte=REC_DSR2;
		//D0D1			D2D3			D4D5		D6D7
		//后启动开关	发动机仓灯开关	倒车开关	空档开关
		CAN_WKC3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//安全开关	油门开关	充电信号	NC
		CAN_WKC4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//0~7机油压力
		CAN_WKC5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//0~7水温
		CAN_WKC6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//0~7预热温度
		CAN_WKC7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
/*	//尾控状态ID18ff0d2b(c7fe1a56)
	else if(REC_ID2==0x1a&&REC_ID3==0x56&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_WKS0.Byte=REC_DSR0;
		//D0D1				D2D3		D4D5		D6D7
		//排气制动电磁阀	发动机仓灯	左倒车灯	右倒车灯
		CAN_WKS1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//左后雾灯	右后雾灯	电磁开关	预热继电器
		CAN_WKS2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//左后小灯	右后小灯	启动继电器	自动润滑电机
		CAN_WKS3.Byte=REC_DSR3;
		//D0D1		D2D3			D4D5		D6D7
		//牌照灯组	空调电容箱电源	左标志灯4	左标志灯5
		CAN_WKS4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//右标志灯4	右标志灯5	左刹车灯	右刹车灯
		CAN_WKS5.Byte=REC_DSR5;
		//D0D1			D2D3		D4D5			D6D7
		//后左转向灯	后右转向灯	车速传感器电源	熄火器正
		CAN_WKS6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//熄火器反		熄火电磁阀			NC			NC
		CAN_WKS7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
	//尾控数据ID18ff1a89(c7fe13512)
	else if(REC_ID2==0x35&&REC_ID3==0x12&&REC_ID0==0xc7&&REC_ID1==0xfe)
	{
		CAN_WKD0.Byte=REC_DSR0;
		//D0D1		D2D3		D4D5		D6D7
		//0~7转速高位
		CAN_WKD1.Byte=REC_DSR1;
		//D0D1		D2D3		D4D5		D6D7
		//0~7转速低位
		CAN_WKD2.Byte=REC_DSR2;
		//D0D1		D2D3		D4D5		D6D7
		//0~7车速
		CAN_WKD3.Byte=REC_DSR3;
		//D0D1		D2D3		D4D5		D6D7
		//0~7里程小计高位
		CAN_WKD4.Byte=REC_DSR4;
		//D0D1		D2D3		D4D5		D6D7
		//0~7里程小计中位
		CAN_WKD5.Byte=REC_DSR5;
		//D0D1		D2D3		D4D5		D6D7
		//0~7里程小计低位
		CAN_WKD6.Byte=REC_DSR6;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
		CAN_WKD7.Byte=REC_DSR7;
		//D0D1		D2D3		D4D5		D6D7
		//NC		NC			NC			NC
	}
*/
	CRFLG=0x01;
}

⌨️ 快捷键说明

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