论坛风格切换切换到宽版
  • 3323阅读
  • 3回复

新手请教:单片机计时器用法 [复制链接]

上一主题 下一主题
离线BG7PMZ
 
发帖
3139
只看楼主 倒序阅读 0楼 发表于: 2010-03-30
需要长延时的时候,如果使用_delay_ms();这些函数,会导致程序在延时函数里面死跑,无法处理其他任务,人家说,可以使用定时器产生一个固定时间的中断,然后再中断函数里面修改一个全局变量(自加?)然后读取这个全局变量去确定经过的时间。。。大概是这样,具体是怎么实现呢?理解起来都有点含糊了。。望高人指教

例如,一个按键的例子,教程上这样写的,但实际上,比较短的延时还可以用,一旦时间比较长
会导致程序在延时函数里面死跑

int main(void)
{
if(按键按下)
_delay_ms(20);
if(按键按下)
{
  按键处理程序
  }
}

定时器中断处理程序//1ms发生一次中断
{
}

如果我想用定时器中断来确定按键按下所经过的时间,应该怎么做呢?假设我已经设置好,定时器每1ms发生一次中断
离线anybody-hf
发帖
1083
只看该作者 1楼 发表于: 2010-03-30
不知道,本身来说按键按下后就是不应该响应其它的,除非有优先级高的中断
离线BG7PMZ
发帖
3139
只看该作者 2楼 发表于: 2010-03-30
[quote=anybody-hf]不知道,本身来说按键按下后就是不应该响应其它的,除非有优先级高的中断[/quote]
按键按下只是举例而已,如果是30分钟关机倒计时呢?不可能用_delay_ms里面跑几十分钟吧?当然,可以在长延时函数里面嵌套其他的条件跳出延时,但总在一个长延时里面跑着总觉得不合理!
离线zyslcl-2
发帖
2257
只看该作者 3楼 发表于: 2010-04-06
设定全局变量,打开定时器,在中断里设一个全局变量随定时器累加或递减。在主程序里判断变量值从而确定你想做的事情。