关键词不能为空

当前您在: 主页 > 英语 >

使用T2定时器实现1秒精确定时 附有C程序 和汇编程序 先看看再说吧,,不错。免费

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 23:46
tags:

-

2021年2月1日发(作者:shuizhu)


使用


T2


定时器实现


1


秒精确定时



使用

T2


定时器实现


1


秒精确定时


2009-10-02 16:22[


小雨的成长

< br>]


中断精确定时


1S


作者






日期



2009-4-17 8:12 :00


这一课,我们将告诉大家如何精确定时


1S


。要精确定时,就需


要用到中断方式,并工作在自动重装载方式。这里我们用 到了


T2


定时器,它具有


16


位的


自动重装载功能。


我们知道,


T0,T1


的自动重装载功能都是


8


位的,


用它们将会带来很大的


误差。

< br>T2


定时器,它有一个专门的自动重装载寄存器,当计数满了以后,它将我们预置 进


去的数自动的载入


TH2,TL2


这 样就都很好的保证精确定时。



我们用的是

12MHZ


的晶振。就算是计满也只有几十毫秒。要定时一秒,就需要一个变量来< /p>


保存溢出的次数,积累到了多少次之后,才执行一次操作。这样就可以累加到


1


秒或者更


长的时间才做一次操作了。



T2


寄存器还有一个和其他寄存器不一样的地方, 就是它的中断标志位


TF2


要软件清零。



现在我们来计算一下,


要精确定时,


那么,


进去中断的次数是越少越好,


这样,

< br>数据更精确,


还能很好的防止对主函数的影响。



T2


定时器预装载值的计算:



设晶振为


12MHz


,每秒钟可以执行


1000000



12000000/12< /p>


)个机器周期。而


T2


每次溢

< p>
出时最多经过了


65536


个机器周期。我们应该 尽量让


T2


定时器的溢出中断的次数最少。


选择每秒中断


14


次,


每次溢出


1000000/14=71428.57

个机器周期,


不为整数且超出


65536

< br>。



选择每秒中断


16


次,每次溢出


1000000/16=62500


个机器周期,小于


65536


,有效。



选择每秒中断


20


次,每次溢出< /p>


1000000/20=50000


个机器周期,小于

< p>
65536


,有效。



其 他的就不再算了,


我们通过上面的计算,我们可以发现,我们可以选择的方式有很多,但


是最佳的是每秒中断


16


次,每次溢出


62500


个机器周期。



下面看程序:




i nclude


#define uchar unsigned char


#define uint unsigned int


sbit Led=P0^0;


//

< p>
定义


LED




void Timer2() interrupt 5


//


调用定时器


2,


自动重装载模式



{


static uchar i=0;


//


定义静态变量


i


TF2=0;


//


定时器


2


的中断标志要软件清


0


i++;


//


计数标志自加


1


if(i==16)


//


判断是否到


1s


{


i=0;


//


将静态变量清


0


Led=~Led;


//LED


位求反



}


}


void main()


{


RCAP2H=(65536-62500)/256;


//


重装载计数器赋初值



RCAP2L=(65536-62500)%256;


ET2=1;


//


开定时器


2


中断



EA=1;


//


开总中断



TR2=1;


//


开启定时器,并设置为自动重装载模式



while(1);


}



这里我们看到我们在中断中用到了


static uchar i



0;


定义


i


为静态函数。静态函数的特点:


函数值在调用结束后不消失保 留原值,


即其占用的存储单元不释放。


在下一次该函数调用时,


该变量已有值,就是上一次的函数调用结束时的值。它只赋一次初值。

< br>


也就是说,只有在第一次进入中断时


static uchar i



0;


才对

< p>
i


赋初值,在以后进入中断执行


这句时,不会对< /p>


i


赋值。



这里 重点给大家讲讲我们开发板上


STC


单片机的

< br>T2


定时器的用法。



定时器


2


是一个


16


位定时


/


计数器。

< br>通过设置特殊功能寄存器


T2CON


中的


C/T2


位,

< br>可


将其作为定时器或计数器(特殊功能寄存器


T2CON


的描述如表


1


所列)。定时器


2



3


种操作模式:

< br>捕获、


自动重新装载


(递增或递减计数)


和波特率发生器,



3


种模式由


T2CON


中的位进行选择。




这里我只将和我们递增计数自动重装载功能有关的几个寄存器,关于


T2


的其他功能,大家


可以参看官方的一些资料。



TF2


定时器


2


溢出标志。


定时器


2


溢出时置位,


必须由软件清除。


RCLK



TCLK=1


时,


TF2


将不会置位。



TR2


定时器


2


启动


/


停止控制位。置


1


时启动定时器。



C/T2


定时器


/


