📄 can.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 + -