- 1、本文档共228页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
方式2的波特率是固定的,为振荡器频率的1/32或1/64。
方式2的帧格式如下:
1)方式2发送
发送数据由TXD端输出,发送一帧信息为11位,其中1位起始位(0)、8位数据位(先低位后高位)、1位可控位1或0的第9位数据和1位停止位(1)。附加的第9位数据为SCON中的TB8(SCON中的D3位)的值,它由软件置位或清零,可作为多机通信中地址/数据信息的标志位,也可作为数据的奇偶校验位。
发送前,先用软件将TI位清零,根据通信协议将第9位数据写入状态控制寄存器SCON的TB8位,如设为奇偶校验位等,然后将要发送的8位数据写入SBUF就可以启动发送器。发送过程是由执行任何一条以SBUF为目的寄存器的指令而启动的,指令(MOVSBUF,X)(X可以是A,Ri,地址等)将8位数据装入SBUF中,同时还把TB8装到发送移位寄存器的第9位上,并通知发送控制器一起进行发送,则数据就从TXD端输出。待一帧数据发送完毕,置TI为1,通知CPU可以发送下一帧。2)方式2接收
当串行口工作于方式2,且REN=1,RI=0时,串行口以方式2接收数据。方式2的接收与方式1基本相似。数据由RXD端输入,当采样到RXD端由1到0的负跳变,并判断起始位有效后,便开始接收一帧信息,当接收器接收到第9位数据后,会根据SM2的状态和接收到的RB8的状态决定此信息是否有效,并申请中断,接收数据。具体情况如下:(1)当SM2=0时,无论RB8是1还是0,串口接收发来的数据,即将收到的数据送入SBUF(接收数据缓冲器),第9位数据送入RB8,并对RI置1。
(2)当SM2=1时,若RB8=1,表示在多机通信下,接收的信息是地址帧,此时RI置“1”,串口将接收发来的地址;若RB8=0,表示接收的是数据帧,但不是发给本机的,此时RI不能置1,因而SBUF所接收的数据帧将丢失。4.方式3
方式3为波特率可变的9位异步通信方式,除了波特率有区别之外,其余都与方式2相同。
5.3.5MCS51串口的波特率
串行口的通信波特率恰好反映了串行传输数据的速率。通信波特率的选用,不仅和所选通信设备、传输距离有关,还受传输线情况制约。用户应根据实际需要加以正确选用。
1)方式0的波特率
在方式0下,串口的波特率是固定的,其值为fosc/12(fosc为主机频率)。2)方式2的波特率
方式2的波特率是固定的,为振荡器频率的1/32或1/64。用户可以根据PCON中SMOD位的状态来确定串行口在哪个波特率下工作。确定公式为
其中:若SMOD=0,则所选波特率为 若SMOD
=1,则波特率为3)方式1或方式3的波特率
在这两种方式下,串口波特率是由定时器T1的溢出率决定的,因而波特率也是可变的。相应的公式为
其中,
下面说明如何计算T1的溢出率和设置波特率。
1.计算T1溢出率
在方式1和方式3下,使用定时器T1作为波特率发生器,而T1可以工作在方式0、方式1、方式2。其中,方式2是自动装入时间常数的8位定时器,使用时只需初始化,不用安排中断服务程序来重装时间常数,是一种常用的方式。
MCS51定时器定时时间为
(5-1)式(5-1)中:TC为定时器溢出周期;n为定时器位数;X为时间常数(即定时器初值);fosc是振荡器频率。当定时器T1工作于方式2时,有:
(5-2)
(5-3)2.设置波特率
假设串口均工作于方式1或方式3,定时器T1工作于方式2,此时波特率设置公式为
(54)在实际通信中,一般是按照所要求的通信波特率,设定SMOD后,算出T1的时间常数,由式(54)可反推得定时器初值X:
(5-5)
常用的波特率及其产生条件见表5.9。当用户需要使用时,可以直接查阅该表进行串口波特率的设定。表5.9常用波特率及计算器初值当时钟频率选用11.0592MHz时,容易获得标准的波特率,因而实际应用中需要用到串口通信时,单片机的主频都是选用11.0592MHz的晶振。
例5.11要求串行通信波特率是2400b/s,假设晶振频率是12MHz,SMOD=1,求时间常数X。
分析:根据公式55可以直接算出
然后,设置定时器T1的工作方式、计数初值,初始化串口。代码如下:
MOVTMOD,#20H;设置定时器T1工作于方式2
MOVTH1,#0E5H;设置计数初值(即时间常数)
MOVTL1,#0E5H
文档评论(0)