C8051F040中CAN控制器的应用
CAN0ADR=IF1DATA1;/*指向数据场的第一个字节*/
for(i=0;i<4;i++){
CAN0DAT=can_temp[i];/*将4字节数据写入发送缓冲器*/
}
CAN0ADR=IF1CMDRQST;
CAN0DATL=MsgNum;/*将报文对象编号写入,则数据发送到对应的报文对象中*/
}
3.2.3 接收程序
CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:
void receive_data(void){
SFRPAGE=CAN0_PAGE;/*指向CAN0页面*/
CAN0ADR=IF1CMDMSK;/*向IF1命令屏蔽寄存器写入命令*/
CAN0DAT=0X0083;
CAN0ADR=IF1ARB2;/*指向IF1仲裁寄存器2*/
CAN0DATH|=0x80;
CAN0ADR=IF1DATA1;/*指向数据场的第一个字节*/
for(i=0;i<4;i++){
CAN0DAT=can_temp[i];/*将4字节数据写入发送缓冲器*/
}
CAN0ADR=IF1CMDRQST;
CAN0DATL=MsgNum;/*将报文对象编号写入,则数据发送到对应的报文对象中*/
}
3.2.3 接收程序
CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:
Void receive_data(void){
SFPRAGE=CAN0_PAGE;/*指向CAN0页面*/
CAN0ADR=IF2CMDMSK;/*向IF2命令屏蔽寄存器写命令*/
CAN0DAT=0x003F;
CAN0ADR=IF2CMDRQST;/*将报文对象编号写入命令请求寄存器,对应地接收*/
CAN0DATL=MsgNum;/*得到数据就从报文RAM中移到数据缓冲器中*/
CAN0ADR=IF2DATA1;/*指向数据场的第一个字节*/
for(i=0;i<4;i++){ /*读取4个字节数据*/
CAN_RX[i]=CAN0DAT;
}
《C8051F040中CAN控制器的应用(第4页)》