历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2018年04月07日 | 基于AT89C51单片机的RS 232串行数据截取设计方案

2018-04-07 来源:eefocus

    引言

    目前,我国的装备技术水平和发达国家相比还有一定的差距,对于国外引进的先进设备,如何才能在没有任何技术资料的情况下破解其技术瓶颈,实现装备技术水平的跨越式发展是我国普遍面临的技术难题。为此作者认为获取设备与控制计算机之间的通信数据,分析其通信协议是解决这个难题的基础。基于此,本文设计了数据截取器。

    很多设备和其控制计算机之间采用的是RS 232标准串行接口进行通信,本文设计和实现了RS 232串行通信数据截取器,能有效地截取设备与其控制计算机之间的通信数据。

    1 截取器硬件部分设计

    1.1 总体框图及原理

    系统原理框图如图1所示。

c.JPG

    原理分析:具体设备与其控制计算机之间的通信线路通过电平转换分两路。一路是直接相连,保证截取器加入后不会影响它们之间的正常通信。另一路经过扩展的串口1和2,同单片机相连,保证了它们之间的通信数据能够被单片机捕获,这些数据经过单片机处理以后通过另一个扩展串口传输到上位机,实现对通信数据的截取。

    1.2 器件选择

    系统以常用的AT89C51单片机为处理核心,选取成都国腾公司生产的GM8123芯片将AT89C51单片机的1个全双工异步串行通信接口扩展成为3个全双工异步串行通信接口,采用MAX232芯片实现RS 232电平与TTL电平之间的相互转换。

    1.3 硬件电路

    系统完整的电路原理图如图2所示。系统电路包括三个部分:单片机最小系统、串口扩展电路和电平转换电路。a.JPG


    单片机最小系统,包括电源电路、时钟电路和复位电路,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所示。

d.JPG

    
    其中由S1,S2,控制波特率设置的程序流程图如图4所示。


    2.2 中断服务程序

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

e.JPG


    模式2中断服务程序主要完成的功能是接收具体设备(J1)和其控制计算机(J2)发送的数据,并把接收到的数据存储到单片机的RAM中,当接收到上位机(J3)的发送数据命令时,向上位计算机发送存储的数据。其流程图如图6所示。

    3 功能测试

    借助串口调试助手软件在不同的波特率下对截取器进行功能测试,如图7是在波特率为9 600 b/s,模式2下的测试结果。其中COM1,COM2和COM4分别对应具体设备、控制计算机和上位机。上位机接收数据中“s:”标号后的数据是设备发送的,“k:”标号后的数据是控制计算机发送的,这些数据是按照时间的先后顺序被截取器所截取。利用截取器对某一具体设备和其控制计算机之间的实际通信数据进行截取时,就可以通过分析截取的数据,找出它们之间通信数据的对应关系,从而分析其通信协议。

b.JPG

    4 结语

    本文讨论了RS 232串行数据截取器的设计方案,并做出了产品,进行了实验。系统稳定、可靠,可以有效地截取串行通信数据。该系统可以为有相关需求的人员提供帮助。


推荐阅读

史海拾趣

Greenray Industries Inc公司的发展小趣事

GreenTech还致力于绿色照明技术的研发和推广。公司推出了一系列高效节能的LED照明产品,包括智能路灯、室内照明系统等。这些产品不仅具有长寿命、低能耗等优点,还通过智能控制实现了按需照明,进一步降低了能耗。GreenTech积极与各地政府和企业合作,推动绿色照明技术在城市照明、工业照明等领域的广泛应用,为节能减排和环境保护做出了积极贡献。

CLANDELL公司的发展小趣事

随着国内市场的饱和,CLANDELL公司开始寻求国际化发展。公司通过市场调研和合作伙伴的建立,逐步拓展海外市场。在国际化的过程中,CLANDELL公司不仅提升了自身的品牌影响力,也学习到了国际先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

DDK公司的发展小趣事

DDK公司自创立之初,便以技术创新为核心竞争力。公司投入大量研发资源,不断探索新的电子技术和材料,力求在激烈的市场竞争中脱颖而出。在经历了数次技术突破后,DDK公司成功研发出了一款高性能、低能耗的芯片产品,这一产品迅速在市场上获得了广泛认可,为DDK公司赢得了良好的口碑和市场份额。

DYMO公司的发展小趣事

在XX世纪XX年代,DYMO公司推出了一款具有划时代意义的标签打印机。这款打印机采用了全新的打印技术,能够打印出清晰、耐用的标签,并且支持多种字体和图案。这一创新技术让DYMO公司在标签打印领域取得了领先地位,并为其后续的产品线奠定了坚实的基础。

ABI Electronics公司的发展小趣事

随着电子行业的快速发展,集成电路测试成为了ABI Electronics公司新的增长点。ABI团队针对集成电路的复杂性和多样性,开发出了先进的集成电路测试仪。该测试仪具备高精度、高可靠性、高自动化等特点,能够快速准确地检测集成电路的性能和故障,为集成电路的生产和研发提供了有力的支持。

Compact公司的发展小趣事

随着全球环保意识的提高,电子行业对环保和可持续发展的要求也越来越高。Compact公司积极响应这一趋势,加大环保投入,采用环保材料和工艺,降低生产过程中的能耗和排放。同时,公司还致力于推动循环经济的发展,通过回收和再利用废旧电子产品,减少资源浪费和环境污染。这一举措不仅提升了公司的社会形象,还为公司的可持续发展奠定了坚实基础。

请注意,以上故事仅为示例,并不代表任何真实存在的企业情况。如果需要关于特定企业(如Compact公司)的准确信息,建议查阅相关公司的官方资料、行业报告或新闻报道。

问答坊 | AI 解惑

我的建议

我想多一些能够直接看的含金量高的帖子,而不是多数都是下载的文件,这样的话论坛里的才会多一些不会因为芯币才发帖和回贴的人,论坛才有可能更兴旺,说的不妥之处请所有看到的多多包含!…

查看全部问答>

谁有德国EMZ的KP系列电容

小弟现在开发要用到这个德国人产的电容,但是市场上很难买到。所有求助大家,大家看哪有卖这种电容的,给个联系方式!具体参数为4.7nF 精度+-1%到2%的。如果没有德国EMZ的电容,那其他品牌的电容也可,但是希望精度能高点!谢谢!小弟联系方式:ica ...…

查看全部问答>

MATLAB 读写 txt 基础

文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件 ...…

查看全部问答>

嵌入式初学者问题

先说明一下我的基础:曾经用java 写过管理软件,也学过c语言,做过网络管理员! 我是一个计算机爱好者!对liunx 系统很是着迷!并想从事这方面工作! 但现在,只限于基本命令的应用!于是找了很过关于linux 这方面内容的开发材料,但大多都是关 ...…

查看全部问答>

wince下移植 tcpmp

哪位兄台会在evc下把tcpmp移植进去,以提高wince下支持各种类型视频文件。 急!…

查看全部问答>

wince下time的api???

比如一个LPSYSTEMTIME,要得到它加上8小时后的LPSYSTEMTIME,有什么api吗??…

查看全部问答>

【求助】哪有比较准确的MSP430的C语言延时程序?

本人做DS18B20一线制协议,总是控制不好时序,请教各位用C语言编出的程序实现20US~40US延时的源码,请共享一下,谢谢! 用C语言编码如何计算延时时间? 谢谢!…

查看全部问答>

请教问题(奖励10芯币),

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_ ...…

查看全部问答>

大侠们推荐下在哪里买开发板?

请问想学430,大侠们推荐下在哪里买开发板? 不胜感激  PS.想用它做生理信号采集处理…

查看全部问答>