扫描二维码
随时随地手机看文章
3 软件设计
软件设计的主要任务是实现数据和控制命令在CAN总线网络和RS-485总线之间的传输。它主要包括RS-485和CAN接口的初始化程序、报文发送和接收程序、中断服务程序和错误处理程序等。其中,SJA1000的初始化程序是软件设计中的难点,需要完成各种工作参数的设置。其中,控制寄存器用来改变CAN控制器的行为,包括进入复位状态,激活不同类型的中断源,如接收中断、发送中断和数据溢出中断等。验收代码寄存器和验收屏蔽寄存器共同作用定义了能被节点所接收报文的条件:所收信息的标识符的相应位与验收代码寄存器验收码的相应位相等。 验收屏蔽寄存器的作用是确定验收码的哪些位对于验收滤波是相关的或不相关的。总线时序寄存器0定义了波特率的预设值及同步跳转宽度;总线时序寄存器1则定义了位周期的长度、采样点的位置和采样数目。输出控制寄存器可以设置不同的输出模式(如正常输出模式、双相输出模式和时钟输出模式等)。时钟分频寄存器不仅可以控制SJA1000的输出频率及屏蔽CLKOUT引脚,而且还能够对Basic CAN和Peli CAN模式进行选择。具体的SJA1000初始化程序流程如图2所示。
CAN总线转换到RS-485总线的程序如下:
CAN-RS485_TR
ANSITION:
MOV DPTR, #SR; 状态寄存器
MOVX A, @DPTR;
JNB ACC.0, CAN_QUIT;
是否接收到信息,无数据则退出转换程序
CAN-RS485_HANDLE:
MOV DPTR, #CANR ;接收缓冲区首地址
MOVX A , @DPTR ;接收帧的格式
JNB ACC.6 , RECEIVE _ FRAME
;RTR=1则报文是远程请求帧
LCALL TRANSMIT_ DATA
;发送对方请求的数据
LJMP CAN_QUIT ;退出转换程序
RECEIVE_ FRAME: MOVX A, @DPTR;
ANL A, #0FH;
ADD A, #05H
;获得接收数据的长度
MOV R7, A
MOV R0,#43H
;设定MCU接收数据缓冲区
DATAFRAME: MOVX A, @DPTR
;接收数据
MOV @R0, A
LCALL RS485_SEND ;将有效信息通过MAX485转发到RS-485总线
INC DPTR
INC R0
DJNZ R7, DATAFRAME ;判断接收是否结束
RECOUT: MOV DPTR, #CMR
MOV A, #04H
;释放接收缓冲区
MOVX @DPTR, A
CAN_QUIT: RET ;退出转换程序
4 结束语
CAN总线是当前应用最为广泛的现场总线之一,而RS-485总线则是常用的串行总线,两者之间的相互转换具有很高的实用价值。本文设计的CAN-RS485通信接口电路能够很好地解决这两种串行数据总线之间的相互转换问题,并已成功应用于某地区的智能交通控制系统。