单片机与IBM-PC机的串行通信分析

发布者:WanderlustSoul最新更新时间:2018-02-27 来源: eefocus关键字:单片机  IBM-PC机  串行通信 手机看文章 扫描二维码
随时随地手机看文章

  51单片机和IBM - PC机是目前我国应用最广的两种微型计算机。作为单片机,51单片机不但功能强,体积小,价格低,而且使用方便,特别市场上提供的多种51单片机开发系统,为开发应用51单片机提供了非常方便的手段。因此,51单片机在许多领域,特别是工业控制和智能仪器领域已得到广泛的应用。事实已证明,51单片机已成为8位微机之首。作为系统机,IBM - PC的优点已众所周知,可以说,IBM - PC微机的出现为微机领域带来了一场革命。在我国,由于汉字操作系统( CCDOS)的引入,使得IBM - PC在各个领域得到迅速的推广使用。
  
  串行通信是计算机进行数据通信的主要方式之一。由于其连线少,成本低,再加上有调制/解调功能,因而特别适合于距离较远,且通信点较多的场合,如各种计算机网络和分布式系统等。RS - 232C是最常用的一种串行通信标准。在IBM - PC微机中,一般都有1~2个标准RS - 232C串行口,简称COM1和COM2。利用这两个串行口,IBM - PC可以与其他数字设备(计算机)进行一般的数据传送,或构成局部网络、多用户系统和分布式控制系统等。
  
  51单片机片内即含有一个全双工的串行口,并具有多机通信功能,可以方便地构成多机控制系统。但是,由于51单片机的串行口并非标准的RS -232C,加上其波特率是采用系统时钟由内部通用定时器产生的,误差大;而其数据处理速度也比系统机低得多。因此当其与IBM - PC微机进行串行数据通信,特别是构成分布式多机控制系统时,将会遇到许多意想不到的技术问题,诸如硬件连接、波特率选择、数据同步以及多机通信控制等。我们根据多年的实践经验,对这些问题提出了一些具体解决办法,供广大同行参考。
  
  一、硬件连接
  
  RS - 232C采用负逻辑。其电平范围通常为:逻辑1=-3~-15 V;逻辑0=+3~+15 V。由于51单片机的串行口是TTL电平,故必须进行电平转换,一般都采用MC1488(输出)和MC1489(输入)来完成。其连接方法如图1- 32所示。图中,MC1488采用土12 V电源,MC1489采用+5 V电源。IBM - PC串行口中的第4脚RTS(请求发送,输出)与第5脚CTS(清除发送,输入),以及第6脚DSR(数据装置准备好,输入)与第20脚DTR(数据终端准备好,输出)分别连接在一起,主要是因为PC机BIOS中的INT14H(串行通信程序)在接收和发送数据时,均要判别CTS和DSR是否有效。如果用户自己编制通信程序,采用判断收/发缓冲区是否满/空的办法来完成数据输入/输出,则可不必短接。


  
  顺便指出,IBM - PC及其兼容机串行口中的电平转换器通常有两种:老式原装机和长城0520机,采用7515075154。而一般的兼容机均用75188( MC1488)/75189 (MC1489)。1489中的每个接收门均有一个阈值电平控制端。当该脚开路或接一电容C至地时,其阈值电平VT =1. 1~1. 25 V,即当Vi≤1.1 V时,V。=1;V1≥1. 25 V时,V0=0。不难看出,这种电平与TTL电平具有兼容性。因此,图1- 32中1488和1489均可用普通TTL反相器代换,从而省去了土12 V电源。但要注意的是,替换1488的反相器最好用OC门,以便扩大电平范围和增加驱动电流;而替换1489的反相器输入端应加双向二极管电平箝位。此外,这种接法传送距离不宜太长,一般应在3m以内(标准RS - 232C电平传送距离可达15 m以上),距离过长,因两端地电位不一致以及噪声干扰会导致电平范围出错。
  
  上述做法虽然省去了士12 V电源,但只适合于使用MC1488/1489的PC机,且传送距离近。为了与标准RS - 232C电平兼容,又不用±12 V电源,可采用图1- 33所示的准RS -232C电平转换电路。图中虚线框内电路产生-7.0~-9.0 V的负电压。其工作原理是,由CMOS反相器F1和F2构成的多谐振荡器产生f=0.7 MHz的方波,经F3和F4双门驱动后,高电平时对Cl充电,低电平时,Cl反过来又对C2充电,从而在C2上产生一定的负电压。这里采用CMOS反相器,主要是为了降低其自身的功耗以及提高高电平电压。值得一提的是,如果8031的ALE脚负载不重,亦可直接利用它作为时钟源(1 MHz),这时由Fi和F2构成的多谐振荡器就可省去了;不过C1和C2要适当加大些。

  产生负电源还有一种既简单,又实用的方法,如图1- 34所示。如果将RTS引出,亦可产生正电压而代替图1- 33中的+5 V,这样可进一步扩大电平范
