新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于AT89C51型单片机的CAN总线智能节点设计

基于AT89C51型单片机的CAN总线智能节点设计

作者:李金刚 刘永鸿时间:2008-07-11来源:国外电子元器件收藏

  4 软件设计

本文引用地址:http://www.amcfsurvey.com/article/85600.htm

  4.1 网络规则

  为多主工作方式,网络上任一节点均可在任意时刻主动向网络上其他节点发送信息而不分主从,方式灵活。为禁止总线冲突,采用非破坏性总线仲裁技术,根据需要将各个节点设定为不同的优先级,并以标识符ID标定,其值越小,优先级越高。总线的节点之间可以进行实时相互,当1个节点需要接收另1个节点的数据时,只需把其代码寄存器的内容设置成和另1节点的标识符一致即可。如果对于标识符和其代码寄存器的内容设置不一致,则节点所发的数据不予理会。

  4.2 SJAl000的工作模式设置

  SJAl000有二种工作模式:复位模式和工作模式。在复位模式下可对接收代码、接收屏蔽、总线时序寄存器O和1及输出控制寄存器进行设置。一般在CAN初始化时完成对以上寄存器的设置,当CAN进入工作模式后,它们的值就不再变化。在工作模式下可进行数据的发送和接收。特别要注意的是:当硬件复位或控制器掉线时会自动进入复位模式,这样就不能进行正常的CAN通信,这就要求对复位位进行监控。当发生硬件复位或控制器掉线而进入复位模式时,要求把复位位置为0并进入工作模式,这样CAN就能进行正常发送和接收。

  4.3 基于C语言的软件编程

  系统软件的设计思想是系统上电后首先对AT89C51和SJAl000进行初始化,以确定工作主频、波特率、输出特性等。其中任一可以利用查询方式通过SJAl000从上获取所需的数据并把该数据传送到PC上显示,同时可以向总线上发送数据以供其他接收显示。以下是具体实现程序。

  以上就是进行试验的程序,其中reg51.h是为AT89C52主控制器专门编写的库函数,它在Keil软件中是现成的,只要用#include语句包括进来即可;intrins.h是为以后调用空函数_nop_()作准备,它里面包括了类似于汇编语言的NOP语句;CAN_TOUWENJIAN.h是头文件,用于对相关寄存器的定义。Tx_DATA_CAN()函数用于向总线发送数据,REC_DATA_CAN()函数用于从总线接收数据,SERIAL()用于PC与间的相互通信。限于篇幅,发送子程序和接收子程序没有具体给出。

  5 结束语

  在CAN总线的开发试验过程中,笔者掌握了CAN总线智能节点的设计,并在实践中进行了应用。通过应用证明,CAN总线具有以下优点:组网自由,扩展性强;自动错误界定,简化了通信的操作;可根据数据内容确定优先权,解决通信的实时性问题。此外,CAN网络已在众多工业控制系统中应用,尤其在传输速率较高而且对实时性及可靠性要求高的场合,CAN总线将有广阔的应用前景。本文来源于《某型控制系统信号信息传输改进研究》课题组,组长是刘永鸿教授,副组长是张文宏副教授,主要参与者有黄晨副教授、赵勇讲师、李金刚研究生。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