单片机STC89C52学习——18 定时器中断
汇总:00 单片机STC89C52学习
参考教程:普中科技
接上篇:17 定时器和计数器
并参考:15 中断系统
2 程序:定时器中断
2.1 定时器0中断,LED灯1s亮1s灭
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led1 = P2^0;// D1
u16 count = 0;
void T0Init()
{
TMOD |= 0x01;// TMOD:GATE = 0;C/T = 0为定时模式;M1 = 0、M0 = 1为16位。加或:避免影响其他位
TH0 = 0xfc; TL0 = 0x18;// 设置初值
EA = 1; ET0 = 1;// IE:开总中断允许;开定时器0中断允许
TR0 = 1;// TCON:定时器0开始工作
}
void main()
{
T0Init();// 1000,1ms
while (1);
}
void intT0() interrupt 1// T0的中断号是1
{
TH0 = 0xfc; TL0 = 0x18;// 方式1不会重新装载初值,要自己重新赋值。然后自动继续计数
count ++;
if (count == 1000)
{
led1 = ~led1;// 状态翻转
count = 0;
}
}
效果:LED灯1s亮1s灭(图片可能效果不好)不过对照电脑的秒来看,闪烁慢一点,半分钟~一分钟慢一秒,可能是指令执行的影响2.1 定时器1中断,LED灯1s亮1s灭
只需要改:
TMOD |= 0x01 -> TMOD |= 0x10
TH0 -> TH1
TL0 -> TL1
ET0 -> ET1
interrupt 1 -> intertupt 3