遅延時間の作り方(サイクルの数え方)

【遅延時間とは?】

 マイクロコンピュータでは直接外部機器を制御することが多くあり
ますが、常にマイコン側の速度と制御対象機器の速度をどこかで
合わせることが必要になります。
つまり、外部機器はリレーとかランプとかモーターとかセンサーとか
がありますが、いずれもマイコンの速度よりははるかに遅い速度で
しか動作しません。そこでマイコン側で遅延(ディレイ)をわざと作っ
て合わせてやる必要があります。
ここではその遅延の作り方を説明します。

【遅延の作り方】

まず遅延を作るにはどうするかというと、幾つかの方法があります。

1.命令実行時間を利用して、必要な命令の数を実行して遅らす。

2.タイマーを使って一定時間カウントし、カウントが終了するのを
  待つ。
  この待つ方法には、命令でカウントアップのフラグがONとなる
  のを待つ方法と、割り込みを待つ方法があります。
  タイマの使い方は次のページで紹介しています。


【命令で遅延を作る方法】

命令は実行するのに一定の時間がかかりますので、それを繰り返
すことで遅延時間を作ります。従って命令の実行時間が分かれば
時間を正確に決めることが出来ます。

 (1) 命令の単位(1サイクル)実行時間
   命令の1サイクルの実行時間は下記です。
      
     1サイクル実行時間=4/クロック発振子の周波数
   
   例えば、クロック10MHz(0.1μsec)の場合は、1サイクルは
    0.4μsec の実行時間を必要とします。
  
 (2) 命令のサイクル数
   上記で命令の実行時間が決まりますが、大部分の命令は
   1サイクルで実行完了します。
   ただし、下記の命令だけは、2サイクル必要とするので、倍の
   実行時間を必要とします。

    ・GOTO命令
    ・CALL命令とRETURN、RETFIE、RETLW命令
    ・BTFSC、BTFSS、DECFSZ、INCFSZ命令でスキップする時
        これは例えば下記の様な時
              DECFSZ   COUNT,F
              GOTO    LOOP 
        もしCOUNTが丁度0になったとすると、下記のように
        実行されるため、スキップする時には2サイクルの
        命令となります。
              DECFSZ   COUNT,F
              NOP 

 (3) 基本的な遅延サブルーチンプログラム例
   クロック10MHzのとき、100μsecの遅延を作り出すプログラム
   は下記のようになります。

   TIME1           サイクル数
       MOVLW  052H    1
       MOVWF  COUNT    1
       NOP         1
   LOOP
       DECFSZ  COUNT,F   1*81+2
       GOTO   LOOP     2*81
       RETURN        2    計250
  
       上記でDECFSZは最後だけは2サイクルですので
       1サイクルが81回と2サイクルが1回ということに
       なります。同様にGOTO文は81回だけ実行されます。
       またNOP命令は丁度250サイクルにするためのダミー
       命令として挿入されています。
       クロックが10MHzなら 0.4μsecX250=100μsec の
       ディレイになります。


  次のページへ     目次ページへ