标题: 请教一个单片机定时器中断进行多个倒计时设计 [打印本页]

作者: yong761228    时间: 2018-11-29 09:14
标题: 请教一个单片机定时器中断进行多个倒计时设计
各位师傅,您们好,我想用一个单片机中断设置四个时间倒计时,现在我只能用类似延时的方法实现,我到有师傅说可以用用一个定时器中断做时基,有几路倒计时就用几个倒计时单元,分别置初值,在定时器中断程序内对各个计时单元减1,主程序只要不断查询各个计数单元,哪一个归零了,就是哪一路倒计时结束了。不知道怎样写,希望懂的师傅们给点样品代码,非常感谢。
我现在用的延时方法:
void ISR_INT2(void) interrupt 12      
{
           static ulong nn;

       T2L = 0x20;                //设置定时初值
           T2H = 0xD1;                //设置定时初值
                   nn++;                    //自加 临时计数器01
               if(nn==1000)             //如果 临时计数器01达到设定值(1ms转1s)
        {         nn=0;             //清零 临时计数器01
            numrelays++;           //自加 计数器relay
         }

           

}

这样就是秒的中断,把这个秒设置成一个延时函数,就可以调用四个不同的时间了,我想看看师傅们怎样用中断减操作的方法,非常感谢。

作者: ssk7793    时间: 2018-11-29 10:22
这个应该没问题,定义四个变量时间,初始不同值,启用定时器,四个变量同时减
作者: wulin    时间: 2018-11-29 10:50
查看wulin的回帖:http://www.51hei.com/bbs/dpj-136631-1.html

作者: yong761228    时间: 2018-11-29 11:10
ssk7793 发表于 2018-11-29 10:22
这个应该没问题,定义四个变量时间,初始不同值,启用定时器,四个变量同时减

您好,就是四个减过程我不会写,能给我写一段样例吗?我是刚学单片机2个多月,非常感谢您了。
作者: yong761228    时间: 2018-11-29 11:12
ssk7793 发表于 2018-11-29 10:22
这个应该没问题,定义四个变量时间,初始不同值,启用定时器,四个变量同时减

您好,初始值我会,就是中断里减的过程我不会,我只会加,抱歉了,不要见笑了,我刚学不久。
作者: yong761228    时间: 2018-11-29 11:16
wulin 发表于 2018-11-29 10:50
查看wulin的回帖:http://www.51hei.com/bbs/dpj-136631-1.html

您好,这个链接里面没有在中断里执行减操作的方法,能给我一个减操作的例子吗?非常感谢。
        if(numrelays==YSA)   //A的延时时间
                  {
                        numrelays--;
                        if(!numrelays)
                                {执行语句}
                }
其它三个一样一样这样写,这样可以吗?
作者: ssk7793    时间: 2018-11-29 15:12
减和加不是一样的么?比如加是i++,那么减就是i--,四个变量由于初始值不一样,所以放在一起减,没问题啊。i1--;i2--;i3--;i4--;
作者: yong761228    时间: 2018-11-29 16:14
ssk7793 发表于 2018-11-29 15:12
减和加不是一样的么?比如加是i++,那么减就是i--,四个变量由于初始值不一样,所以放在一起减,没问题啊。 ...

非常感谢您的回复,现在问题是中断同一时间里只能执行一个,其它的三个都不工作,不管是加还是减。我想四个只要检测到信号,就开始延时,用两个中断可以实现2路,就是想用一个中断实现多路不行。
作者: yong761228    时间: 2018-11-29 19:00
ssk7793 发表于 2018-11-29 15:12
减和加不是一样的么?比如加是i++,那么减就是i--,四个变量由于初始值不一样,所以放在一起减,没问题啊。 ...

非常感谢师傅,已经修改好了,不过我只会用++,到达时间执行。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1