单片机定时器长定时控制

LED闪烁周期为2秒,用定时器长定时实现(自动亮一秒,灭一秒,交替进行)

1.查询方式(定时器T0,采用方式二,不用重赋初值)四个灯亮

1dd7fa3c2dad4f58b4b3d19fa02bc2ef.jpg

以上代码:

#include <reg51.h>

  void main()

    {

    unsigned int flag;//定义全局变量

    P0=0x00;//灯的状态一开始为全亮,为寄存器寻址

    flag=0;//flag初始化

    TMOD=0x02;//软启动,定时功能,定时器T0,方式2(开始定时器初始化)

    TH0=156;//赋初值,因为定时器所定小时间为0.1ms,晶振频率为12MHz,经过计算初值为156,且高位低位初值一样

    TL0=156;//赋初值

    TR0=1;//开启计时器

    while(1)

        {

        if(TF1==1)// 溢出,定时结束

            {

          TF0=0;//清标记   

            flag++;

            }

        if(flag==10000)//大时间到1秒

            {

            flag=0;//清零

            P0=~P0;//灯灭

        }

        }

}

 

若是一个灯亮:(查询方式)

99ad0e014f11426e880fcc558026c294.jpg

 

与上面只有一处不一样:这里定义了一个全局变量LED,初始化为LED=0,最后灯灭为LED=LED;

2.中断方式:(四个灯亮)

c3d433529201461991e0deb7aa2b5d67.jpg

 以上代码:

#include <reg51.h>

  void main()

    {

    unsigned int flag;//定义全局变量

    P0=0x00;//灯的状态初始化:全亮

    flag=0;//flag初始化

    ET0=1;//开开关,单独控制定时器T0的开关

    EA=1;//大开关

    PT0=1;//开始计时

    TMOD=0x02;//软启动,定时功能,定时器T0,方式2(开始定时器初始化)

    TH0=156;//赋初值,因为定时器所定小时间为0.1ms,晶振频率为12MHz,经过计算初值为156,且高位低位初值一样

    TL0=156;//赋初值

    TR0=1;//开启计时器

    while(1)

        {

        if(flag==10000)//大时间到1秒

            {

            flag=0;//清零

            P0=~P0;//灯灭

        }

        }

}

void one_timer0 () interrupt 1

    {

    ET0=0;//关开关

    TF0=0;//清标记

    flag++;

    ET0=1;//开开关

}

 

若为一个灯亮,改动之处同查询方式一样。

 

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值