• 西北工控自动化网 专业的兰州PCB芯片级无图维修,电路板软硬件开发公司-甘肃先睿工控科技有限公司!欢迎你! 业务咨询电话:0931-8593134 技术支持电话:18609487812

 

先睿工控广告

编程开发
其它的类

首页 》 全屏查看 》


C51定时器疑难解答-编程指南篇

关键词: C51定时器,疑难解答,编程指南篇,串口波特率计算,TMOD寄存器,先睿工控,西北工控自动化
描述:

C51定时器疑难解答-编程指南篇,定时器,串口波特率计算


作者:代码灵魂  日期:2017/3/5

 C51定时器疑难解答-编程指南篇

 

 

原创性声明:引用或转载本文,注明来源及作者署名

 

 

C51中,其强大的定时器功能,是编程应用中,最常见的。

作为8位低端CPU中,有各种不同型号,有各种丰富的功能。满足各种常规简单应用。


今天,小编精心的准备并主要提出如下问题,并做出解答,科普广大爱好者,解惑各类小白。

我们通过此篇,便于更好的模块化定时器篇,相关具体例程,请继续查看,软件编程篇。

 

 

定时器初始化例程

 

1.      问,C51中,定时器有哪几种工作方式,各有什么特点?

         答:C51中定时器有三种方式,分别用0,1,2,表示。是通过TMOD寄存器配置的。

        M1,M0为二进制00表示0,01表示1 10表示2,11表示3(3是计数器专用。)

        模式0:13位定时计数器,最大数,0XFFF =2^13=8192

        模式1:16位定时计数器,最大数0xffff=x^16=65535

        模式2:8位自动重装定时计数器,最大数0XFF=2^8=255


2.      问,C51中,定时器到底是怎么工作的?

 

         答:C51中,定时器,是靠中断完成定时功能的,其原理是,设定一个初值,启动定时器,开中断,等中断标志,即溢出,然后执行中断,完成定时功能。

3.      问,中断是什么概念,如何解释。


        答: 中断,是一整套处理系统,比如,你在看书,领导叫你去端茶,(这领导的话不能不听,不听没工作啦,)于是,你折下书中的看的一页,合上书,然后去端茶,给了领导后,又回来,继续翻开折下的书,继续看没看完的书。

这个过程,就是中断请求—保护现场—中断处理—恢复现场—继续以前执行。


4.      问,不同的工作模式下,定时器初值又怎么算,


        答:通过1问解答,我们知道了各模式的最大值,我们要设置的初值,必然不能大于最大值。由于每个机器周期,运行一条自增指令,所以,最大值减去预设值就是定时器要走的机器周期数,

        比如,模式1,最大值65535,初值65500则定时器溢出的机器周期为65535-65500=35。即35个机器周期后,定时器溢出,定时器被中断请求。

        比如:12M的时钟信号,因工作于12T,即,机器周=1/(12M/12)= 1US 35个机器周期为35US.


5.      定时器各工作模式的一次溢出时的时间范围是多少?


        答:FOSC=12MHZ, 一个机器周期为1US上面计算得。那么,

        模式0:8192=8192*1US=8192US=8.192毫秒,此时可设定0-8192US之内定时。

        模式1:65535=65.535毫秒,可设定0-65.535毫秒之内的任意值。

        模式2:255=255微秒,可设定0-255微秒之间任意值,并且自动重载,意思是不用再设,会将高位如TH1中的初值,传给TL1完成自动重载。

        关于各模式配置,请看附件TMOD定时寄存器 

6.      要设定上面的范围之外的时间怎么设定。


        答:比如:1秒定时,那我们用循环,1秒=20*50MS可用模式1。若=200*5MS,可用模式0,1。若=5000*0.2MS,可用模式2,,考虑到5000这个数,大于255即0XFF变为了16位数,因为是8位机,此时需要多一个机器周期去执行,会多出一个时钟周期,如果执行次数多了,就多出1秒来,所以我们尽量采用0-255以内即8位数据来当倍率。

        说了半天,可能还不明白,

        即,我们中断函数中用计数,如200*5ms中,定义I,>=200时,执行输出,即中断200次算一次,那时就完成了1秒定时,

  1. if (i>=200)
  2. {
  3.       Execute_xxx() ;
  4.       i=0;
  5. }
  6. Else
  7.       i++;

7.    定时器,用于串口工作的波特率时,又怎么讲

        答:串口工作有四种模式,分别为00,01,10,11

        模式0:00,采用时钟FOSC的1/12分频来做为波特率。

        模式1:01,采用10位模式,定时器产生波特率。

        模式2:10,采用11位,取时钟1/32分频,可通过SMOD(属于PCON寄存器,不可位寻)设定倍率为1/64

        模式3:  11,采用11位,由定时器产生。

        我们知道,其中1,3模式是由定时器产生的,0,2模式是系统自动产生,取决于时钟。既然是定时器产生的,我们设定定时器产生定时脉冲就可以了。

 

8.    怎么设定串口所用定时器脉冲呢?

        答:通过上面解答,我们已经知道了定时器的设置方法,我们通过计算需要的波特率,来确定定时器的初值就可以了。

        设工作在模式0则有BAUT_RATE=FOSC*(1/12)=12mhz/12=1Mbit/s

        模式2:同理=FOSC/64=187.5Kbit/s 当SMOD=1时,FOSC/32=375Kbit/s

        在模式1.3中,我们通过定时器模式2,可以算出定时的范围在,1-255us之间。即频率范围在12mhz/12/1=1mhz, 12mhz/1/255约=3.921KHZ之间。

        我们对其16分频和32分频2^SMOD/32 =1/16或1/32

        具体为:

        经过分频后的频率范围为:125·62500内

          

        计算公式

        波特率F(BAUT)=(2^SMOD)/32*FOSC/(12*(256-X))

        化简得X=256-FOSC*2^SMOD/(384*F(BAUT))


9.    关于有串口的晶振如何选择。

        答: 由于串口或定时器是由晶振分配的,而定时器的值采用16位无符号整数,如果上述计算正好能被整除,即不产生小数,则可以采用。如果带小数,对数据的稳定性会产生累积误差,影响数据的正确传输,故,最好计算上面值能被整除的。也就是你所选的波特率所在的时钟晶振两者配合,可以被上述计算整除。 


10.    为什么在串口中断中,非要用定时器的模式2

        答:因为定时器的模式2为8位自动重载,溢出后立即重载,而其它模式,需要触发中断,然后在中断中对初值进行重载,在触发中断的过程中可能会用到长,短跳转,这个过程需要几个机器周期,并且,如果重载的过程中,涉及各类运算,又产生许多机器周期,这样一来,原本一个机器周期运行完的事,额外产生了许多周期,导致误差产生,而误差会影响数据传输的稳定性和正确性。

 

  附:TMOD 寄存器       注,该寄存器不支持位操作。请看软件编程篇之通用串口模块程序。

TMOD定时寄存器内部位

 

 

                                                                                                到此,我们的定时器篇相关问题,已讲述完毕。



本信息由  甘肃先睿工控科技有限责任公司 发表于 西北工控自动化网
注意: 转载或分享 请注明来源:西北工控自动化!

在全屏模式下分享,效果更好!


扫一扫 添加通信录 扫一扫 添加微信号


COPYRIGHT ©2008-2018 XBGHZDH CORPORATION ALL RIGHT RESERVED .
COPYRIGHT ©2008 XBGHZDH ALL RIGHT RESERVED .           

        西北工控自动化 © 版权所有

本网站由:甘肃先睿工控科技有限公司独家赞助


总访问量:343065
当前在线:99