×
单片机 > 单片机程序设计 > 详情

51单片机 (3)定时器和计数器

发布时间:2020-08-26 发布时间:
|

注:定时器与计数器原理与使用方法相似、此处计数器知识为基础普及、后面详讲

2个定时器(寄存器)、定时器0、定时器1、(计数器0、计数器1)

TMOD:定时器/计数器模式控制寄存器 详见百度百科TMOD

  • 每经过一个机器周期、寄存器+1

  • TF:定时器溢出标志。溢出时自动置1。中断时硬件清零否则必须软件清零。

  • TR:定时器运行控制位。置1开始计时、清零停止计时。

  • C/T:该位为0时用作计时器、该位为1时用作计数器。

溢出时时间-开始计时时间=预设定时时间


一个机器周期共有12个振荡脉冲周期


若设定时为0.02s,则:

12*(65535-X)/11059200=0.02s  

定时器作“加1”次数:X=47104=0xB800次  时间为0.02s

使用定时器的方法

1、设置特殊功能寄存器TMOD,使之工作在需求的状态。
2、设置计数寄存器的初值,精确设定好定时时间。
3、设置特殊功能寄存器TCON,通过打开TR来让定时器进行工作。

4、判断寄存器TCON的FT0位、检测定时器溢出情况。


假设我们使用定时器0、定时为0.02s,两个寄存器计时

TMOD=0x01;   TMOD=0x01,指的是采用T0方式,将M1置0,M0置1,是方式一的定时器

高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00


C程序实现1s钟定时

  1. #include   

  2. typedef unsigned char uint8;  

  3. typedef unsigned int uint16;  

  4. sbit led=P1^0;  

  5. uint8 counter;  

  6.   

  7. void main(){  

  8.    TMOD=0x01;  

  9.    TH0=0xb8;  

  10.    TL0=0x00;  

  11.    TR0=1;   

  12.    led=1;  

  13.    counter=0;  

  14.    while(1){  

  15.       if(TF0==1){   //如果达到溢出 0.02s后溢出  

  16.          TF0=0;  //软件清零  

  17.          TH0=0xB8;   //重置计数基数  

  18.              TL0=0x00;  

  19.          counter++;  //溢出一次计次数  

  20.       }  

  21.       if(counter==50){   //0.02s*50=1s  

  22.         counter=0;    //清零  

  23.         led=~led; //取反使P1^0亮灭  

  24.       }  

  25.    }  

  26. }  




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