在51单片机中,定时器/计数器是用来实现定时功能,并且具有计数的功能,来实现对外部信号的计数。

在51单片机中,分为软件定时器,不可编程硬件定时器,可编程定时器。 
软件定时:CPU每执行一条指令时,是需要固定时间的,所以,通过执行空指令可以达到延时的效果,这样子做的代价是占用CPU时间,所以一般很少这么做。

不可编程硬件定时器:是由电路和硬件来完成定时功能的,一般采用基电路,外接定时部件(电阻和电容),通过改变电阻的阻值和电容的电容值来修改定时值,一量确定后件不能通过软件修改,这样子做的优点是不需要占用CPU时间。

可编程定时器:通软件来确定定时值及其范围,可编程定时器功能强大,灵活性高。这是本文详细讲解的定时器。

8051单片机有定时器0(T0)和定时器1(T1)两个定时器。 
定时器0(T0)和定时器1(T1)是两个16位加法计算器。 
定时器0是由TH0和TH1两个8位计数器组成的,定时器1也是一样。

定时器内部还有以下寄存器:
8位的方式寄存器(TMOD) 
8位控制寄存器(TCON) 
选择定时器模式寄存器(C/T) 
启动方式寄存器(GATE)
工作方式及发出启动信号寄存器(TR0或TR1)

内部结构如下图: 

定时器的工作方式主要是通过THOD低4位是定时器0的工作方式控制位,高4位为定时器1的工作方式控制方式。均为M1M0

工作方式 M1 M0 功能
0 0 0 13位计数器
1 0 1 16位计数器
2 1 0 8位计数器,初值自动装入
3 1 1 T0分成两个8位计数器,T1停止工作

timer_count.c

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  1. #include<reg52.h>
  2. unsigned char i;
  3. sbit LED0 = P1^0;
  4. void main(void)
  5. {
  6. TMOD = 0x01;
  7. TH0 = 0;
  8. TL0 = 0;
  9. ET0 = 1;
  10. TR0 = 1;
  11. EA = 1;
  12. while(1);
  13. }
  14. void t0_delay(void) interrupt 1
  15. {
  16. i++;
  17. TR0 = 0;
  18. TH0 = 0;
  19. TL0 = 0;
  20. if(i == 20)
  21. {
  22. i = 0;
  23. LED0 = ~LED0;
  24. }
  25. TR0 = 1;
  26. }

原文地址:http://yingbing.github.io/blog/2015/02/07/scm-timer-counter/

版权声明:本文为yingbing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yingbing/p/4282035.html