18 定时器中断

单片机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

你可能感兴趣的:(18 定时器中断)