hamayan です。 kouichi_nk> はじめまして。H8についていろいろ探しているとココにたどり着きました。 kouichi_nk> 現在、初めて手にしたマイコンと奮闘中です。 まずターゲットは何でしょう? 丁度2、3日前に作成したTINY 3664用のA/D変換処理が有るので文書が長くなって申し訳 ないのですが掲載しちゃいますね。まあ、ソフトウエアって人まねから始めるものですし、 TINY以外のCPUでも融通が利くはずですから。 その前にH8のA/Dコンバーターは一度に変換できるのは4chまでと言う事は既にご存知ですね。 所望の変換モードに設定したら変換スタートbitをsetする事でスキャンモードなら一気に4ch 変換してくれます。 また変換が完了したらそれを割り込みで知らせてくれるのでその割り込み中でデータを取り込 んだら後半の4chのスキャンモードをset、A/D変換スタートの手順になります。 なお一定周期の変換を行う時はADTRG端子に一定周期のタイミングを入れてやれば良いのです。 下記のプログラムはTIMER Vで4ms周期のタイミングを生成してADTRG端子に接続しています。 厳密に言えば前半と後半のA/D変換値に時間差が生じているのでそれを嫌うなら外付けでサンプ ルホールド回路が必要でしょう。 なお、割り込みを使ったシリアルのコードを載せると本当に長くなってしまうので http://www19.u-page.so-net.ne.jp/tc5/hamayan/hos-sh/hos_tiny.html 中にソースのアーカイブが有りますのでそれを参考にして見てください。 /********************************************************************/ /* A/D割込み処理 */ /* A/D変換はADCSR.BIT.ADST = 1でも開始します */ /* このプログラムはITRON上に実装しているのでA/Dデータ取り込み */ /* 後の処理は関数wup_tskで該当TASK(処理)を起動してそこで行っている */ /********************************************************************/ /*グローバル領域にバッファを設ける*/ unsigned int ad_buf[ 8 ]; #define AN3 3 #define AN7 7 void AD_Int( void ){ static int count = 0; unsigned int *ad; unsigned int *buf; ADCSR.BIT.ADF = 0; /*変換ステータスのクリア*/ ADCSR.BIT.ADST = 0; /*A/D変換停止*/ ad = (unsigned int *)&ADDRA; if( ADCSR.BIT.CH == AN3 ){ ADCSR.BYTE = 0x58 | AN7; /*AN?をスキャンモードに設定、割り込みを許可、変換時間は70ステート*/ ADCSR.BIT.ADST = 1; /*A/D変換スタート*/ buf = &ad_buf[ 0 ]; } else{ if( ++count == 125 ){ /*500ms周期を造る*/ count = 0; wup_tsk( TID_AD ); /*AD TASKの再開*/ } buf = &ad_buf[ 4 ]; ADCSR.BYTE = 0x58 | AN3; /*AN?をスキャンモードに設定、割り込みを許可、変換時間は70ステート*/ } while( ad <= (unsigned int *)&ADDRD ) *buf++ = *ad++ >> 6; ret_int(); /*割込みからの復帰*/ } ------------------------------------------------------------ hamayan so-net:hamayan@xxxxxxxxxxxxxxxx でもso-netはケチでメールBOXの容量少ないので 添付FILEのある時は AIRNET:hamayan@xxxxxxxxxxxxxxx に送ってね。