围。但要注意的是,图1- 34中正负电压是从信号中提取的,其驱动能力差,因此不宜带过重的负载。
  
  从图1- 33中可以看出,这种电平转换电路省去了±12 V电源,而且仅用2只廉价的三极管取代了较贵的1488/1489,因而大大降低了接口电路的成本,是一种非常实用的方法,特别是对于像前端控制机、单片机开发系统等提供土12 V电源有困难的系统。

二、波特率的选择
  
  波特率是串行通信中的一个关键参数。通信双方波特率的一致性直接影响数据传输的正确性。当误差太大时,甚至无法进行正常的传输。通常对于11位的串行帧(1位起始位+8位数据位+1位标志位+1位停止位),所允许的最大波特率误差应不超过4.5%。
  
  RS - 232C通信标准中,标称波特率有:50,110,150,300,600,1 200,2 400,4 800,9 600及19 200等。其中以1  200~9 600最为常用。IBM - PC的串行通信控制器采用的是In-te18250.其波特率是采用1.843 2 MHz专用时钟,由16位的除法器产生的,可以精确地定出各种标称波特率。而51单片机的波特率是采用系统时钟由定时器T,产生的。由于系统时钟一般为6.0 MHz或12.O MHz,有效位数少,而T.又是用的8位自动装入定时方式,因此,很难精确地定出各种标称波特率。当两台51单片机进行串行通信时,只要两机的系统时钟和定  时常数一致,就能保证数据正确传输。这时的波特率只是反映传送的快慢,而不是非要达到多少精度。因为两机的波特率即使有误差,也只是系统时钟(晶体)上的误差。这种误差通常是很小的,可忽略不计;但当51单片机与IBM - PC进行串行通信时,这种误差就大了。以4800波特为例:
  
  对于PC机,除法器控制常数为:


  
无误差。式中,B为波特率。
  
  对于51单片机,当系统时钟fosc=6 MHz时,定时常数为:


  
  因n必须为整数,四舍五入后n=253(FDH);反过来,因取整得出的实际波特率为:
  
  波特率误差:


  
  比所允许的误差大,当然数据也就无法正确传输了。同理,不难证明,在1200-9600的标称波特率范围内,只有1 200是唯一可用的,其n=243(F3H),x-96(0060H)。显然,对于那些想用高波特率传送数据的用户来说,这无形之中提出了一个难题。那么是否有办法解决这一难题呢?办法是有的,只是不能局限于几个标称波特率上。其算法如下:
  
  ①假定51单片机上的一个定时常数n,一般n取值为F4H~FEH(波特率为1200~9600);


  
  大n值重复上述①~④步求出下一个可用波特率。
  
  根据上述算法,不难求出1 200~9 600的所有可用波特率(假定fosc=6.0 MHz),如表1- 16所列。注意,如果使用表1- 16中的非标称波特率来进行通信,那么PC机程序就不能调用INT14H的功能0来初始化串行口波特率了,而只能采用下述子程序(以COMi为例),即直接往除法器送控制常数。

