以中断方式实现1s定时

时间:2022-05-16 18:27:12

中断方式比较特殊,需要使用单片机内部的中断处理机制,同时指定中断函数。

#include <reg52.h>

sbit LED = P0^;
unsigned int vT = ; void main()
{
LED = ;
TMOD = 0x01;
TH0 = 0x3C; // 计数初值3CB0H = 15536 (65536-15536=50000 * 1us = 50ms)
TL0 = 0xB0;
ET0 = ; // EA即IE^1 等于1时申请中断定时器0中断打开
EA = ; // 总中断打开
TR0 = ; // 启动定时器0
while();
} void MyInterrupt(void) interrupt // 中断服务程序
{
vT++;
if (vT == ) // 20 * 50ms = 1000ms = 1s
{
LED = !LED;
vT = ;
TH0 = 0x3C; // 恢复计数初值
TL0 = 0xB0;
}
}