浅谈Small RTOS51 下CAN总线数据收发实现
void main(void)
{
CpuInit(); //微控制器初始化
UserTickTimer(void);//系统时钟节拍的初始化
OSStart();//启动small rtos操作系统
SendData();//发送数据任务
{ unsigned char data status;
unsigned char i;
unsigned char xdata *p =CAN1_SJA_BaseAdr+REG_CAN_SR ;
unsigned char xdata *p1;
status=SJAInit();//初始化can控制器
if(status!=0){
OSSendSignal(2); //唤醒错误处理任务
}
P_SJAFrameStructApp =(P_SJAFrameStruct )BufCan2[0];
IT0 =0;//电平触发模式
EX0=1;//使能CAN中断
BufCan2[0]=0x88;
P_SJAFrameStructApp->FrameID=0x11111111;
while(1)
{
OSWait(K_TMO,2);//系统等待函数,每两个时钟周期发送一次数据
P_SJAFrameStructApp->FrameID++;
p1=(unsigned char xdata *)P_SJAFrameStructApp->FrameID;
for(i=0;i4;i++) //发送测试数据
BufCan2[1+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[5+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[9+i] =*(p1+i);// 0x55;
status=SJASendData(BufCan2,0x10);//向CAN总线发送数据,所发送数据的首地址是BufCan2
if(status!=0) //表示发送数据错误
OSSendSignal(2);唤醒错误处理任务
}
}
void DisPlay(void)
{
while(1){
OSWait(K_TMO,1);
ShowLED(); // led显示处理
}
}
Error();// 错误信息处理任务
}
(2) 测试结果:
如果运行正确:数码管会显示依次加1的数值,否则:数码管会显示E-xx的错误代码
5 结束语
CAN总线的产生与发展控制器局部网(CAN-CONTROLLER AREA NETWORK)是BOSCH公司为现代汽车应用领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。
随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。
本文作者创新点是实现了在实时操作系统SmallRTOS51下CAN总线上数据的接收与发送,用一个简单的实例来说明了CAN总线的接收、发送原理。
评论