历史上的今天
今天是:2025年04月07日(星期一)
2018年04月07日 | 基于AT89C51单片机的RS 232串行数据截取设计方案
2018-04-07 来源:eefocus
引言
目前,我国的装备技术水平和发达国家相比还有一定的差距,对于国外引进的先进设备,如何才能在没有任何技术资料的情况下破解其技术瓶颈,实现装备技术水平的跨越式发展是我国普遍面临的技术难题。为此作者认为获取设备与控制计算机之间的通信数据,分析其通信协议是解决这个难题的基础。基于此,本文设计了数据截取器。
很多设备和其控制计算机之间采用的是RS 232标准串行接口进行通信,本文设计和实现了RS 232串行通信数据截取器,能有效地截取设备与其控制计算机之间的通信数据。
1 截取器硬件部分设计
1.1 总体框图及原理
系统原理框图如图1所示。

原理分析:具体设备与其控制计算机之间的通信线路通过电平转换分两路。一路是直接相连,保证截取器加入后不会影响它们之间的正常通信。另一路经过扩展的串口1和2,同单片机相连,保证了它们之间的通信数据能够被单片机捕获,这些数据经过单片机处理以后通过另一个扩展串口传输到上位机,实现对通信数据的截取。
1.2 器件选择
系统以常用的AT89C51单片机为处理核心,选取成都国腾公司生产的GM8123芯片将AT89C51单片机的1个全双工异步串行通信接口扩展成为3个全双工异步串行通信接口,采用MAX232芯片实现RS 232电平与TTL电平之间的相互转换。
1.3 硬件电路
系统完整的电路原理图如图2所示。系统电路包括三个部分:单片机最小系统、串口扩展电路和电平转换电路。
单片机最小系统,包括电源电路、时钟电路和复位电路,S1,S2做波特率控制开关,分别控制P0.0,P0.1的值从00~11,对应波特率为1 200~9 600 b/s。
串口扩展电路由GM8123构成,其时钟电路采用12 MHz的石英晶体振荡器构成内部时钟方式。GM8123的母串口接收引脚RXD0和发送引脚TXD0分别同单片机串口的发送引脚TXD和接收引脚RXD相连接。GM8123的复位引脚同单片机P3.6脚相连接,由P3.6控制GM8123系统复位,它的模式控制引脚MS同P3.7相连接,由P3.7进行模式选择。GM8123的发送地址线引脚STADD0,STADD1,接收地址引脚SRADD0,SRADD1依次同单片机P1口的P1.0~P1.3相连接,由单片机P1口判断是哪个子串口接收数据和选取某个子串口发送数据。
电平转换电路由两片MAX232芯片完成,实现J1,J2,J3的RS 232电平与TTL电平之间的相互转换。
2 软件设计
系统软件有两种工作模式,模式1的软件设计是实现截取数据的实时发送,截取器工作时不能脱离上位机。模式2的软件设计是实现截取数据的存储转发,截取器可以脱离上位机工作。
2.1 主程序流程设计
模式1和模式2的主程序基本相同,其主要功能有:对单片机串行中断相关寄存器的配置,对串口收发数据波特率设定及相关定时器的配置,对GM8123芯片的复位操作和工作方式的相关配置。主程序流程图如图3所示。

其中由S1,S2,控制波特率设置的程序流程图如图4所示。
2.2 中断服务程序
模式1的中断服务程序完成的功能是接收具体设备(J1)和其控制计算机(J2)发送的数据,并把数据实时地发送到上位计算机(J3)上显示。模式1中断服务程序流程图如图5所示。

模式2中断服务程序主要完成的功能是接收具体设备(J1)和其控制计算机(J2)发送的数据,并把接收到的数据存储到单片机的RAM中,当接收到上位机(J3)的发送数据命令时,向上位计算机发送存储的数据。其流程图如图6所示。
3 功能测试
借助串口调试助手软件在不同的波特率下对截取器进行功能测试,如图7是在波特率为9 600 b/s,模式2下的测试结果。其中COM1,COM2和COM4分别对应具体设备、控制计算机和上位机。上位机接收数据中“s:”标号后的数据是设备发送的,“k:”标号后的数据是控制计算机发送的,这些数据是按照时间的先后顺序被截取器所截取。利用截取器对某一具体设备和其控制计算机之间的实际通信数据进行截取时,就可以通过分析截取的数据,找出它们之间通信数据的对应关系,从而分析其通信协议。

4 结语
本文讨论了RS 232串行数据截取器的设计方案,并做出了产品,进行了实验。系统稳定、可靠,可以有效地截取串行通信数据。该系统可以为有相关需求的人员提供帮助。
史海拾趣
|
小弟现在开发要用到这个德国人产的电容,但是市场上很难买到。所有求助大家,大家看哪有卖这种电容的,给个联系方式!具体参数为4.7nF 精度+-1%到2%的。如果没有德国EMZ的电容,那其他品牌的电容也可,但是希望精度能高点!谢谢!小弟联系方式:ica ...… 查看全部问答> |
|
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件 ...… 查看全部问答> |
|
本人做DS18B20一线制协议,总是控制不好时序,请教各位用C语言编出的程序实现20US~40US延时的源码,请共享一下,谢谢! 用C语言编码如何计算延时时间? 谢谢!… 查看全部问答> |
|
void alarm(void){ 加一句 if(carry_count*250+pulse_count>=alarm_l) Alarm=0; if(carry_count*250+pulse_count<alarm_h) Alarm=1;}我想要在执行前检测如果Alarm=0;就跳过 if(carry_count*250+pulse_ ...… 查看全部问答> |