三、数据同步
  
  串行通信分同步和异步两种方式。尽管51单片机的串行口既可进行同步通信(方式0),又可进行异步通信(方式1~3),但IBM - PC机的串行口只有异步方式。在异步串行通信中,波特率的一致性是数据位同步的保证,而帧同步只能靠DSR/DTR和RTS/CTS等异步通信控制信号了。遗憾的是,51单片机串行口没有这些控制信号。因此,当51单片机与IBM - PC进行串行通信时,虽然波特率选择一致,能保证单个字节传输正确,但无法保证大块数据传输正确。例如,当PC机往单片机每次单独传送一字节时,51单片机都能正确接收,但连续传送一批数据时,由于单片机比PC机的指令处理速度低,PC机发送一字节后,单片机可能还没取走,PC机就发出下一字节了。这样就会导致大量数据被丢失。由此可见,在PC机与51单片机的串行通信中,数据帧(1帧-10或11位)同步也是一关键问题,下面介绍两种同步方法。
  
  1.硬件方法
  
  在图1- 32的基础上,借助于8031 P。口的其他位来模拟各异步通信控制信号。其连接方法如图1- 35所示。这样利用RTS/CTS和DSR/DTR就可方便地完成异步双向串行数据传输了。如果PC机程序不是通过调用INT14H,而是通过自己设计的一个子程序来完成收/发数据的,那么只要使用两组信号中任意一组,即可完成异步传输,这样又可省去两根连线。
  
  通过8031外部扩展一个异步通信控制器8251,也是一种行之有效的方法,只是那样做以后,硬件成本提高,软件控制也变得复杂了。

  2.软件方法
  
  一种很容易想到的软件方法就是“延时法”。例如,当PC机要往单片机发送一批数据时,每发一个字节,就延时一段时间,以便单片机能及时将刚收到的字节取走并处理完。这种做法的困难在于延时常数不好确定。一种改进方法就是,一方面发送方采取一定的延时,另一方面在发送一组(可以是一字节,也以可是若干字节)数据后,接收方应回答一个数据信号(不是控制信号!)。该信号既可表示接收到的数据正确与否,又可起同步作用。

四、多机通信

  51单片机的串行口在方式2(波特率固定)和方式3(波特率可变)时具有多机通信功能。这为组成多机控制系统提供了方便。IBM - PC微机的软、硬件资源相当丰富,特别是它的汉字图形功能,为用户提供了一个非常友好的界面。因此,目前大多数分布式控制系统均采用51单片机作前端控制器,IBM - PC作后台主机。这种控制系统对通信接口提出了新的要求:首先,1台PC机要带n台51单片机控制器.故其发送数据总线(TxD)必须具有较强大的负载能力;其次,n台单片机要往PC机传输数据,必须解决数据总线(RxD)竞争问题;最后,这种控制系统的通信距离一般比较远,环境也比较差,因此通信接口必须具有较强的抗干扰能力。显然,标准的RS - 232C接口难以满足这些要求。为此,必须采用一种新的串行通信标准——RS - 422A。在这种标准中,所有信号均采用平衡式差分传输。MC3486/3487是最常用的一种RS - 422A电平转换器,利用它构成的典型多机控制系统如图1- 36所示。图中,线接收器MC3486的所有控制端均接+5 V,即一直使能。单片机端线驱动器MC3487的控制端接P1.0平时应为低,只有在与PC机联系上须传送数据时才置高。如果PC机巡查各单片机,就可保证数据总线不发生竞争。PC机的3487控制端接RTS,平时为低,一旦发送数据就为高。注意,MC3486/3487的输入/输出是TTL电平,因此图中加了4只二极管箝位。此外,如果PC机RS - 232C上用的不是1489而是75154,那么3487的输出信号必须经过一个RS一232C电平转换器,才能接到PC机的RxD端。这种接口电路在波特率不太高时,传输距离可达几公里,而且由于两机地线不连在一起,因此有一定的隔离作用。

  在51单片机的串行口控制寄存器( SCON)中,有一个“地址监听”控制位SM2。当置SC2=1时,只有当接收到的串行数据的第9位RB8 =1时,才激发“接收数据有效”标志RI;而PC机发送数据时,可通过程序设置第9位奇校验(1)或偶校验(0)。利用这两点,对于图1- 36所示的多机系统.PC机就可方便地与N台单片机进行数据通信。假设PC机要从所有控制单片机巡回取一批数据,这时51单片机和PC机的程序框图如图1- 37所示。图中,PC机必须将串行数据格式设置成8个数据位+1位停止位,当附加奇校验位时,其控制常数(送3BFH寄存器)为2BH,偶校验则为3BH。发送数据时,如不调用INT14H,则要注意将RTS置成1,以便打开3487。由于是单片机往PC机传送大块数据,后者的处理速度高得多,因此不必采取帧同步措施;但为避免数据传输出错,可增加检错、纠错功能。


  
  本节中介绍的方法均已在“长途电话台记账号查询系统”、“分布式粮仓温湿度巡测系统”、“51单片机开发系统”和“远距离驱动器”中得到了实际应用。其效果良好,值得推广。


关键字:单片机  IBM-PC机  串行通信 引用地址:单片机与IBM-PC机的串行通信分析

上一篇:10KM远距多个单片机的主从方式串行通信分析
下一篇:IBM-PC/XT机与单片机通信系统的设计方案

