みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

c言語でpicにDelay関数を使いたい

pic16f84a用にLED点滅のソースコードを書きましたがエラー出て前に進めません。
コードは次の様になっています。

(前段略)
#use delay(clock=20000000)
void main(void) {
TRISA = 0x00;
PORTA = 0x03;
TRISB = 0x00;
PORTB = 0x00;

while (1)
{
PORTA = 0x02;
Delay_ms(1000);
PORTA = 0x01;
Delay_(1000);
}
}

コード書き込み中にすでにDelayの箇所が2か所ともエラーの表示になってしまいます。

一応下記の様にdelya箇所をコメント化してビルドと,picに書き込みを行えます、そしてLEDも点滅できます。

while (1)
{
PORTA = 0x02;
//Delay_ms(1000);
PORTA = 0x01;
//Delay_(1000);
}
}

参考のコードを正確に書き込みましたがこのような状況でしたので、
  #use delay(clock=20000000) は自分が勝手に追加してみましたが結果はやはり同じでした。

何が原因なのでしょうか。

何方か教えて頂けませんか。お願いいたします。

自分の環境は、Windows8 MPLABX IDE2.10  XC8  PIC16F84A pickit3 です。

投稿日時 - 2014-06-25 16:03:10

QNo.8652936

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>何が原因なのでしょうか。

delay() は実装依存です。
なぜかと言えば、機器ごとに実行速度が異なり、時刻の取り出し方も違うので、機器それぞれに、一定時間を測定して待つ、というプログラムは一般化できないためです。

で、XCでの delay()は、以下のようになっているとのこと。

http://www49.atwiki.jp/129s_note/pages/16.html

「include "delays.h"」は使用不可で、xc.hをインクルードした後に_XTAL_FREQをPICのクロック周波数で宣言するようにとのこと。

実例はこちら、

http://pastebin.com/ivHFck0m

>#include <xc.h>
>#define _XTAL_FREQ 20000000

頭にこう書いておいて、

> __delay_ms(1000);

のように使えるはず、と。

投稿日時 - 2014-06-25 17:33:26

お礼

ありがとう御座いました。前に進めさおうです。
今後ともよろしくお願いいたします

投稿日時 - 2014-06-27 14:23:45

あなたにオススメの質問