10_单片机_定时器初识

1. STC89C51RC系列单片机有定时器0和定时器1,都具有2种工作方式:定时方式和计数方式。

 2种方式的本质区别:脉冲来源不同。定时方式:脉冲来自系统时钟;计数方式:脉冲来自单片机外部引脚(T0为P3^4,T1为P3^5)

2. 51单片机定时/计数器的核心部件是一个加法的计数器(也有减法,当前使用的硬件不支持)

3. 定时器相关的寄存器

定时器/计数器的工作模式选择,如下

  4. 实现定时器工作的步骤:

  a. 配置定时器的工作模式(TMOD);

  b. 设置TH0和TL0;

  c. 配置寄存器;

  d. 配置中断处理函数;

  e. 运行验证;


5. 编写代码:实现LED闪烁间隔500ms;

  采用模式1的工作方式,即16位,2^16 = 65536

  当前单片机晶振频率是12MHz,12T模式,1个机器频率 1MHz = 12MHz/12T,周期 1us = 1/f = 1/1MHz;

  模式1 最大支持时间是 65536 * 1us = 65.536ms。现在需要定时500ms,可以分成 50ms*10

  单片机的定时器是加法计数,则初值设置为”15536 = 65536-50000“

  TH0 = 15536/256; TL0 = 15536%256;(注:16位二进制,对256求模=高8位;对256求余=低8位)

  也可以写成:TH0 = 15536>>8;TL0 = 15536

 1 #include <REG51.H>
 2 
 3 sbit led1 = P2^7;
 4 
 5 #define TMS_50 65536-50000    // 设置定时50ms
 6 
 7 unsigned char count = 0;
 8 
 9 void timer0_isr(void) interrupt 1 using 1
10 {
11     // 重置定时器
12     TL0 = TMS_50;
13     TH0 = TMS_50>>8;
14     
15     count--;
16     if(count == 0)
17     {
18         led1 = !led1;    // led状态取反
19         count = 10;
20     }
21 }
22 
23 void main(void)
24 {
25     TMOD = 0x01;    // 设置模式1
26     
27     TL0 = TMS_50;            // TMS_50 % 256
28     TH0 = TMS_50>>8;    // TMS_50 /256
29     
30     TR0 = 1;
31     ET0 = 1;
32     EA = 1;
33     
34     count = 10;
35     
36     while(1);
37 }
View Code

初学请指正,谢谢

posted on 2023-04-15 22:21  Ivan2023  阅读(127)  评论(0)    收藏  举报