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

📄 can.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
📖 第 1 页 / 共 2 页
字号:
//08系列for auto
//扩展数据帧
//适用合客CAN报文
///////////////

#define  CAN_YB_C		  0x33
#define  CAN_QKZ_C		0x35
#define  CAN_QKZ_S		0x64
#define  CAN_QKY_C		0x39
#define  CAN_QKY_S		0x68
#define  CAN_ZK_C	  	0x3A
#define  CAN_ZK_S	  	0x6A
#define  CAN_WK_C	  	0x3C
#define  CAN_WK_S	  	0x6C
#define  CAN_WK_D	  	0x90
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sys_data_type CAN_JLY0,CAN_JLY1,CAN_JLY2,CAN_JLY3,CAN_JLY4,CAN_JLY5,CAN_JLY6,CAN_JLY7;					//行使记录仪CAN数据缓存

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数据缓存
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sys_data_type	CAN_FLAG;
#define		canid_error		CAN_FLAG.Bit.BIT0	//接受ID不符,error=1
#define		cantr_error		CAN_FLAG.Bit.BIT1	//发送ID错,error=1

#define   vcc_wakeup_flag   CAN_FLAG.Bit.BIT7				 //1有效
#define   door_wakeup_flag  CAN_FLAG.Bit.BIT6				 //1有效

#define   door1_flag        CAN_FLAG.Bit.BIT5
#define   door2_flag        CAN_FLAG.Bit.BIT4

#define   jly_ture_flag     CAN_FLAG.Bit.BIT2
#define   jly_err_flag      CAN_FLAG.Bit.BIT3

//ID寄存器说明
/*#define   TB0IDR0     IDR00
#define   TB0IDR1     IDR10
#define   TB0IDR2     IDR20
#define   TB0IDR3     IDR30

#define   TB0DLR      DLR0

#define   TB0DSR0			DSR00
#define   TB0DSR1			DSR10
#define   TB0DSR2			DSR20
#define   TB0DSR3			DSR30
#define   TB0DSR4			DSR40
#define   TB0DSR5			DSR50
#define   TB0DSR6			DSR60
#define   TB0DSR7			DSR70

#define   TB0TBPR     TBPR0
*/
#define   RBIDR0      REC_IDR0
#define   RBIDR1      REC_IDR1
#define   RBIDR2      REC_IDR2
#define   RBIDR3      REC_IDR3

#define   RBDSR0      REC_DSR0
#define   RBDSR1      REC_DSR1
#define   RBDSR2      REC_DSR2
#define   RBDSR3      REC_DSR3
#define   RBDSR4      REC_DSR4
#define   RBDSR5      REC_DSR5
#define   RBDSR6      REC_DSR6
#define   RBDSR7      REC_DSR7
/////
//读取CAN相关的状态量
sys_data_type door_status;
//
void yb_step_first(void);
void cs_step_count(void); 
void zs_step_count(void);
void at24_init(void);

ulong licheng=0;
ulong licheng_temp0=0,licheng_temp1=0,licheng_temp2=0;
uint temp_licheng=0;
//控制器MSCAN初始化
void init_mscan(void){
	CMCR0=0x01;		//模块控制寄存器0:CAN模块为软复位状态
	//.4=CMCR0_SYNCH同步状态位/1=同步
	//.3=CMCR0_TLNKEN与定时器连接使能/1=连接
	//.2=CMCR0_SLPAK休眠模式应答位/1=休眠
	//.1=CMCR0_SLPRQ休眠模式请求位/1=请求休眠
	//.0=CMCR0_SFTRES软复位/1=处于软复位--一般先进入休眠再进软复位
	
	CMCR1=0x00;		//模块控制寄存器1:
	//.2=CMCR1_LOOPB回送自检/1=启用回送自检
	//.1=CMCR1_WUPM唤醒控制/1=启用低通
	//.0=CMCR1_CLKSRC时钟源选择/1=CGMOUT/0=外晶振除2
	
	CBTR0=0x80;		//总线定时寄存器0
	//同步跳转宽度SJW[7,6],预定标器BRP[5..0]
	
	CBTR1=0xfa;		//总线定时寄存器1:/20
	//.7=CBTR1_SAMP采样方式/1=3次/0=1次
	//时间段2[6..4]时间段1[3..0]
	
	CIDAC=0x00;		//标识符验收控制寄存器:单32位,
	//验收模式IDAM[5..4],验收匹配IDHIT[1..0]/读取状态
	
	//标识符验收寄存器
	CIDAR0=0xc7;
	CIDAR1=0xfe;
	CIDAR2=0x00;
	CIDAR3=0x00;
	
	//标识符屏蔽寄存器
	CIDMR0=0xff;
	CIDMR1=0xff;
	CIDMR2=0xff;
	CIDMR3=0xff;
	
	CMCR0=0x00;		//正常状态
	///////////
	asm(nop);
	
	CRIER=0x01;		//接收中断使能
	//唤醒中断WUPIE,接收器警告中断RWRNIE,发送器警告中断TWRNIE,
	//接收器被动错误中断RERRIE,发送器被动错误中断TERRIE
	//总线关闭中断BOFFIE,溢出中断OVRIE,接收器已满中断RXFIE
	//CRFLG中断相应的标志位
	
	//发送中断复位为禁止
	//CTFLG发送相应标志位
}

