《ATC单片机的串行口实用教案》由会员分享,可在线阅读,更多相关《ATC单片机的串行口实用教案(56页珍藏版)》请在金锄头文库上搜索。
1、控制寄存器共两个:特殊功能控制寄存器共两个:特殊功能(gngnng)(gngnng)寄存器寄存器SCONSCON和和PCONPCON。7.1.1 7.1.1 串行口控制寄存器串行口控制寄存器SCON SCON 字节地址字节地址98H98H,可位寻址,格式如图,可位寻址,格式如图7-27-2所示。所示。 图7-1第1页/共55页第一页,共56页。(1 1)SM0SM0、SM1SM1串行口串行口4 4种工作方式的选择位种工作方式的选择位 表表7-1 7-1 串行口的串行口的4 4种工作方式种工作方式SM0 SM1 SM0 SM1 方式方式 功功 能能 说说 明明 0 0 0 0 0 0 同步移位寄
2、存器方式(用于扩展同步移位寄存器方式(用于扩展I/OI/O口)口) 0 1 1 8 0 1 1 8位异步收发,波特率可变(由定时器控位异步收发,波特率可变(由定时器控制制(kngzh)(kngzh)) 1 0 2 9 1 0 2 9位异步收发,波特率为位异步收发,波特率为fosc/64fosc/64或或fosc/32fosc/32 1 1 3 9 1 1 3 9位异步收发,波特率可变(由定时器控位异步收发,波特率可变(由定时器控制制(kngzh)(kngzh))(2 2)SM2 SM2 多机通信控制多机通信控制(kngzh)(kngzh)位位 用于方式用于方式2 2或方式或方式3 3中。中。
3、图7-2第2页/共55页第二页,共56页。当串行口以方式当串行口以方式2 2或方式或方式3 3接收时,接收时,如如果果SM2=1SM2=1,只只有有当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“1”“1”时时,才才将将接接收收到到的的前前8 8位位数数据据送送入入SBUFSBUF,并并置置“1” “1” RIRI,产产生生中中断断请请求求;当当接接收收到到的的第第9 9位位数数据据(RB8RB8)为为“0”“0”时时,则则将将接接收到的前收到的前8 8位数据丢弃。位数据丢弃。如如果果SM2=0SM2=0,则则不不论论第第9 9位位数数据据是是“1”“1”还还是是“0”“0”,
4、都都将将前前8 8位位数据送入数据送入SBUFSBUF中,并置中,并置“1” RI“1” RI,产生中断请求。,产生中断请求。方方式式1 1时时,如如果果SM2=1SM2=1,则则只只有有收收到到停停止止位位时时才才会会激激活活(j (j hu)RIhu)RI。方式方式0 0时,时,SM2SM2必须为必须为0 0。 (3 3)RENREN允许串行接收位允许串行接收位 由软件置由软件置“1”“1”或清或清“0”“0”。 第3页/共55页第三页,共56页。 REN=1 REN=1 允许串行口接收数据。 REN=0 REN=0 禁止串行口接收数据。 (4 4)TB8TB8发送的第9 9位数据方式2
5、2和3 3时,TB8TB8是要发送的第9 9位数据,可作为奇偶校验位使用,也可作为地址帧或数据帧的标志。1 1:地址帧 0 0:数据帧 (5 5)RB8RB8接收到的第9 9位数据方式2 2和3 3时,RB8RB8存放(cnfng)(cnfng)接收到的第9 9位数据。在方式1 1,如果SM2=0SM2=0,RB8RB8是接收到的停止位。在方式0 0,不使用RB8RB8。 (6 6)TITI发送中断标志位第4页/共55页第四页,共56页。方式方式0 0时,串行发送第时,串行发送第8 8位数据结束时由硬件置位数据结束时由硬件置“1”“1”,其它工作方式,串行口发送停止位的开始时置其它工作方式,串
6、行口发送停止位的开始时置TI=1TI=1,表示一帧数,表示一帧数据发送结束,可供软件查询,也可申请中断。据发送结束,可供软件查询,也可申请中断。CPUCPU响应中断后响应中断后, , 向向SBUFSBUF写入要发送的下一帧数据。写入要发送的下一帧数据。TITI必须由软必须由软件清件清0 0。(7 7)RIRI接收中断标志位接收中断标志位 方式方式0 0时,接收完第时,接收完第8 8位数据时,位数据时,RIRI由硬件置由硬件置1 1。其它工作方式,串行接收到停止位时,该位置其它工作方式,串行接收到停止位时,该位置“1”“1”。RI=1RI=1,表,表示一帧数据接收完毕,并申请中断示一帧数据接收完
7、毕,并申请中断 。该位状态也可软件查询。该位状态也可软件查询。RIRI必须由软件清必须由软件清“0”“0”。7.1.2 7.1.2 特殊特殊(tsh)(tsh)功能寄存器功能寄存器PCON PCON 字节地址为字节地址为87H87H,没有位寻址功能。,没有位寻址功能。 第5页/共55页第五页,共56页。(1 1)SMODSMOD波特率选择位波特率选择位 例如:方式例如:方式1 1的波特率的计算公式为:的波特率的计算公式为: 方式方式1 1波特率波特率= =(2SMOD/322SMOD/32)定时器定时器T1T1的溢出率的溢出率也称也称SMODSMOD位为波特率倍增位。位为波特率倍增位。(2 2
8、)GF1GF1、GF0GF0通用标志位通用标志位这这两两个个(lin (lin )标标志志位位可可供供用用户户使使用用,可可用用软软件件置置1 1或或清清0 0。两两个个(lin )(lin )标志位用户应充分利用。标志位用户应充分利用。(3 3)PDPD掉电方式位掉电方式位若若PD=1PD=1,单片机进入掉电工作方式。,单片机进入掉电工作方式。图7-3第6页/共55页第六页,共56页。(4 4)IDLIDL待机方式位待机方式位IDL=1IDL=1,单片机进入待机工作方式。,单片机进入待机工作方式。7.2 7.2 串行口的串行口的4 4种工作方式种工作方式7.2.1 7.2.1 方式方式0 0
9、 同步移位寄存器方式,常用同步移位寄存器方式,常用(chn yn)(chn yn)于外接移位寄存器,于外接移位寄存器,以扩展并行以扩展并行I/OI/O口。口。 8 8位数据为一帧,不设起始位和停止位,先发送或接收最低位。位数据为一帧,不设起始位和停止位,先发送或接收最低位。波特率固定为波特率固定为fosc/12fosc/12。 第7页/共55页第七页,共56页。帧格式如下:帧格式如下:1 1方式方式0 0发送发送 当当CPUCPU执执行行一一条条将将数数据据写写入入发发送送缓缓冲冲器器SBUFSBUF的的指指令令时时,产产生生一一个个正正脉脉冲冲,串串行行口口即即把把SBUFSBUF中中的的8
10、 8位位数数据据以以fosc/12fosc/12的的固固定定(gdng)(gdng)波波特特率率从从RXDRXD引引脚脚串串行行输输出出,低低位位在在先先,TXD,TXD引引脚脚输输出出同同步步移移位位脉脉冲冲,发发送送完完8 8位位数数据据置置“1”“1”中中断断标标志志位位TITI。时时序如图序如图7-57-5所示。所示。2 2方式方式0 0接收接收 REN=1REN=1,接收数据,接收数据,REN=0REN=0,禁止接收。,禁止接收。 第8页/共55页第八页,共56页。REN=1REN=1,允许接收。向串口的,允许接收。向串口的SCONSCON写入控制字(置为方式写入控制字(置为方式0
11、0,并置,并置“1”REN“1”REN位,同时位,同时RI=0RI=0)时,产生一个正脉冲,串行口即开始接)时,产生一个正脉冲,串行口即开始接收数据。收数据。RXDRXD为数据输入为数据输入(shr)(shr)端,端,TXDTXD为移位脉冲信号输出端,为移位脉冲信号输出端,接收器也以接收器也以fosc/12fosc/12的固定波特率采样的固定波特率采样RXDRXD引脚的数据信息,当收到引脚的数据信息,当收到8 8位数据时置位数据时置“1” RI“1” RI。表示一帧数据接收完,时序如下:。表示一帧数据接收完,时序如下:图7-5第9页/共55页第九页,共56页。方方式式0 0下下,SCONSCO
12、N中中的的TB8TB8、RB8RB8位位没没有有用用到到,发发送送(f (f sn)sn)或或接接收收完完8 8位位数数据据由由硬硬件件置置“1”TI“1”TI或或RIRI,CPUCPU响响应应中中断断。TITI或或RIRI须须由由用用户软件清户软件清“0”“0”,可用如下指令:,可用如下指令:CLR TICLR TI;TITI位清位清“0”“0”CLR RI CLR RI ;RIRI位清位清“0”“0”方式方式0 0时,时,SM2SM2位必须为位必须为0 0。图7-6第10页/共55页第十页,共56页。7.2.2 7.2.2 方式方式1 1 SM0SM0、SM1=01SM1=01方式方式1
13、1一帧数据为一帧数据为1010位,位,1 1个起始位(个起始位(0 0),),8 8个数据位,个数据位,1 1个个停止位(停止位(1 1),先发送),先发送(f sn)(f sn)或接收最低位。帧格式如或接收最低位。帧格式如图图7-77-7:方式(fngsh)1波特率=(2SMOD/32)定时器T1的溢出率 SMOD为PCON寄存器的最高位的值(0或1)。图7-7第11页/共55页第十一页,共56页。1方式方式1发送发送方式方式1输出,数据由输出,数据由TXD输出,输出,一帧信息为一帧信息为10位,位,1位起始位位起始位0,8位数据位(先低位)和位数据位(先低位)和1位位停止位停止位1。当执行
14、一条数据写发送缓冲器当执行一条数据写发送缓冲器SBUF的指令,就启动发送。图的指令,就启动发送。图中中TX时钟是发送的波特率。时钟是发送的波特率。发送开始发送开始(kish)时,内部发送控制信号变为有效。将起始时,内部发送控制信号变为有效。将起始位向位向TXD输出,此后,每经过一个输出,此后,每经过一个TX时钟周期,便产生一时钟周期,便产生一个移位脉冲,并由个移位脉冲,并由TXD输出一个数据位。输出一个数据位。8位数据位全部发位数据位全部发送完毕后,置送完毕后,置“1”TI。方式。方式1发送数据的时序,如图发送数据的时序,如图7-8所示。所示。第12页/共55页第十二页,共56页。 2 2方式
15、方式1 1接收接收(jishu) (jishu) 数据从数据从RXDRXD(P3.0P3.0)脚输入。当检测到起始位的负跳变时,开始接)脚输入。当检测到起始位的负跳变时,开始接收收(jishu)(jishu)数据。数据。定时控制信号有两种):接收定时控制信号有两种):接收(jishu)(jishu)移位时钟(移位时钟(RXRX时钟,频率时钟,频率和波特率相同)和位检测器采样脉冲(频率是和波特率相同)和位检测器采样脉冲(频率是RXRX时钟的时钟的1616倍,倍,1 1位位数据期间,有数据期间,有1616个采样脉冲),当采样到个采样脉冲),当采样到RXDRXD端从端从1 1到到0 0的跳变时就的跳
16、变时就启动检测器,接收启动检测器,接收(jishu)(jishu)的值是的值是3 3次连续采样(第次连续采样(第7 7、8 8、9 9个个脉冲脉冲图7-8第13页/共55页第十三页,共56页。时采样)进行表决以确认时采样)进行表决以确认(qurn)(qurn)是否是真正的起始位(负跳是否是真正的起始位(负跳变)的开始。变)的开始。当一帧数据接收完,须同时满足两个条件,接收才真正有效。当一帧数据接收完,须同时满足两个条件,接收才真正有效。 RI=0 RI=0,即上一帧数据接收完成时,即上一帧数据接收完成时,RI=1RI=1发出的中断请求已发出的中断请求已被响应,被响应,SBUFSBUF中的数据已
17、被取走,说明中的数据已被取走,说明“接收接收SBUF”SBUF”已空。已空。 SM2=0 SM2=0或收到的停止位或收到的停止位=1=1(方式(方式1 1时,停止位已进入时,停止位已进入RB8RB8),),图7-9第14页/共55页第十四页,共56页。则则收收到到的的数数据据装装入入SBUFSBUF和和RB8RB8(RB8RB8装装入入停停止止位位),且且置置“1”“1”中断标志中断标志RIRI。若这两个条件不同时满足,收到的数据将丢失。若这两个条件不同时满足,收到的数据将丢失。7.2.3 7.2.3 方式方式(fngsh)2(fngsh)29 9位位异异步步通通信信接接口口。每每帧帧数数据据
18、均均为为1111位位,1 1位位起起始始位位0 0,8 8位位数数据据位位(先先低低位位),1 1位位可可程程控控的的第第9 9位位数数据据和和1 1位位停停止止位位。帧帧格式如图格式如图7-107-10。 方式方式(fngsh)2(fngsh)2波特率波特率= = (2SMOD/642SMOD/64)fosc fosc 图7-10第15页/共55页第十五页,共56页。1 1方式方式2 2发送发送(f sn)(f sn)发送发送(f sn)(f sn)前,先根据通讯协议由软件设置前,先根据通讯协议由软件设置TB8TB8(例如,双机(例如,双机通讯时的奇偶校验位或多机通讯时的地址通讯时的奇偶校验
19、位或多机通讯时的地址/ /数据的标志位)。数据的标志位)。方式方式2 2发送发送(f sn)(f sn)数据波形如图数据波形如图7-117-11所示。所示。 图7-11第16页/共55页第十六页,共56页。例例7-1 7-1 方式方式2 2发送在双机通信中的应用。发送在双机通信中的应用。下下面面的的发发送送中中断断(zhngdun)(zhngdun)服服务务程程序序,是是在在双双机机通通信信中中,以以TB8TB8作作为为奇奇偶偶校校验验位位,处处理理方方法法为为数数据据写写入入SBUFSBUF之之前前,先先将将数数据据的的奇奇偶校验位写入偶校验位写入TB8TB8,以保证采用偶校验发送。,以保证
20、采用偶校验发送。 PIPTI PIPTI: PUSH PSW PUSH PSW ;现场保护;现场保护 PUSH Acc PUSH Acc SETB RS1 SETB RS1 ;选择第;选择第2 2组工作寄存器区组工作寄存器区 CLR RS0 CLR RS0 CLR TI CLR TI ;发送中断;发送中断(zhngdun)(zhngdun)标志清标志清“0”“0” MOV A MOV A,R0R0;取数据;取数据第17页/共55页第十七页,共56页。 MOV C,P ;校验位送TB8,采用偶校验 MOV TB8,C MOV SBUF,A ;启动发送 INC R0 ;数据指针加1 POP Acc
21、 ;恢复现场 POP PSW RETI ;中断返回2方式2接收 SM0、SM1=10,且REN=1。数据由RXD端输入,接收11位信息(xnx)。当位检测到RXD从1到0的负跳变,并判断起始位有效后,开始收一帧信息(xnx)。在接收器完第9位数据后,需满足两个条件,才能将接收到的数据送入SBUF。第18页/共55页第十八页,共56页。(1 1)RI=0RI=0,意味着接收缓冲器为空。,意味着接收缓冲器为空。(2 2)SM2=0SM2=0或接收到的第或接收到的第9 9位数据位位数据位RB8=1RB8=1时。时。当当上上述述两两个个条条件件满满足足时时,接接收收到到的的数数据据送送入入SBUFSB
22、UF(接接收收缓缓冲冲器器),第第9 9位位数数据据送送入入RB8RB8,并并置置“1”RI“1”RI。若若不不满满足足两两个条件,接收的信息将被丢弃个条件,接收的信息将被丢弃(diq)(diq)。方式方式2 2接收数据的时序如图接收数据的时序如图7-127-12所示。所示。 例例7-2 7-2 方式方式2 2接收在双机通信中的应用。接收在双机通信中的应用。图7-12第19页/共55页第十九页,共56页。本本例例与与上上例例相相对对应应。若若第第9 9位位数数据据为为校校验验位位,在在接接收收程程序序(chngx)(chngx)中中作作偶偶校校验验处处理理,设设1 1组组寄寄存存器器区区的的R
23、0R0为为数数据据缓缓冲器指针。冲器指针。 PIRI: PIRI: PUSH PSWPUSH PSW PUSH AccPUSH AccSETB RS0 SETB RS0 ;选择;选择1 1组寄存器区组寄存器区CLR RS1CLR RS1CLR RI CLR RI MOV A,SBUF MOV A,SBUF ;收到数据送;收到数据送A AMOV C,PMOV C,PJNC L1JNC L1;C C0 0。跳。跳L1L1JNB RB8,ERP JNB RB8,ERP ;ERPERP为为出出错错处处理理程程序序(chngx) (chngx) 第20页/共55页第二十页,共56页。 AJMP L2AJ
24、MP L2 L1: L1: JB RB8,ERPJB RB8,ERP;RB8RB81 1,跳,跳ERPERP L2: L2: MOV R0,AMOV R0,A INC R0INC R0 POP AccPOP Acc POP PSWPOP PSW ERP: ERP: ;出出错错(ch (ch cu)cu)处处理理程程序段序段 RETIRETI7.2.4 7.2.4 方式方式3 3SM0SM0、SM1=11SM1=11,串口为方式,串口为方式3 3。波波特特率率可可变变的的9 9位位异异步步通通讯讯方方式式,除除波波特特率率外外,方方式式3 3和和方方式式2 2相同。方式相同。方式3 3的时序见方
25、式的时序见方式2 2。第21页/共55页第二十一页,共56页。 方式方式3 3波特率波特率= =(2SMOD/322SMOD/32)定时器定时器T1T1的溢出率的溢出率7.3 7.3 多机通信的工作原理多机通信的工作原理 要要保保证证主主机机与与所所选选择择的的从从机机实实现现可可靠靠地地通通信信,必必须须保保证证串串口口具具有有识识别功能。别功能。SCONSCON中中的的SM2SM2位位就就是是(jish)(jish)满满足足这这一一条条件件而而设设置置的的多多机机通通信信控控制制位。位。原原理理:在在串串行行口口以以方方式式2 2(或或方方式式3 3)接接收收时时,若若SM2=1SM2=1
26、,表表示示置置多多机机通信功能位,这时有两种可能:通信功能位,这时有两种可能: (1 1)接接收收到到的的第第9 9位位数数据据为为1 1时时,数数据据才才装装入入SBUFSBUF,并并置置中中断断标志标志RI=1RI=1向向CPUCPU发出中断请求;发出中断请求; (2 2)接接收收到到的的第第9 9位位数数据据为为0 0时时,则则不不产产生生中中断断标标志志,信信息息将将抛抛弃。弃。第22页/共55页第二十二页,共56页。若若SM2=0SM2=0,则则接接收收的的第第9 9位位数数据据不不论论是是0 0还还是是1 1,都都产产生生RI=1RI=1中中断断标标志,接收到的数据装入志,接收到的
27、数据装入SBUFSBUF中。中。上述特性,便可实现上述特性,便可实现(shxin)AT89C51(shxin)AT89C51的多机通信。的多机通信。设设多多机机系系统统中中有有一一主主机机和和3 3个个80318031从从机机,如如图图7-137-13。主主机机的的RXDRXD与与从从机机的的TXDTXD相相连连,主主机机TXDTXD与与从从机机的的RXDRXD端端相相连连。从从机机地地址址分分别别为为00H00H、01H01H、02H02H。 图7-13第23页/共55页第二十三页,共56页。多机通信工作过程:多机通信工作过程:(1 1)从从机机串串行行口口编编程程为为方方式式2 2或或方方
28、式式3 3接接收收,且且置置“1”SM2“1”SM2和和RENREN位,使从机只处于多机通讯且接收地址帧的状态。位,使从机只处于多机通讯且接收地址帧的状态。(2 2)主主机机先先将将从从机机地地址址(即即准准备备接接收收数数据据的的从从机机)发发给给各各从机从机, , 主机发出的地址信息的第主机发出的地址信息的第9 9位为位为1 1,各各从从机机接接收收到到的的第第9 9位位信信息息RB8RB8为为1 1,且且由由于于SM2=1SM2=1,则则置置“1” “1” RIRI,各各从从机机响响应应中中断断,执执行行(zhxng)(zhxng)中中断断程程序序。在在中中断断服服务务子子程程序序中中,
29、判判主主机机送送来来的的地地址址是是否否和和本本机机地地址址相相符符合合,相相符符则则该该从从机机清清“0”SM2“0”SM2位位,准准备备接接收收主主机机的的数数据或命令;若不符,则保持据或命令;若不符,则保持SM2=1SM2=1状态。状态。第24页/共55页第二十四页,共56页。(3 3)接着主机发送数据帧,此时各从机串行口接收到)接着主机发送数据帧,此时各从机串行口接收到 的的RB8=0RB8=0,只只有有地地址址相相符符合合的的从从机机系系统统(即即已已清清“0”SM2“0”SM2位位的的从从机机)才才能能激激活活RIRI,从从而而进进入入中中断断,在在中中断断程程序序中中接接收收主主
30、机的数据(或命令);机的数据(或命令); 其其它它的的从从机机因因SM2SM21 1,又又RB8=0RB8=0不不激激活活中中断断标标志志RIRI,不不能能进进入中断,接收的数据丢失。入中断,接收的数据丢失。图图7-137-13所所示示的的多多机机系系统统是是主主从从式式,由由主主机机控控制制多多机机之之间间的的通通信,从机和从机的通讯只能信,从机和从机的通讯只能(zh nn)(zh nn)经主机才能实现。经主机才能实现。7.4 7.4 波特率的制定方法波特率的制定方法方方式式0 0、方方式式2 2的的波波特特率率是是固固定定的的;方方式式1 1、方方式式3 3波波特特率率由由定定时器时器T1
31、T1的溢出率来确定。的溢出率来确定。第25页/共55页第二十五页,共56页。7.4.1 7.4.1 波特率的定义波特率的定义波特率的定义。波特率的定义。对于定时器的不同工作方式,得到对于定时器的不同工作方式,得到(d do)(d do)的波特率的范围是的波特率的范围是不一样的不一样的 7.4.2 7.4.2 定时器定时器T1T1产生波特率的计算产生波特率的计算(1 1)方式)方式0 0波特率波特率= =时钟频率时钟频率fosc1/12fosc1/12,不受,不受SMODSMOD位的值的位的值的影响。若影响。若fosc=12MHzfosc=12MHz,波特率为,波特率为fosc/12fosc/1
32、2即即1Mb/s1Mb/s。(2 2)方式)方式2 2波特率波特率= =(2SMOD/642SMOD/64)foscfosc 若若fosc=12MHz: SMOD=0 fosc=12MHz: SMOD=0 波特率波特率=187.5kb/s=187.5kb/s; SMOD=1 SMOD=1 波特率波特率=375kb/s =375kb/s 第26页/共55页第二十六页,共56页。(3 3)方式)方式1 1或方式或方式3 3时,波特率为:时,波特率为:波特率波特率= =(2SMOD/642SMOD/64)T1T1的溢出率的溢出率实实际际设设定定波波特特率率时时,T1T1常常设设置置为为方方式式2 2
33、定定时时(自自动动装装初初值值)这这种种方方式式不仅操作方便,也可避免因软件重装初值而带来的定时误差。不仅操作方便,也可避免因软件重装初值而带来的定时误差。实实际际使使用用时时,为为避避免免烦烦杂杂的的初初值值计计算算,常常用用(chn (chn yn)yn)的的波波特特率率和初值和初值X X间的关系列成表间的关系列成表7-27-2(P124P124),以供查用。),以供查用。第27页/共55页第二十七页,共56页。第28页/共55页第二十八页,共56页。表表7-27-2有两点需要注意:有两点需要注意:时时钟钟振振荡荡(zhndng)(zhndng)频频率率为为12MHz12MHz或或6MHz
34、6MHz时时,表表中中初初值值X X和和相相应应的的波特率之间有一定误差。波特率之间有一定误差。例例如如,FDHFDH的的对对应应的的理理论论值值是是1041610416波波特特(时时钟钟6MHz6MHz)。与与96009600波波特特相相差差816816波波特特,消消除除误误差差可可以以调调整整时时钟钟振振荡荡(zhndng)(zhndng)频频率率 foscfosc实实 现现 。 例例 如如 采采 用用 的的 时时 钟钟 振振 荡荡 (zhndng)(zhndng)频频 率率 为为11.0592MHz11.0592MHz。第29页/共55页第二十九页,共56页。(2) (2) 如如果果串串
35、行行通通讯讯(tngxn)(tngxn)选选用用很很低低的的波波特特率率,例例如如,波波特特率率选选为为5555,可可将将T1T1设设置置为为方方式式1 1定定时时。但但在在T1T1溢溢出出时时,需需用用在在中中断断服服务务程程序序中中重重新新装装入入初初值值。中中断断响响应应时时间间和和执执行行指指令令时时间间会会使使波波特特率率产产生生一一定定的的误误差差,可可用用改改变变初初值值的的方方法法加加以以调整。调整。例例7-3 7-3 若若80318031单单片片机机的的时时钟钟振振荡荡频频率率为为11.0592MHz11.0592MHz,选选用用T1T1为为方方式式2 2定定时时作作为为波波
36、特特率率发发生生器器,波波特特率率为为2400b/s2400b/s,求求初初值。值。 上述结果可直接从表上述结果可直接从表7-27-2中查到。中查到。这这里里时时钟钟振振荡荡频频率率选选为为11.0592 11.0592 MHzMHz,就就可可使使初初值值为为整整数数,从从而产生精确的波特率。而产生精确的波特率。第30页/共55页第三十页,共56页。7.5 7.5 串行口的编程和应用串行口的编程和应用(yngyng) (yngyng) 介绍介绍AT89C51AT89C51之间的双机串行通信的硬件接口和软件设计。之间的双机串行通信的硬件接口和软件设计。 7.5.1 7.5.1 双机串行通信硬件接
37、口双机串行通信硬件接口AT89C51AT89C51串行口以串行口以TTLTTL电平串行传输,抗干扰性差,传输距电平串行传输,抗干扰性差,传输距离短。离短。为了提高串行通信的可靠性,增大串行通信的距离,一般为了提高串行通信的可靠性,增大串行通信的距离,一般都采用标准串行接口,如都采用标准串行接口,如RS-232RS-232、RS-422ARS-422A、RS-485RS-485等来等来实现串行通信。实现串行通信。根据根据AT89C51AT89C51的双机通信距离和抗干扰性的要求,可选择的双机通信距离和抗干扰性的要求,可选择TTLTTL电平传输,或选择电平传输,或选择RS-232CRS-232C、
38、RS-422ARS-422A、RS485RS485串行接串行接口进行串行数据传输。口进行串行数据传输。第31页/共55页第三十一页,共56页。1 1TTLTTL电平通信电平通信(tng xn)(tng xn)接口接口如果两个如果两个89C5189C51单片机相距在几米之内,它们的串行口可直单片机相距在几米之内,它们的串行口可直接相连,从而直接用接相连,从而直接用TTLTTL电平传输方法来实现双机通信电平传输方法来实现双机通信(tng xn)(tng xn),接口电路如图,接口电路如图7-147-14所示。所示。图7-14第32页/共55页第三十二页,共56页。2 2RS-232CRS-232C
39、双机通信接口双机通信接口(ji ku)(ji ku)如果双机通信距离在如果双机通信距离在30m30m之内,可利用之内,可利用RS-232CRS-232C标准接口标准接口(ji (ji ku)ku)实现点对点的双机通信,接口实现点对点的双机通信,接口(ji ku)(ji ku)电路如图电路如图7-157-15所所示。示。图图7-157-15中的中的MAX232AMAX232A是美国是美国MAXIMMAXIM公司生产的公司生产的RS-232CRS-232C双工发送双工发送器器/ /接收器电路芯片。接收器电路芯片。图7-15第33页/共55页第三十三页,共56页。3 3RS-422ARS-422A双
40、机通信接口双机通信接口(ji ku)(ji ku)为了增加通信距离,可以在通信线路上采用光电隔离方法,利为了增加通信距离,可以在通信线路上采用光电隔离方法,利用用RS-422ARS-422A标准进行双机通信,最大传输距离可达标准进行双机通信,最大传输距离可达1000m1000m左右,左右,接口接口(ji ku)(ji ku)电路如图电路如图7-167-16。图图7-167-16中的中的SN75174SN75174、SN75175SN75175是是TTLTTL电平到电平到RS-232RS-232电平与电平与RS-RS-232232电平到电平到TTLTTL电平的电平转换芯片。电平的电平转换芯片。第
41、34页/共55页第三十四页,共56页。图7-16第35页/共55页第三十五页,共56页。4 4RS-485RS-485双机通信接口双机通信接口RS-422ARS-422A双机通信需四芯传输线,对长距离通信很不经济,双机通信需四芯传输线,对长距离通信很不经济,故通常采用双绞线传输的故通常采用双绞线传输的RS-485RS-485串行通信接口,它很容易串行通信接口,它很容易实现实现(shxin)(shxin)多机通信。图多机通信。图7-177-17给出了其给出了其RS-485RS-485双机通双机通信接口电路,最大传输距离可达信接口电路,最大传输距离可达1000m1000m左右。左右。图7-17第3
42、6页/共55页第三十六页,共56页。7.5.2 7.5.2 双机串行通信软件编程双机串行通信软件编程串行口的的方式串行口的的方式0 0是移位寄存器工作方式,主要用于扩展并是移位寄存器工作方式,主要用于扩展并行行I/OI/O用,并不用于串行通信。用,并不用于串行通信。串行口的方式串行口的方式1 13 3是用于串行通信的,下面介绍双机串行通是用于串行通信的,下面介绍双机串行通信软件编程。软件编程实际上与上面介绍的各种串行标准信软件编程。软件编程实际上与上面介绍的各种串行标准的硬件接口电路无关。的硬件接口电路无关。1 1串行口方式串行口方式1 1应用编程应用编程例例7-4 7-4 用方式用方式1 1
43、双机串行通信,收、发双方双机串行通信,收、发双方(shungfng)(shungfng)均采用均采用6MHz6MHz晶振,波特率为晶振,波特率为2400b/s2400b/s,每一帧信息为,每一帧信息为1010位,位,第第0 0位为起始位,第位为起始位,第1 18 8位为数据位,最后位为数据位,最后1 1位为停止位。位为停止位。发送方把以发送方把以78H78H、77H77H单元的内容为首地址,以单元的内容为首地址,以76H76H、75H75H单单元内容减元内容减1 1第37页/共55页第三十七页,共56页。为末地址的数据块通过串行口发送给接收方。为末地址的数据块通过串行口发送给接收方。发送方要发
44、送的数据块的地址为发送方要发送的数据块的地址为2000H2000H201FH201FH。发送时先发送地址。发送时先发送地址帧,再发送数据帧;帧,再发送数据帧;接收方在接收时使用一个标志位来区分接收方在接收时使用一个标志位来区分(qfn)(qfn)接收的是地址还是接收的是地址还是数据,然后将其分别存放到指定的单元中。数据,然后将其分别存放到指定的单元中。发送方可采用查询方式或中断方式发送数据,接收方可采用中断或发送方可采用查询方式或中断方式发送数据,接收方可采用中断或查询方式接收。下面仅介绍采用中断方式发送、接收的程序。查询方式接收。下面仅介绍采用中断方式发送、接收的程序。(1 1)甲机发送程序
45、)甲机发送程序 中断方式的发送程序如下:中断方式的发送程序如下:第38页/共55页第三十八页,共56页。ORG ORG 0000H0000H LJMP LJMP MAINMAIN ORG ORG 0023H0023H LJMP LJMP COM_INTCOM_INT ORG ORG 1000H1000HMAIN:MAIN:MOV MOV P,#53HP,#53H; ;设置设置(shzh)(shzh)堆栈指针堆栈指针MOV MOV 78H,#20H78H,#20H; ;设置设置(shzh)(shzh)要发送的数据块要发送的数据块的的; ;首、末地址首、末地址 MOV MOV 77H,#00H77
46、H,#00H MOV MOV 76H,#20H76H,#20H MOV MOV 75H,#40H75H,#40H ACALL TRANSACALL TRANS; ;调用发送子程序调用发送子程序HERE:HERE:SJMP SJMP HEREHERETRANS:TRANS:MOV MOV TMOD,#20H TMOD,#20H ; ;设置设置(shzh)(shzh)定时器工作方式定时器工作方式 MOV MOV TH1,#0F3HTH1,#0F3H; ;设置设置(shzh)(shzh)计数器初值计数器初值 第39页/共55页第三十九页,共56页。MOV MOV TL1,#0F3HTL1,#0F3H
47、 MOV MOV PCON,#80HPCON,#80H ; ;波特率加倍波特率加倍 SETB SETB TR1TR1; ;接通计数器计数接通计数器计数 MOV MOV SCON,#40HSCON,#40H ; ;设置串行口工作方式设置串行口工作方式 MOV MOV IE,#00HIE,#00H; ;先关闭中断先关闭中断, , 利用查询方利用查询方 ; ;式发送式发送(f sn)(f sn)地地址帧址帧 CLR CLR F0F0 MOV MOV SBUF,78HSBUF,78H; ;发送发送(f sn)(f sn)首地址高首地址高8 8位位WAIT1:WAIT1:JNB JNB TI,WAIT1
48、TI,WAIT1 CLR CLR TITI MOV MOV SBUF,77HSBUF,77H; ;发送发送(f sn)(f sn)首地址低首地址低8 8位位WAIT2:WAIT2:JNB JNB TI,WAIT2TI,WAIT2 CLR CLR TITI第40页/共55页第四十页,共56页。MOV MOV SBUF,76HSBUF,76H; ;发送末地址高发送末地址高8 8位位WAIT3:WAIT3:JNB JNB TI,WAIT3TI,WAIT3 CLR CLR TITI MOV MOV SBUF,75HSBUF,75H; ;发送末地址低发送末地址低8 8位位WAIT4:WAIT4:JNB
49、JNB TI,WAIT4TI,WAIT4 CLR CLR TITI MOV MOV IE,#90HIE,#90H; ;打开中断允许寄存器打开中断允许寄存器, , 采采; ;用中断方式发送数据用中断方式发送数据(shj)(shj) MOV MOV DPH,78HDPH,78H MOV MOV DPL,77HDPL,77H MOVX MOVX A,DPTRA,DPTR MOV MOV SBUF,ASBUF,A; ;发送首个数据发送首个数据(shj)(shj)WAIT:WAIT:JNB JNB F0,WAITF0,WAIT; ;发送等待发送等待 RETRET第41页/共55页第四十一页,共56页。C
50、OM_INT:COM_INT:CLR CLR TITI; ;关发送中断标志位关发送中断标志位TITI INC INC DPTRDPTR; ;数据指针加数据指针加1, 1, 准备发送下个数据准备发送下个数据 MOV MOV A,DPHA,DPH ; ;判断当前被发送的数据的地址是判断当前被发送的数据的地址是; ;不是末地址不是末地址 CJNE CJNE A,76H,END1A,76H,END1 ; ;不是末地址则跳转不是末地址则跳转 MOVMOVA,DPLA,DPL; ;同上同上 CJNE CJNE A,75H,END1A,75H,END1 SETB SETB F0F0; ;数据发送完毕数据发送
51、完毕(wnb), (wnb), 置置1 1标志位标志位 CLR CLR ES ES ; ;关串行口中断关串行口中断 CLR CLR EAEA; ;关中断关中断 RETRET; ;中断返回中断返回END1: END1: MOVX MOVX A,DPTRA,DPTR; ;将要发送的数据送累加器将要发送的数据送累加器, , ; ;准备发送准备发送 MOV MOV SBUF,ASBUF,A; ;发送数据发送数据 RETIRETI; ;中断返回中断返回 ENDEND第42页/共55页第四十二页,共56页。(2 2)乙机接收程序)乙机接收程序(chngx)(chngx) 中断方式的接收程序中断方式的接收程
52、序(chngx)(chngx)如下:如下:ORG ORG 0000H0000HLJMPLJMP MAINMAINORG ORG 0023H0023HLJMP LJMP COM_INTCOM_INTORG ORG 1000H1000HMAIN: MOV MAIN: MOV SP,#53HSP,#53H; ;设置堆栈指针设置堆栈指针ACALL RECEIACALL RECEI; ;调用接收子程序调用接收子程序(chngx)(chngx)HERE:HERE:SJMP SJMP HEREHERERECEI: MOV RECEI: MOV R0,#78HR0,#78H; ;设置地址接收区设置地址接收区M
53、OV MOV TMOD,#20HTMOD,#20H ; ;设置定时器设置定时器/ /计数器工作方式计数器工作方式第43页/共55页第四十三页,共56页。 MOV MOV TH1,#0F3HTH1,#0F3H ; ;设置波特率设置波特率MOV MOV TL1,#0F3HTL1,#0F3HMOV MOV PCON,#80HPCON,#80H ; ;波特率加倍波特率加倍SETB SETB TR1TR1; ;开计数器开计数器MOV MOV SCON,#50HSCON,#50H ; ;设置串行口工作方式设置串行口工作方式MOV MOV IE,#90HIE,#90H; ;开中断开中断CLR CLR F0F
54、0; ;标志标志(biozh)(biozh)位清位清“0”“0”CLR CLR 7FH7FHWAIT:WAIT:JNB JNB 7F,WAIT7F,WAIT; ;查询标志查询标志(biozh)(biozh)位等待接收位等待接收RETRETCOM_INT:COM_INT:PUSH PUSH DPLDPL; ;压栈压栈, , 保护现场保护现场PUSH PUSH DPHDPHPUSH PUSH AccAcc第44页/共55页第四十四页,共56页。CLR CLR RIRI; ;接收中断标志位清接收中断标志位清“0”“0”JB JB F0,R_DATAF0,R_DATA ; ;判断接收的是数据还是地判断
55、接收的是数据还是地; ;址址, F0, F0= =0 0为地址为地址MOV MOV A,SBUFA,SBUF; ;接收数据接收数据MOV MOV R0,AR0,A; ;将地址帧送指定的寄将地址帧送指定的寄存器存器DEC DEC R0R0CJNE CJNE R0,#74H,RETNR0,#74H,RETNSETB SETB F0F0; ;置标志位置标志位, , 地址接收地址接收完毕完毕RETN: RETN: POP POP AccAcc; ;出栈出栈, , 恢复现场恢复现场POP POP DPHDPHPOP POP DPLDPLRETIRETI; ;中断返回中断返回(fnhu)(fnhu)R_D
56、ATA:R_DATA:MOV MOV DPH,78HDPH,78H; ;数据接收程序区数据接收程序区MOV MOV DPL, 77HDPL, 77H第45页/共55页第四十五页,共56页。MOV MOV A,SBUFA,SBUF; ;接收数据接收数据MOVX MOVX DPTR,ADPTR,A; ;送指定的数据存储单元中送指定的数据存储单元中INC INC 77H77H; ;地址加地址加1 1MOV MOV A,77HA,77H; ;判断当前判断当前(dngqin)(dngqin)接收的数据接收的数据的地址是否的地址是否; ; 应向高应向高8 8位进位位进位JNZ JNZ END2END2;
57、; INC INC 78H78HEND2: MOV END2: MOV A,76HA,76HCJNE CJNE A,78H,RETNA,78H,RETN ; ;判是否为最后一帧数据判是否为最后一帧数据, ,否则继续否则继续MOV MOV A,75HA,75HCJNE CJNE A,77H,RETNA,77H,RETN ; ;是最后一帧数据则各种标志位是最后一帧数据则各种标志位; ; 清清“0”“0”CLR CLR ESESCLR CLR EAEASETB SETB 7FH7FHSJMP SJMP RETNRETN; ;跳入返回子程序区跳入返回子程序区ENDEND第46页/共55页第四十六页,共
58、56页。2 2串行口方式串行口方式2 2应用编程应用编程方式方式2 2和方式和方式1 1有两点不同有两点不同(b tn)(b tn)之处。之处。一个不同一个不同(b tn)(b tn)点:方式点:方式2 2接收接收/ /发送发送1111位信息,第位信息,第0 0位为位为起始位,第起始位,第1 18 8位为数据位,第位为数据位,第9 9位是程控位,该位可由用位是程控位,该位可由用户置户置TB8TB8决定,第决定,第1010位是停止位位是停止位1 1,这是方式,这是方式1 1和方式和方式2 2的。的。另一个不同另一个不同(b tn)(b tn)点:是方式点:是方式2 2的波特率变化范围比方式的波特
59、率变化范围比方式1 1小,方式小,方式2 2的波特率的波特率= =振荡器频率振荡器频率/n/n。当当SMOD=0SMOD=0时,时,n=64n=64。当当SMOD=1SMOD=1时,时,n=32n=32。方式方式2 2的使用和方式的使用和方式3 3基本一样(只是波特率不同基本一样(只是波特率不同(b tn)(b tn)),),所以方式所以方式2 2的具体编程应用,可参照方式的具体编程应用,可参照方式3 3的应用编程。的应用编程。 第47页/共55页第四十七页,共56页。3 3串行口方式串行口方式3 3应用编程应用编程例例7-5 7-5 本例为本例为AT89C51AT89C51用方式用方式3 3
60、发送和接收的应用实例。发送方采发送和接收的应用实例。发送方采用查询方式发送地址帧,采用中断用查询方式发送地址帧,采用中断(zhngdun)(zhngdun)或查询方式发送或查询方式发送数据,接收方采用中断数据,接收方采用中断(zhngdun)(zhngdun)或查询方式接收数据。发和或查询方式接收数据。发和接方均采用接方均采用6MHz6MHz的晶振,波特率为的晶振,波特率为4800b/s4800b/s。发送方首先将存放在发送方首先将存放在78H78H和和77H77H单元中的地址发送给接收方,然后发单元中的地址发送给接收方,然后发送数据送数据00H00HFFHFFH,共,共256256个数据。个
61、数据。(1 1)甲机发送程序)甲机发送程序ORG ORG 0000H 0000H LJMP LJMP MAINMAINORG ORG 0023H0023H LJMP LJMP COM_INTCOM_INT第48页/共55页第四十八页,共56页。ORG ORG 1000H1000HMAIN:MAIN: MOV MOV SP,#53HSP,#53H; ;设置堆栈指针设置堆栈指针(zhzhn)(zhzhn)MOV MOV 78H,#20H78H,#20H; ;设置要存放数据的单元的首地址设置要存放数据的单元的首地址MOV MOV 77H,#00H77H,#00HACALL TRANACALL TRA
62、N; ;调用发送子程序调用发送子程序HERE:HERE: SJMP SJMP HEREHERETRANS:MOV TRANS:MOV TMOD,#20HTMOD,#20H; ;设置定时器设置定时器/ /计数器工作方式计数器工作方式 MOV MOV TH1,#0FDHTH1,#0FDH; ;设置波特率为设置波特率为48004800 MOV MOV TL1,#0FDHTL1,#0FDHSETB SETB TR1TR1; ;开定时器开定时器MOV MOV SCON,#0E0HSCON,#0E0H ; ;设置串行口工作方式为方式设置串行口工作方式为方式3 3SETB SETB TB8TB8; ;设置第
63、设置第9 9位数据位位数据位MOV MOV IE,#00HIE,#00H; ;关中断关中断MOV MOV SBUF,78HSBUF,78H; ;查询方式发送首地址高查询方式发送首地址高8 8位位第49页/共55页第四十九页,共56页。WAIT:WAIT: JNB JNB TI,WAITTI,WAITCLR CLR TITIMOV MOV SBUF,77HSBUF,77H; ;发送首地址发送首地址(dzh)(dzh)低低8 8位位WAIT2:JNB WAIT2:JNB TI,WAIT2TI,WAIT2CLR CLR TITI MOV MOV IE,#90HIE,#90H; ;开中断开中断 CLR
64、 CLR TB8TB8 MOV MOV A,#00HA,#00H MOV MOV SBUF,ASBUF,A; ;开始发送数据开始发送数据WAIT1:CJNE WAIT1:CJNE A,#0FFH,WAIT1A,#0FFH,WAIT1; ;判断数据是否发送完毕判断数据是否发送完毕 CLR CLR ESES; ;发送完毕则关中断发送完毕则关中断 RET RETCOM_INT:CLR TICOM_INT:CLR TI; ;中断服务子程序段中断服务子程序段 INC INC A A; ;要发送数据值加要发送数据值加1 1 第50页/共55页第五十页,共56页。MOV MOV SBUF,ASBUF,A;
65、;发送数据发送数据RETIRETI; ;中断返回中断返回 ENDEND(2 2)乙机接收程序)乙机接收程序(chngx)(chngx)接收方把先接收到的数据送给数据指针,将其作为数据存接收方把先接收到的数据送给数据指针,将其作为数据存放的首地址,然后将接下来接收到的数据存放到以先前接放的首地址,然后将接下来接收到的数据存放到以先前接收的数据为首地址的单元中去。收的数据为首地址的单元中去。采用中断方式的接收程序采用中断方式的接收程序(chngx)(chngx):ORG ORG 0000H0000H LJMP LJMP MAINMAIN ORG ORG 0023H0023H LJMP LJMP C
66、OM_INT COM_INT 第51页/共55页第五十一页,共56页。ORG ORG 1000H1000HMAIN:MAIN:MOV MOV SP,#53HSP,#53H; ;设置设置(shzh)(shzh)堆栈指针堆栈指针 MOV MOV R0,#0FEHR0,#0FEH; ;设置设置(shzh)(shzh)地址帧接收计数地址帧接收计数寄存寄存; ;器初值器初值 ACALL RECEIACALL RECEI; ;调用接收子程序调用接收子程序HERE:HERE: SJMP SJMP HEREHERERECEI:RECEI:MOV MOV TMOD,#20HTMOD,#20H; ;设定时器设定时
67、器/ /计数器工作方式计数器工作方式 MOV MOV TH1,#0FDHTH1,#0FDH; ;设置设置(shzh)(shzh)波特率为波特率为48004800 MOV MOV TL1,#0FDHTL1,#0FDH SETB SETB TR1TR1; ;开定时器开定时器 MOV MOV IE,#90HIE,#90H; ;开中断开中断 MOV MOV SCON,#0F0HSCON,#0F0H ; ;设串口工作方式允许接收设串口工作方式允许接收第52页/共55页第五十二页,共56页。SETB SETB F0F0; ;设置标志位设置标志位WAIT:WAIT:JB JB F0,WAITF0,WAIT;
68、 ;等待接收等待接收(jishu)(jishu) RETRETCOM_INT:COM_INT:CLR CLR RIRI; ;接收接收(jishu)(jishu)中断标志位中断标志位清清“0”“0” MOV MOV C,RB8C,RB8; ;对第对第9 9位数据进行判位数据进行判断断, , ; ;是数据还是地址是数据还是地址 JNC JNC PD2PD2; ;是地址则送给数据指针指是地址则送给数据指针指; ;示器示器DPTRDPTR INC INC R0R0 MOV MOV A,R0A,R0 JZ JZ PDPD MOV MOV DPH,SBUFDPH,SBUF SJMP SJMP PD1PD1
69、PD:PD:MOV MOV DPL,SBUFDPL,SBUF CLR CLR SM2SM2; ;地址标志位清地址标志位清“0” “0” 第53页/共55页第五十三页,共56页。PD1:PD1:RETIRETIPD2:PD2:MOV MOV A,SBUFA,SBUF; ;接收数据接收数据 MOVX MOVX DPTR,A DPTR,A INC INC DPTRDPTR CJNE CJNE A,#0FFH,PD1A,#0FFH,PD1; ;判断是否为最后一帧数据判断是否为最后一帧数据 SETB SETB SM2SM2 ; ;如果是如果是, , 则相关标志位清则相关标志位清“0”“0” CLR CL
70、R F0F0 CLR CLR ESES RETIRETI; ;中断中断(zhngdun)(zhngdun)返回返回 ENDEND一般说,方式一般说,方式2 2确定波特率比较理想,它不需用中断确定波特率比较理想,它不需用中断(zhngdun)(zhngdun)服务程序设初值,且波特率比较准确。在用户使用的波特率不是服务程序设初值,且波特率比较准确。在用户使用的波特率不是很低的情况下,建议用定时器很低的情况下,建议用定时器T1T1的方式的方式2 2来确定波特率。来确定波特率。第54页/共55页第五十四页,共56页。谢谢您的观看(gunkn)!第55页/共55页第五十五页,共56页。内容(nirng)总结控制寄存器共两个:特殊功能寄存器SCON和PCON。(1)SM0、SM1串行口4种工作方式的选择位。(2)SM2 多机通信控制位。(3)REN允许串行接收位。(4)TB8发送的第9位数据(shj)。(5)RB8接收到的第9位数据(shj)。(6)TI发送中断标志位。(7)RI接收中断标志位。要保证主机与所选择的从机实现可靠地通信,必须保证串口具有识别功能。谢谢您的观看第五十六页,共56页。