以中断方式实现1s定时

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

#include <reg52.h>

sbit LED = P0^2;
unsigned int vT = 0;

void main()
{
    LED = 0;
    TMOD = 0x01;
    TH0 = 0x3C;    // 计数初值3CB0H = 15536 (65536-15536=50000 * 1us = 50ms)
    TL0 = 0xB0;
    ET0 = 1;       // EA即IE^1 等于1时申请中断定时器0中断打开
    EA = 1;        // 总中断打开
    TR0 = 1;       // 启动定时器0
    while(1);
}

void MyInterrupt(void) interrupt 1    // 中断服务程序
{
    vT++;
    if (vT == 20)       // 20 * 50ms = 1000ms = 1s
    {
        LED = !LED;    
        vT = 0;
        TH0 = 0x3C;    // 恢复计数初值
        TL0 = 0xB0;
    }
}
原文地址:https://www.cnblogs.com/coloregg/p/3602546.html