4.3 基于C语言的软件编程
系统软件的设计思想是系统上电后首先对AT89C51和SJAl000进行初始化,以确定工作主频、波特率、输出特性等。其中任一智能节点可以利用查询方式通过SJAl000从CAN总线上获取所需的数据并把该数据传送到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总线将有广阔的应用前景。