PIC单片机与触摸屏串行通信的MODBUS协议实现
触摸屏与单片机的通信程序采用PIC单片机C语言编写。编译工具选择Hitech公司的PICC编译器。程序共分三大模块,即初始化模块、数据接收模块以及数据处理及发送模块。主程序流程图如图2所示。 PIC16F877单片机USART功能模块带有一个八位的波特率发生器BRG,BRG支持USART的同步和异步工作方式。用SPBRG寄存器控制一个独立的八位定时器的周期。在异步方式下,发送状态/控制寄存器TXSTA的BRGH位(即D2)被用来控制波特率。对串行口进行的初始化如下: GIE=1; %全局中断允许; SPBRG=25; %设置波特率为9600; TXSTA=0x04; %选择异步高速方式; RCSTA=0x80; %允许同步串行口工作; RTISC6=1; TRISC7=1; %将C口的RC6和RC7设置为异步串行通信模式; PFIE=1; %外围接口中断允许; RCIE=1; %USART接收中断允许; TXIE=1; %USART发送中断允许; 数据接收模块由一个中断函数组成。该中断函数将触摸屏发来的Modbus数据帧存储在一个自定义的数组中,当一帧数据接收完时,置接收结束标志位为1,转入数据处理及发送模块。串行通信接收器的核心是接收移位寄存器RSR,当接收到停止时,如果RCREG缓冲器为空,RSR就把接收到的数据送入RCREG。传送完成后,接收中断标志位RCIF被置1。实际的中断是否被CPU响应,可以通过设置外围接口中断允许寄存器PIE1的中断允许位RCIE来控制。 数据处理及发送模块执行Modbus协议功能码对应的运用。eView触摸屏与单片机以Modbus协议通信,用到的Modbus功能码如表2所示。表2 通信程序用到的功能码 功能码eView地址名称含 义作 用 010x读开关量输出读取一路或多路开关量输出状态034x读保持寄存器读取一个或多个保持寄存器的数据050x1x写开关量输出强置一路继电器的“分/合”输出163x4x预置多寄存器把具体的数据装入一组连贯的保持寄存器以Modbus功能码03为例来说明触摸屏及单片机的实际通信数据格式。如单片机地址编号为01H,触摸屏需要查看单片机中地址为0031H的寄存器的值,发送命令格式如表3所示。表3 触摸屏发送数据结构 数据段名称数据值地址01功能码03读取地址高位00读取地址低位31读取数据个数高位00读取数据个数低位01CRC校验码高位D5CRC校验码低位C5假设单片机中地址为0031H的寄存器中断为05H,则单片机的回复命令如表4所示。表4 单片机应答数据结构 数据段名称数据值地址01功能码03读取字节数02寄存器数据高位00寄存器数据低位05CRC校验码高位78CRC校验码低位47当波特率达到38400kb/s时,通信仍然稳定可靠。本系统具有连接电路简单、组态灵活、通信可靠性高等特点,并已成功应用于物料筛选控制系统项目中。由于Modbus通信协议的开放性的特点,国外进口控制器串行通信大者支持该协议,因此本文所实现的采用Modbus协议的串行通信具有广泛的应用价值。
51单片机相关文章:51单片机教程
单片机相关文章:单片机教程
单片机相关文章:单片机视频教程
单片机相关文章:单片机工作原理
通信相关文章:通信原理














评论