Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4778|回復: 3
打印 上一主題 下一主題

關於ISR的問題--如何設定中斷時間

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-8-28 16:25:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
http://coopermaa2nd.blogspot.tw/2011/07/41-blink-with-timer.html 最近看了這位大大文章,有點搞不清楚他是如何設定時間 只能設一秒鐘中斷ㄇ? 假如我想設定15秒鐘中斷要怎麼算? 另外一個問題是 假如我想利用ISR 先跑A程式後 中斷A 再跑B 中斷B 再跑C 中斷C 像A->B->C->A迴圈 是否可以做到?
2#
發表於 2015-8-28 18:17:49 | 只看該作者
本帖最後由 lostsnow 於 2015-8-28 18:25 編輯

應該是沒有辨法 15 秒中斷一次,以下不知道這樣是否是大大要的,
Count 計算秒數,15 秒後跑 A 程式,過 3 秒後跑 B 程式,在過 2 秒後跑 C 程式,然後重跑

volatile unsigned long Count = 0;

void setup() {
  Serial.begin(9600);

  TCCR1A = 0x00;                // Normal mode, just as a Timer
  TCCR1B |= _BV(CS12);          // prescaler = CPU clock/1024
  TCCR1B &= ~_BV(CS11);      
  TCCR1B |= _BV(CS10);   

  TIMSK1 |= _BV(TOIE1);         // enable timer overflow interrupt
  TCNT1 = -15625;               // Ticks for 1 second @16 MHz,prescale=1024
}

void loop() {
}

ISR (TIMER1_OVF_vect)
{   
  Count++;
  if (Count == 15) {
    Serial.println("Call A program");
  }
  if (Count == 18) {
    Serial.println("Call B program");
  }
  if (Count == 20) {
    Serial.println("Call C program");
    Count = 0;
  }
  TCNT1 = -15625;               // Ticks for 1 second @16 MHz,prescale=1024
}
3#
 樓主| 發表於 2015-9-2 17:09:02 | 只看該作者
回復 2# lostsnow  因為我是使用不同nodelay方式使兩個LED同時以不同頻率閃爍 閃爍幾秒在換下一組 以此類推做個迴圈 如果這樣寫的話,好像LED就不會亮了
4#
發表於 2015-9-3 10:22:01 | 只看該作者
原來如此....

你需要的是一個好的計時器,請參考以下:
http://yehnan.blogspot.tw/2012/03/arduino.html
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-7 10:36 , Processed in 0.206956 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表