当前位置: 代码迷 >> 单片机 >> LPC1768定时计数器延时进入中断,怎么增加不同的延时时间和不同的中断函数
  详细解决方案

LPC1768定时计数器延时进入中断,怎么增加不同的延时时间和不同的中断函数

热度:136   发布时间:2016-04-28 14:55:00.0
LPC1768定时计数器延时进入中断,如何增加不同的延时时间和不同的中断函数
我是新手,用的LPC1768的板子,延时都是微秒精度的。
        LPC1768就四个定时器,而我想要的延时时间有6个或更多,(700微秒,1700微秒,6700微秒,以这三个为例。)中断执行程序有两个,都是输出一种模拟信号,信号长度为300微秒。
        我知道同一个定时器可以改变参数达到不同的延时时间,可是在同一程序框架中如何控制执行哪一个延时时间呢?
         信号输出是300微秒,延时700微秒,然后再输出信号,再延时,重复8次,然后延时1700微秒,再输出信号。然后再延时6700微秒,再输出信号。精度约为0.2微秒,当然越高越好。如果总是延时700微秒,这倒是简单了,可是怎么让他延时8次700微秒之后转换为延时1700微秒?然后再转换为6700微秒呢?
         我是新手,大神请说详细点,谢谢。
下边是最简单的定时计数延时,到时间然后进入中断函数的大致程序框架。要怎么改进呢?
谢谢了
#include ...
#include ...

/*定时器0初始化*/
void timer0Init(void)
{
...
}
/*定时器0中断执行函数*/
void timer0_IRQHandler(void)
{
...
}

int main(void)
{
    各种初始化部分;
    引脚配置等等;
    while(1)
    {  }
}
------解决方案--------------------
把一个定时器当作N个定时器来用。

把定时器的周期设成1ms,然后搞个队列,定时器中断ISR中每进一次就把队列中的数减1,例如你说的700MS,300MS都可以这么搞。0.1MS的话,频率太高不知道行不行,不行的话用另一个定时器专门做这个频率高的。


------解决方案--------------------
初始化定时器时把定时时间设置为第一次想要的,比如700,等第一个中断到来,在中断函数中更新下一次想要的定时时间,比如1700,再到下一次进中断更新下下一次定时时间,比如6700。
可以将定时器的定时时间做成表,每次中断查表即可,这样你只维护这个表就可以随意控制想要的延时,而且精度在正负1个计数周期。
但要注意,定时时间不能小于中断的执行时间,否则会中断重入。