中断编程步骤
- TMOD设置工作方式 和 定时器/计时器 ,TMOD见下图;
- 设置TH0 TH1的初值,定时器计算公式: 定时时间/(12/主频);
- 设置EA,设置某个中断(EX0, ET0, EX1, ET1, ES, ET2)(IE寄存器);
- 设置中断优先级(1和0两个等级,1的优先级高)(IP寄存器);(省略则默认)
- TR0 开启定时器。
代码
1 #include <reg52.h>
2
3 sbit led = P1^0;
4
5 void init()
6 {
7 TMOD = 0x01; //定时器0
8 TH0 = (65535 - 50000 * 12 / 12) / 256; //12MHz主频 定时1s 此处50ms
9 TL0 = (65535 - 50000 * 12 / 12)% 256;
10 EA = 1;
11 ET0 = 1;
12 TR0 = 1;
13 }
14
15 void on_T0Timer() interrupt 1
16 {
17 static unsigned int num = 0;
18 TH0 = (65535 - 50000 * 12 / 12) / 256;
19 TL0 = (65535 - 50000 * 12 / 12)% 256;
20 num++;
21 if (num == 20) {
22 num = 0;
23 led = ~led;
24 }
25 }
26
27 int main()
28 {
29 init();
30 while(1);
31 }