了解定时器中断概念,分别通过方式0,方式1,方式2,设置LED灯闪烁1s程序,用示波器测波形

方式0:

#include <reg52.h>

sbit LED = P1^0; //LED连接的IO口

void Timer0_Init()
{
    TMOD |= 0x01; //设置为定时器0工作在方式0
    TH0 = 0x3C; //设置定时器初值
    TL0 = 0xAF;
    ET0 = 1; //开启定时器0中断
    EA = 1; //开启总中断
    TR0 = 1; //启动定时器0
}

void main()
{
    Timer0_Init();
    while(1);
}

void Timer0_ISR() interrupt 1
{
    TH0 = 0x3C; //重新设置定时器初值
    TL0 = 0xAF;
    LED = ~LED; //LED翻转状态
}

方式1:

#include <reg52.h>

sbit LED = P1^0; //LED连接的IO口

void Timer1_Init()
{
    TMOD |= 0x10; //设置为定时器1工作在方式1
    TH1 = 0xFC; //设置定时器初值
    TL1 = 0x66;
    ET1 = 1; //开启定时器1中断
    EA = 1; //开启总中断
    TR1 = 1; //启动定时器1
}

void main()
{
    Timer1_Init();
    while(1);
}

void Timer1_ISR() interrupt 3
{
    TH1 = 0xFC; //重新设置定时器初值
    TL1 = 0x66;
    LED = ~LED; //LED翻转状态
}

方式2:

#include <reg52.h>

sbit LED = P1^0; //LED连接的IO口

void Timer0_Init()
{
    TMOD |= 0x02; //设置为定时器0工作在方式2
    TH0 = 0x3C; //设置定时器初值
    TL0 = 0xAF;
    ET0 = 1; //开启定时器0中断
    EA = 1; //开启总中断
    TR0 = 1; //启动定时器0
}

void main()
{
    Timer0_Init();
    while(1);
}

void Timer0_ISR() interrupt 1
{
    static unsigned char cnt = 0;
    cnt++;
    if(cnt == 50) //50个中断为1s
    {
        cnt = 0;
        LED = ~LED; //LED翻转状态
    }
}

注意:以上三种方式的波形不同,需要使用示波器分别测量。

单片机定时器中断应用:LED闪烁程序及波形分析 (方式0, 方式1, 方式2)

原文地址: https://www.cveoy.top/t/topic/jxTm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录