MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
ATmega328 - タイマのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
ATmega328 - タイマ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == タイマ1 == ==== タイマ1のコンペアマッチA割り込み ==== 以下の例では、1秒間隔でタイマ割り込みを行い、10回のタイマ割り込みでLEDをトグルしている。<br> <syntaxhighlight lang="c++"> #include <avr/io.h> #include <avr/interrupt.h> #define LED_PIN PB5 // PB5ピンにLEDを接続 volatile uint8_t timer_count = 0; // 割り込みハンドラ内でカウントアップ // 10秒ごとにリセット // タイマ1のコンペアマッチA割り込みハンドラ ISR(TIMER1_COMPA_vect) { timer_count++; // この変数の値が10に達した場合にLEDの状態を反転 if (timer_count >= 10) { PORTB ^= (1 << LED_PIN); // LEDをトグル timer_count = 0; } } int main(void) { DDRB |= (1 << LED_PIN); // LEDピン(PB5)を出力に設定 // タイマ1の設定 TCCR1A = 0; TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // CTCモード OCR1A = 15624; // プリスケーラ(分周)を1024に設定 // 16[MHz]の場合の1秒間隔の値 TIMSK1 |= (1 << OCIE1A); // タイマ1のコンペアマッチA割り込みを有効化 sei(); // グローバル割り込みを有効化 while (1) { // メイン処理 } } </syntaxhighlight> <br> ==== タイマ1のコンペアマッチB割り込み ==== 以下の例では、1秒間隔でタイマ割り込みを行い、10回のタイマ割り込みでLEDをトグルしている。<br> <syntaxhighlight lang="c++"> #include <avr/io.h> #include <avr/interrupt.h> #define LED_PIN PB5 // PB5ピンにLEDを接続 volatile uint8_t timer_count = 0; // 割り込みハンドラ内でカウントアップ // 10秒ごとにリセット ISR(TIMER1_COMPB_vect) { timer_count++; // この変数の値が10に達した場合にLEDの状態を反転 if (timer_count >= 10) { PORTB ^= (1 << LED_PIN); // LEDをトグル timer_count = 0; } } int main(void) { DDRB |= (1 << LED_PIN); // LEDピン(PB5)を出力に設定 // タイマ1の設定 TCCR1A = 0; TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // CTCモード OCR1A = 15624; // プリスケーラ(分周)を1024に設定 // 16[MHz]の場合の1秒間隔の値 OCR1B = 15624; // OCR1Bレジスタに、OCR1Aと同じ値を設定 TIMSK1 |= (1 << OCIE1B); // タイマのコンペアマッチB割り込みを有効化 sei(); // グローバル割り込みを有効化 while (1) { // メイン処理 } } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:AVR]]
ATmega328 - タイマ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse