// 『昼夜逆転』工作室 http://jsdiy.web.fc2.com/ // tiny2313 // ATtiny2313テストボード // // 3分タイマー // スイッチA0で開始、スイッチA1で停止 // // 2008/09/26 v1.00 初版 (timer3min.c) #include #include volatile uint8_t ff; //LED点滅フラグ 1:on 0:off volatile uint8_t time; //経過時間(秒) ISR(TIMER1_COMPA_vect) { if (time < 180) time++; ff = 1 - ff; } int main(void) { uint8_t sw; //スイッチ入力 DDRB = 0b00000111; //LEDが3個 B2,B1,B0 PORTA = 0b00000011; //スイッチが2個 A1,A0 TCCR1A = 0b00000000; //CTC動作 TCCR1B = 0b00001101; //カウント周期は 1MHz/1024 = 約1kHz → 約1ms間隔 OCR1A = 1000; //割り込み周期は 1ms * 1000 = 1sec TIMSK = 0b01000000; //比較一致割り込み while (1) { PORTB = 0b00000111; sw = PINA; //スイッチ入力監視 if (~sw & 0b00000001) //スイッチA0:開始 { time = 0; ff = 1; OCR1A = 1000; sei(); //割り込み許可 do { if (time < 60) PORTB = ff; else if (time < 120) PORTB = 0b00000001 | (ff << 1); else if (time < 180) PORTB = 0b00000011 | (ff << 2); else if (time == 180) { OCR1A = 250; //割り込み周期を短くする(高速点滅の効果) TCNT1 = 0; time++; } else //180秒以降 PORTB = 0b00000111 * ff; sw = PINA; //スイッチ入力監視 } while (sw & 0b00000010); //スイッチA1:停止 cli(); //割り込み禁止 } } return 0; }