サンプルプログラム(SLEEP  TMR0  間接アドレシング)

    BookT、BookUで登場していないPICマイコンの機能をいくつか取り上げ、サンプルプログラムを紹介
  します。
    サンプルプログラムは、右クリックして「対象をファイルイに保存」でダウンロードしてください。

1)「SLEEP」
    「SLEEP」命令を書くと、PICマイコンは文字通り眠ったような状態になります。そして、眠りに入る直前
  の状態を保ち、目覚めるとその状態に復帰します。スリープの間はクロックが停止し、従って命令は実行
  せず、各種機能も働かなくなるので、極めて低消費電力の状態になります。ですから、何かの信号をじっ
  と待ち受けるというようなときに、省エネという意味で有効です。スリープから目覚める条件はいくつかあ
  りますが、中でも重要なのは割り込みによるものです。すなわち、RB0の外部からの入力による割り込み、
  およびRB4〜7による状態変化による割り込みです(BookT参照)。下のサンプルプログラム「sleep.asm」
  は、スタート直後にスリープ状態となり、RB7の状態変化割り込み(0Vから+5Vに変化、またはその逆)で
  目覚めたあとひとしきりパフォーマンスをして、再びスリープ状態になります。本書の実験用ボードでは、
  LEDがつながっているRB7の抵抗のリード線を、+5Vからの線で触れることで、実験できます。
      sleep.asm      

2)「TMR0」
    「TMR0」というのは、あるプログラムを実行しつつ、@外部からの信号の入力をカウントする(カウンタ)、
  Aある決められた時間ごとに動作を起こす(タイマー)、という二つ機能のことを言います。このうちのAは
  あまり  実用的ではありません。インターバルを最大に設定しても、数十mS程度の時間しか得られない
  (OSCが10MHzの場合)からです。なお、「PA.EXE」では、この「TMR0」が本来の機能を発揮しません。
  何故かというと、「16F84.H」を見ると分かりますが、本来81hに定義されるべきはずの「OPTION_REG」が
  「TMR0」と同じ80hに置かれているためです。@において、「OPTION_REG」でプリスケーラを、例えば4に
  設定すれば、4回の入力で、1カウントアップするはずなのですが、「OPTION_REG」が機能しないため、常に
  1回の入力で、1カウントアップします。このことは、カウンタとしての働きを無意味にするものではなく、十分
  有意義に機能します。サンプルプログラムを見ると分かりますが、「OPTION_REG」は何も設定することなく、
  TMR0レジスタを読み取れば、いつでもRA4からの信号の入力をカウントできます。当然ですが、このような
  入力を処理するのには、チャタリング対策が不可欠です(チャタリングに関しては本文を参照してください)。
  なお、TMR0レジスタを  読み取るだけでは、256までしかカウントできませんが、プログラムの中で、TMR0
  が256になるごとに、1アップするような変数を用意すれば、どんなに大きな数までもカウントできます。
      tmr0.asm

3)「間接アドレシング」
    RAM(ファイルレジスタ)のアドレス指定は、三通りの方法があります。@およびAが直接アドレシングで、
  Bが間接アドレシングです。
 
  @ mov        20h,#10101010b            ; ファイルレジスタの20h番地に10101010bを格納
     つまり、このやり方では、直接RAMの20h番地に10101010bを書き込んでいます。

  Adata_1       ds,20h                   ; ファイルレジスタの20h番地に変数data_1を定義
           ・・・
      mov        data_1,#10101010b        ; data_1に10101010bを格納
    あらかじめRAMにdata_1という変数を定義して、そのdata_1に01010101bを書き込みます。通常はこの方
    法を用います。言うまでもなく、プログラムが分かりやすくなるからです(単に20h番地というより、data_1と
    いう名称に設定した方が分かりやすい)。

  Bサンプルプログラムで紹介するのが、間接アドレシングです。SFRの「FSR」と「INDF」レジスタを用います。
    データを書き込みたいRAMのアドレスをFSRに格納し、書き込みたいデータをINDFに格納すると、RAMに
    データが書き込まれます。逆に、FSRにアドレスを書き込み、INDFを取得すれば、RAMのデータを読み出
    すことが出来ます。FSRを変数のように扱うことが出来るので、データを連続的に読み書きすることが可能
    になります。サンプルプログラムを見た方が、そのあたりのことは分かりやすいでしょう。
    ※BookT(オレンジ本)の「(ねずみロボットの)動きをインプット」、BookU(グリーン本)の「メロディークリ
       エータ」は、間接アドレシングを用いれば、もっとスマートにプログラムをまとめられます。
      indf.asm

  上記のサンプルプログラムは、いずれも、ご自身の責任においてご活用ください。ご活用に際して、何か不
  利益が生じたとしても、当方としては責任は取れませんので、宜しくご了解ください。


                                                  

inserted by FC2 system