萬用電路板

个人兴趣爱好交流空间

« 网线水晶头的正确接法单片机10进制计数器数码管显示 »

关于单片机定时器

        MCS—51系列的单片机一般有两个内部的16位定时器/计数器.分别称为T0和Tl。这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。
  
        那么这个定时/计数器是如何产生定时作用的呢?举个例子,如果将时钟定时到1分钟,那么秒针计数到60次后,时钟闹铃就会响。这里有个计数和定时之间的概念转化,时间表示为秒针计数值,即秒针每一次走动的时间正好是1s。
  
        单片机中的定时器和计数器是复用的,计数器是记录外部脉冲的个数,而定时器则是由单片机提供的一个非常稳定的计数源。定时器是由单片机的晶振经过12 分频后获得的一个脉冲源。当单片机的晶振为12MHz时,计数值1代麦的时间就是1us。
  
        计数器的容星是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。当定时器/计数器计溢出时,就会使得相关的寄存器标志产生变化,单片机将由此I而产生定时中断,在中断服务程序中处理定时到而需要完成的任务。

        可以这样理解,定时器是一个可编程的硬件,其实很多硬件都是这样的. 通俗点说,定时器工作其实就是在数脉冲, 当他在定时模式的时候,他数的是系统给他的脉冲,51如果用12M的晶振,系统对晶振要12分频,即1US一个脉冲给定时器,(这个就是他的时钟)所以定时器计一个数就是1us,6M的则是2us。

单片机定时器的时间间隔计算方法:

假设CPU主频8M, 要定时20ms触发一次中断:
8M的频率,一个时钟周期就是1/8000000
采用1024分频,那就是1/8000
就是说计数器每一个脉冲的时间就是1/8000
现在要20ms个时间那就是(0.020/(1/8000))=159个脉冲
因此TCNT0的值=255-159
总结算法:
#define TIMER_INTERVAL 20  //时间间隔ms
#define CPU_F  8000000  //CPU主频
#define CS_F  1024  //分频系数
TCNT0=255-(TIMER_INTERVAL*CPU_F/CS_F/1000)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

有用链接

最近发表

热文排行

最新评论及回复

图标汇集

  • 留言板
  • 订阅本站的 ATOM 1.0 新闻聚合
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 1.8

Copyright 2008 JiangX.net 萬用電路板 All Rights Reserved.
鄂ICP备08003060号 [login]