推荐阅读最新更新时间:2024-03-16 15:55

发光二极管的特性
单片机中的高电平是+5V,低电平时0V 发光二极管: 压降是固定的 1.6v-1.7v; 电流也是固定的3mA -10mA;//电流太小,灯太暗,电流太暗,异常。 所以会通过串联电阻来使发光二极管的电压、电流满足条件。
[单片机]
基于51单片机的AD8080驱动程序
#include reg51.h #include intrins.h #define uchar unsigned char sbit P2_1=P2^1; //定义数码管位码端口 sbit P2_2=P2^2; sbit P2_3=P2^3; sbit OE=P3^0; //定义ADC0808端口 sbit EOC=P3^1; sbit ST=P3^2; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; uchar code leddata_dot ={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六个 uchar code le
[单片机]
PIC单片机-定时器的应用
一、利用定时器Timer0的定时功能,设计一个倒计时,显示在数码管上。 #include htc.h #define uint8 unsigned char #define uint16 unsigned int #define SCK_595 RA5 #define RCK_595 RE0 #define SER_595 RC0 __CONFIG(WDTDIS & LVPDIS & HS & PWRTDIS & BORDIS);//设置配置位 //WDTDIS:disable watchdog timer 看门狗禁止 //LVPDIS:low voltage programming disabled
[单片机]
51单片机之继电器实验
一、继电器(relay)的工作原理和特性 当输入量(如电压、电流、温度等)达到规定值时,使被控制的输出电路导通或断开的电器。可分为电气量(如电流、电压、频率、功率等)继电器及非电气量(如温度、压力、速度等)继电器两大类。具有动作快、工作稳定、使用寿命长、体积小等优点。广泛应用于电力保护、自动化、运动、遥控、测量和通信等装置中。 继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。 电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定
[单片机]
51<font color='red'>单片机</font>之继电器实验
51单片机的at24c02驱动程序
//////////////////////////////////////////////////////// 头文件 ///////////////////////////////////////////////////////////////////////////////////////// /****************************************************************************** * 标题: at24c02 e2prom驱动程序 * * 文件: at24c
[单片机]
实验8 舵机
舵机如上图所示,左图为9g舵机,右图为55g舵机,与直流减速电机不同,它的工作方式是根据脉冲宽度转到对应的角度,转角范围是180度。PWM波控制信号的脉冲宽度对应的舵机转角如下图所示。 舵机有一个三线的接口。脉冲信号端连接橙色线(或者黄色线),+4.8V~+6V电源连接红线接,地线连接绿色线(或者棕色线)。 舵机可用作机械手、人形机器人、六足机器人、码垛机器人的执行元件。 一、库函数 1、打开DAHUME MINI.stw文件; 2、在STVD左侧Workspace窗口Source Files目录下找到main.c,双击打开; 3、编写如下代码; #include main.h void s
[单片机]
实验8 舵机
STC12C2052AD单片机AD转换C语言程序的实现
功能:STC12C2052AD AD转换C程序 +PWM输出功能 成功使用。 应用:AD检测电压进行过欠压保护(继电器控制)+PWM把直流电压斩波成脉动直流。 板子功能:给手机电池充电。 降压用的LM317,小电流应用应该够了。没时间去买开关管,就用的9013开关。 图纸: //以下是成功了的程序。如果你需要应用在你自己的项目中,您只需要更改io就能直接应用了 //程序的完整版本下载地址:http://www.51hei.com/ziliao/file/stc12c2052adde.rar #include stc12c2052ad.h //stc 单片机 专用的头文件 #include int
[单片机]
STC12C2052AD<font color='red'>单片机</font>AD转换C语言程序的实现
单片机的FLASH引导装载系统设计
前言 DSP系统的引导装载是指在系统加电时,由DSP将一段存储在外部非易失性存储器中的代码移植到内部高速存储器单元并执行的过程。这种方式即可利用外部存储单元扩展DSP本身有限的ROM资源,又能充分发挥DSP内部资源的高速效能。因此,引导装载系统的性能直接关系到整个DSP系统的可靠性和处理速度,是DSP系统设计中必不可少的重要环节。在装载系统中,外部非易失性存储器和DSP的性能尤为重要。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统EPROM要低。为此,本文介绍了TMS320C6713浮点DSP芯片和SST公司提供的SST39VF400A FLASH存储器的基本特点,给出了使用该FLASH存储器设计
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved