串行接口及其串行通信.ppt
15.4 MCS-51单片机的串行接口及其串行通信单片机的串行接口及其串行通信5.4.1串行数据通信基础串行数据通信基础5.4.2MCS-51串行口及控制寄存器串行口及控制寄存器5.4.3MCS-51串行通信工作方式及应用串行通信工作方式及应用习题习题:6,9,10,15*25.4.1 串行数据通信基础一、数据通信的概念一、数据通信的概念计算机与计算机或外部设备之间的数据传送计算机与计算机或外部设备之间的数据传送数据通信数据通信 并行并行数据通信数据通信同步同步串行串行异步异步35.4.1 串行数据通信基础并并 行行 数数 据据 传传 送送串串 行行 数数 据据 传传 送送原原 理理各数据位同时传送各数据位同时传送数据位按位顺序进行数据位按位顺序进行优优 点点传送速度快、效率高传送速度快、效率高最少只需一根传输线即可完成:成本低最少只需一根传输线即可完成:成本低缺缺 点点数据位数数据位数传输线根数:成本高传输线根数:成本高速度慢速度慢应应 用用传送距离传送距离30米,用于计算机内部米,用于计算机内部几米几千公里,用于计算机与外设之间几米几千公里,用于计算机与外设之间45.4.1 串行数据通信基础二、串行通信的基本方式二、串行通信的基本方式(一一)异步通信异步通信以字符为传送单位以字符为传送单位,用用起始位起始位和和停止位停止位标识标识每每个字符的个字符的开始开始和和结束字结束字符符,间隔不固定,只需字,间隔不固定,只需字符传送时同步即可。符传送时同步即可。异步通信常用格式:字符帧异步通信常用格式:字符帧D0D1D2D3D4D5D6D7停止位停止位起始位起始位55.4.1 串行数据通信基础异步通信的双方需要两项约定:异步通信的双方需要两项约定:1.1.字符格式:字符格式:一帧字符位数的规定:数据位,校验位,起始位一帧字符位数的规定:数据位,校验位,起始位和停止位。和停止位。2.2.波特率波特率(位位/秒秒)和传送速率的规定:和传送速率的规定:例:例:要求每秒传送要求每秒传送120120个字符,每帧为个字符,每帧为1010位(数据位(数据8 8位)。位)。解:解:B=12010=1200B=12010=1200波特波特 每位每位0.83ms0.83ms 数据位数据位传送速率传送速率=1208=960=1208=960位位/秒秒帧帧图图5 15 异步串行通信的字符格式异步串行通信的字符格式起起始始位位数数据据位位0(n 1)位位奇奇偶偶位位停停止止位位起起始始位位位时间位时间65.4.1 串行数据通信基础(二二)同步通信方式同步通信方式同步字符1同步字符2数据Td 图5.2 同步通信的格式在同步通信中,以一串字符为一个传送单位,字符间不加在同步通信中,以一串字符为一个传送单位,字符间不加标识位,标识位,在一串字符开始在一串字符开始用同步字符标识用同步字符标识。如果发送的数据。如果发送的数据块之间有时间间隔,则发送同步字符填充,使发送和接收双块之间有时间间隔,则发送同步字符填充,使发送和接收双方同步方同步。75.4.1 串行数据通信基础三、串行接口功能:三、串行接口功能:(1 1)发送器:并)发送器:并串数据格式转换,添加标识位和串数据格式转换,添加标识位和校验位,一帧发送结束,设置结束标志,申请中校验位,一帧发送结束,设置结束标志,申请中断。断。(2 2)接收器:串)接收器:串并数据格式转换,检查错误,去并数据格式转换,检查错误,去掉标识位,保存有效数据,设置接收结束标志,掉标识位,保存有效数据,设置接收结束标志,申请中断。申请中断。(3 3)控制器:接收编程命令和控制参数,设置工作)控制器:接收编程命令和控制参数,设置工作方式:同步方式:同步/异步、字符格式、波特率、校验方式、异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。数据位与同步时钟比例等。85.4.1 串行数据通信基础四、串行数据传送方向(通路形式):四、串行数据传送方向(通路形式):1 1、单工通讯:单工通讯:数据单向传送。数据单向传送。(1 1条数据线,单向)条数据线,单向)2 2、半双工通讯:半双工通讯:数据可数据可分时分时双向传送。双向传送。(1 1条或条或2 2条数据线,双向)条数据线,双向)3 3、全双工通讯:全双工通讯:可可同时同时进行发送和接收。进行发送和接收。(2 2条数据线,双向)条数据线,双向)95.4.1 串行数据通信基础发送器发送器接收器接收器地线地线数据线数据线单工形式串行通信单工形式串行通信发送接发送接收器收器接收发接收发送器送器地线地线数据线数据线半双工形式串行通信半双工形式串行通信发送接发送接收器收器接收发接收发送器送器地线地线数据线数据线全双工形式串行通信全双工形式串行通信105.4.1 串行数据通信基础五、异步串行通信的信号形式五、异步串行通信的信号形式 1 1、采用数字信号直接传送(适合于近程通信)。、采用数字信号直接传送(适合于近程通信)。在传送过程中在传送过程中不改变原数据代码的波形和频率。不改变原数据代码的波形和频率。这种数据传送这种数据传送方式称之为方式称之为基带传送方式基带传送方式。通信双方只需用传输线。通信双方只需用传输线把两端的接口把两端的接口电路直接连起来电路直接连起来即可实现。即可实现。2 2、采用频率调制法,也叫频带传送方式(适合于远程用频率调制法,也叫频带传送方式(适合于远程通信)。通信)。远距离直接传输数字信号,信号会发生畸变,因此要把数字信远距离直接传输数字信号,信号会发生畸变,因此要把数字信号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电号转变为模拟信号再进行传送。可利用光缆、专用通信电缆或电话线等连接。话线等连接。115.4.1 串行数据通信基础通常:通常:“1”:1270Hz或或2225Hz;“0”:1070Hz或或2025Hz。125.4.1 串行数据通信基础 因通信时(有干扰)信号要衰减,所以常采用因通信时(有干扰)信号要衰减,所以常采用RS232RS232电平负逻辑,拉开电平负逻辑,拉开“0”0”和和“1”1”的电压档次,的电压档次,以免信息出错:以免信息出错:TTL正逻辑:正逻辑:“0”:0 0.8V;“1”:2.4V+5V。TTL电平直接传输距电平直接传输距离一般不超过离一般不超过1.5米。米。RS-232C(电平转换芯片为电平转换芯片为MAX232)RS-422RS-485RS232负逻辑(负逻辑(EIA电平):电平):“0”:+3V+25V;“1”:-3V-25V。最大传输信息的长度为最大传输信息的长度为15米。米。ElectronicIndustriesAssociation,电子工业联合会电子工业联合会135.4.2 MCS-51串行口及控制寄存器MCS 51系系列列单单片片机机的的串串行行口口是是全全双双工工的的,这这个个口口既既可可以以用用于于网网络络通通信信,也也可可以以实实现现串串行行异异步步通通信信,还还可可以以作作为为同同步步移移位位寄寄存存器器使使用用。在在串串行行口口中中可可供供用用户户使使用用的的是是它它的的寄寄存存器器,因因此此了了解解其寄存器结构对用户来说是十分重要的。其寄存器结构对用户来说是十分重要的。一、一、MCS-51串行口寄存器结构串行口寄存器结构串行接口输入串行接口输入/输出引脚:输出引脚:TXD(P3.1)、RXD(P3.0)发送发送SBUFSBUF(99H99H)接收接收SBUFSBUF(99H99H)输入移位寄存器输入移位寄存器TITI(发送中断)(发送中断)TXDTXD串行输出串行输出80518051内部总线内部总线RXDRXD串行输入串行输入RIRI(接收输入)(接收输入)移位时钟移位时钟图图5-23 MCS-515-23 MCS-51串行口寄存器结构串行口寄存器结构在接收方式下,串行数据通过引脚在接收方式下,串行数据通过引脚RXD(P3.0)进入。由于在接收寄存器之间还有移位寄存器,从进入。由于在接收寄存器之间还有移位寄存器,从而构成了而构成了串行接收的双缓冲结构串行接收的双缓冲结构,以避免以避免在数据接在数据接收过程中收过程中出现帧重叠错误出现帧重叠错误,即在下一帧数据来时,即在下一帧数据来时,前一帧数据还没有读走。前一帧数据还没有读走。在发送方式下,串行数据通过在发送方式下,串行数据通过TXD(P3.1)送)送出。与接收数据情况不同,出。与接收数据情况不同,发送数据时发送数据时,由于,由于CPU是主动的是主动的,不会发生帧重叠错误,因此发送,不会发生帧重叠错误,因此发送电路就电路就不需双重缓冲结构不需双重缓冲结构,这样可以提高数据发,这样可以提高数据发送速度。送速度。165.4.2 MCS-51串行口及控制寄存器串行通信数据格式:按不同方式,一帧数据串行通信数据格式:按不同方式,一帧数据位数为位数为 8/10/118/10/11。发送发送/接收时,数据皆接收时,数据皆低位低位在前在前。D0D1D2D3D4D5D6D8停止位停止位起始位起始位D7D0D1D2D3D4D5D6D7停止位停止位起始位起始位D0D1D2D3D4D5D6D7175.4.2 MCS-51串行口及控制寄存器一帧字符发送一帧字符发送/接收结束,接收结束,置位标志位置位标志位(TI/RI)(TI/RI),并申请串行中断。并申请串行中断。串行口中断控制:中断允许位串行口中断控制:中断允许位ESES、总允许、总允许EAEA;串行中断入口:串行中断入口:0023H0023H。185.4.2 MCS-51串行口及控制寄存器二、串行通信控制寄存器二、串行通信控制寄存器1.1.数据缓冲器数据缓冲器SBUFSBUF发送发送SBUFSBUF和接收和接收SBUFSBUF共用一个地址共用一个地址99H99H。1 1)发送)发送SBUFSBUF存放待发送的存放待发送的8 8位数据,写入位数据,写入SBUFSBUF将同将同时启动发送。发送指令:时启动发送。发送指令:MOVMOVSBUFSBUF,A A2 2)接收)接收SBUFSBUF存放已接收成功的存放已接收成功的8 8位数据,供位数据,供CPUCPU读取。读取。读取串行口接收数据指令:读取串行口接收数据指令:MOV AMOV A,SBUFSBUF195.4.2 MCS-51串行口及控制寄存器2.2.电源控制寄存器电源控制寄存器PCONPCON SMOD SMOD(PCON.7PCON.7):波特率加倍控制位。):波特率加倍控制位。SMOD=1SMOD=1,波特率加倍;,波特率加倍;SMOD=0SMOD=0,则不加倍。,则不加倍。3.3.串行口控制串行口控制/状态寄存器状态寄存器SCON(98H)SCON(98H):位地址位地址9FH9EH9DH9CH9BH9AH99H98H位符号位符号SM0SM1SM2RENTB8RB8TIRISM0 SM1工作方式工作方式功功 能能波特波特 率率 0 0 方式方式0同步移位寄存器同步移位寄存器fosc/12 0 1 方式方式110位异步收发位异步收发由定时器控制由定时器控制 1 0 方式方式211位异步收发位异步收发fosc/32或或/64 1 1 方式方式311位异步收发位异步收发由定时器控制由定时器控制SM0、SM1:选择串行口选择串行口4种工作方式。种工作方式。215.4.2 MCS-51串行口及控制寄存器SM2SM2:多机控制位,用于多机通讯。多机控制位,用于多机通讯。RENREN:允许接收控制位,允许接收控制位,REN=1REN=1,允许接收;,允许接收;REN=0REN=0,禁止接收。,禁止接收。TB8TB8:发送的第发送的第9 9位数据位,可用作校验位和地址位数据位,可用作校验位和地址/数数 据标识位。据标识位。RB8RB8:接收的第接收的第9 9位数据位或停止位。位数据位或停止位。TI TI:发送中断标志,发送一帧结束,发送中断标志,发送一帧结束,TI=1TI=1,必须,必须软软 件清零件清零;RI RI:接收中断标志,接收一帧结束,接收中断标志,接收一帧结束,RI=1RI=1,必须,必须软软 件清零件清零。225.4.3 MCS-51串行通信工作方式及应用一)方式一)方式0 0:SM0=0,SM1=0SM0=0,SM1=0在方式在方式0下下,是把串行口作为是把串行口作为同步移位寄存器同步移位寄存器使使用用,这时以这时以RXD(P3.0)端作为数据移位的端作为数据移位的入入口和口和出出口口,而由而由TXD(P3.1)端提供端提供移位时钟脉冲移位时钟脉冲.移位数据的发移位数据的发送和接收以送和接收以8位为一组位为一组,低位在前高位在后。低位在前高位在后。1、数据的发送与接收、数据的发送与接收 发送和接收的时序如下图所示:发送和接收的时序如下图所示:235.4.3 MCS-51串行通信工作方式及应用(a)(b)发发送送时时序序写入写入SBUFRXD输出输出TXDTID0D1D2D3D4D5D6D7写写REN=1RI=0RXD输入输入RI 接接收收时时序序DATA CD4094CLK STB并行输出并行输出80C51 RXD TXD P1.0Q8 CD4014CLK P/S并行输入并行输入80C51 RXD TXD P1.0图图5 24串行口与串行口与CD4094配合配合图图5 25串串行行口口与与CD4014配配合合使用方式使用方式0实现数据的移位输入输出时,实际上是实现数据的移位输入输出时,实际上是把串行口把串行口变成为并行口使用变成为并行口使用。串行口作为并行口输出使用时,要有。串行口作为并行口输出使用时,要有“串串入并出入并出”的移位寄存器(例如的移位寄存器(例如CD4094或或74LS164、74HC164等)配合,其电路连接如图等)配合,其电路连接如图5 24所示。所示。255.4.3 MCS-51串行通信工作方式及应用发送过程可叙述如下:发送过程可叙述如下:数据预先写入串行口数据缓冲器,然后从串行口数据预先写入串行口数据缓冲器,然后从串行口RXD端,在移位时钟脉冲(端,在移位时钟脉冲(TXD)的控制下,逐)的控制下,逐位移入位移入CD4094。当。当8位数据全部移出后,位数据全部移出后,SCON寄存器的发送中断寄存器的发送中断TI被自动置被自动置“1”。其后主程序。其后主程序就可用中断或查询的方法,通过设置就可用中断或查询的方法,通过设置STB状态的状态的控制,把控制,把CD4094的内容并行输出。的内容并行输出。如果把能实现如果把能实现“并入串出并入串出”功能的移位寄存器(例如功能的移位寄存器(例如CD4014或或74165)与串行口配合使用,就可以把串行口扩展)与串行口配合使用,就可以把串行口扩展为一个并行输入口使用。其电路如图为一个并行输入口使用。其电路如图5-25所示。所示。数据接收过程如下:数据接收过程如下:首先将并行输入数据写入首先将并行输入数据写入CD4014,CD4014移出的串行数据经移出的串行数据经RXD端串行输入到串行口数据缓冲器,同样由端串行输入到串行口数据缓冲器,同样由TXD端提供移位端提供移位时钟脉冲。时钟脉冲。8位数据串行接收需要有允许接收的控制,具体由位数据串行接收需要有允许接收的控制,具体由SCON寄存器的寄存器的REN位实现。位实现。REN=0,禁止接收;禁止接收;REN=1,允许允许接收。当软件置位接收。当软件置位REN时,即开始从时,即开始从RXD端输入数据(低位在端输入数据(低位在前),当接收到前),当接收到8位数据时,硬件自动置位接收中断标志位数据时,硬件自动置位接收中断标志RI(由用户通过软件请(由用户通过软件请0)。)。2、应用举例、应用举例使用使用CD4094的输出端接的输出端接8只发光二极管,利用它的串入并只发光二极管,利用它的串入并出功能,把发光二极管从左向右依次点亮,并反复循环之。按出功能,把发光二极管从左向右依次点亮,并反复循环之。按此要求所做的电路连接如图此要求所做的电路连接如图5 26所示。所示。DATA CD4094CLK STB80C51 RXD TXD P1.0图图5 26 串行移位输出电路串行移位输出电路方式方式0时,移位操作的时,移位操作的波特率是固定的波特率是固定的,为,为单片机晶振频单片机晶振频率的十二分之一率的十二分之一。按此波特率也就是一个机器周期移一位。按此波特率也就是一个机器周期移一位。MOVSCON,#00H;串行口方式;串行口方式0工作工作CLRES;禁止串行中断;禁止串行中断MOVA,#80H;发光管从左边亮起;发光管从左边亮起DELR:CLRP1.0;关闭并行输出;关闭并行输出MOVSBUF,A;串行输出;串行输出JNBTI,;状态查询;状态查询SETBP1.0;开启并行输出;开启并行输出ACALLDELAY;状态维持时间;状态维持时间CLRTI;清发送中断标志;清发送中断标志RRA;发光组合右移;发光组合右移AJMPDELR;继续;继续采用查询方式发送数据可编程序如下:采用查询方式发送数据可编程序如下:295.4.3 MCS-51串行通信工作方式及应用二二)方式方式1 1:SM0=1,SM1=0SM0=1,SM1=0方式方式1是是10位为一帧的异步串行通信方式。共包位为一帧的异步串行通信方式。共包括括1个起始位,个起始位,8个数据位和个数据位和1个停止位。其帧格式为:个停止位。其帧格式为:起始D0D1D2D3D4D5D6D7停止1、数据的发送与接收、数据的发送与接收数数据据发发送送是是由由一一条条写写发发送送缓缓冲冲器器(SBUF)的的指指令令开开始始的的,随随后后在在串串行行口口由由硬硬件件自自动动加加入入起起始始位位和和停停止止位位,构构成成一一个个完完整整的的帧帧格格式式,然然后后在在移移位位脉脉冲冲的的作作用用下下,由由TXD端端串串行行输输出出。一一个个字字符符帧帧发发送送完完后后,使使TXD输输出出线线维维持持在在“1”状状态态下下,并并将将SCON寄寄存存器器的的TI置置“1”,通通知知CPU可可以以接接着着发发送送下下一个字符。一个字符。数据接收时,数据接收时,SCON的的REN位应处于允许接收状态(位应处于允许接收状态(REN=1)。在此前提下,串行口采样)。在此前提下,串行口采样RXD端,当采样到从端,当采样到从“1”向向“0”的状态跳变时,就认定是接收到起始位。随后在移位的状态跳变时,就认定是接收到起始位。随后在移位脉冲的控制下,把脉冲的控制下,把RXD端上的数据逐位移入移位寄存器,当端上的数据逐位移入移位寄存器,当8位数据及停止位全部移入后,根据以下状态,进行相应操作。位数据及停止位全部移入后,根据以下状态,进行相应操作。如果如果RI=0、SM2=0,则接收控制器发出装载则接收控制器发出装载SBUF信号,信号,将将8位数据装入接收数据缓冲器位数据装入接收数据缓冲器SBUF,停止位装入停止位装入RB8,并置并置RI=1,向,向CPU申请中断。申请中断。如果如果RI=0、SM2=1,那么只有停止位为,那么只有停止位为1才发生上述操才发生上述操作。作。如果如果RI=0、SM2=1且停止位为且停止位为0、则所接收的数据不装入、则所接收的数据不装入SBUF,数据将会丢失。数据将会丢失。如果如果RI=1,则所接收的数据在任何情况下都不装入,则所接收的数据在任何情况下都不装入SBUF,即即数据丢失。数据丢失。无论出现哪一种情况,位检测器将继续采样无论出现哪一种情况,位检测器将继续采样RXD引脚的负跳引脚的负跳变,以便接收下一帧信息。变,以便接收下一帧信息。接收采用移位寄存器和接收采用移位寄存器和SBUF双缓冲结构,以避免在接收后一帧双缓冲结构,以避免在接收后一帧数据之前,数据之前,CPU尚未及时响应中断而将前一帧数据取走,造成两帧尚未及时响应中断而将前一帧数据取走,造成两帧数据重叠。采用双缓冲结构后,前、后两帧数据进入数据重叠。采用双缓冲结构后,前、后两帧数据进入SBUF的时间的时间间隔有间隔有10个机器周期。在后一帧数据送入个机器周期。在后一帧数据送入SBUF之前,之前,CPU有足够有足够时间将前一帧数据取走。时间将前一帧数据取走。DATA1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 1016Tc起始位起始位RXDRXC启动检测启动检测确认启动位确认启动位采样数据采样数据图图5-22 串行通信方式串行通信方式1对接收数据的采样对接收数据的采样由于发送、接收双方各自使用自己的时钟,因而两者的频率由于发送、接收双方各自使用自己的时钟,因而两者的频率总有少许差异。为了避免这种影响,数据采样速率采用波特率总有少许差异。为了避免这种影响,数据采样速率采用波特率16倍频,在数据位中间,用第倍频,在数据位中间,用第7、8、9个脉冲采样个脉冲采样3次数据位,次数据位,并并3中取中取2保留采样值。保留采样值。写入写入SBUF采样采样(a)发送时序图发送时序图TXD数据输出数据输出TID0D1D2D3D4D5D6D7停止位停止位起始位起始位RXD输入数据输入数据(b)接收时序图接收时序图D0D1D2D3D4D5D6D7停止位停止位起始位起始位RI检测检测负跳变负跳变2、发送时序和接收时序:、发送时序和接收时序:3、波特率设置、波特率设置假定计数初值为假定计数初值为X,则定时器,则定时器1溢出周期为:溢出周期为:12fosc(256-X)溢出率为溢出周期的倒数。故波特率计算公式为:溢出率为溢出周期的倒数。故波特率计算公式为:波特率波特率=2SMOD32fosc12(256-X)当定时器当定时器1作波特率发生器使用时,选用定时方式作波特率发生器使用时,选用定时方式2。之所以选择工作方式。之所以选择工作方式2,是因为,是因为方式方式2具有自动加载功能,可以避免通过程序反复装入初值所引起的定时误差,使波特率具有自动加载功能,可以避免通过程序反复装入初值所引起的定时误差,使波特率更加稳定。更加稳定。方式方式1的波特率由定时器的波特率由定时器/计数器的溢出率和计数器的溢出率和SMOD决定,即决定,即方式方式1波特率波特率=(2SMODT1溢出率)溢出率)/32 X=2SMODfosc3212波特率波特率256-实际使用时,总是先确定波特率,再计算定时器实际使用时,总是先确定波特率,再计算定时器1的计数初值,然后进行定时器的初始化。根据上述波的计数初值,然后进行定时器的初始化。根据上述波特率计算公式,得出计数初值的计算公式为:特率计算公式,得出计数初值的计算公式为:2、应用举例、应用举例双机通信双机通信单片机间的串行通信通常可分为单片机间的串行通信通常可分为双机通信和多机通信双机通信和多机通信两两类。而类。而串行口工作方式串行口工作方式1只能用于双机通信,不能用于多机只能用于双机通信,不能用于多机通信通信,故作为方式,故作为方式1的应用,这里举一双机通信的例子。又的应用,这里举一双机通信的例子。又因串行通信的程序设计,一般因串行通信的程序设计,一般可采用查询方式或中断方式两可采用查询方式或中断方式两种种,这里仅以查询方式为例加以说明,这里仅以查询方式为例加以说明。为了确保通信成功、有效,现规定双机异步通信程序为了确保通信成功、有效,现规定双机异步通信程序“协议协议”如下:如下:通通信信双双方方均均采采用用系系统统时时钟钟频频率率fosc=12MHz,甲甲机机发发送送数数据据,乙乙机机接接收收数数据据,波波特特率率为为2400。通通信信开开始始时时,甲甲机机发发送送呼呼叫叫信信号号“06”,询询问问乙乙机机是是否否可可以以接接收收数数据据;乙乙机机收收到到呼呼叫叫信信号号后后,若若同同意意接接收收数数据据则则发发回回“00”作作为为应应答答,否否则则发发“15”表表示示暂暂不不能能接接收收数数据据;甲甲机机只只有有收收到到乙乙机机的的应应答答信信号号“00”后后才才可可把把存存放放在在外外部部数数据据存存储储器器的的内内容容发发送送给给乙乙机机,否则继续向乙机呼叫,直到乙机同意接收。其数据格式为:否则继续向乙机呼叫,直到乙机同意接收。其数据格式为:字节数字节数n数据数据1数据数据n累加效验和累加效验和累加效验和累加效验和是指字节数是指字节数n、数据、数据1、数据、数据n这(这(n+1)个字)个字节节内容内容的算术累加和。的算术累加和。乙机根据接收到的乙机根据接收到的“效验和效验和”判断已接收到的数据是否正判断已接收到的数据是否正确。若接收确。若接收正确正确,向甲机发回,向甲机发回“0FH”信号,信号,否则发回否则发回“F0H”信号给甲机信号给甲机。甲机只有。甲机只有接收到接收到“0FH”信号才算完成发送任务,信号才算完成发送任务,返回调用的程序,否则继续呼叫,重发数据。返回调用的程序,否则继续呼叫,重发数据。甲机发送程序甲机发送程序发送程序约定:定时器发送程序约定:定时器T1初始化为模式初始化为模式2,SMOD=1。计数初值计数初值:X=211061232122400256-=230=0E6HY YN N等待乙机回答等待乙机回答N N发送呼叫信号发送呼叫信号06H06H 是是00H00H?开始开始定时器、串行口初始化定时器、串行口初始化置置DPTRDPTR、长度计数器、长度计数器R7R7初值初值置效验寄存器置效验寄存器R6R6初值初值发送字节长度数发送字节长度数发送数据发送数据发送验收和发送验收和 发送完?发送完?等待乙机回答等待乙机回答 传送正确吗?传送正确吗?返回返回N N图图5 5 27 27 双机通信甲机查询发送程序框图双机通信甲机查询发送程序框图Y YY Y串行口初始化为串行口初始化为方式方式1,允许接收;内部允许接收;内部RAM31H和和30H单元单元存放存放发送的数据块首地址发送的数据块首地址;R7存放发送的数据块长度;存放发送的数据块长度;R6为累为累加和寄存器。加和寄存器。发送程序清单:发送程序清单:MOVTMOD,#20H;T1初始化模式初始化模式2MOVTL1,#0E6H;置计数初值;置计数初值MOVTH1,#0E6HSETBTR1;启动;启动T1MOVSCON,#50H;串口为方式;串口为方式1,允许接收,允许接收MOVPCON,#80H;置;置SMOD=1FMT-RAM:MOVDPH,31H;置;置DPTR指针指针MOVDPL,30HMOVR7,#2FH;送字节数至;送字节数至R7MOVR6,#00H;清累加和寄存器;清累加和寄存器TX-ACK:MOVA,#06H;发呼叫信号发呼叫信号MOVSBUF,A40WAIT1:JBCTI,RX-YES;等待发送完等待发送完SJMPWAIT1RX-YES:JBCRI,NEXT1;接收乙机回答接收乙机回答SJMPRX-YESNEXT1:MOVA,SBUF;判乙机是否同意接收判乙机是否同意接收CJNEA,#00H,TX-ACK;不同意接收则继续呼叫不同意接收则继续呼叫TX-BYTES:MOVA,R7;同意同意,发送待发字节个数发送待发字节个数MOVSBUF,AADDA,R6;累加字节个数累加字节个数MOVR6,AWAIT2:JBCTI,TX-NEWS;字节个数发送完?;字节个数发送完?SJMPWAIT2;没完等待;没完等待TX-NEWS:MOVXA,DPTR;发送数据;发送数据MOVSBUF,AADDA,R6;形成累加和形成累加和MOVR6,AINCDPTR;数据指针加;数据指针加1WAIT3:JBCTI,NEXT2;等待一帧数据发送完毕等待一帧数据发送完毕SJMPWAIT3NEXT2:DJNZR7,TX-NEWS;判数据发送完否?;判数据发送完否?TX-SUM:MOVA,R6;发送完,累加和发送乙机;发送完,累加和发送乙机MOVSBUF,AWAIT4:JBCTI,RX-0FH;累加和发送完否?;累加和发送完否?SJMPWAIT4RX-0FH:JBCRI,IF-0FH;等待乙机回答;等待乙机回答SJMPRX-0FHIF-0FH:MOVA,SBUFCJNEA,#0FH,FMT-AM;判传送正确否?;判传送正确否?RET;正确返回;正确返回乙机接收程序乙机接收程序 接收程序的约定:接收程序的约定:波特率设置初始化,串行口初始化同发送程序。波特率设置初始化,串行口初始化同发送程序。寄存器设置:寄存器设置:31H和和30H存放接收数据缓冲区首址;存放接收数据缓冲区首址;R7为数据块长度寄存器:为数据块长度寄存器:R6为累加和寄存器。向甲机回答信为累加和寄存器。向甲机回答信息:息:0FH为接收正常,为接收正常,F0H为传送出错,为传送出错,00H为同意接收数为同意接收数据。据。是是06H?开始开始定时器、串行口初始化定时器、串行口初始化 置置DPTR、效验和、效验和R6初值初值 等待接收呼叫信号等待接收呼叫信号向甲机回送向甲机回送15H 向甲机回送向甲机回送00H 接收数据块长度接收数据块长度N 接收数据存外部接收数据存外部RAM 地址指针地址指针DPTR加加1 数据接收完?数据接收完?接收效验和接收效验和 传送正确吗?传送正确吗?向甲机回送向甲机回送F0H 向甲机回送向甲机回送0FH 返回返回NY图图5 28 双机通信乙机接收程序框图双机通信乙机接收程序框图YNY接收程序清单:接收程序清单:FMT-TS:MOVTMOD,#20H;T1初始化模式初始化模式2MOVTL1,#0E6H;置计数初值;置计数初值MOVTH1,#0E6HSETBTR1;启动;启动T1MOVSCON,#50H;串行方式;串行方式1,允许接收,允许接收MOVPCON,#80H;SMOD=1,波特率加倍波特率加倍FMT-RAM:MOVDPH,31H;置;置DPTR地址指针地址指针MOVDPL,30HMOVR6,#00H;效验和寄存器清零;效验和寄存器清零RX-ACK:JBCRI,IF-06H;等待接收呼叫信号;等待接收呼叫信号SJMPRX-ACKIF-06H:MOVA,SBUF;判呼叫信号有误?;判呼叫信号有误?CJNEA,#06H,TX-15HTX-00H:MOVA,#00H;向甲机回送同意接收信号;向甲机回送同意接收信号MOVSBUF,AWAIT1:JBCTI,RX-BYTES;等待回送信号发送完;等待回送信号发送完SJMPWAIT1TX-15H:MOVA,#15H;向甲机回送接收信号不正确;向甲机回送接收信号不正确MOVSBUF,AWAIT2:JBCTI,HAVE1;等待不正确信号发送完;等待不正确信号发送完SJMPWAIT2HAVE1:LJMPRX-ACK;返回接收呼叫信号状态;返回接收呼叫信号状态RX-BYTES:JBCRI,HAVE2;接收数据块长度;接收数据块长度SJMPRX-BYTESHAVE2:MOVA,SBUF;给长度寄存器赋值;给长度寄存器赋值MOVR7,AMOVR6,A;形成累加和;形成累加和RX-NEWS:JBCRI,HAVE3;接收数据;接收数据SJMPRX-NEWSHAVE3:MOVA,SBUF;接收数据并存入外部;接收数据并存入外部RAM中中MOVXDPTR,AINCDPTR;修改地址指针;修改地址指针ADDA,R6;形成累加和;形成累加和MOVR6,ADJNZR7,RX-NEWS;判数据接收完否?;判数据接收完否?RX-SUM:JBCRI,HAVE4;接收效验和;接收效验和SJMPRX-SUMHAVE4:MOVA,SBUF;判传送是否正确;判传送是否正确(SBUF)CJNEA,R6,TX-ERRTX-RIGHT:MOVA,#0FH;向甲机应答传送正确;向甲机应答传送正确MOVSBUF,AWAIT3:JBCTI,GOOD;正确返回;正确返回SJMPWAIT3TX-ERR:MOVA,#0F0H;向甲机应答传送错误;向甲机应答传送错误MOVSBUF,AWAIT4:JBCTI,AGAINSJMPWAIT4AGAIN:LJMPFMT-RAM;返回重新接收数据状态;返回重新接收数据状态GOOD:RET;返回被调用主程序;返回被调用主程序3、通信程序的调试及故障排除、通信程序的调试及故障排除串行口通信程序调试,串行口通信程序调试,只有当通信双方的硬件和软只有当通信双方的硬件和软件都正确无误时,才能实现成功通信。件都正确无误时,才能实现成功通信。如果调试中出如果调试中出现问题,现问题,首先首先应考虑应考虑硬件故障硬件故障,其表现是:通信线路,其表现是:通信线路中的中的芯片损坏,接触不良芯片损坏,接触不良等。等。为了迅速准确查明故障为了迅速准确查明故障点,可编制一测试小程序,如编一个连续发送字符串点,可编制一测试小程序,如编一个连续发送字符串“MCS-51Microcomputer”的程序,在该程序中不安的程序,在该程序中不安排接收对方的回答信息,分别在通信的双方单独运行排接收对方的回答信息,分别在通信的双方单独运行。程序如下:程序如下:TSIO:MOVTMOD,#20H;T1模式模式2,fosc=11.059MHzMOVTL1,#0E8H;1200波特率波特率MOVTH1,#0E8HMOVSCON,#042H;串行口方式;串行口方式1,TI=1SETBTR1;启动;启动T1TS04:MOVR4,#00H;从首字符开始;从首字符开始MOVDPTR,#ASAB;查串行口输出表中字符串;查串行口输出表中字符串TS01:MOVA,R4MOVCA,A+DPTRJZTS04;字符串发送完重发,结束符;字符串发送完重发,结束符TS03:JBCTI,TS02;为;为00HSJMPTS03TS02:MOVSBUF,A;发送串中字符;发送串中字符INCR4;修改表中指针;修改表中指针SJMPTS01ASAB:DBMCS 51Microcomputer;字符串表;字符串表DB0AH,0DH,00H此此时时用用示示波波器器可可观观察察接接收收方方一一端端(RXD)引引脚脚的的信信号号波波形形,若若观观察察不不到到,即即可可断断定定此此通通路路存存在在问问题题。这这时时仍仍用用示示波波器器逐逐一一观观察察各各连连接接点点、芯芯片片输输入入/输输出出各各端端点点的的波波形形,从从而而可可迅迅速速故障定位。故障定位。对于对于软故障软故障,主要考虑,主要考虑程序的容错性程序的容错性。如前面介绍的收、。如前面介绍的收、发程序实例,如果发程序实例,如果发方发方比比收方收方先运行程序,则先运行程序,则发方发方将会因等不将会因等不到收方的回答信号而到收方的回答信号而陷于死循环陷于死循环;而;而收方收方因丢失发方发过来的因丢失发方发过来的呼叫信号也将呼叫信号也将陷于等待陷于等待。解决此类问题的办法是解决此类问题的办法是在发送程序中,在发送程序中,凡在需等待对方回答的地方,都适当延时凡在需等待对方回答的地方,都适当延时,一旦超过一定时间,一旦超过一定时间,就返回重新呼叫,直至接通联系为止。就返回重新呼叫,直至接通联系为止。505.4.3 MCS-51串行通信工作方式及应用三三)方式方式2 2和方式和方式3 3在方式在方式2下,字符还是下,字符还是8个数据位,只不过个数据位,只不过增加了一个增加了一个第第9数据位(数据位(D8),而且其),而且其功能由用户确定功能由用户确定,是一个,是一个可编程位。可编程位。起始D0D1D2D3D4D5D6D7D8停止方式方式2方式方式2是是11位为一帧的串行通信方式。位为一帧的串行通信方式。515.4.3 MCS-51串行通信工作方式及应用在在发发送送数数据据时时,应应预预先先在在SCON的的TB8位位中中把把第第9数据位的内容准备好。这可使用如下指令完成:数据位的内容准备好。这可使用如下指令完成:SETBTB8;TB8位置位置“1”CLRTB8;TB8位置位置“0”发送数据(发送数据(D0D7)由)由MOV指令向指令向SBUF写入,而写入,而D8位位的内容则由硬件电路从的内容则由硬件电路从TB8中直接送到发送移位寄存器的第中直接送到发送移位寄存器的第9位,并以此来启动串行发送。一个字符帧发送完毕后,将位,并以此来启动串行发送。一个字符帧发送完毕后,将TI位位置置“1”,其它过程与方式,其它过