- 締切済み
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 です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- asciiz
- ベストアンサー率70% (6803/9674)
>何が原因なのでしょうか。 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); のように使えるはず、と。
お礼
ありがとう御座いました。前に進めさおうです。 今後ともよろしくお願いいたします