找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1149|回复: 1
打印 上一主题 下一主题
收起左侧

关于单片机UART串口通信的疑问

[复制链接]
跳转到指定楼层
楼主
ID:805445 发表于 2020-7-22 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问,
定时器不是一个计时或者计数的器件吗?配置定时器,是怎么控制数据发送与接收的波特率的啊?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:790738 发表于 2020-7-22 16:59 | 只看该作者
在串行通信中,收发双方发送或接收的数据速率要有一定的约定,我们通过软件对MCS-51串行口编程可以约定四种工作方式。其中,方式0和方式2的波特率时固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
串行口的四种工作方式对应这三种波特率,由于输入的移位时钟的来源不同,所以各种方式的波特率的计算公式也不同。
各种方式的波特率介绍
工作方式0
方式0时,移位时钟脉冲由S6(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即:

方式0的波特率=fosc/12,fosc是系统晶振的震荡频率
工作方式2
工作方式2波特率的产生与工作方式0不同,控制接收与发送的移位时钟由振荡频率fosc的第二节拍P2(即fosc/2)给出,所以工作方式2的波特率取决于PCON中SMOD位的值。当SMOD=0时,波特率为fosc的六十四分之一,若SMOD=1,则波特率为fosc的三十二分之一,即:方式二的波特率=[(2^SMOD)/64]*fosc
工作方式1和工作方式3
方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定,故波特宰由定时器T1的溢出率与SMOD值同时决定,即:方式1和方式3的波特率=[(2*SMOD)/32]*T1溢出率。其中,溢出率取决于计数速率和定时器的预置值。计数速率与TMOD寄存器中C/T的状态有关。当C/T=0时,计数速率=fosc/2;当C/T=1时,计数速率取决于外部输入时钟频率。
当定时器T1作波特率发生器使用时,通常选用可自动装入初值模式(工作方式2),在工作方式2中,TL1作为计数用,而自动装入的初值放在TH1中,设计数初值为x,则每过“256~x”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止T1中断。这时,溢出周期为:溢出周期=(12/fosc)(256-x)*,溢出率是溢出周期的倒数,所以 工作方式1和工作方式3的波特率=[(2*SMOD)/32][fosc/(12*(256-x))]。此时定时器1的初值*x=256-[fosc(SMOD+1)/(384*波特率)]*
系统晶振频率选为11.0592MHZ就是为了使初值为整数,从而产生精确的波特率。
如果串行通信选用很低的波特率,可将定时器Tl置于工作方式0或工作方式1,但在这种情况下,T1溢出时,需用中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表