初めまして 加藤 至喜 と申します。 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); // 変換した値を持って返る }