CAN总线通信程序:UART与CAN协议转换

需积分: 17 14 下载量 76 浏览量 更新于2024-07-21 2 收藏 53KB DOC 举报
"CAN总线通讯程序用于实现CAN与UART之间的协议转换,程序基于P89C61X2BA单片机,采用11.0592MHz晶振,中断0处理CAN总线中断,上拉电阻配置。CAN发送以查询方式,接收用中断方式,看门狗复位时间为1.2秒。SJA1000控制器使用8MHz晶振,工作在Peil模式。串口接收采用中断,发送采用查询,波特率可调。串口数据以8字节为一组通过CAN发送,现在改为每接收到一帧完整数据就启动一次CAN传输,并根据串口接收的数据长度发送相应字节数。CAN接收的数据也会回传到串口,同时程序能识别CAN报文的字节长度。看门狗芯片是MAX1232CPA,硬件溢出时间为1.2秒。" 正文: 这个CAN总线通讯程序是设计用来在微控制器P89C61X2BA的基础上,实现CAN总线与通用异步收发传输器(UART)之间的通信。程序中提到的关键点如下: 1. **硬件配置**:P89C61X2BA单片机以11.0592MHz的晶振运行,CAN总线中断连接到单片机的中断0,中断处理具有上拉电阻,波特率可配置。 2. **CAN总线接口**:使用SJA1000作为CAN控制器,其工作在8MHz的Peil模式,提供了对CAN总线的高速访问。CAN总线的发送操作是通过查询方式执行,而接收则通过中断机制来处理。 3. **看门狗定时器**:看门狗芯片MAX1232CPA负责系统监控,当系统运行出现异常时进行复位,其硬件溢出时间设定为1.2秒。 4. **数据处理**:原始程序中,串口接收到的每8个字节数据会被打包并通过CAN总线发送。但在后来的修改中,程序优化了这一过程,现在每当接收到一帧完整数据,不论数据长度,都会立即启动一次CAN传输,确保数据实时性。 5. **帧间隔判定**:为了区分不同串行帧,程序通过比较连续两个数据之间的时间间隔(大于当前波特率下5个字节的传输时间)来判断是否属于不同帧。 6. **数据回传**:当CAN总线接收到一帧信息后,会通过串口将该信息回传,改进后,程序能够识别接收到的CAN报文的字节长度,并仅发送这些字节到串口,避免冗余传输。 7. **内存缓冲区**:定义了多个缓冲区变量,如`UART_RX_Data`用于存储串口接收的数据,`CAN_TX_Data`用于存放待发送到CAN总线的数据,以及`CAN_RX_ID`和`CAN_TX_ID`用于标识CAN消息的来源和目标。 这个程序的核心在于实现两者的协议转换,确保数据在不同通信协议间的准确无误传输,同时也体现了对实时性和可靠性的考虑。通过这样的设计,可以灵活适应不同的应用需求,比如在汽车电子、工业自动化等领域,CAN总线通常用于实现设备间的高效通信,而UART则常用于设备与主机或调试工具的简单连接。