《51单片机 串口.ppt》由会员分享,可在线阅读,更多相关《51单片机 串口.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6 6章章 MCS-51MCS-51的串行口的串行口1 12 2内容简介:内容简介:通信方式:通信方式:串行口与并行口串行口与并行口串行通讯的方式:串行通讯的方式:异步通信异步通信和和同步通信同步通信1 1 串行口的结构串行口的结构2 2 串行口的工作方式串行口的工作方式3 3 多机通讯多机通讯4 4 波特率的制定方法波特率的制定方法5 5 串行口的编程和应用串行口的编程和应用 3 3串行口与并行口串行口与并行口并行通信并行通信:8:8位数据同时发送或接收。位数据同时发送或接收。80805151外外部部设设备备并行通信并行通信串行通信串行通信:数据一位一位顺序发送或接收。数据一位一位顺序发
2、送或接收。8058051 18058051 1TXDTXDTXDTXDRXDRXDRXDRXD串行通信串行通信4 4异步通信:异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。它用一个起始位表示字符的开始,用停止位表示字符的结束。其其每每帧帧的的格格式式如如下下:在在一一帧帧格格式式中中,先先是是一一个个起起始始位位0 0,然然后后是是8 8个个数数据据位位,规规定定低低位位在在前前,高高位位在在后后,接接下下来来是是奇奇偶偶校校验验位位(可可以以省省略略),最最后后是是停停止止位位1 1。用用这这种种格格式式表表示示字字符符,则则字字符可以一个接一个地传送。符可以一个接一个地传
3、送。在在异异步步通通信信中中,CPUCPU与与外外设设之之间间必必须须有有两两项项规规定定,即即字字符符格格式和波特率。式和波特率。字字符符格格式式的的规规定定是是双双方方能能够够在在对对同同一一种种0 0和和1 1的的串串理理解解成成同同一一种种意意义义。原原则则上上字字符符格格式式可可以以由由通通信信的的双双方方自自由由制制定定,但但从从通通用用、方方便便的的角角度度出出发发,一一般般还还是是使使用用一一些些标标准准为为好好,如如采采用用ASCIIASCII标准。标准。波波特特率率即即数数据据传传送送的的速速率率,其其定定义义是是每每秒秒钟钟传传送送的的二二进进制制数数的的位位数数。例例如
4、如,数数据据传传送送的的速速率率是是120120字字符符/s/s,而而每每个个字字符符如如上上述规定包含述规定包含1010数位,则传送波特率为数位,则传送波特率为12001200波特。波特。5 5同步通信:同步通信:在在异异步步通通信信中中,每每个个字字符符要要用用起起始始位位和和停停止止位位作作为为字字符符开开始始和和结结束束的的标标志志,占占用用了了时时间间;所所以以在在数数据据块块传传递递时时,为为了了提提高高速速度度,常常去去掉掉这这些些标标志志,采采用用同同步步传传送送。由由于于数数据据块块传传递递开开始始要要用用同同步步字字符符来来指指示示,同同时时要要求求由由时时钟钟来来实实现现
5、发发送送端端与与接接收收端端之之间间的的同同步步,故故硬件较复杂硬件较复杂。6 6通信方向:通信方向:单单工工传传送送:在在串串行行通通讯讯中中,把把通通讯讯接接口口只只能能发发送送或或接接收的单向传送方法叫单工传送;收的单向传送方法叫单工传送;双双工工传传送送:而而把把数数据据在在甲甲乙乙两两机机之之间间的的双双向向传传递递,称称之之为为双双工工传传送送。在在双双工工传传送送方方式式中中又又分分为为半半双双工工传传送送和全双工传送和全双工传送。1 1、半半双双工工传传送送:是是两两机机之之间间不不能能同同时时进进行行发发送送和和接接收,任一时该,只能发或者只能收信息。收,任一时该,只能发或者
6、只能收信息。2 2、全双工传送:、全双工传送:是两机之间能同时进行发送和接收。是两机之间能同时进行发送和接收。7 76 6.1.1 串行口的结构串行口的结构 MCS-51MCS-51单单片片机机内内部部有有一一个个功功能能很很强强的的全全双双工工的的串串行行口口,该该串串行行口口有有四四种种工工作作方方式式,波波特特率率可可用用软软件件设设置置,由由片片内内的的定定时时器器/计计数数器器产产生生。串串行行口口接接收收、发发送送数数据据均均可可触触发发中中断断系系统,使用十分方便。统,使用十分方便。MCS-51MCS-51单单片片机机内内部部的的串串行行口口,有有两两个个物物理理上上独独立立地地
7、接接收收、发发送送缓缓冲冲器器SBUFSBUF,可可同同时时发发送送、接接收收数数据据,发发送送缓缓冲冲器器只只能能写写入入不不能能读读出出,接接收收缓缓冲冲器器只只能能读读出出不不能能写写入入,两两个个缓缓冲冲器器共用一个共用一个字节地址字节地址(99H)(99H)。控制控制MCS-51MCS-51单片机串行口的控制寄存器共有两个:单片机串行口的控制寄存器共有两个:串行口控制寄存器串行口控制寄存器SCONSCON 特殊功能寄存器特殊功能寄存器PCONPCON8 86 6.1.1.1.1 串行口控制寄存器串行口控制寄存器SCONSCONSCONSCONRIRITITIRB8RB8TB8TB8R
8、ENRENSM2SM2SM1SM1SM0SM0D7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98H SM0SM0、SM1SM1:串行口:串行口4 4种工作方式的选择位。种工作方式的选择位。SM2SM2:多机通讯控制位。:多机通讯控制位。RENREN:允许串行接收控制位。:允许串行接收控制位。TB8TB8:是工作在方式:是工作在方式2 2和和3 3时,要发送的第时,要发送的第9 9位数据。位数据。RB8RB8:当工作在方式:当工作在方式2 2和和3 3时,为收到的第时,为收到的第9 9位数据。位数据。TITI:发送
9、中断标志位。发送中断标志位。RIRI:接收中断标志位。接收中断标志位。9 9SM0SM0、SM1SM1:串行口:串行口4 4种工作方式的选择位种工作方式的选择位SCONSCONRIRITITIRB8RB8TB8TB8RENRENSM2SM2SM1SM1SM0SM0D7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98HSM0 SM1 SM0 SM1 方式方式 功能功能 0 0 0 0 方式方式0 0 同步移位寄存器方式同步移位寄存器方式 0 1 0 1 方式方式1 1 8 8位串行口(波特率可变)位串行口(波特率可变
10、)1 0 1 0 方式方式2 2 9 9位串行口(波特率固定)位串行口(波特率固定)1 1 1 1 方式方式3 3 9 9位串行口(波特率可变)位串行口(波特率可变)1010SM2SM2:允许方式:允许方式2 2和和3 3的的多机通讯多机通讯控制位。控制位。SCONSCONRIRITITIRB8RB8TB8TB8RENRENSM2SM2SM1SM1SM0SM0D7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98H(1)(1)方式方式2 2,方式,方式3 3下,下,SM2=1SM2=1,接收到,接收到第第9 9位位R
11、B8=0RB8=0时,不激活时,不激活RIRI,不能向,不能向CPUCPU申请中断申请中断 如接收到如接收到第第9 9位位RB8=1RB8=1时,激活时,激活RIRI,将,将RI=1RI=1,向,向CPUCPU申请中断申请中断(2)(2)方式方式2 2,方式,方式3 3下,下,SM2=0SM2=0,不管,不管RB8=0RB8=0或或RB8=1RB8=1,都激活,都激活RI=1RI=1。(3)(3)方方 式式 1 1,当当 SM2=1SM2=1时时,只只 有有 接接 收收 到到 有有 效效 的的 停停 止止 位位 时时,才才 激激 活活 RIRI 当当SM2=0SM2=0时时,正常接收。,正常接
12、收。(4)(4)方式方式0 0,SM2SM2必须清必须清0,0,即即SM2=0SM2=0。1111RENREN:允许串行接收控制位:允许串行接收控制位SCONSCONRIRITITIRB8RB8TB8TB8RENRENSM2SM2SM1SM1SM0SM0D7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98HRENREN:允允许许串串行行接接收收控控制制位位,由由软软件件置置位位或或清零。清零。REN=1REN=1,允许允许串行口接收数据。串行口接收数据。REN=0REN=0,禁止禁止串行口接收数据。串行口接收数据。
13、1212TB8TB8和和RB8RB8:SCONSCONRIRITITIRB8RB8TB8TB8RENRENSM2SM2SM1SM1SM0SM0D7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98HTB8TB8:当当串串行行口口工工作作在在方方式式2 2、方方式式3 3,要要发发送送的的第第9 9位位数数据据时时放放在在TB8TB8中中(D D8 8=第第9 9位位),需需要要时时由由软软件件置置1 1或或清清0 0。在在许许多多的的通通讯讯协协议议中中该该位位是是奇奇偶偶校校验验位位。在在多多机机通通讯讯中中用用来
14、来表表示示是是地地址帧还是数据帧,址帧还是数据帧,TB8TB81 1为地址帧,为地址帧,TB8TB80 0为数据帧。为数据帧。RB8RB8:方方式式2 2、方方式式3 3下下,要要接接收收的的第第9 9位位数数据据。可可能能是是奇奇偶偶校校验位或在多机通讯中为地址帧或数据帧的标识位。验位或在多机通讯中为地址帧或数据帧的标识位。方式方式1 1时时,SM2=0SM2=0,RB8RB8是已接收的停止位。是已接收的停止位。方式方式0 0时时,不使用,不使用RB8RB8。1313TITI和和RIRISCONSCONRIRITITIRB8RB8TB8TB8RENRENSM2SM2SM1SM1SM0SM0D
15、7D6D5D4D3D2D1D098H9FH9FH9EH9EH9DH9DH9CH9CH9BH9BH9AH9AH99H99H98H98HTITI:发送发送中断标志中断标志 由由硬硬件件在在方方式式0 0串串行行发发送送第第8 8位位结结束束时时置置位位或或其其他他方方式式串串行行发送停止位的开始时置位。发送停止位的开始时置位。必须由软件清零必须由软件清零TITI。RIRI:接收接收中断标志:中断标志:由由硬硬件件在在方方式式0 0串串行行接接收收到到第第8 8位位结结束束时时置置位位或或其其他他方方式式下下串行接收停止位的中间时置位,串行接收停止位的中间时置位,必须由软件清零必须由软件清零RIRI
16、。14146 6.1.2.1.2 特殊功能寄存器特殊功能寄存器PCONPCONPCONPCONSMODSMODD7D6D5D4D3D2D1D087HPCONPCON:电源控制寄存器:电源控制寄存器SMODSMOD:串行口波特率系数控制位:串行口波特率系数控制位SMOD=1SMOD=1波特率加倍波特率加倍SMOD=0SMOD=0波特率不加倍波特率不加倍 D D0 0D D6 6:掉电方式控制位。:掉电方式控制位。15156 6.2.2 串行口的工作方式串行口的工作方式SM0 SM1 SM0 SM1 方式方式 功能功能 0 0 0 0 方式方式0 0 同步移位寄存器方式同步移位寄存器方式 0 1
17、0 1 方式方式1 1 8 8位串行口(波特率可变)位串行口(波特率可变)1 0 1 0 方式方式2 2 9 9位串行口(波特率固定)位串行口(波特率固定)1 1 1 1 方式方式3 3 9 9位串行口(波特率可变)位串行口(波特率可变)16166 6.2.1.2.1 方式方式0 0 方式方式0 0为移位寄存器输入为移位寄存器输入/输出方式输出方式。可外接移位寄。可外接移位寄存器以扩展存器以扩展I/OI/O口,也可以外接同步输入口,也可以外接同步输入/输出设备。输出设备。8 8位串行数据者是从位串行数据者是从RXDRXD输入或输出,输入或输出,TXDTXD用来输出同用来输出同步脉冲。步脉冲。方
18、式方式0 0输出输出 方式方式0 0输入输入1717方式方式0 0 输出输出 数据从数据从RXDRXD引脚串行输出,引脚串行输出,TXDTXD引脚输出移位脉冲。引脚输出移位脉冲。当当一一个个数数据据写写入入串串行行口口发发送送缓缓冲冲器器时时,串串行行口口即即将将8 8位位数数据据以以fosc/12fosc/12的的固固定定波波特特率率从从RXDRXD引引脚脚输输出出,低低位位在在先先。发发送送完完8 8位位数数据据置置“1 1”中中断断标标志志位位TITI。CPUCPU响响应应TITI中断,标志位必须由用户程序清中断,标志位必须由用户程序清0 0。1818方式方式0 0 输入:输入:RENR
19、EN为为串串行行口口接接收收器器允允许许接接收收控控制制位位,RENREN0 0,禁禁止止接接收收,RENREN1 1,允允许许接接收收。当当串串行行口口置置为为方方式式0 0,并并置置“l l”RENREN位位,串串行行口口处处于于方方式式0 0输输入入。引引脚脚RXDRXD为为数数据据输输入入端端,TXDTXD为为移移位位脉脉冲冲信信号号输输出出端端,接接收收器器也也以以fosc/12fosc/12的的固固定定波波特特率率采采样样RXDRXD引引脚脚的的数数据据信信息息,当当接接收收器器接接收收到到8 8位位数数据据时时置置“l l”中中断断标标志志RIRI。CPUCPU响应响应RIRI中
20、断,标志位必须由用户程序清中断,标志位必须由用户程序清0 0。1919方式方式1 1:串行口被控制为串行口被控制为波特率可变的波特率可变的8 8位异步通信接口位异步通信接口。波特率波特率=(2 2SMODSMOD/32/32)T1T1的溢出率的溢出率式中式中SMODSMOD为为PCONPCON寄存器的最高位的值寄存器的最高位的值(0(0或或1)1)。一一帧帧信信息息包包含含1010位位:1 1位位起起始始位位(低低电电平平0 0)+8+8位数据位(低位在先)位数据位(低位在先)+1+1位停止位(高电平位停止位(高电平1 1)方式方式1 1发送:发送:TXD-TXD-发送端发送端方式方式1 1接
21、收:接收:RXD-RXD-接收端接收端2020方式方式1 1发送发送 CPUCPU执执行行写写入入SBUFSBUF指指令令后后,启启动动串串行行口口发发送送数数据据,数数据据从从发发送送端端发发送送出出去去,发发送送完完成成后后,将将TITI置置位位,向向CPUCPU申申请请中中断断,再再次发送之前必须由软件清次发送之前必须由软件清0 0。2121方式方式1 1接收接收 当当REN=1REN=1且且采采样样到到RXDRXD引引脚脚的的负负跳跳变变,并并且且接接收收到到有有效效的的起起始始位位时时,才才开开始始接接收收本本帧帧的的其其余余信信息息。当当满满足足RI=0RI=0且且SM2=0SM2
22、=0或或接接收收到到停停止止位位为为1 1时时,接接收收数数据据有有效效,装装入入SBUFSBUF,停停止止位位装装入入RB8RB8中中,同同时时置置位位RI=1RI=1,向向CPUCPU申申请请中中断断。若若有有一一个个条条件件不不满满足足,则信息丢失。则信息丢失。2222方式方式2 2 9 9位异步通信接口位异步通信接口(固定波特率固定波特率)波特率:(波特率:(2 2SMODSMOD/64/64)f fOSCOSC 一一帧帧信信息息1111位位:1 1位位起起始始位位+8 8位位数数据据位位+1+1位位可可编编程程位位+1+1位停止位位停止位1 1位位可可编编程程位位:接接收收时时放放到
23、到RB8RB8中中,发发送送时时放放到到TB8TB8中中,奇偶校验位可放到可编程位中作为校验。奇偶校验位可放到可编程位中作为校验。方式方式2 2的发送:的发送:方式方式2 2的接收:的接收:2323方式方式2 2的发送的发送方方式式2 2的的发发送送:先先把把可可编编程程位位放放到到TB8TB8中中,然然后后CPUCPU执执行行一一条条写写入入发发送送缓缓冲冲区区,当当发发送送数数据据到到停停止止位位时时,将将TITI置位,当要送到下一帧时,先将置位,当要送到下一帧时,先将TITI清清0 0。2424方式方式2 2的接收的接收方方式式2 2的的接接收收:与与方方式式1 1相相同同,当当REN=
24、1REN=1且且采采样样到到RXDRXD引引脚脚的的负负跳跳变变,并并且且接接收收到到有有效效的的起起始始位位时时,才才开开始始接接收收本本帧帧的的其其余余信信息息。当当满满足足RI=0RI=0且且SM2=0SM2=0或或接接收收到到的的第第9 9数数据据位位为为1 1时时,接接收收数数据据有有效效,装装入入SBUFSBUF,第第9 9位位数数据据装装入入RB8RB8中中,同同时时置置位位RI=1RI=1,向向CPUCPU申请中断。若有一个条件不满足,则信息丢失。申请中断。若有一个条件不满足,则信息丢失。2525方式方式3 93 9位异步通信接口位异步通信接口波特率波特率=(2 2SMODSM
25、OD/32/32)T1T1溢出率(同方式溢出率(同方式1 1算法相同)算法相同)一一帧帧信信息息1111位位:1 1位位起起始始位位+8 8位位数数据据位位+1+1位位可可编编程程位位+1+1位停止位位停止位1 1位位可可编编程程位位:接接收收时时放放到到RB8RB8中中,发发送送时时放放到到TB8TB8中中,奇偶校验位可放到可编程位中作为校验。奇偶校验位可放到可编程位中作为校验。除波特率不同,其它同方式除波特率不同,其它同方式2 2的发送一样:的发送一样:除波特率不同,其它同方式除波特率不同,其它同方式2 2的接收一样:的接收一样:26266 6.3.3 多机通信多机通信 串串行行口口控控制
26、制寄寄存存器器SCONSCON中中的的SM2SM2为为方方式式2 2或或方方式式3 3的的多多机机通通信信控控制制位位,当当串串行行口口以以方方式式2 2或或方方式式3 3工工作作时时,若若SM2SM2程程控控为为l l,此此时时只只有有当当串串行行口口接接收收到到的的第第9 9位位数数据据RB8RB81 1时时,才才置置1 1中中断断标标志志RIRI,若若接接收收到到的的RB8RB80 0,则则不不产产生生中中断断标标志志,信信息息被被丢丢失失。应应用用MCS-51MCS-51串串行行口口的这个特性,便可实现多机通讯。的这个特性,便可实现多机通讯。多多机机通通信信举举例例:有有一一个个主主机
27、机(MCS-5l(MCS-5l或或其其它它具具有有串行接口的微机串行接口的微机)和三个由和三个由80318031组成的从机系统。组成的从机系统。2727多机通信多机通信 设设在在一一个个多多机机系系统统中中有有一一个个主主机机(MCS-5l(MCS-5l或或其其它它具具有有串串行行接接口口的的微微机机)和和三三个个由由80318031组组成成的的从从机机系系统统,从从机机的的地地址址分分别别为为00H00H、0lH0lH和和02H02H。(地址。(地址=1=1,数据,数据=0=0)。)。1 1、发发送送地地址址TB8=1TB8=1:当当SM2=1SM2=1且且RB8=1RB8=1,激激活活RI
28、RI,进进入入中中断断服服务务子程序,进行地址比较。如地址相同,则子程序,进行地址比较。如地址相同,则SM2=0SM2=0,否则,否则SM2=1SM2=1。2 2、发送数据、发送数据T TB8=0B8=0:当:当SM2=1SM2=1且且RB8=0RB8=0,不能激活,不能激活RIRI。当当SM2=0SM2=0且且RB8=0RB8=0,可以激活,可以激活RIRI。可以进入中断服务子程序,接收数据。可以进入中断服务子程序,接收数据。28286 6.4.4波特率的制定方法波特率的制定方法波波特特率率定定义义:串串行行口口每每秒秒钟钟发发送送(或或接接收收)的的位位数数称称为为波特率。波特率。当当串串
29、行行口口工工作作于于方方式式1 1和和方方式式3 3时时,波波特特率率是是可可变变的的,由由SMODSMOD位位和和定定时时器器的的溢溢出出率率确确定定,允允许许用用户户所所取取的波特率范围比较大。的波特率范围比较大。一、定时器一、定时器T1T1工作于方式工作于方式0 0 的波特率求法:的波特率求法:二、定时器二、定时器T1T1工作于方式工作于方式1 1 的波特率求法:的波特率求法:二、定时器二、定时器T1T1工作于方式工作于方式2 2 的波特率求法:的波特率求法:2929一、定时器一、定时器T1T1工作于工作于方式方式0 0 的波特率求法:的波特率求法:当当串串行行口口工工作作于于方方式式1
30、 1和和方方式式3 3时时,波波特特率率是是可可变变的的,由由SMODSMOD位位和和定定时时器器的的溢溢出出率率确确定定,允允许许用用户户所所取取的的波波特特率率范范围围比比较大。较大。一、定时器一、定时器T1T1工作于方式工作于方式0 0 的波特率求法:的波特率求法:方方式式0 0相相当当于于定定时时器器T1T1是是一一个个1313位位的的定定时时器器/计计数数器器,它它采采用用TH1TH1的的八八位位和和TL1TL1的的低低五五位位组组成成一一个个1313位位计计数数器器,它它的的波波特特率率按下式计算:按下式计算:波特率波特率=(2 2SMODSMOD/32/32)T1T1溢出率溢出率
31、 T1 T1溢出率溢出率=1/(T1=1/(T1溢出时间)溢出时间)T1T1溢溢出出时时间间=(2 21313-a a+执执行行置置1313位位定定时时器器值值的的中中断断处处理理程程序的机器周期数序的机器周期数)*12/12/晶振频率晶振频率 注意:注意:a a是定时器的计数初值,就是我们所要求的值。是定时器的计数初值,就是我们所要求的值。3030二、定时器二、定时器T1T1工作于工作于方式方式1 1 的波特率求法:的波特率求法:当当串串行行口口工工作作于于方方式式1 1和和方方式式3 3时时,波波特特率率是是可可变变的的,由由SMODSMOD位位和和定定时时器器的的溢溢出出率率确确定定,允
32、允许许用用户户所所取取的的波波特特率率范范围围比比较大。较大。一、定时器一、定时器T1T1工作于方式工作于方式1 1 的波特率求法:的波特率求法:方方式式1 1相相当当于于定定时时器器T1T1是是一一个个1616位位的的定定时时器器/计计数数器器,它它的的波特率按下式计算:波特率按下式计算:波特率波特率=(2 2SMODSMOD/32/32)T1T1溢出率溢出率 T1 T1溢出率溢出率=1/(T1=1/(T1溢出时间)溢出时间)T1T1溢溢出出时时间间=(2 21616-a a+执执行行置置1616位位定定时时器器值值的的中中断断处处理理程程序的机器周期数序的机器周期数)*12/12/晶振频率
33、晶振频率 注意:注意:a a是定时器的计数初值,就是我们所要求的值。是定时器的计数初值,就是我们所要求的值。3131二、定时器二、定时器T1T1工作于工作于方式方式2 2 的波特率求法:的波特率求法:当当串串行行口口工工作作于于方方式式1 1和和方方式式3 3时时,波波特特率率是是可可变变的的,由由SMODSMOD位位和和定定时时器器的的溢溢出出率率确确定定,允允许许用用户户所所取取的的波波特特率率范范围围比比较大。较大。一、定时器一、定时器T1T1工作于方式工作于方式2 2 的波特率求法:的波特率求法:方方式式2 2 是是8 8位位自自动动装装入入初初值值的的定定时时器器,它它的的波波特特率
34、率按按下下式式计计算:算:波特率波特率=(2 2SMODSMOD/32/32)T1T1溢出率溢出率 T1 T1溢出率溢出率=1/(T1=1/(T1溢出时间)溢出时间)T1 T1溢出时间溢出时间=(2 28 8-a-a)*12/12/晶振频率晶振频率 注意:注意:a a是定时器的计数初值,就是我们所要求的值。是定时器的计数初值,就是我们所要求的值。一一般般来来讲讲,定定时时器器方方式式2 2用用来来确确定定波波特特率率是是比比较较理理想想的的,它它不不需需要要中中断断服服务务程程序序来来置置数数,且且算算出出的的波波特特率率比比较较准准确确,建建议议使用定时器使用定时器T1T1的方式的方式2 2
35、来确定波特率。来确定波特率。三、波特率的计算三、波特率的计算 在串行通信中,收发双方对发送或接收数据的在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式四种工作方式,其中方式0和方式和方式2的波特率是固定的波特率是固定的,而方式的,而方式1和方式和方式3的波特率是可变的,由定时器的波特率是可变的,由定时器T1的溢出率来决定。的溢出率来决定。串行口的四种工作方式对应串行口的四种工作方式对应三种波特率三种波特率。由于。由于输入的移位时钟的来源不同,所以,各种方式的波输入的移位时钟的来源不同,所以,各
36、种方式的波特率计算公式也不相同。特率计算公式也不相同。方式方式0的波特率的波特率 =fosc/12方式方式2的波特率的波特率 =(2SMOD/64)fosc 方式方式1的波特率的波特率 =(2SMOD/32)(T1溢出率)溢出率)方式方式3的波特率的波特率 =(2SMOD/32)(T1溢出率)溢出率)当当T1作为波特率发生器时,最典型的用法是使作为波特率发生器时,最典型的用法是使T1工作在自动再装入工作在自动再装入的的8位定时器方式(即方式位定时器方式(即方式2,且,且TCON的的TR1=1,以启动定时器)。这,以启动定时器)。这时溢出率取决于时溢出率取决于TH1中的计数值。中的计数值。T1溢
37、出率溢出率=fosc/12256(TH1)在单片机的应用中,常用的晶振频率为:在单片机的应用中,常用的晶振频率为:12MHz和和11.0592MHz。所。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。如表所示。串行口工作之前,应对其进行初始化,主要是设置串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器产生波特率的定时器1、串行口控制和中断控制。具体、串行口控制和中断控制。具体步骤如下:步骤如下:确定确定T1的工作方式的工作方式(编程(编程TMOD寄存器);寄存器);计算计算T1的初值的初值,
38、装载,装载TH1、TL1;启动启动T1(编程(编程TCON中的中的TR1位);位);确定确定串行口控制串行口控制(编程(编程SCON寄存器);寄存器);串行口在中断方式工作时,要进行中断设置(编程串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。寄存器)。3535练习练习1-1-串行口波特率串行口波特率设设串串行行口口工工作作在在方方式式1 1,定定时时器器T1T1工工作作方方式式2 2,波波特特率率=2400bit/s=2400bit/s f fOSCOSC=6MH=6MHZ Z SMOD=0SMOD=0,求求计计数数初初值值a a。(若若SMOD=1SMOD=1呢?)。呢?)
39、。解:波特率解:波特率=(2 2SMODSMOD/32/32)*T1T1溢出率溢出率 =(2 2SMODSMOD/32/32)*1/1/(2 28 8a a)*(12/f12/fOSCOSC)2400=(1/32)*1/(2 2400=(1/32)*1/(28 8a a)*12/(6*1012/(6*106 6)256-a=(6*10 256-a=(6*106 6)/(2400*32*12)=)/(2400*32*12)=6.576.57 a=256-7=249a=256-7=249 a=a=(249249)D D=(F9F9)H H 若若SMOD=1SMOD=1 a=a=(243243)D
40、D=(F3F3)H H#include#define uchar unsigned char#define uint unsigned intuchar idata trdata=8,9,S,5,1,0 x0d,0 x0a,0 x00;uchar idata trdata1=R,I,C,H,M,C,U,0 x0d,0 x0a,0 x00;3636main()uchar i;uint j;SCON=0 x40;/串口方式1PCON=0;/SMOD=0REN=1;/允许接收TMOD=0 x20;/定时器1定时方式2TH1=0 xfd;/11.0592M 9600波特率3737TL1=0 xfd;TR1=1;/启动定时器 while(1)i=0;while(trdatai!=0 x00)SBUF=trdatai;while(TI=0);TI=0;i+;for(j=0;j50000;j+);3838i=0;while(trdata1i!=0 x00)SBUF=trdata1i;while(TI=0);TI=0;i+;for(j=0;j50000;j+);3939