新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 浅谈Small RTOS51 下CAN总线数据收发实现

浅谈Small RTOS51 下CAN总线数据收发实现

作者:时间:2011-09-03来源:网络收藏
(1)实例部分代码实现

  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);//向发送数据,所发送数据的首地址是BufCan2

  if(status!=0) //表示发送数据错误

  OSSendSignal(2);唤醒错误处理任务

  }

  }

  void DisPlay(void)

  {

  while(1){

  OSWait(K_TMO,1);

  ShowLED(); // led显示处理

  }

  }

  Error();// 错误信息处理任务

  }

  (2) 测试结果:

  如果运行正确:数码管会显示依次加1的数值,否则:数码管会显示E-xx的错误代码

  5 结束语

  的产生与发展控制器局部网(CAN-CONTROLLER AREA NETWORK)是BOSCH公司为现代汽车应用领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。

  随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。

  本文作者创新点是实现了在实时操作系统Small 上数据的接收与发送,用一个简单的实例来说明了CAN总线的接收、发送原理。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