计数器选择。(定时器


2





0=


内部定时器(


OSC/12 < /p>



OSC/6





1=


外部事件计数器(下降沿触发)



CP/RL2


捕获


/


重装标志。


置位:


EXEN2=1

< br>时,


T2EX


的负跳变产生捕获。




零:


EXEN2=0


时,


定时器


2


溢出或


T2EX


的负跳变都可使定时 器自动重装。



RCLK=1



TCLK=1


时,


该位无效且定时器强制为溢出时自动重装。




RCAP2H,RCAP2L


是定时器


T2


一个专门存放预置数的寄存器。定时器


2


递增计数到


0FFFFH


,并在溢出后将


TF2


置位,然后将


RCAP2L



RCAP2H


中的


16


位值作为重新


装载值装入定时器


2



RC AP2L



RCAP2H


的值是通过软件预设的。




从表一,


表二可以看到,


因为我们复位后< /p>


T2CON


是全


0



所以,


只要我们设制好预置数,


开 好中断,再将


TR2


置为


1,


就能启动


T2


的递增计数自动重载功能了。




下面汇编程序是由严复平会员写,非常感谢!!



;******************************************** **********************************


;51


汇编


定时器


T2


精确


1s


定时程序



;


功能:使用< /p>


T2


定时器实现


1


秒精确定时并闪灯



;


晶振:


12MHz


;


芯片:


AT89S52


;


作者:


Jurassic_K.M


;


日期:


2009


2



24




;************************ ************************************************** ****


;keil


默认情况下只能认识标准的


8051


的寄存器,


T2


不 再此列,需要手动加入寄存器定义



T2CON


EQU


0C8H T2


控制寄存器


,


用以程控定时器


2


和外部中断操作格式




; T2CON.7


TF2


溢出中断标志位




; T2CON.6


EXF2


外部中断标志位




; T2CON.5


RCLK


串行接口接受时钟标志位




; T2CON.4


TCLK


串行接口发送时钟标志位




; T2CON.3


EXEN2


外部允许控制位




; T2CON.2


TR2


运行控制为




; T2CON.1


C/T2


定时器


/


计数器功能选择位




; T2CON.0


CP/RL2

捕捉


/


重装载标志位



T2MOD EQU


0C9H T2


控制寄存器


,


用以定时器


2


在装入计数方式选择




; T2MOD.0


DCEN


向下计数允许位




; T2MOD.1


T2OE


T2


输出允许位



TL2


EQU


0CCH


; T2


计数寄存器低字节



TH2


EQU


0CDH


; T2


计数寄存器高字节



TR2


EQU


0C8H.2 T2


启动位



RCAP2L EQU 0CAH


; T2


计数重栽陷阱寄存器低字节



RCAP2H EQU


0CBH T2


计数重栽陷阱寄存器高字节



TF2


EQU


0C8H.7


定时计数器


2


计满回零溢出中断请求标志位


ET2


EQU


IE.5


;


定时器


T2


中断允许


;PT2


EQU


IP.


;


定时器


T2


的中断


优先级控制位,不过我不确定这个具体是那一位,




;


因此空了下来,有知道的朋友请告诉我一声




org


0000h



sjmp main



org 002bh



sjmp timer2_isr



org


0033h


main:



clr p1.7



mov r0,#16



mov rcap2h,#0bh



mov rcap2l,#0dch


;mov th2,#0bh


;


;mov tl2,#0dch


这两句可要可不要




setb ea



setb et2



mov t2con,#04h


设置


t2


定 时器的工作模式为


16


位自动重装载定时器方式




sjmp $$


timer2_isr:



clr tf2


;


定时器


t2


不同与定时器


t0



t1


,它需要软件清零




djnz r0,next



cpl p1.7



mov r0,#16


每次退出前,对软件计数器重装初值




next: nop



nop



reti



end


------------------------------


高准确度时钟程序算法


2009-09-27 21:09


作者:


广州增城市电力局



511300




黄沛芳




源:《电子技术应用》




摘要:通过对引起实时时钟计时误差因数的分析,给 出了一种提高实时时钟长期计时准


确度的实用而有效的软件方法。该方法具有成本低、易 实现、通用性强、彻底校正等优点。



关键词:实时时钟



准确度



定时器



软件校正




电子计时器通常以石英晶振为时钟源。时钟源的频率通常为几十


kHz


乃至几十


MHz



而学 用时钟的最小计单位一般在


0.01s



1s



高频的时钟源脉冲通过分频器后产生基本定时


脉冲。


电子计时器的计时部分就是对基本定时脉冲进行累加,

< p>
产生秒、


分、时等时间信息乃


至日、月、年等日期 信息。


-


-


-


-


-


-


-


-



本文更新与2021-02-01 23:46,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/595901.html

使用T2定时器实现1秒精确定时 附有C程序 和汇编程序 先看看再说吧,,不错。免费的相关文章

使用T2定时器实现1秒精确定时 附有C程序 和汇编程序 先看看再说吧,,不错。免费随机文章