PIC18F14K50の基本動作から応用プログラムまでを学びます。

ホーム
16F18313
16F18325
16F18346
16F1619
Curiosity
---
---
    
12F1822
16F1455
16F1459
18F14K50
18F26J50
dsPIC
その他
XC8 ライブラリ delay

PIC18F14K50のプログラム開発で良く使用するXC8 C COMPILER LIBRARIESのdelay関数を説明します。

_delay(x);
(x) は、unsigned long cycles  (x) の最大値は、50,659,000
インストラクションクロックを何クロック分遅延に使用するかを(x)に指定します。そのため、クロック周波数により各関数の遅延時間が変化します。代表的なクロック周波数と、遅延時間を一覧にまとめました。なお、発振クロックの1/4がインストラクションクロックになります。
__delay_us(x)
__delay_ms(x)
(x) は、4MHzで197mS以下の定数
時間を直接指定し遅延量を指定します。ンストラクションクロックを何クロック分遅延するかを自動計算するために、クロック発振周波数を下記例のように Hz 単位で定義します。なお、引数に変数は使用できません。
また、遅延できる最大は、インストラクションクロックに換算し197000サイクル分までのため、4MHzの発振では、197mSが最大遅延時間になります。発振周波数を倍の8MHzにすると、最大遅延時間は半分の98mSになってしまします。
_delay関数 48Mhz 16Mhz 4Mhz
_delay(10) 0.83μSec 2.5μSec 10μSec
_delay(100) 8.3μSec 25μSec 100μSec
_delay(1000) 83μSec 250μSec 1mSec
_delay(10000) 0.83mSec 2.5mSec 10mSec
_delay(50000000) 4.166Sec 12.5mSec 50Sec

プログラム

(クロック周波数4Mhzの場合)

  #include<xc.h>                  // ライブラリを参照する
  //
  // ------ Sample ------
  //
  _delay(10);            // 10uS遅延
  _delay(200000);        // 200mS遅延
  _delay(50000000);      // 50S遅延
			

  #include<xc.h>                  // ライブラリを参照する
  #define _XTAL_FREQ 4000000      // delay_ms(x) のための定義
  //
  // ------ Sample ------
  //
  __delay_us(10);            // 10uS遅延
  __delay_ms(10);            // 10mS遅延
  __delay_ms(100);           // 100mS遅延