51单片机定时计数器溢出率计算和串口的波特率之间的关系.doc

上传人:scccc 文档编号:13706658 上传时间:2022-01-22 格式:DOC 页数:2 大小:54.50KB
返回 下载 相关 举报
51单片机定时计数器溢出率计算和串口的波特率之间的关系.doc_第1页
第1页 / 共2页
51单片机定时计数器溢出率计算和串口的波特率之间的关系.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《51单片机定时计数器溢出率计算和串口的波特率之间的关系.doc》由会员分享,可在线阅读,更多相关《51单片机定时计数器溢出率计算和串口的波特率之间的关系.doc(2页珍藏版)》请在三一文库上搜索。

1、51单片机定时计数器溢出率计算和串口的波特率之间的关系发布:2010-1-05 01:08 |作者:wang1jin | 来源:网络| 查看:128 次51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下:SM0 SM1 SM2 REN TB8 RB8 TI RISM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工 作模式设置。SMOSM1模式功能彼特率000同步移位寄存器fosc/120118 位 UART可变1029 位 UARTfosc/32 sJS fosc/641139 位 UART可变波特率在使

2、用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600 不是每秒种可以传送 9600个字节,而是指每秒可以传送9600 个二进位,而一个字节要 8个二进位,如用串口模式 1来传输那么加上起始位和停止位,每个 数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是 9600 - 10 = 960 字节。51芯片的串口工作模式 0的波特率是固定的,为 fosc/12 ,以一个12M的晶振 来计算,那么它的波特率可以达到1M。模式2的波特率是固定在 fosc/64

3、或fosc/32 ,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD 为0 ,波特率为focs/64,SMOD 为 1,波特率为 focs/32 。模式1和模式3的波特率是可变的,取决于定时器1或2 (52芯片)的溢出速率, 就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。波特率=(2泌D / 32) X门溢出率I上式中如设置了 PCON寄存器中的SMOD位为1时就可以把波特率提升 2倍。通常会 使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动 重装值,这个定时模式下

4、,定时器溢出后,TH1的值会自动装载到 TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下:溢岀速率=(计数速率)/(256 - TH1 初值)溢出速率=fosc/12*(256-TH1 初 值)上式中的 计数速率”与所使用的晶体振荡器 频率有关,在51芯片中定时器启动后会在 每一个机器周期使定时寄存器 TH的值增加一,一个机器周期等于十二个振荡周期,所以 可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率, 那么

5、为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M 和12M ,定时器1为模式2 , SMOD设为1 ,分别看看那所要求的 TH1为何值。代入公式:11.0592M9600 = (2 -32) X(11.0592M/12)/(256-TH1)TH1 =25012M9600 = (2 -32) X(12M/12)/(256-TH1)TH1 沁 249.49上面的计算可以看出使用 12M晶体的时候计算出来的 TH1不为整数,而TH1的值只 能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的, 就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误 差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1