• 目次 -Page-
  • コンテンツ -Menu-
  • リンク -link-
  • MPLAB C18
  • MPLAB C18のちょっとした使い方を載せていきます。
    悩んでる方の参考になればと思います。
  • タイマー0で1秒ごとに割り込む
  • PIC18F452を使用してタイマー0で1秒毎に割り込みを行わせる処理を書いてみました。 説明はプログラム中に記載していますが、割り込みに関する部分は後日記載しようと思います。 今回は割り込みの優先レベルは考えていません。
     
    セラロック10MHzを使用して内部でPLL4倍、よって40MHz動作です。
     
    1秒÷(40MHz/4)=1÷10MHz=1÷10,000,000=0.0000001=100ns
     
    上の計算は1命令サイクルの時間です。なので1秒間に何回これを行えばいいかを考えます。
     
    1秒÷100ns=1÷0.0000001=10,000,000回
     
    今回は動作クロックが計算しやすい値で楽でした。しかし、1000万回という値はタイマーに設定できません。 そこでプリスケーラを使用します。タイマー0には256が設定できるので計算してみます。
     
    10,000,000÷256=39,062回 (正確には39,062.5)
     
    16ビットなので65,535まで可能なので今回は大丈夫なようです。なのでプリスケーラを256に設定してカウントは39,062です。 しかし、タイマーのカウンタはアップカウンタです。なのでMAX値から必要なカウント数を引いてやる必要があります。
     
    65,536-39,062=0x10000-0x9896=0x676A
     
    上記のとおり、タイマーの設定は0x676Aに決まりました。
     
    OpenTimer0の設定は割り込みを使う、16ビットモード、内部クロック指定、プリスケーラ256と設定しました。 割り込みが発生するとカウントデータを条件によりインクリメント・デクリメントします。 また1秒になっているかどうかを判断するように外部出力を設けてその端子にオシロを接続します。 カウント値はLCDで確認が可能です。
     
    プログラム中のLCDについてはこちらの記事を参照下さい。
    液晶のクリアーは関数を設けずに通常のコマンド送信+1.6msの遅延で対処しました。
     
    プログラムのテキストファイルはこちら
     
    動作確認。オシロで1秒を確認。
    テスト風景。
    Design & Programming - 天姫 -
    Copyright (c) 2007-2022 amahime All Rights Reserved.