タイマで発光ダイオードを1秒ごとに点滅させる

このエントリーをはてなブックマークに追加

 

 ここでは「発光ダイオードを光らせる」で作成した物を使用して、1秒ごとに点灯・消灯を繰り返すプログラムを作成します。回路図などは「発光ダイオードを光らせる」を参照してください。

1.メインプログラム

 Timer0を使用して、割り込みを発生させ、1秒ごとに点灯・消灯を繰り返すようにします。「発光ダイオードを光らせる」と同様に初期設定を行います。

 

 続いて割り込みの設定を行います。詳しくは「PIC12F1822の割り込み処理について」を参照してください。

Timer0を有効にし、タイマの動作を1:8で使用する設定にします。

 

Timer0の初期値を156に設定します。

 

Timer0の割り込みフラグを初期化します。

 

Timer0を有効にします。

 

割り込みを有効にします。

 

 発光ダイオードはRA2に接続しているので、RA2を0にすると消灯、1にすると点灯します。今回は「g_led_flg」が真のとき点灯し、偽のとき消灯させます。割り込み処理で「g_led_flg」を変化させることで点灯・消灯を切り替えます。

 

2.割り込み時のプログラム

 割り込みが発生した際、呼び出される関数です。

  1. 割り込み関数宣言
    「interrupt」を付けると割り込み発生時に呼び出される関数になります。
  2. Timer0による割り込みか判定
    「TMR0IF 」が真のときがTimer0割り込み発生時です。
  3. 1秒経過したかの判定
    Timer0割り込みが呼び出される度に「time_cnt」をカウントアップしていき、「time_cnt」が10000回を超えたときが約1秒になります。
  4. 1秒経過した時の処理
    「g_led_flg」を反転させます(真であれば偽に、偽であれば真に変更)
    「time_cnt」をゼロにする
  5. Timer0の設定を初期化する
    このまま何もしないで処理を抜けてしまうと、Timer0割り込みが発生しなくなります。なので初期値の設定と割り込みが発生するように設定します。
    TMR0 = 156
    TMR0IF = 0

 

ソースコード

 プログラムの全文を掲載します。

  プログラム

<注意>
本サイトの注意事項を確認してください。
ソースコードや回路図などを使用する場合、上記注意とともに、自己責任でお願いします。

 

 

3.動作確認

 PICへ書き込んで動かしてみてください。問題がなければ約1秒で点灯・消灯を繰り返します。

 

<更新履歴>

新規作成:2015年4月4日
第2版:2016年9月30日:フォーマット変更(内容の変更はなし)

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)