/////////////
//发至记录仪
void can_tr_jly(void){
  unsigned char temp,temp0;
	temp=CTFLG;
	temp0=temp&0x04;
		if(temp0!=0){//发送缓存2为空
				
				DLR2=0x08;		//设置传送数据长度为8个字节。

				DSR02=CAN_JLY0.Byte;		//传送本地数据
				DSR12=CAN_JLY1.Byte;			
				DSR22=CAN_JLY2.Byte;			
				DSR32=CAN_JLY3.Byte;			
				DSR42=CAN_JLY4.Byte;			
				DSR52=CAN_JLY5.Byte;			
				DSR62=CAN_JLY6.Byte;			
				DSR72=CAN_JLY7.Byte;
				
				IDR02=0xc7;		//行使记录仪(C7FE2456)
				IDR12=0xfe;
				IDR22=0x24;
				IDR32=0x56;
				
				TBPR2=0x05;		//设置优先级别
				CTFLG=0x04;		//启动发送及TXE2
		}
}

/////////////
//CAN发送数据			can_tr(CAN_YB_C);
void can_tr(unsigned char select){
	unsigned char temp,temp0;
	temp=CTFLG;cantr_error=0;
	temp0=temp&0x01;
		if(temp0!=0){//发送缓存0为空
			if(select==CAN_YB_C){//仪表
				
				DLR0=0x08;		//设置传送数据长度为8个字节。

				DSR00=CAN_YB0.Byte;		//传送本地数据
				DSR10=CAN_YB1.Byte;			
				DSR20=CAN_YB2.Byte;			
				DSR30=CAN_YB3.Byte;			
				DSR40=CAN_YB4.Byte;			
				DSR50=CAN_YB5.Byte;			
				DSR60=CAN_YB6.Byte;			
				DSR70=CAN_YB7.Byte;
				
				IDR00=0xc7;		//仪表控制ID18FF0110(C7FE0110)
				IDR10=0xfe;
				IDR20=0x01;
				IDR30=0x10;
				
				TBPR0=0x05;		//设置优先级别
				CTFLG=0x01;		//启动发送及TXE0=0
				/////			
			}
			else{cantr_error=1;}			
		}	
		else{cantr_error=1;}	
}
/////////////
//CAN接收中断
void interrupt 20 can_receive(void){
	unsigned char can_rec_id0,can_rec_id1,can_rec_id2,can_rec_id3;
	can_rec_id0=RBIDR0;
	can_rec_id1=RBIDR1;
	can_rec_id2=RBIDR2;
	can_rec_id3=RBIDR3;
	canid_error=0;
	if(can_rec_id0==0xc7 && can_rec_id1==0xfe){
	  //can_wakeup_flag=1;      //CAN有接收
		
		//仪表控制ID18FF0088(C7FE0110)//以小括号内为准
		/*if(can_rec_id2==0x01 && can_rec_id3==0x10){
			
			CAN_YB0.Byte=RBDSR0;
			//D0D1		D2D3		D4D5		D6D7
			//点火锁ON	点火锁S		排气制动	洗涤电机
			CAN_YB1.Byte=RBDSR1;
			//D0D1		D2D3		D4D5		D6D7
			//雨刮间歇	雨刮低速	雨刮高速	左转向
			CAN_YB2.Byte=RBDSR2;
			//D0D1		D2D3		D4D5		D6D7
			//右转向	喇叭	    小灯一档    远光灯
			CAN_YB3.Byte=RBDSR3;
			//D0D1		D2D3		D4D5		D6D7
			//近光灯	前雾灯		自动润滑	前门
			CAN_YB4.Byte=RBDSR4;
			//D0D1		D2D3		D4D5		D6D7
			//后门		NC			NC			NC
			CAN_YB5.Byte=RBDSR5;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			CAN_YB6.Byte=RBDSR6;
			//D0D1		D2D3		D4D5		D6D7
			//0~7系统电压
			CAN_YB7.Byte=RBDSR7;
			//D0D1		D2D3		D4D5		D6D7
			//0~7雨刮间歇时长
			
			//执行相关位判断
			
		}
		
		//前控左命令ID18ff128b(c7fe2516)
		else */if(can_rec_id2==0x25 && can_rec_id3==0x16){
			
			CAN_QKZC0.Byte=RBDSR0;
			//D0D1		D2D3		D4D5		D6D7
			//电源开关	彩灯1开关	彩灯2开关	司机灯开关
			CAN_QKZC1.Byte=RBDSR1;
			//D0D1		D2D3		D4D5		D6D7
			//厢灯开关1	厢灯开关2	厢灯开关3	冷启动开关
			CAN_QKZC2.Byte=RBDSR2;
			//D0D1		D2D3		D4D5		D6D7
			//电视开关	除霜低速	除霜高速	离合器开关
			CAN_QKZC3.Byte=RBDSR3;
			//D0D1D2	D3D4D5		D6D7
			//左后视镜	右后视镜	NC
			CAN_QKZC4.Byte=RBDSR4;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			CAN_QKZC5.Byte=RBDSR5;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			CAN_QKZC6.Byte=RBDSR6;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			CAN_QKZC7.Byte=RBDSR7;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			
			//执行相关位判断
			//电源唤醒
			if(CAN_QKZC0.Bit.BIT0==1 && CAN_QKZC0.Bit.BIT1==0)  vcc_wakeup_flag=1;
		  else  		                                          vcc_wakeup_flag=0;
		  CAN_JLY0.Bit.BIT0=CAN_QKZC0.Bit.BIT0;
			CAN_JLY0.Bit.BIT1=CAN_QKZC0.Bit.BIT1;		 //电源状态
		}
		
		//前控左状态ID18ff132b(c7fe2656)
		else if(can_rec_id2==0x26 && can_rec_id3==0x56){
			
			CAN_QKZS0.Byte=RBDSR0;
			//D0D1		D2D3		D4D5		D6D7
			//左前小灯	示廓灯组	左近光灯	前左转向灯
			CAN_QKZS1.Byte=RBDSR1;
			//D0D1		D2D3		D4D5		D6D7
			//左远光灯	顶踏步灯	开关有效电源电子钟显示线
			CAN_QKZS2.Byte=RBDSR2;
			//D0D1		D2D3		D4D5		D6D7
			//车内辅助灯蜂鸣器		顶灯1		顶灯2
			CAN_QKZS3.Byte=RBDSR3;
			//D0D1		D2D3		D4D5		D6D7
			//顶灯3		左前雾灯	空调控制电源司机灯
			CAN_QKZS4.Byte=RBDSR4;
			//D0D1		D2D3		D4D5		D6D7
			//彩灯1		彩灯2		换气扇电源	左镜加热器
			CAN_QKZS5.Byte=RBDSR5;
			//D0D1		D2D3		D4D5		D6D7
			//阅读灯左路阅读灯右路	开关背光电源电子钟变光线
			CAN_QKZS6.Byte=RBDSR6;
			//D0D1		D2D3		D4D5		D6D7
			//电视机	电子钟记忆线左后视镜电机NC
			CAN_QKZS7.Byte=RBDSR7;
			//D0D1		D2D3		D4D5		D6D7
			//NC		NC			NC			NC
			
			//执行相关位判断
			
		}
		
		//前控右命令ID18ff138b(c7fe2716)
		else if(can_rec_id2==0x27 && can_rec_id3==0x16){
			
			CAN_QKYC0.Byte=RBDSR0;
			//D0D1		D2D3		D4D5		D6D7
			//前门开关	NC		后门开关		NC
			CAN_QKYC1.Byte=RBDSR1;
			//D0D1		D2D3		D4D5		D6D7
			//前围门开	前围门关	镜加热开关	屈膝开关
			CAN_QKYC2.Byte=RBDSR2;
			//D0D1		D2D3		D4D5		D6D7
			//阅读灯开关踏步灯开关	后雾灯开关	辅助灯开关

⌨️ 快捷键说明

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