我是靠谱客的博主 高兴鞋子,最近开发中收集的这篇文章主要介绍定时器中断实现LED闪烁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit led=P2^0;

void Timer0Init()
{
    //对TMOD进行赋值,选择T0/T1
    //TMOD 8位 低4位用于T0,高4位用于T1 : GATE  C/T(C计数器高位有效,T定时器低位有效)  M1M2(工作方式 : 00 01 10 11)
    //或运算|防止其他位被影响
    TMOD|=0x01;
    //计算初值  1ms=1000us的初值 :2的16次方(65535)-1000+1 = 64536 = FC18H  (工具)
    TH0=0XFC;
    TL0=0X18;
    //定时器0使能
    ET0=1;
    //打开总中断
    EA=1;
    //TR0/TR1是T0/T1的运行控制位 TR0置1,T0开始工作,置1则停止工作
    TR0=1;
}

/*
void Timer0Init()
{
    //对TMOD进行赋值,选择T0/T1
    //TMOD 8位 低4位用于T0,高4位用于T1 : GATE  C/T(C计数器高位有效,T定时器低位有效)  M1M2(工作方式 : 00 01 10 11)
    //或运算|防止其他位被影响
    TMOD|=0x10;
    //计算初值  1ms=1000us的初值 :2的16次方(65535)-1000+1 = 64536 = FC18H  (工具)
    TH1=0XFC;
    TL1=0X18;
    //定时器1使能
    ET1=1;
    //打开总中断
    EA=1;
    //TR0/TR1是T0/T1的运行控制位 TR0置1,T0开始工作,置1则停止工作
    TR1=1;
}
*/

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

//中断函数
void Timer0() interrupt 1
{
    static u16 i;
    TH0=0XFC;
    TL0=0X18;
    i++;
    if(i == 1000)   //1s
    {
        i = 0;
        //将P2^0置反
        led=~led;
    }
}

/*
void Timer1() interrupt 3
{
    static u16 i;
    TH1=0xFC;
    TL1=0x18;
    i++;
    if(1 == 1000)   //1s
    {
        i = 0;
        led=~led;
    }
}    */

最后

以上就是高兴鞋子为你收集整理的定时器中断实现LED闪烁的全部内容,希望文章能够帮你解决定时器中断实现LED闪烁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部