1、第八章第八章 AT89C51串行通信及其应用串行通信及其应用8.1 串行通信概述串行通信概述8.1.1 并行通信和串行通信8.1.2 异步通信和同步通信8.1.3 单片机串行通信传输方式8.1.4 串行数据通信的传输速率8.2 AT89C51串行口串行口8.2.1 AT89C51串行口的结构8.2.2 AT89C51串行口控制寄存器8.2.3 AT89C51串行口的工作方式及波特率计算8.3 串行通信协议串行通信协议8.3.1 RS-232协议8.3.2 RS-485/422A协议8.3.3串行通信的数据校验8.4 串行通讯的应用串行通讯的应用8.1.1 并行通信和串行通信并行通信和串行通信计
2、算机与外界的信息交换称为通信,通常有并行和串行两种通信方法。并行通信:所传送数据的各位同时发送或接收。串行通信:所传送数据的各位按顺序一位一位地发送或接收。8.1.2 异步通信和同步通信异步通信和同步通信串行通信的通信方式串行通信的通信方式异步通信 同步通信 1异步通信的数据传送异步通信的数据传送 异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。传送用一个起始位表示字符的开始,用停止位表示字符的结束。8.1.2 异步通信和同步通信异步通信和同步通信起始位起始位:发送器是通过发送起始位而开始一个字符的传送。数据位数据位:串行通信中所要传送的数据内容。在数据位中,低位在前,高
3、位在后。数据位通常是8位。校验位校验位:用于对字符传送作正确性检查,因此校验位是可以省略的。停止位停止位:一个字符传送结束的标志,停止位在一帧数据的最后。停止位可能是1、1.5或2位,在实际应用中根据需要确定。位时间位时间:一个格式位的时间宽度。帧(帧(frame):从起始位开始到停止位结束的全部内容称之为一帧,帧是一个字符的完整通信格式,因此也就把串行通信的字符格式称之为帧格式。8.1.2 异步通信和同步通信异步通信和同步通信2同步通信的数据传送同步通信的数据传送 同步数据传送时,发送端和接收端必须使用同一时钟源才能保证它们之间的准确同步,因此发送方除了传送数据外,还要同时传送时钟信号。8.
4、1.3 串行通信传输方式串行通信传输方式串行通信的传输方式串行通信的传输方式单工制式 半双工制式 全双工制式 1单工(Simplex)制式 8.1.3 串行通信传输方式串行通信传输方式2半双工(Half Duplex)制式3全双工(Full Duplex)制式8.1.4 串行通信的传输速率串行通信的传输速率 波特率波特率bps(Bit per second)是数据传送的速率,其定义是每秒钟传送的二进制数的位数。波特率的倒数即为每位传输所需要的时间。则:1波特率(Bit per second)=1位/秒(1 bit/s)数据传送的速率是120字符/s,若每个字符为10位的二进制数,则传送波特率为
5、 1200 波特率。例如:例如:8.2.1 AT89C51串行口的结构串行口的结构AT89C51片内有一个全双工的串行通讯接口。由发送缓冲寄存器SBUF、接收缓冲寄存器SBUF和移位寄存器三部分构成。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器 1串行数据缓冲寄存器SBUFSBUF是串行数据缓冲寄存器。在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器。它们有相同名字和单元地址,但它们不会出现冲突,因为在物理上,SBUF有两个:一个只能被CPU读出数据(接收寄存器),一个只能被CPU写入数据(发送寄存器)。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器 2
6、串行控制寄存器SCON它用于定义串行口的工作方式及实施接收和发送控制。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器 SM0、SM1工作方式功能描述波特率0 0方式08位移位寄存器fosc/120 1方式110位UART可变1 0方式211位UARTfosc/64或fosc/321 1方式311位UART可变(1)SM0、SM1:串行口工作方式控制位,其定义如表8-2所示:(2)SM2:多机通信控制位。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器(4)TB8:方式2和方式3中,要发送的第9位数据。(5)RB8:方式2和方式3中,要接收的第9位数据。(3)REN:允许接
7、收位。REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。该位由软件置位或复位。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器(6)TI:发送中断标志位。可寻址标志位。方式0时,发送完第8位数据后,该位由硬件置位;其它方式下,在发送停止位之前由硬件置位,因此,TI=1表示帧发送结束,可由软件查询TI位标志,也可以请求中断。TI必须由软件清必须由软件清0。(7)RI:接收中断标志位。可寻址标志位。方式0时,接收完第8位数据后,该位由硬件置位;在其他工作方式下,当接收到停止位时,该位由硬件置位,RI=1表示帧接收完成,可由软件查询RI位标志,也可以请求中
8、断。RI必须由软件清必须由软件清0。8.2.2 AT89C51串行口控制寄存器串行口控制寄存器 3电源管理寄存器PCON8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 1工作方式08位移位寄存器输入/输出方式。多用于外接移位寄存器以扩展I/O端口 8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 2工作方式1 方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。D0D1D2D3D4D5D6D71D0D11D700第n1字符帧第n字符帧8位数据起始位停止位输出:当CPU执行一条指令将数据写入发送
9、缓冲SBUF时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认开始位0,就开始接收一帧数据。在方式1接收时,应先用软件清零RI和SM2标志。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 2工作方式1波特率计算:3212SMOD的溢出率)(定时器波特率T SMOD是控制寄存器PCON中的一位控制位,其取值有0和1两种状态。显然,当SMOD0时,波特率(定时器T1溢出率)/32,而当SMOD1时,波特率(定时器T1溢出率)/16。定时器的溢出率,就是指定时器一秒钟内的溢
10、出次数。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 定时初值计算:当定时/计数器T1用作波特率发生器时,通常选用定时初值自动重装的工作方式2,从而避免了通过程序反复装入计数初值而引起的定时误差,使得波特率更加稳定。波特率初值123222561SMODoscfT8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 例8-1:已知fosc=12MHz,SMOD=1,波特率=2400 bit/s,求串行方式1时T1定时初值。并说明由此产生的实际波特率是否有误差,为什么?波特率初值123222561SMODoscfT解:根据 HET6958.229042.
11、262562400121012322256611初值若fosc=11.0592MHz,其余条件不变,则T1定时初值为:HET823224256240012100592.11322256161初值8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 当时钟频率选用11.0592MHZ时,很容易获得标准的波特率,所以很多单片机系统选用此数值的晶振。使用T1设置常用的波特率参见表8-4。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 例8-2:设89C51单片机串行口工作于方式1,已知fosc=11.0592MHz,定时器T1作为波特率发生器,要求波特率=2
12、400bit/s,SMOD=1,开放中断,试编写初始化程序。根据题目要求,首先计算T1定时器的初值(可以直接利用例8-1的计算过程)。然后利用TMOD寄存器,将T1设置为工作方式2(注意:这里是T1的工作方式,而不是串行口的工作方式)。再将PCON寄存器的SMOD设置为1,然后TH1寄存器加载E8H,最后启动T1,开放中断,即可产生2400bit/s的波特率。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 采用汇编语言程序设计:MOVTMOD,#20H;T1设置为工作方式2MOVTL1,#0E8H;T1定时器初值MOVTH1,#0E8H;T1定时器重装初值MOVPCON
13、,#80H;SMOD设置为1MOVSCON,#40H;串行口方式1SETBTR1;T1启动SETBES;开串口中断SETBEA;开总中断8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 采用C51语言程序设计:程序如下:void serial_init(void)TMOD=0 x20;/T1设置为工作方式设置为工作方式2TL1=0 xE8;/T1定时器初值定时器初值TH1=0 xE8;/T1定时器重装初值定时器重装初值PCON=0 x80;/SMOD设置为设置为1SCON=0 x40;/串行口方式串行口方式1TR1=1;/T1启动启动ES=1;/开串口中断开串口中断EA=
14、1;/开总中断开总中断8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 3工作方式2D0D1D2D3D4D5D6D70/1D0D110/1100第n1字符帧第n字符帧8位数据起始位停止位奇偶校验 方式2为11位异步通信方式。其中,1个起始位(0),8个数据位(由低位到高位),1个附加的第9位和1个停止位(1)。发送数据时,第9位数据来自发送机SCON中的TB8,这可使用如下指令完成:SETB TB8 ;TB8位置“1”CLR TB8 ;TB8位置“0”8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 3工作方式2642SMODoscf波特率方式2的波
15、特率是固定的,而且有两种。由此公式可知,当SMOD为0时,波特率为fosc/64,当SMOD为1时,波特率为fosc/32。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 4工作方式33212SMOD的溢出率)(定时器波特率T方式3和方式2除波特率不同外,其它性能完全相同。8.2.3 AT89C51串行口工作方式及波特率串行口工作方式及波特率 8.3 串行通信协议串行通信协议 8.3.1 RS-232协议协议 RS-232是目前被广泛使用的异步串行数字通信电气标准,由美国电子工业协会EIA(Electronics Industry Association)于1962年公
16、布,1969年最后修订而成,RS(Recommended Standard)表明它是一种被推荐的标准。1RS-232协议简介 8.3 串行通信协议串行通信协议 8.3 串行通信协议串行通信协议 3电气特性 RS-232协议规定最大的通信速度为20Kb/s,现在已经出现高达2Mb/s速率的基于RS-232的通信系统。作为单片机系统,由于其处理能力有限,工作频率不是很高,一般可实现的最高波特率在112Kb/s左右。RS-232协议规定最长的通信距离是15m,目前市售的长线驱动器已经可以将通信距离延长到数千米。8.3 串行通信协议串行通信协议 4TTL电平与RS-232电平的转换 EIA-RS-23
17、2C电平:逻辑1 3-15v逻辑0 +3+15vTTL电平:逻辑1 +2.7+5v逻辑0 0v+0.5v 单电源电平转换芯片:MAXIM公司的MAX232芯片等。8.3 串行通信协议串行通信协议 5单片机通过RS-232与PC机组成点对点通信例8-3:设89C51单片机串行口工作于方式1,已知fosc=11.0592MHz,定时器T1作为波特率发生器,要求波特率=9600bit/s,SMOD=0,若和PC机串口通过RS-232总线连接,试编写串口接收字符中断子程序,接收到的字符存入40H单元。根据题目要求,编写串口接收字符中断子程序。(假设单片机的初始化设置已经参照例8-2设置完成)。ORG0
18、023H;串行口中断入口串行口中断入口LJMPSERIALSERIAL:JNBRI,SERIAL_RET;若无接收标志,则中断返回若无接收标志,则中断返回MOV40H,SBUF;接收到的字符存入接收到的字符存入40H单元单元CLRRI;清除接收标志清除接收标志SERIAL_RET:RETI;中断子程序返回中断子程序返回采用汇编语言程序设计:采用C51语言程序设计:程序如下:unsigned char data rcv_data _at_ 0 x40;void serial(void)interrupt 4 using 2 /串行口中断串行口中断unsigned char c;if(RI)c=S
19、BUF;rcv_data=c;RI=0;8.3 串行通信协议串行通信协议 8.3.2 RS-485/422A协议协议 RS-422A通信标准是EIA(Electronic Industry Association)公布的“平衡电压数字接口电路的电气特性”标准。RS-422A总线信号传输速率最大为10Mb/s;在此速率下电缆允许长度为120m。在单片机系统中要实现RS-485通信,中间必须插入一个电平和逻辑转换环节。RS-485最大的优点在于它的多点总线互连功能。单片机与RS-485接口 规定:A与B压差高于200mV为逻辑1。A与B压差低于200mV为逻辑0。RS-485接口标准芯片:MAXI
20、M公司的MAX485芯片等。多单片机通过多单片机通过RS-485组成多点网络结构组成多点网络结构 8.3 串行通信协议串行通信协议 8.3.3 串行通信的数据效验串行通信的数据效验在设计通信协议时,应该考虑数据的纠错,为了防止错误所带来的影响,一般在通信时采取数据校验的方法。常用的数据校验方法有:奇偶校验累加和校验循环冗余码校验(CRC校验)8.3 串行通信协议串行通信协议 8.4 串行通讯的应用串行通讯的应用例8-4:试以串行方式1设计一个双机通信系统。已知fosc=11.0592MHz,波特率=9600bit/s,SMOD=0。甲机发送的16个数据存在内部RAM 中,乙机接收后存在内部RAM 中。波特率初值123222561SMODoscfTFDHT2533256960012100592.11322256160初值解:串行方式1的波特率取决于T1溢出率,首先计算T1定时初值,根据将以上各值代入:程序参见教材(略)。程序参见教材(略)。