1第6章80C51的串行口6.1计算机串行通信基础6.280C51的串行口6.3单片机串行口应用举例26.1计算机串行通信基础计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。并行通信是将数据字节的各位用多条数据线同时进行传送。接收设备发送设备询问应答101011008位同时传送并行通信控制简单、传输速度快,但不宜远距离传输。36.1计算机串行通信基础串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。46.1.1串行通信的基本原理1、异步(串行)通信与同步(串行)通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求各自的时钟尽可能一致。异步通信是以字符(构成的帧)为单位进行传输;字符与字符之间的时间间隔任意(字符之间异步);每个字符中的各位以固定的时间传送的(同一字符内的各位是同步的);111001100101001001发送设备接收设备10100100011110011001间隙任意56.1.1串行通信的基本原理异步通信的数据格式:异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要加2~3位附加位,各帧之间还有间隔,因此传输效率不高。66.1.1串行通信的基本原理同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步;传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系;发送方对接收方的同步可以通过两种方法实现:外同步自同步同步通信的特点传输效率较高,但实现的硬件设备比较复杂。76.1.1串行通信的基本原理2、串行通信的传输方向单工是指数据传输仅能沿一个方向,不能实现反向传输。半双工是指数据传输可以沿两个方向,但需要分时进行。全双工是指数据可以同时进行双向传输。单工半双工全双工86.1.1串行通信的基本原理3、信号的调制与解调数字信号不能直接在电话网上传输,必须将其转换成适合在电话网上传输的模拟信号;用调制器把数字信号转换成模拟信号后送到通信线路上去,再由解调器把从通信线路上收到的模拟信号转换成数字信号;将调制器和解调器合并在一个装置中,这就是调制解调器(MODEM)。96.1.1串行通信的基本原理4、串行通信的错误校验奇偶校验在发送数据时,在数据位末尾增加1位奇偶校验位;奇校验数据位和校验位中“1”的个数之和应为奇数;偶校验数据位和校验位中“1”的个数之和应为偶数;接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。只能发现错误,不能校正错误。106.1.1串行通信的基本原理代码和校验发送方将所发数据块求和,产生一个字节的校验和附加到数据块末尾,供接收方校验接收是否出错。只能发现错误,不能校正错误。循环冗余校验通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验。这种校验方法有较强的纠错能力。116.1.1串行通信的基本原理5、传输速率与传输距离传输速率比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:10位×240个/秒=2400bps波特率表示每秒钟调制信号变化的次数,单位是:波特(Baud)。波特率和比特率不总是相同的,对于将数字信号1或0直接用两种不同电压表示的所谓基带传输,比特率和波特率是相同的。126.1.1串行通信的基本原理传输距离与传输速率的关系串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关。提高传输速率的措施缩短传输距离采用平衡传输(RS-422、RS-485)136.1.2串行通信接口标准1、RS-232C接口是EIA(美国电子工业协会)1969年修订RS-232C标准。RS-232C定义了数据终端设备(DTE)与数据通信设备(DCE)之间的物理接口标准。机械特性25针及9针连接器(阳头)96512514131146.1.2串行通信接口标准功能特性156.1.2串行通信接口标准电气特性采用负逻辑逻辑1DC-3V~-15V逻辑0DC+3V~+15VRS-232C电平与TTL及CMOS电平不兼容MC1488TTL→RS-232C电平转换MC1489RS-232C→TTL电平转换MAX232RS-232C←→TTL电平转换芯片166.1.2串行通信接口标准过程特性过程特性规定了信号之间的时序关系,以便正确地接收和发送数据。远程通信RS-232C总线连接方法:计算机计算机MODEMMODEMTXDRXDRTSTXDRXDRTSDSR电话线DSR176.1.2串行通信接口标准远程通信RS-232C总线连接方式:计算机计算机MODEMMODEMTXDRXDRTSTXDRXDRTSDSR电话线DSR186.1.2串行通信接口标准近程通信RS-232C总线连接方式:计算机乙计算机甲TXDTXDRXDRXD计算机乙计算机甲TXDTXDRXDRXD4562045620方式一方式二196.1.2串行通信接口标准RS-232C电平与TTL电平转换驱动电路MC1488需±12V电源MAX232只需+5V电源,内置电子泵,将+5V转换成±12V,片内含两套发送/接收器。206.1.2串行通信接口标准采用RS-232C接口存在的问题传输距离短,速率低小于100m,低于20kbps。有电平偏移会在传输线上产生较大的电压降抗干扰能力差216.1.2串行通信接口标准2、RS-422A接口平衡型电压数字接口因采用差分方式可使干扰和噪声相互抵消,因此,RS-422接口的传输距离远,传输速率高。SN75174SN75175SN75174SN75175电平TTL电平TTL双向需4条线+5V+5V226.1.2串行通信接口标准3、RS-485接口RS-485是RS-422A的变型:RS-422A用于全双工RS-485用于半双工RS-485是一种多发送器标准,在通信线路上最多可以使用32对差分驱动器/接收器。如果在一个网络中连接的设备超过32个,还可以使用中继器;RS-485的信号传输采用两线间的电压来表示逻辑1和逻辑0。传输线采用差动信道,干扰抑制性极好;阻抗低,无接地问题,传输距离可达1200米,传输速率可达1Mbps。236.1.2串行通信接口标准RS-485是一点对多点的通信接口(总线结构),一般采用双绞线的结构。普通的PC机一般不带RS485接口,因此要使用RS-232C/RS-485转换器。单片机可通过芯片MAX485完成TTL/RS-485的电平转换。在计算机和单片机组成的RS-485通信系统中,下位机由单片机系统组成,上位机为PC机,负责监视下位机的运行状态,并对其状态信息进行集中处理,以图文方式显示下位机的工作状态以及工业现场被控设备的工作状况。系统中各节点(包括上位机)的识别是通过设置不同的地址来实现的。246.280C51的串行口6.2.180C51串行口的结构有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。≥1SBUF发送控制器接收控制器移位寄存器控制门TIRIATXDRXD去串口中断SMOD01TH1TL1÷2÷16SBUFT1溢出率256.2.280C51串行口的控制寄存器SCON是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:SM0和SM1为工作方式选择位,可选择四种工作方式:266.2.280C51串行口的控制寄存器SM2多机通信控制位,主要用于方式2和方式3。在方式0时,SM2必须是0在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1REN允许串行接收位REN=1,启动串行口接收数据REN=0,禁止接收TB8在方式2或方式3中,是发送数据的第九位可以用软件规定其作用:可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。276.2.280C51串行口的控制寄存器TI发送中断标志位。当发送完一字节数据时,由内部硬件使TI置1,向CPU发中断申请;在发送中断服务程序中,必须用软件将其清0;查询发送时,必须等待TI=1后,将其清0,再向SBUF写入新数据。RI接收中断标志位。当接收到一字节数据时,由内部硬件将RI置1,向CPU发中断申请。在中断或查询方式接收程序中,从SBUF中读取数据后,必须用软件将其清0。286.2.280C51串行口的控制寄存器PCON中只有一位SMOD与串行口工作有关:SMOD波特率倍增位。在串行口方式1、2、3时,波特率与SMOD有关:SMOD=1,波特率提高一倍。296.2.380C51串行口的工作方式方式0同步移位寄存器的输入输出方式同步移位脉冲由TXD(P3.1)脚输出数据由RXD(P3.0)脚输入或输出均为8位数据,低位在先,高位在后波特率固定为fosc/12,与SMOD位无关方式0接收和发送电路74LS164RXDTXDP1.080C51CLRCLKABGND74LS165RXDTXDP1.080C51S/LCLKQGND串入并出移位寄存器并入串出移位寄存器306.2.380C51串行口的工作方式方式110位数据的异步串行通信方式TXD为数据发送引脚RXD为数据接收引脚1位起始位,8位数据位,低位在先,高位在后316.2.380C51串行口的工作方式方式1输出:用指令将TI清0将数据写入SBUF,启动发送过程一帧数据发送完毕,中断标志IT被置1方式1的波特率由定时器T1的溢出率决定voidsend(unsignedcharc)//发送一字节数据{SBUF=c;while(TI==0);//等待发送完毕TI=0;}326.2.380C51串行口的工作方式方式1输入用软件置REN为1,允许接收器接收数据;接收到的数据自动装入接收SBUF,并置RI=1,向CPU请求中断;软件从SBUF中读取数据后,必须将RI清0。if(RI==1)//查询方式输入{c=SBUF;RI=0;};方式2、方式3(略)336.2.380C51串行口的工作方式波特率的计算在串行通信中,收发双方对通信的波特率要有约定方式0的波特率固定为fosc/12方式2的波特率有两种fosc/64(SMOD=0)或fosc/32(SMOD=1)方式1和方式3的波特率是可变的,由定时器T1的溢出率和SMOD共同决定:SMOD=0时波特率=T1溢出率/32SMOD=1时波特率=T1溢出率/16346.2.380C51串行口的工作方式当T1作为波特率发生器时,应使T1工作在自动再装入的8位定时器方式(即方式2,且TR1=1,以启动定时器)。此时溢出率取决于TH1中的计数值。T1溢出率=fosc/[12×(256-TH1)]比如,若单片机的晶振频率为11.0592MHz,TH1=0xFD,SMOD=0,此时T1溢出率=11.0592×106/[12×(256-253)]=307200Hz波特率=T1溢出率/32=307200/32=9600bps356.2.380C51串行口的工作方式串行口工作之前,应对其进行初始化,具体步骤如下:确定T1的工作方式(编程TMOD寄存器);计算T1的初值,同时装入TH1和TL1;启动T1(将TCON中的TR1位置1);确定串行口控制(编程SCON寄存器);若采用中断方式工作