Malc 发表于 2012-2-27 23:32:46

arduino为什么没有定时中断?

本帖最后由 Malc 于 2012-3-10 13:52 编辑

如题,一个困扰我很久的问题
网上关于arduino定时中断的运用也是相当的少
找到一篇文章Arduino 中使用定时中断
复制了其中的代码#include <avr/io.h>
#include <avr/interrupt.h>

/*
* 将定时器中断设为1ms
*/
void init_time()
{
    TCCR2A |= (1 <<WGM21) | (1 << WGM20);
    TCCR2B |= (1 << CS22 );//by clk/64
    TCCR2B &= ~((1 <<CS21) | (1 <<CS20));//by clk/64
    TCCR2B &= ~((1 << WGM21 ) | (1 << WGM20));
    ASSR |= ( 1 << AS2 );
    TIMSK2 |= ( 1 << TOIE2 ) | ( 0 << OCIE2B );
    TCNT2 = 6;
    sei();
}


int count = 0;
SIGNAL(SIG_OVERFLOW2)
{
    TCNT2 = 6;
      
    ++count;
    if( count == 1000 )
    {
      Serial.print("$ ");
      count=0;
    }
}

/*
*/
void setup(void)
{
    Serial.begin(115200);
    init_time();
}

void loop( void )
{
    Serial.println("start ... ...");

    while( 1 )
    {
      delay( 100 );
    }
}放到我的arduino中跑了一下,结果arduino死机了!><!!TX灯一直亮
arduino的Serial monitor也挂了
我在想是不是arduino的某些函数占用了定时器,而自己使用的时候又重新更改了他的值导致出错
恩。。。求解啊

风的孩子 发表于 2012-3-5 11:27:50

嘿嘿,你挂了.
Arduino 标准语言结构中没有定时器的概念.
如果要定时,也是使用delay()函数.
所以,如果你要搞定时器,那么就得老老实实的用AVR的语言结构.
国外有人搞555电路做定时器,然后触发Arduino的中断的办法.

Malc 发表于 2012-3-5 12:19:26

风的孩子 发表于 2012-3-5 11:27 static/image/common/back.gif
嘿嘿,你挂了.
Arduino 标准语言结构中没有定时器的概念.
如果要定时,也是使用delay()函数.


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

iron 发表于 2012-3-6 23:33:45

Arduino硬件难道没有时钟中断?

Randy 发表于 2012-3-9 17:12:14

继续求解中,知道的大侠回答一下!

Malc 发表于 2012-3-9 19:17:45

Randy 发表于 2012-3-9 17:12 static/image/common/back.gif
继续求解中,知道的大侠回答一下!

是在搞不懂上面那段代码有什么问题
不过我这有几个定时器的库,你可以下来用用
我写了一篇关于多任务库的文章,可以结合这个库使用
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=610&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;
}

Randy 发表于 2012-3-13 15:02:42

Malc 发表于 2012-3-9 19:17 static/image/common/back.gif
是在搞不懂上面那段代码有什么问题
不过我这有几个定时器的库,你可以下来用用
我写了一篇关于多任务库 ...

好的,谢谢哦、

SS15 发表于 2012-3-13 18:59:04

定时中断咋没有?看门狗定时器,WDT 中断,回答完毕

xiaop5345 发表于 2012-3-16 15:01:39

attachlnterrupt(interrupt,function,mode)
这也是中断啊!!!!

风的孩子 发表于 2012-3-19 17:33:16

这里讨论的是内部定时器中断呢。。。。。

Randy 发表于 2012-3-27 17:41:55

风的孩子 发表于 2012-3-19 17:33 static/image/common/back.gif
这里讨论的是内部定时器中断呢。。。。。

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

st007 发表于 2012-3-29 17:21:27

有库函数啊,定时中断
不明有庫函數, 是什麼, 我是新手初學的, 請敎一下

执着 发表于 2012-4-9 11:04:00

悠然小调 发表于 2012-3-9 20:35 static/image/common/back.gif
有库函数啊,定时中断
#include



这个可以实现1ms的中断吗

悠然小调 发表于 2012-4-9 16:39:09

执着 发表于 2012-4-9 11:04 static/image/common/back.gif
这个可以实现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;
}
页: [1] 2
查看完整版本: arduino为什么没有定时中断?