1、学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 学习目标:学习目标:了解串行通信的基本知识了解串行通信的基本知识掌握串行口的工作方式掌握串行口的工作方式掌握波特率的设计掌握波特率的设计掌握串行口工作方式的应用掌握串行口工作方式的应用掌握程序调试的基本方法和技巧。掌握程序调试的基本方法和技巧。技能目标:技能目标:会对串行口进行初始化。会对串行口进行初始化。会计算串行口通信波特率。会计算串行口通信波特率。能够实现单片机与单片机之间、单片机和能够实现单片机与单片机之间、单片机和PCPC机机之间的通信。之间的通信。
2、学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 项目一项目一 单片机点对点通信单片机点对点通信第一部分第一部分 项目要求项目要求 利用利用AT89S52AT89S52实现单片机点对点通信。实现单片机点对点通信。要求将存放在甲机的数据存储器要求将存放在甲机的数据存储器20H27H20H27H单元中数据,首先在甲机上显示,然后发送单元中数据,首先在甲机上显示,然后发送到到PCPC机,进而再发送到乙机,以实现单片机,进而再发送到乙机,以实现单片机与机与PCPC机和单片机与单片机之间的通信。机和单片机与单片机之间的通信。学习情景五学习情景五 AT89S52AT89S52串行通信串行
3、通信 第二部分第二部分 相关知识相关知识一、串行通信基本知识一、串行通信基本知识(一)串行通信的基本概念(一)串行通信的基本概念单工单工形式:数据只能形式:数据只能单方向从一端向另一单方向从一端向另一端传送;如:有线电端传送;如:有线电视节目。视节目。发送端发送端接收端接收端数据线数据线地线地线半双工半双工形式:数据可以形式:数据可以双向传送,但任一时刻双向传送,但任一时刻只能向一个方向传送。只能向一个方向传送。既可分时双向传送数据既可分时双向传送数据。如:某些对讲机如:某些对讲机单工单工发送端发送端接收端接收端接收端接收端发送端发送端数据线数据线地线地线半双工半双工学习情景五学习情景五 AT
4、89S52AT89S52串行通信串行通信 全双工全双工形式:同时双向传送数据,因此,全双工配置形式:同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接收能力。和独立的发送和接收能力。通信效率最高,适合于计算机之间的通信。通信效率最高,适合于计算机之间的通信。发送端发送端接收端接收端接收端接收端发送端发送端数据线数据线地线地线全双工全双工数据线数据线学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 通信双方要正确的进行数据传输,需要解决何时通信双方要正确的进行数据传输,需要解决何时开始传
5、输、何时结束传输,以及数据传输速率等问题,开始传输、何时结束传输,以及数据传输速率等问题,这就是数据传输中的同步问题。这就是数据传输中的同步问题。通常,实现数据同步有两种方式:异步通信和同通常,实现数据同步有两种方式:异步通信和同步通信。步通信。1 1异步通信:异步通信:数据一帧一帧地传送。发送端和接收端可以由各数据一帧一帧地传送。发送端和接收端可以由各自的时钟控制数据的发送和接收,两个时钟源彼此独自的时钟控制数据的发送和接收,两个时钟源彼此独立,互不同步。立,互不同步。数据的一帧:由一个字符代码组成。数据的一帧:由一个字符代码组成。学习情景五学习情景五 AT89S52AT89S52串行通信串
6、行通信 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 帧格式帧格式:一个字符由四部分组成:起始位、数据位、:一个字符由四部分组成:起始位、数据位、奇偶校验位和停止位。奇偶校验位和停止位。起始位(起始位(0 0):位于字符帧的开头,位于字符帧的开头,占用一位,用来占用一位,用来通知接收设备一个待接收的字符开始到达。通知接收设备一个待接收的字符开始到达。数据位:数据位:紧跟起始位后,紧跟起始位后,5 58 8位位数据(规定低位在前,数据(规定低位在前,高位在后)高位在后)奇偶校验位奇偶校验位(可省略),(可省略),占一位,用于对字符传送作占一位,用于对字符传送作正确性检查,因
7、此奇偶校验位是可选择的,共有三种正确性检查,因此奇偶校验位是可选择的,共有三种可能,即奇偶校验、偶校验和无校验,由用户根据需可能,即奇偶校验、偶校验和无校验,由用户根据需要选定。要选定。停止位(停止位(1 1)停止位用来表征字符的结束。停止位可以停止位用来表征字符的结束。停止位可以是是1 1位、位、1.51.5位或位或2 2位。接收端收到停止位后,知道上一位。接收端收到停止位后,知道上一字符已传送完毕字符已传送完毕 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 2.同步通信同步通信 在一个数据块的开头使用同步字符。数据传送时使在一个数据块的开头使用同步字符。数据传送时使用
8、同一频率的脉冲来实现发送端与接收端的严格时间同用同一频率的脉冲来实现发送端与接收端的严格时间同步。步。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 二、串行通信总线标准及其接口二、串行通信总线标准及其接口传输距离不同,可以选择不同的总线标准。传输距离不同,可以选择不同的总线标准。89S5289S5289S5289S52如果是长距离传送,可采用如果是长距离传送,可采用RS-485RS-485标准。标准。短距离传送,短距离传送,只需要只需要TXTX、RXRX和和GNDGND三根线。三根线。距离在距离在1515米左右,采用米左右,采用RS-232RS-232标准接口。标准接口。
9、学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 (一)(一)RS-232RS-232标准标准 RS-232CRS-232C标准是美国标准是美国EIAEIA(电子工业联合会)(电子工业联合会)与与BELLBELL等公司一起开发的于等公司一起开发的于19691969年公布的通信协议。年公布的通信协议。1.1.RS-232CRS-232C的电气特性的电气特性(1)(1)数据线上的信号电平数据线上的信号电平 (2)(2)mark(mark(逻辑逻辑1)=-31)=-3-15V-15V space(space(逻辑逻辑0)=+30)=+3+15V+15V(2)(2)控制和状态线上的信
10、号电平控制和状态线上的信号电平 ON(ON(逻辑逻辑0)=+30)=+3+15V(+15V(接通接通)OFF(OFF(逻辑逻辑1)=-31)=-3-15V(-15V(断开断开)学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 l电平转换电平转换 RS-232CRS-232C接口采用双极性信号、公共地线和负逻接口采用双极性信号、公共地线和负逻辑;辑;不能不能和和TTLTTL电平直接相连,使用时必须进行电平电平直接相连,使用时必须进行电平转换,否则将使转换,否则将使TTLTTL电路烧坏,实际应用时必须注意!电路烧坏,实际应用时必须注意!在实际应用时,必须通过专用电平转换芯片进行电
11、平在实际应用时,必须通过专用电平转换芯片进行电平转换。转换。电平转换芯片电平转换芯片MC1488MC1488、MC1489MC1489、MAX232MAX232MC1488MC1488可实现可实现TTLRS-232TTLRS-232的电平转换;的电平转换;MC1489MC1489可实现可实现RS-232TTLRS-232TTL的电平转换。的电平转换。MAX232MAX232芯片可完成芯片可完成TTLTTL到到EIAEIA双向电平的转换双向电平的转换 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 89S5289S52通过通过MAX232MAX232实现实现RS-232CRS
12、-232C电平转换电平转换学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 TTLTTL到到EIAEIA电平的转换电平的转换 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 MAX232MAX232管脚说明如下:管脚说明如下:C1+C1+、C1-C1-、C2+C2+、C2-C2-是外接电容端;是外接电容端;R1INR1IN、R2INR2IN则是则是2 2路路RS-232CRS-232C电平信号接收输入端;电平信号接收输入端;R1OUTR1OUT、R2OUTR2OUT是是2 2路转换后的路转换后的TTLTTL电平接收信号输出电平接收信号输出端,送端,送80S
13、5280S52的的RxDRxD接收端;接收端;T1INT1IN、T2INT2IN是是2 2路路TTLTTL电平发送输入端,接电平发送输入端,接80S5280S52的的TxDTxD发送端;发送端;T1OUTT1OUT、T2OUTT2OUT是是2 2路转换后的发送路转换后的发送RS-232CRS-232C电平信电平信号输出端,接传输线;号输出端,接传输线;V+V+经电容接电源十经电容接电源十5V5V;V-V-经电容接地。经电容接地。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 PCPC机与机与AT89S52AT89S52单片机串行通信电路单片机串行通信电路 图中外接电解电容图
14、中外接电解电容C1C1、C2C2、C3C3、C4C4用于电源电压变换,用于电源电压变换,提高抗干扰能力,它们可以取相同数值电容提高抗干扰能力,它们可以取相同数值电容1.0 F/16 V1.0 F/16 V。电。电容容C5C5用于对用于对5 V5 V电源的噪声干扰进行滤波,其值一般为电源的噪声干扰进行滤波,其值一般为0.1 0.1 FFAT89S52TXDRXDGNDC1+C1-C2+C2-+C1C2T1inT1outR1inR1outV-GNDVCCV+MAX232+C3C5C4+5 VGNDTXDRS232RXDIBM-PC学习情景五学习情景五 AT89S52AT89S52串行通信串行通信
15、2.2.信号接口信号接口 引脚引脚信号信号名名功功 能能1 1DCDDCD载波检测载波检测2 2RXDRXD接收数据接收数据3 3TXDTXD发送数据发送数据4 4DTRDTR数据终端准备就数据终端准备就绪绪5 5GNDGND信号地线信号地线6 6DSRDSR数据准备完成数据准备完成7 7RTSRTS发送请求发送请求8 8CTSCTS发送清除发送清除9 9RIRI振铃指示振铃指示学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 (二)(二)AT89S52AT89S52串行口结构与控制串行口结构与控制1.1.串行口的结构串行口的结构学习情景五学习情景五 AT89S52AT89S
16、52串行通信串行通信 SM0SM0、SM1SM1:串行口工作方式控制位,两位对应串行口工作方式控制位,两位对应四种工作方式,如下表所示(四种工作方式,如下表所示(foscfosc是晶振频率)。是晶振频率)。2.2.串行口控制串行口控制(1 1)串行口控制寄存器)串行口控制寄存器SCON(98H)SCON(98H)位地址 9FH9EH9DH9CH9BH9AH99H98H位符号 SM0SM1SM2RENTB8RB8TIRI学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 SM2SM2:多机通信控制位,主要用于方式多机通信控制位,主要用于方式2 2和方式和方式3 3 当串行口以方式
17、当串行口以方式2 2或方式或方式3 3接收时,如接收时,如SM2=1SM2=1,则,则只有当接收到的第只有当接收到的第9 9位数据(位数据(RB8RB8)为)为1 1,才将接收到,才将接收到的前的前8 8位数据送入位数据送入SBUFSBUF,并置位,并置位RIRI产生中断请求,否产生中断请求,否则将接收到的前则将接收到的前8 8位数据丢弃。位数据丢弃。SM2=0SM2=0,不论第,不论第9 9位数据为位数据为0 0还是为还是为1 1,都将前,都将前8 8位数据装入位数据装入SBUFSBUF中,并产生中断申请。中,并产生中断申请。在方式在方式0 0时,时,SM2=0SM2=0。RENREN:允许
18、接收控制位允许接收控制位 REN=1REN=1,允许接收;,允许接收;REN=0REN=0,禁止接收。,禁止接收。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 TB8TB8:发送数据第发送数据第9 9位位方式方式0 0,此位未使用,此位未使用方式方式1 1,此位未使用,此位未使用方式方式2 2和方式和方式3 3:TB8=1TB8=1,说明该发送帧为地,说明该发送帧为地址帧。址帧。TB8=0TB8=0,说明该发送帧为数据帧,说明该发送帧为数据帧RB8RB8:接收数据第接收数据第9 9位位 方式方式2 2和方式和方式3 3:RB8RB8存放接收到的第存放接收到的第9 9位位数
19、据,代表接收数据的某种特征。数据,代表接收数据的某种特征。若若SM2=1SM2=1,RB8=1RB8=1,说明收到帧为地址帧。,说明收到帧为地址帧。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 TITI:发送中断标志发送中断标志 在一帧数据发送完时置位。在一帧数据发送完时置位。TI=1TI=1,申请,申请中断,中断被响应后,中断,中断被响应后,TITI不能自动清零,必须不能自动清零,必须由软件清零。由软件清零。RIRI:接收中断标志接收中断标志 在接收到一帧有效数据后,由硬件置位。在接收到一帧有效数据后,由硬件置位。RI=1RI=1,申请中断。,申请中断。RIRI不能自动
20、清零,必须由不能自动清零,必须由软件清零。软件清零。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 (2 2)电源控制寄存器)电源控制寄存器PCONPCONPCONPCON不能位寻址。不能位寻址。SMODSMOD串行口波特率的倍增位串行口波特率的倍增位当当SMOD=1SMOD=1时,串行口波特率加倍。时,串行口波特率加倍。系统复位时,系统复位时,SMODSMOD0 0。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 三、三、AT89S52AT89S52串行口工作方式串行口工作方式(一)串行口波特率设计(一)串行口波特率设计1.1.波特率波特率波特率的定义
21、波特率的定义是每秒钟传送二进制数码的位数是每秒钟传送二进制数码的位数(亦称比特数亦称比特数),单位是,单位是b/sb/s。假设假设数据传送速率是数据传送速率是120120字符字符/s/s,而每个字符,而每个字符格式包含格式包含1010个代码(个代码(1 1个起始位、个起始位、1 1个终止位、个终止位、8 8个数据位)。这时,传送的波特率为个数据位)。这时,传送的波特率为 (10b10b字符)字符)120120字符字符s=1200 bs=1200 bs s每一位每一位代码的传送时间代码的传送时间TdTd为为波特率的倒数波特率的倒数。学习情景五学习情景五 AT89S52AT89S52串行通信串行通
22、信 2.2.波特率设计波特率设计方式方式0 0波特率波特率方式方式0 0波特率波特率 =foscfosc 1212方式方式2 2波特率波特率方式方式2 2波特率波特率 =(2=(2SMODSMOD/64)/64)foscfoscSMODSMOD为为0 0时,波特率等于振荡器频率的时,波特率等于振荡器频率的1/641/64SMODSMOD为为1 1时,波特率等于振荡器频率的时,波特率等于振荡器频率的1/321/32。方式方式1 1和方式和方式3 3的波特率的波特率串行口方式串行口方式1 1和方式和方式3 3的波特率由定时器的波特率由定时器T1T1或或T2T2的的溢出率和溢出率和SMODSMOD所
23、确定。所确定。波特率波特率=2=2smodsmod3232(定时器(定时器1 1溢出率)溢出率)学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 例如例如振荡频率振荡频率foscfosc=11.0596MHZ=11.0596MHZ,若,若SMOD=0SMOD=0,通信波特率为通信波特率为96009600波特,则波特,则X=256X=25611.059611.059610106 6(1+0)/(9600(1+0)/(9600384)384)=253=FDH =253=FDH初始化程序如下:初始化程序如下:MOV TMODMOV TMOD,#20H#20H ;设;设T1T1为定时
24、方式为定时方式2 2MOV MOV THlTHl,#0FDH#0FDH ;设定波特率为;设定波特率为9600bit9600bits sMOV MOV TLlTLl,#0FDH#0FDHSETB SETB TRlTRl ;启动定时器;启动定时器MOV PCONMOV PCON,#00H#00H ;SMOD=0SMOD=0MOV SCONMOV SCON,#50H#50H ;串行口工作在方式;串行口工作在方式1 1学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 (二)串行口工作方式(二)串行口工作方式1.1.工作方式工作方式0 0当当SM0 SM0 SMlSMl=00=00时,
25、串行接口选择工作方式时,串行接口选择工作方式0 0,为同步移位寄存器输入,为同步移位寄存器输入/输出方式,常用输出方式,常用于扩展于扩展I/OI/O口。串行数据从口。串行数据从RXD(P3.0)RXD(P3.0)端输端输入或输出,同步移位脉冲由入或输出,同步移位脉冲由TXD(P3.1)TXD(P3.1)送出送出,作为外接部件的同步信号。发送或接收的是作为外接部件的同步信号。发送或接收的是8 8位数据位数据(低位在前,高位在后低位在前,高位在后)。其波特率固定其波特率固定为为fosc/12fosc/12。发送完置中断标志发送完置中断标志TITI为为1 1,请求中断。在,请求中断。在再次发送数据之
26、前,必须由软件清再次发送数据之前,必须由软件清TITI为为0 0。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 接收前置接收前置REN=1REN=1和和RI=0RI=0,当,当8 8位数据接收结束,位数据接收结束,RIRI被被置置“1 1”,可通过指令,可通过指令MOV AMOV A,SBUFSBUF将数据读入。将数据读入。下图采用一个串入并出移位寄存器,下图采用一个串入并出移位寄存器,TXDTXD连接串连接串行口输出移位寄存器行口输出移位寄存器164164的时钟端,的时钟端,RXDRXD连接连接164164的的输入端,输入端,P1.0P1.0连接连接164164的的CL
27、RCLR选通端。选通端。89S5274LS164学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 根据硬件连接,方式根据硬件连接,方式0 0发送数据程序如下:发送数据程序如下:SETB P1.0 SETB P1.0 ;选通;选通74LS16474LS164MOV SCONMOV SCON,#00H#00H;串口工作在方式;串口工作在方式0 0MOV AMOV A,#DATA#DATA MOV SBUFMOV SBUF,A A ;发送数据;发送数据JNB TIJNB TI,$;等待发送完?;等待发送完?CLR TI CLR TI ;清除;清除TITI中断标志中断标志CLR P1
28、.0 CLR P1.0 ;关闭;关闭74LS16474LS164学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 2.2.工作方式工作方式1 1工作方式工作方式1 1,SM0 SM0 SMlSMl=01=01,为可变波特率的,为可变波特率的8 8位异位异步通信方式。步通信方式。发送数据由发送数据由TXDTXD端输出,接收数据由端输出,接收数据由RXDRXD端输入。端输入。方式方式1 1以以1010位为一帧传输,设有位为一帧传输,设有1 1个起始位个起始位(0)(0),8 8个数据位和个数据位和1 1个停止位个停止位(1)(1)。其帧格式起始位(。其帧格式起始位(0 0),),
29、8 8个数据位和个数据位和1 1个停止位(个停止位(1 1)。)。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 发送时,数据从发送时,数据从TXDTXD端输出,当数据写入发送端输出,当数据写入发送缓冲器缓冲器SBUFSBUF后,启动发送器发送。当发送完一帧后,启动发送器发送。当发送完一帧数据后,置中断标志数据后,置中断标志TITI为为1 1。方式。方式1 1所传送的波特率所传送的波特率取决于定时器取决于定时器1 1的溢出率和的溢出率和PCONPCON中的中的SMODSMOD位。位。接收时,由接收时,由RENREN置置1 1,允许接收,串行口采样,允许接收,串行口采样RXD
30、RXD,当采样由,当采样由1 1到到0 0跳变时,确认是起始位跳变时,确认是起始位“0”0”,开始接收一帧数据。当开始接收一帧数据。当RI=0RI=0,且停止位为,且停止位为1 1或或SM2=0SM2=0时,停止位进入时,停止位进入RB8RB8位,同时置中断标志位,同时置中断标志RIRI;否则信息将丢失。所以,方式;否则信息将丢失。所以,方式1 1接收时,应先用接收时,应先用软件清除软件清除RIRI或或SM2SM2标志。标志。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 【例例5.15.1】89S5289S52串行口按双工方式收发串行口按双工方式收发ASCIIASCII字
31、字符,甲机发送的字符从外部符,甲机发送的字符从外部RAMRAM的的1000H1000H开始,检开始,检测到结束字符测到结束字符0AH0AH就结束发送,乙机将接收的字符就结束发送,乙机将接收的字符放在内部放在内部RAMRAM的的30H30H开始的空间。要求通信的波特开始的空间。要求通信的波特率为率为96009600波特,用中断方式编写通信程序。波特,用中断方式编写通信程序。主程序:主程序:MOV TMODMOV TMOD,#20H#20H ;定时器;定时器1 1设为工作方式设为工作方式2 2 MOV MOV TLlTLl,#0FDH#0FDH ;定时器初值;定时器初值 MOV MOV THlTH
32、l,#0FDH#0FDH ;8 8位重装值位重装值学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 SETB SETB TRlTRl ;启动定时器;启动定时器1 1 MOV SCONMOV SCON,#50H#50H;将串行口设置为方式;将串行口设置为方式1 1,REN=l REN=l MOV DPTRMOV DPTR,#1000H#1000H;发送数据区首址送;发送数据区首址送 DPTR DPTR MOV R0,#30H MOV R0,#30H ;接收数据区首址送;接收数据区首址送R0R0SETB ES SETB ES SETB SETB EA EA ;开中断;开中断ACA
33、LL ACALL SEND SEND ;先发送一个字符;先发送一个字符 L00PL00P:SJMP$SJMP$;等待中断;等待中断学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 发送子程序发送子程序SENDSEND:CLR TI CLR TI MOV MOVA A,DPTR DPTR ;取发送数据到;取发送数据到A A INC INC DPTR DPTR ;修改发送数据指针;修改发送数据指针 MOV MOV SBUF,A SBUF,A ;发送;发送ASCIIASCII码码 CJNE CJNE A A,#0AH#0AH,SEN1 SEN1 ;是否是结束字符;是否是结束字符 C
34、LR ES CLR ES ;关闭串口中断;关闭串口中断SEN1SEN1:RET RET ;返回;返回学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 中断服务程序中断服务程序 ORG 0023H ORG 0023H ;串行口中断入口;串行口中断入口 AJMP RSI AJMP RSI ;转至中断服务程序;转至中断服务程序 ORG 0100HORG 0100HRSIRSI:JNB RI,SEN JNB RI,SEN;TI=1TI=1,为发送中断,为发送中断 ACALL REV ACALL REV ;RI=1RI=1,为接收中断,为接收中断 SJMP NEXT SJMP NEXT
35、 ;转至统一的出口;转至统一的出口SENSEN:ACALL SEND ACALL SEND ;调用发送子程序;调用发送子程序NEXTNEXT:RETI RETI ;中断返回;中断返回学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 接收子程序接收子程序REVREV:CLR RI CLR RI MOV A,SBUF MOV A,SBUF ;读出接收缓冲区内容;读出接收缓冲区内容 MOV R0,A MOV R0,A;读入接收缓冲区;读入接收缓冲区 INC R0 INC R0 ;修改接收数据指针;修改接收数据指针 CJNE ACJNE A,#0AH#0AH,RES RES ;是否是
36、结束字符;是否是结束字符 CLR ES CLR ES ;关闭串口中断;关闭串口中断RESRES:RET RET ;返回;返回学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 3.3.工作方式工作方式2 2SM1 SM0=10SM1 SM0=10,串行接口选择工作方式,串行接口选择工作方式2 2。方式方式2 2是是1111位异步通信方式,每帧数据由位异步通信方式,每帧数据由1 1个个起始位起始位“0 0”、9 9个数据位和个数据位和1 1个停止位个停止位“1 1”共共1111构成。其中发送的第构成。其中发送的第9 9位由位由SCONSCON的的TB8TB8提提供,接收的第供,接
37、收的第9 9位存在位存在SCONSCON的的RB8RB8位。其波位。其波特率是固定的为特率是固定的为fosc/32fosc/32或或fosc/64fosc/64。方式方式2 2发送:发送:CPUCPU执行一条写入执行一条写入SBUFSBUF的指令的指令就启动串行口的发送,并把就启动串行口的发送,并把TB8TB8的内容装入发的内容装入发送寄存器的第送寄存器的第9 9位。首先发送起始位位。首先发送起始位0 0,此后每,此后每经过一个时钟周期产生一个移位脉冲,并且由经过一个时钟周期产生一个移位脉冲,并且由TXDTXD输出一个数据位,当输出一个数据位,当1111位数据全部发送后,位数据全部发送后,使使
38、TITI置置1 1。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 方式2接收:接收过程和方式1类似,当REN=1时,允许串行口接收数据。数据由RXD端输入,接收11位数据。在方式2的接收中,若RI=0,SM2=0或接收到的第9位数据为1,成立则RI=1,8位数据进入SBUF,第九位进入RB8。若不满足上述两个条件则接收到的信息将丢失,不再恢复,也不置位RI。【例5.2】设计一个发送程序,将片内RAM30H3FH中的数据串行发送,串行口设定为方式2状态,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时第9位数据作奇偶校验用。学习情景五学习情景
39、五 AT89S52AT89S52串行通信串行通信 程序清单如下:程序清单如下:TRTTRT:MOV SCONMOV SCON,80H 80H ;方式;方式2 2设定设定 MOV PCONMOV PCON,80H 80H ;取波特率为;取波特率为fosc/32fosc/32 MOV R0 MOV R0,30H30H MOV R7 MOV R7,10H 10H ;数据长度;数据长度10H10HLOOPLOOP:MOV AMOV A,R0 R0 ;取数据送;取数据送A A MOV C MOV C,PSW.0PSW.0;MOV TB8MOV TB8,C C MOV SBUF MOV SBUF,A A
40、;数据送;数据送SBUFSBUF,启动发,启动发送送WAITWAIT:JBC TIJBC TI,CONT CONT ;判断发送结束否;判断发送结束否 SJMP WAITSJMP WAITCONTCONT:INC R0INC R0 DJNZ R7 DJNZ R7,LOOPLOOP RET RET学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 四、串行口通信应用举例四、串行口通信应用举例(一)双机通信应用举例(一)双机通信应用举例1.1.通信双方的协议通信双方的协议(1)(1)通信双方的波特率均为通信双方的波特率均为96009600波特,均工作在串口方式波特,均工作在串口方式1
41、 1。甲。甲机发送,乙机接收。机发送,乙机接收。(2)(2)甲机开始发送时,先发一个呼叫信号甲机开始发送时,先发一个呼叫信号“0FH0FH”,乙机接收后,乙机接收后,若同意接收数据就发一个应答信号若同意接收数据就发一个应答信号“01H01H”。(3)(3)当甲机接到当甲机接到“01H01H”后,开始发送数据。假设发送的数据块后,开始发送数据。假设发送的数据块首地址是片内首地址是片内RAM 40HRAM 40H,数据块长度,数据块长度64H64H。数据块发送结。数据块发送结束后,发送累加校验和。累加校验和是指数据块中每个字节束后,发送累加校验和。累加校验和是指数据块中每个字节的算术累加和。的算术
42、累加和。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 (4)(4)乙机接收数据并存在数据缓冲区。假设乙机接收数据并存在数据缓冲区。假设数据缓冲区的首地址是片内数据缓冲区的首地址是片内RAM 40HRAM 40H。乙机在接收过程中对接收的数据块也作算乙机在接收过程中对接收的数据块也作算术累加和,并与甲机发送的累加和作比较,术累加和,并与甲机发送的累加和作比较,若相等则表示接收正确,给甲机发若相等则表示接收正确,给甲机发“00H00H”;若不等则表示接收不正确,给;若不等则表示接收不正确,给甲机发甲机发“FFHFFH”,请求重发。,请求重发。(5)(5)甲机收到甲机收到“00
43、H00H”后,结束发送,否则后,结束发送,否则将数据重发一次。将数据重发一次。学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 2 2查询方式下的通信程序查询方式下的通信程序甲机发送子程序:甲机发送子程序:ATXATX:MOV TMODMOV TMOD,#20H#20H ;设;设T1T1为定时方式为定时方式2 2 MOV MOV THlTHl,#0FDH#0FDH ;设定波特率为;设定波特率为9600bit9600bits s MOV MOV TLlTLl,#0FDH#0FDH MOV PCON MOV PCON,#00H#00H SETB SETB TRlTRl ;启动定时
44、器;启动定时器T1T1 MOV SCON MOV SCON,#50H#50H ;串行口初始化;串行口初始化ATXlATXl:MOV AMOV A,#0FH#0FH ;发送呼叫信号;发送呼叫信号 MOV SUBFMOV SUBF,A AATWlATWl:JBC TIJBC TI,ATRlATRl SJMP SJMP ATWlATWl ;等待发送出去;等待发送出去ATR1ATR1:JBC RIJBC RI,ATR2 ATR2 ;等待乙机应答;等待乙机应答 SJMP SJMP ATRlATRl学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 ATR2ATR2:MOV MOV A A
45、,SBUF SBUF ;接收应答信号;接收应答信号 XRL XRL A A,#01H#01H JNZ JNZ ATX1ATX1;乙机未准备好,继续呼叫;乙机未准备好,继续呼叫ATX2ATX2:MOV MOV R0R0,#40H#40H;数据块首地址送;数据块首地址送R0R0 MOV MOV R2R2,#64H#64H ;数据块长度送;数据块长度送R2R2 MOV MOV R3 R3,#00H#00H ;清校验和寄存器;清校验和寄存器ATX3ATX3:MOV MOV A A,R0 R0 ;发送一个数据字节;发送一个数据字节 MOV MOV SBUFSBUF,A A MOV MOV A A,R3R
46、3 ADD ADD A A,R0 R0 ;求校验和;求校验和 MOV MOV R3R3,A A INC INC R0 R0 ;修改地址指针;修改地址指针 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 ATW2ATW2:JBC TIJBC TI,ATX4ATX4 SJMP ATW2 SJMP ATW2ATX4ATX4:DJNZ R2DJNZ R2,ATX3ATX3;判数据块发送完否;判数据块发送完否 MOV MOV A A,R3 R3 ;发送校验和;发送校验和 MOV MOV SBUFSBUF,A A ATW3ATW3:JBC JBC TITI,ATR3ATR3 SJMP
47、ATW3 SJMP ATW3ATR3ATR3:JBC JBC RIRI,ATR4 ATR4;等待乙机应答;等待乙机应答 SJMP ATR3SJMP ATR3ATR4ATR4:MOV MOV A A,SBUFSBUF JNZ ATX2 JNZ ATX2;若乙机回答出错,则重发;若乙机回答出错,则重发 RETRET 学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 接收子程序:接收子程序:BRXDBRXD:MOV TMODMOV TMOD,#20H#20H ;设;设T1T1为定时方式为定时方式2 2 MOV MOV THlTHl,#0FDH#0FDH ;设定波特率为;设定波特率为
48、9600bit9600bits s MOV MOV TLlTLl,#0FDH#0FDH MOV PCON MOV PCON,#00H#00H SETB SETB TRlTRl ;启动定时器;启动定时器T1T1 MOV SCON MOV SCON,#50H#50H ;串行口设为方式;串行口设为方式1 1BRXlBRXl:JBC RIJBC RI,BRX2 BRX2 ;等待甲机呼叫信号;等待甲机呼叫信号 SJMP SJMP BRXlBRXlBRX2BRX2:MOV AMOV A,SBUFSBUF XRL A XRL A,#0FH#0FH JNZ JNZ BRXlBRXl ;判呼叫信号是否正确;判呼
49、叫信号是否正确BTXlBTXl:MOV AMOV A,#01 H#01 H ;发应答信号;发应答信号 MOV SBUFMOV SBUF,A A学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 BWlBWl:JBC TIJBC TI,BRX3BRX3 SJMP SJMP BWlBWlBRX3BRX3:MOV R0MOV R0,#40H#40H;R0R0指向接收数据缓冲区首址指向接收数据缓冲区首址 MOV R2MOV R2,#64H#64H ;数据块长度送;数据块长度送R2R2 MOV R3 MOV R3,#00H#00H ;校验和单元清零;校验和单元清零BRX4BRX4:JBC
50、 RIJBC RI,BRX5BRX5 SJMP BRX4 SJMP BRX4BRX5BRX5:MOV AMOV A,SBUFSBUF MOV R0 MOV R0,A A ;接收的数据转存;接收的数据转存 INC R0INC R0 ADD A ADD A,R3 R3 ;求校验和;求校验和 MOV R3MOV R3,A A DJNZ R2 DJNZ R2,BRX4 BRX4 ;判数据块接收完否;判数据块接收完否BW2BW2:JBC RIJBC RI,BRX6 BRX6 ;接收甲机校验和;接收甲机校验和学习情景五学习情景五 AT89S52AT89S52串行通信串行通信 SJMP BW2SJMP BW