本文主要介绍了一种针对CAN总线SJA1000的测试程序,适用于8位单片机P89LPC922。该程序的目标是通过串口与CAN接口通信,实现CAN总线的数据传输。以下是关键知识点的详细解读:
1. **CAN总线SJA1000简介**:
SJA1000是一款CAN控制器芯片,常用于简化CAN(Controller Area Network)设备的设计,它能够处理CAN通信的物理层和数据链路层,提供灵活的配置选项以适应不同应用需求。
2. **硬件配置**:
- 单片机:P89LPC922,一个基于8051架构的微控制器,用于实现CAN总线的控制逻辑。
- 串口与CAN接口:串口115200波特率被用来作为发送和接收CAN报文的通道,CAN口设置为20kHz的波特率,符合CAN标准。
3. **报文格式**:
- 数据帧结构:1个字节的8位数据,用于数据转发,支持双向通信。
- 报文头部标志(Fir):数据头标志用来区分数据帧和远程帧,1表示数据帧,0表示远程帧。
- 目标地址(TBN):通过DB,01指令修改,由三个字节组成,用于指定接收者。
- 验收码(ACN)和验收屏蔽(AMN):DB,02和DB,03指令用于修改,用于错误检测和确认。
- 波特率控制(BTR0N, BTR1N):DB,04指令用于设置,通过改变这两个寄存器来调整CAN通信的波特率。
4. **程序结构**:
- `#include <reg932.h>` 和 `#include "sja.h"`:包含了单片机的头文件以及SJA1000专用库,用于定义寄存器和功能函数。
- 定义了接收区 `RBuf` 和发送区 `CBuf`,以及计数器 `CL`、变量 `num`、串口接收计数 `Inp` 和延时计数 `Num2`。
- `Fir`、`ACN`、`AMN`、`TBN`、`BTR0N` 和 `BTR1N` 是关键的寄存器值,用于设置CAN通信参数。
5. **初始化函数`io_init()`**:
这个函数用于初始化IO口,可能包括设置P0口为输入或输出模式,为后续的串口和CAN接口通信做准备。
6. **编程流程**:
- 该程序应该包含数据发送和接收的逻辑,可能涉及发送CAN帧、解析接收到的数据帧、更新控制寄存器等步骤。
- 用户可以根据需要调用 `io_init()` 初始化IO,然后根据SJA1000提供的API来发送和接收CAN消息,同时处理验收码、地址和波特率设置。
通过这个测试程序,开发者可以深入了解如何在P89LPC922单片机上实现CAN总线SJA1000的通信,并为实际应用提供了一个基础框架。对于从事嵌入式开发、CAN总线设计或微控制器编程的人来说,理解和掌握这类程序编写至关重要。