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

📄 can.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
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

unsigned char	can_comm_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为空
	{
		TB0DLR   =  0x08;					//设置传送数据长度为8个字节。

		TB0DSR0  =   CAN_STR0.Byte;			//传送本地状态数据
		TB0DSR1  =   CAN_STR1.Byte;			
		TB0DSR2  =   CAN_STR2.Byte;			
		TB0DSR3  =   CAN_STR3.Byte;			
		TB0DSR4  =   CAN_STR4.Byte;			
		TB0DSR5  =   CAN_STR5.Byte;			
		TB0DSR6  =   CAN_STR6.Byte;			
		TB0DSR7  =   CAN_STR7.Byte;			

		TB0IDR0  =   0xc7;//IDR0;      		 //设置本地ID18ff0d2b(c7fe1a56)
		TB0IDR1  =   0xfe;//IDR1;
		TB0IDR2  =   0x1a;//IDR2;
		TB0IDR3  =   0x56;//IDR3;
		
//		TB0IDR0  =   0x1a;//IDR0;      		 //设置本地ID18ff0d2b(c7fe1a56)
//		TB0IDR1  =   0x00;//IDR1;
//		TB0IDR2  =   0x00;//IDR2;
//		TB0IDR3  =   0x00;//IDR3;

		TB0TBPR  =  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为空
	{
		TB2DLR   =  0x08;					//设置传送数据长度为8个字节。

		TB2DSR0  =   CAN_CMD0.Byte;			//传送本地状态数据
		TB2DSR1  =   CAN_CMD1.Byte;			
		TB2DSR2  =   CAN_CMD2.Byte;			
		TB2DSR3  =   CAN_CMD3.Byte;			
		TB2DSR4  =   CAN_CMD4.Byte;			
		TB2DSR5  =   CAN_CMD5.Byte;			
		TB2DSR6  =   CAN_CMD6.Byte;			
		TB2DSR7  =   CAN_CMD7.Byte;			

		TB2IDR0  =   0xc7;//IDR0;      		 //设置本地ID18ff0c89(c7fe1912)
		TB2IDR1  =   0xfe;//IDR1;
		TB2IDR2  =   0x19;//IDR2;
		TB2IDR3  =   0x12;//IDR3;
		
//		TB2IDR0  =   0x1a;//IDR0;      		 //设置本地ID18ff0d2b(c7fe1a56)
//		TB2IDR1  =   0xa0;//IDR1;
//		TB2IDR2  =   0x00;//IDR2;
//		TB2IDR3  =   0x00;//IDR3;

		TB2TBPR  =  0x05;					//设置优先级别
		CTFLG    =  0x04;					//启动发送
	}
}
void interrupt 20 CAN_Receive(void)
{
}

⌨️ 快捷键说明

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