C51学习 之 中断
中断编程步骤
- 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 }