基于单片机控制的CAN与RS-232转换器的研究与设计
函数(CAN_Receive())和RS-232接收函数(RS232_Receive())检测缓冲区内是否收到到数据,如果有数据接收则调用RS-232发送函数(RS232_Send())和CAN总线发送函数(CAN_Send())转发数据。数据的发送和接收都是通过中断来进行的。每次循环检测结束通过调用rst_wdog函数使看门狗复位。此外,由于CAN总线的速率与RS-232接口的速率并不相同,因此还需设置片外的存储器(RAM),用于转换双方的数据缓冲区。主程序流程图如图4所示。 由于RS-232接口发送数据是以字节为单位,而CAN总线接收数据以多字节组成的数据帧为单位,因此为了避免指针指向的混乱,程序中统一使用相同长度的通用帧来保存数据。RS-232协议模块将通用的帧使用SLIP协议进行封装后发送,并将接收到的SLIP帧转为通用帧格式转入缓冲区。系统启动后,主程序调用RS232_Receive函数检测CAN接收缓冲区的内容,如果缓冲区内有数据,则调用RS_Read()函数读取缓冲区中的一帧数据并将其送入RS232_Receive()函数参数buf指向的缓冲区后返回。在读取CAN接收缓冲区数据后会交由RS232_Send()函数发送,并将帧数据保存至临时发送缓冲区bufRS_S。程序通过ChkEndR()函数检测数据帧是否发送完毕。 3.2 CAN控制器SJA1000初始化程序设计 CAN控制器SJA1000完成CAN总线帧的发送和接收任务。程序中,使用INITCAN()函数完成对CAN接口芯片的初始化。初始化程序设计对转换器的正常工作相当重要。它主要完成模式设置、时钟输出寄存器设置、接受码寄存器ACR设置、接收屏蔽码寄存器AMR设置、总线定时器设置和输出控制寄存器设置。 3.3 基于CAN总线协议的数据接收与发送程序设计 主程序启动后调用CAN_Recive()函数检查CAN接收缓冲区中是否有数据存在,如果检查到数据,则程序从缓冲区中读取一帧数据并将其送入参数buf指定的缓冲区中。主程序如果发现RS-232接收缓冲区内有数据,则读取该数据帧并将其交由CAN_Send()函数发送至CAN总线。这里CAN_Send()函数接收到的数据帧格式为通用帧格式,需要先将其中的DesDevID SouDevID Length 等信息从通用帧中提取出来,填入CAN总线格式帧的各个位置,再通过命令寄存器传递发送请求。此外,主程序通过ChkEndC()函数检测数据帧是否发送完毕。 4. 结论 本设计完成了CAN总线与RS-232转换器的电路与软件设计。本设计的创新点是:由于CAN总线与RS-232接口数据通信速率以及通信帧格式都不同,本设计最大优点是解决了这两点不同,从而实现了数据在CAN总线与RS-232接口之间的传输。在设计中由于使用了CAN总线进行数据传输这就使得通信方式多主性。网络上任意节点可以任意时刻主动地向网络上其他节点发送信息而不分主从。可以点对点,点对多点或全局广播方式发送和接收数据。 参考文献: [1].RS-232datasheethttp://www.dzsc.com/datasheet/RS-232_584855.html.
3.1 基于RS-232协议的数据接收与发送程序设计
[2].AT89C51datasheethttp://www.dzsc.com/datasheet/AT89C51_810155.html.
[3].X25045datasheethttp://www.dzsc.com/datasheet/X25045_722886.html.
[4].MAX232datasheethttp://www.dzsc.com/datasheet/MAX232_1074207.html.
[5].TTLdatasheethttp://www.dzsc.com/datasheet/TTL_1174409.html.
[6].PCA82C250datasheethttp://www.dzsc.com/datasheet/PCA82C250_18.html.
[7].SJA1000datasheethttp://www.dzsc.com/datasheet/SJA1000_609075.html.
[8].TLP113datasheethttp://www.dzsc.com/datasheet/TLP113_652822.html.
[9].ACRdatasheethttp://www.dzsc.com/datasheet/ACR_2278911.html.
单片机控制 CAN RS-232转换器 AT89C51 相关文章:
- 单片机控制点阵矩形收缩闪烁源程序(12-02)
- 单片机控制点阵LED一秒刷新显示I心形U(12-02)
- 51单片机控制直流电机正反转程序(12-02)
- 关于单片机控制开关三极管总结(12-01)
- 单片机控制18路舵机的C程序(12-01)
- 单片机控制开关电源(12-01)