极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 51167|回复: 26

arduino为什么没有定时中断?

  [复制链接]
发表于 2012-2-27 23:32:46 | 显示全部楼层 |阅读模式
本帖最后由 Malc 于 2012-3-10 13:52 编辑

如题,一个困扰我很久的问题
网上关于arduino定时中断的运用也是相当的少
找到一篇文章Arduino 中使用定时中断
复制了其中的代码
  1. #include <avr/io.h>  
  2. #include <avr/interrupt.h>  
  3.   
  4. /*
  5. * 将定时器中断设为1ms
  6. */  
  7. void init_time()  
  8. {  
  9.     TCCR2A |= (1 <<WGM21) | (1 << WGM20);  
  10.     TCCR2B |= (1 << CS22 );  //by clk/64  
  11.     TCCR2B &= ~((1 <<CS21) | (1 <<CS20));  //by clk/64  
  12.     TCCR2B &= ~((1 << WGM21 ) | (1 << WGM20));  
  13.     ASSR |= ( 1 << AS2 );  
  14.     TIMSK2 |= ( 1 << TOIE2 ) | ( 0 << OCIE2B );  
  15.     TCNT2 = 6;  
  16.     sei();  
  17. }  
  18.   
  19.   
  20. int count = 0;  
  21. SIGNAL(SIG_OVERFLOW2)  
  22. {  
  23.     TCNT2 = 6;  
  24.       
  25.     ++count;  
  26.     if( count == 1000 )  
  27.     {  
  28.         Serial.print("$ ");  
  29.         count=0;  
  30.     }  
  31. }  
  32.   
  33. /*
  34. */  
  35. void setup(void)  
  36. {  
  37.     Serial.begin(115200);  
  38.     init_time();  
  39. }  
  40.   
  41. void loop( void )  
  42. {  
  43.     Serial.println("start ... ...");  
  44.   
  45.     while( 1 )  
  46.     {  
  47.         delay( 100 );  
  48.     }  
  49. }  
复制代码
放到我的arduino中跑了一下,结果arduino死机了!><!!TX灯一直亮
arduino的Serial monitor也挂了
我在想是不是arduino的某些函数占用了定时器,而自己使用的时候又重新更改了他的值导致出错
恩。。。求解啊
回复

使用道具 举报

发表于 2012-3-5 11:27:50 | 显示全部楼层
嘿嘿,你挂了.
Arduino 标准语言结构中没有定时器的概念.
如果要定时,也是使用delay()函数.
所以,如果你要搞定时器,那么就得老老实实的用AVR的语言结构.
国外有人搞555电路做定时器,然后触发Arduino的中断的办法.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-5 12:19:26 | 显示全部楼层
风的孩子 发表于 2012-3-5 11:27
嘿嘿,你挂了.
Arduino 标准语言结构中没有定时器的概念.
如果要定时,也是使用delay()函数.

==!这咋整啊。。。
没定时器写稍大一点的程序太痛苦了!
难道说我out了?
有没有简单粗暴有效的办法?
回复 支持 反对

使用道具 举报

发表于 2012-3-6 23:33:45 | 显示全部楼层
Arduino硬件难道没有时钟中断?
回复 支持 反对

使用道具 举报

发表于 2012-3-9 17:12:14 | 显示全部楼层
继续求解中,知道的大侠回答一下!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-9 19:17:45 | 显示全部楼层
Randy 发表于 2012-3-9 17:12
继续求解中,知道的大侠回答一下!

是在搞不懂上面那段代码有什么问题
不过我这有几个定时器的库,你可以下来用用
我写了一篇关于多任务库的文章,可以结合这个库使用
http://www.geek-workshop.com/for ... &page=1#pid3486
那篇文章文章里已经包含了这几个定时器库了
回复 支持 反对

使用道具 举报

发表于 2012-3-9 20:35:35 | 显示全部楼层
有库函数啊,定时中断
#include <MsTimer2.h>

void setup()
{
  pinMode(13, OUTPUT);
  MsTimer2::set(500, flash); // 500ms period
  MsTimer2::start();
}

void loop()
{   }

void flash() {
  static boolean output = HIGH;
  
  digitalWrite(13, output);
  output = !output;
}
回复 支持 反对

使用道具 举报

发表于 2012-3-13 15:02:42 | 显示全部楼层
Malc 发表于 2012-3-9 19:17
是在搞不懂上面那段代码有什么问题
不过我这有几个定时器的库,你可以下来用用
我写了一篇关于多任务库 ...

好的,谢谢哦、
回复 支持 反对

使用道具 举报

发表于 2012-3-13 18:59:04 | 显示全部楼层
定时中断咋没有?看门狗定时器,WDT 中断,回答完毕
回复 支持 反对

使用道具 举报

发表于 2012-3-16 15:01:39 | 显示全部楼层
attachlnterrupt(interrupt,function,mode)
这也是中断啊!!!!
回复 支持 反对

使用道具 举报

发表于 2012-3-19 17:33:16 | 显示全部楼层
这里讨论的是内部定时器中断呢。。。。。
回复 支持 反对

使用道具 举报

发表于 2012-3-27 17:41:55 | 显示全部楼层
风的孩子 发表于 2012-3-19 17:33
这里讨论的是内部定时器中断呢。。。。。

教授你不讲解一下吗?目前还是不清楚arduino有没有定时中断的问题?
回复 支持 反对

使用道具 举报

发表于 2012-3-29 17:21:27 | 显示全部楼层
有库函数啊,定时中断
不明有庫函數, 是什麼, 我是新手初學的, 請敎一下
回复 支持 反对

使用道具 举报

发表于 2012-4-9 11:04:00 | 显示全部楼层
悠然小调 发表于 2012-3-9 20:35
有库函数啊,定时中断
#include

这个可以实现1ms的中断吗
回复 支持 反对

使用道具 举报

发表于 2012-4-9 16:39:09 | 显示全部楼层
执着 发表于 2012-4-9 11:04
这个可以实现1ms的中断吗



#include <MsTimer2.h>

void setup()
{
  pinMode(13, OUTPUT);
  MsTimer2::set(1, flash);//1ms
  MsTimer2::start();
}

void loop()
{   }

void flash() {
  static boolean output = HIGH;
  
  digitalWrite(13, output);
  output = !output;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 20:54 , Processed in 0.048577 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表