【ディレイ関数】
CCS C Compiler で一定時間の待ちを作る方法です。これには単位時間の
違いによって下記の3種類の関数が用意されていて、簡単に待ち時間を
挿入することが出来ます。この待ち時間はプログラム命令の実行時間で
作り出していますので、ディレイ時間中に他のことを実行することはできま
せん。
《ディレイ関数一覧》
ディレイ関数
機能・その他
DELAY_CYCLES(count) 命令実行サイクルを単位にしたディレイを挿入する。(NOP命令の挿入)
countは1−255の範囲DELAY_MS(time) msecを単位にしたディレイを挿入する。
timeは定数の時は0−65535の範囲
変数の時は0−255の範囲を指定できる。DELAY_US(time) μsecを単位としたディレイを挿入する。
timeは定数の時は0−65535の範囲
変数の時は0−255の範囲
timeが小さな定数の時はインラインで出力されるが、それ以外の時はサブルーチンとして出力される。
【ディレイ関数の使い方】
上記ディレイ関数を使う為には、コンパイラにPICのクロック周波数が
いくつかを教えてやる必要があります。このための関数が用意されて
います。
《クロック設定関数》
プリプロセッサ関数
機能内容
#USE DELAY(CLOCK=speed)
または
#USE DELAY
(CLOCK=speed, RESTART_WDT)プロセッサの速度をコンパイラに通知するための関数。
DELAY_MS、DELAY_US関数の基準となる。
speedの値はHzをベースに入力する。
RESTART_WDTはオプションで、ディレイ中にウォッチドッグタイマがリセットされてしまう時に指定するとディレイ中にもリセット命令を挿入します。
従ってディレイ関数を使う為には、まず最初に#USE DELAY関数で
クロック速度を指定してからそのあと使います。
この時のDELAY_CYCLES(count)の時間単位は、クロックの4倍と
なります。(アセンブラ命令の実行サイクル時間に相当する)
実際のプログラムでの使用例は下記のようにします。
《プログラム例》 漢字を含むのでこのままでは使えません
////////////////////////////////////////////
// This is an example of led control.
// Led controled by pararell output.
// The interval is about 0.5sec.
////////////////////////////////////////////
#device PIC16F84
#use delay(clock=10000000)
#byte port_b=6
main() {
set_tris_b(0); //set all output
while(1){ //endless
port_b=0; //all led on
delay_ms(500); //wait 0.5sec
port_b=0xff; //all led off
delay_ms(500);
}
}
/////////////////////////////////////////////
《解説》
#USE DELAY(CLOCK=speed)
PICの動作速度を指定しています。speedにはクロックをHz単位で
入れます。この速度を決めると、連動してDELAY_MSとDELAY_MS
の時間が決定されます。
DELAY_MS(time)
msec単位の待ち時間を指定します。timeは定数の時は0-65535
の値を指定できますが、変数にする時は0-255の範囲しか使えま
せん。