初めまして 加藤 至喜 と申します。
H8をつかって、AD変換をしたいと思い以下のプログラムを作ったのですが(AD変換部分だけ抜粋)、コンパイルは通るものの、while文の行がずっ
と終わらない(=AD変換が終わらない?)ようなのですが、原因は分かりますでしょうか?
int ADconv(void)
{
int ADdata;
AD.CSR.BIT.ADST = 1; // A/D変換開始
while(!AD.CSR.BIT.ADF) ; // 変換終了待ち
ADdata = AD.DRA >> 6; // 変換されたデータをADdataに格納
AD.CSR.BIT.ADF = 0; // 変換終了フラグをクリア
return(ADdata); // 変換した値を持って返る
}
printf("××××"); の文を各行に入れて、プログラムがどこで止まっているか確認した結果、while文の前までは、×××× は表示され
ましたが、while文の後に入れたら、表示されなくなりました。たぶん、
AD変換が終了していない ことが、原因かなと思い、10分くらい待ってみたのですが、結果は同じでした・・・。
***********プログラムの全体です↓↓↓↓↓↓↓****************************
#ifdef __cplusplus
extern "C" {
#endif
#include "iodefine.h"
void main(void);
void initADC(void);
int ADconv(void);
#ifdef __cplusplus
}
#endif
void main(void)
{
PB.DDR = 0xff; // Port-Bを出力に設定
PB.DR.BYTE = 0x00;
initADC(); // A/Dコンバータ初期化
while(1){
PB.DR.BYTE = (ADconv() >> 2);
}
}
/
***********************************************************************/
void initADC(void)
{
AD.DRA = 0; // データレジスタをクリア
AD.CSR.BIT.ADF = 0; // A/D変換終了フラグをクリア
AD.CSR.BIT.ADIE = 0; // A/D変換終了割り込みを禁止
AD.CSR.BIT.ADST = 0; // A/D変換スタートフラグをクリア
AD.CSR.BIT.SCAN = 0; // A/D変換は単一モード
AD.CSR.BIT.CKS = 1; // 変換時間は134ステート(高速)
AD.CSR.BIT.CH = 0; // A/D変換はAN0ポートを使用
AD.CR.BYTE = 0;
}
/
***********************************************************************/
int ADconv(void)
{
int ADdata;
AD.CSR.BIT.ADST = 1; // A/D変換開始
while(!AD.CSR.BIT.ADF) ; // 変換終了待ち
ADdata = AD.DRA >> 6; // 変換されたデータをADdataに格納
AD.CSR.BIT.ADF = 0; // 変換終了フラグをクリア
return(ADdata); // 変換した値を持って返る
}