单片机如何让定时器计数暂停(不关定时器)

a271818181 2013-07-23 05:07:02
启动和暂停,当暂停时候,暂停工作,但是如何让正在计的数也暂停?定时器又不能关,因为关了会影响其他扫描程序。或者有没有其他扫描方法?
举个例子:
void main()
{
timer_init();
while(1)
{ scan();//定时器动态扫描
work();//
}
}
比如work()函数里有 led 亮 10s 后再灭 这个功能。如果当led一亮的时候,我按暂停键,等过了5s在按启动,这样led只会亮5s再灭。因为虽然按了暂停键,负载能根据指令暂停,但是那个定时器计数一直再计时呢,num++呢。关闭定时器的话,又会影响按键扫描。谢谢各位大虾!
...全文
2665 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
大漠孤鸿 2013-07-23
  • 打赏
  • 举报
回复
51单片机定时器实现定时器的开启、暂停,通过TCON寄存器中的TR0/TR1位来实现的。 暂定时最好先保存计数器值,防止程序其它地方改动计数器值。
图灵狗 2013-07-23
  • 打赏
  • 举报
回复
类似这样,加个信号控制:

int running;

void timer_isr(void)
{
    ...
    if(running)
    {
        num++;
    }
}

void main(void)
{
    timer_init();
    running = 1;
    
    while(1) 
    {
        scan();
        work();
        ...
        if(...)
        {
            running = 0;
        }
    }
}
  • 打赏
  • 举报
回复
按暂停时,存一个缓存,按启动时,用缓存复位计时器。
水平不流 2013-07-23
  • 打赏
  • 举报
回复
没学过单片机,帮你顶一下吧.

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