- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC16F819のADC機能について)
PIC16F819のADC機能について
このQ&Aのポイント
- PIC16F819のA/D変換プログラムをC言語で作りたいのですが、参考になるサイトや本がないのでどこから手をつけていいのかまったく分かりません。
- PICC Compilerの期間限定版をダウンロードして、その中にあったサンプルプログラムを見てみました。PIC16F87X用のADCのサンプルプログラムがあったので、とりあえずMPLABでコンパイルしてみましたが、ADGOの部分でエラーが出てしまいました。
- どうもPIC16F819ではADGOが使用できないようですが、どうすれば改善されるのでしょうか?分かる方がいましたら、御教授よろしくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
PIC16F819のADC開始制御及び完了検出は、ADCON0レジスタのbit2にあるGO/DONEビットを用います。これを1にすればAD変換がスタートし、変換が終了すれば0になるのでそれを監視しデータを読み出します。従って、 ADGO=1; while(ADGO)continue; の部分を ADCON0 |= 0x04; while (ADCON0 & 0x04) continue; のように書き換えれば良いと思います。 ADGOという表現は、以前どこかで見た記憶があるのですが、その#define定義がどんなものだったか忘れました。(どんな風に定義すれば、上記の2つの式を満足できるのでしょうか?…) 少し上に ADON=1; という式がありますが、この部分が正常にコンパイルを通っているのなら、その宣言を探して見ると良いと思います。ADON=1 という式は、展開すれば ADCON0 |= 0x01; となるはずです。
その他の回答 (1)
- LCR707
- ベストアンサー率70% (95/135)
回答No.2
#1です。 あー、bit型を定義しているのですか。なるほど。 PICについてはアセンブラしか使ったことが無いので知りませんでした。PICには、BSFやBCF、BTFSS,BTFSCのようなビット命令があるので、bit型というのはCコンパイラの場合便利でしょうね。納得しました。教えて下さってありがとうございました。 ADGOがbit型ならば ADGO=1; while(ADGO)continue; の2つの式は文法エラーを起こさず、問題なくコンパイルできると思います。
お礼
遅くなりましたが、回答ありがとうございます。 回答の通りに書き換えたところ、正常にコンパイルすることができました。 ちなみにPIC16F819のADDONEの定義は static volatile bit ADON @ (unsigned)&ADCON0*8+0; static volatile bit GODONE @ (unsigned)&ADCON0*8+2; で、PIC16F87のADDONEとADGOの定義は static bit ADON @ ((unsigned)&ADCON0*8)+0; static volatile bit GODONE @ ((unsigned)&ADCON0*8)+2; static volatile bit ADGO @ ((unsigned)&ADCON0*8)+2; となっていました。PIC16F819でADGOを static volatile bit ADGO @ ((unsigned)&ADCON0*8)+2; と定義すれば、 ADGO=1; while(ADGO)continue; の2つの式を満足できるということでしょうか?