• 締切済み

A/DデータをSCIを利用してPCに表示したいのですが

H8/3052Fとポテンショメータ(通信ケーブルはRS232-C)を利用して得られるA/DデータをPCに表示させようとしています。 SCIとPCに最初から入っているハイパーターミナルを利用してA/Dデータを得たいのですが上手く行きません。 参考にしている資料のサンプルプログラム(文字をPCに返す)が上手く行ったのでそれと、A/Dデータ変換プログラムを組み合わせて行いました。 ですが、結果として文字列が表示されるものの数値データが帰ってきませんでした。 組みなおしましたが、出てくるのは文字(プログラム変更で無限に出る場合あり)と無限スペース(改行?)で進展しません。 考えとしては、文字データを返すプログラム文とは別に数値データを返すプログラム文にしないといけないのかな?と、思って調べたのですがこの考えを裏づけるものはありませんでした。(着目点が違うのかもしれませんが・・・)

みんなの回答

  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

それほど長くないのであれば、ソースコード(全部)見せていただけますか?

rador
質問者

補足

int add,add1; char tmp[20] ; void ioinit( void ) ; void int_imia0( void ) ; void ituinit() ; void setGRA( double deg ) ; void adinit(void) { AD.ADCSR.BIT.ADF = 0; AD.ADCSR.BIT.ADIE = 0; AD.ADCSR.BIT.ADST = 0; AD.ADCSR.BIT.SCAN = 1; AD.ADCSR.BIT.CKS = 1; AD.ADCSR.BIT.CH = 1; } typedef enum { BR2400 = 80, BR4800 = 162, BR9600 = 80, BR19200 = 40, BR38400 = 19, BR57600 = 13, BR115200 = 5, } BaudRate; void initSCI1 (BaudRate b) { int i; SCI1.SCR.BYTE = SCI1.SMR.BYTE = 0; SCI1.BRR = b; for (i = 0; i < 3000; i++) ; SCI1.SCR.BYTE = 0x30; SCI1.SSR.BYTE; SCI1.SSR.BYTE = 0x80; } void SCI1_OUT_d (char c) { while (SCI1.SSR.BIT.TDRE == 0) ; SCI1.TDR = c; SCI1.SSR.BIT.TDRE = 0; } void SCI1_OUT_s (char *st) { while (*st) SCI1_OUT_d(*st++); } char SCI1_IN_d (void) { char c; while (!(SCI1.SSR.BYTE & 0x78)) ; if (SCI1.SSR.BIT.RDRF == 1) { c = SCI1.RDR; SCI1.SSR.BIT.RDRF = 0; } else { SCI1.SSR.BYTE &= 0x80; c = 0; } return c; } int cnt ; double T = 2.0 ; double A = 30.0 ; int main(void) { unsigned char rd = 0; int i; adinit(); ioinit(); ituinit(); initSCI1(BR19200); while( P4.DR.BIT.B4 ) ; //while(1) SCI1_OUT_s("WELCOME!!") ; cnt = 0 ; ITU.TSTR.BIT.STR0 = 1; EI; while(1){ AD.ADCSR.BIT.ADST = 1; while(AD.ADCSR.BIT.ADF == 0); add = AD.ADDRA >> 6; add1 = AD.ADDRB >> 6; AD.ADCSR.BIT.ADF = 0; add = (int)((add *(5.0/1024.0)*1000.0)+0.5); add1 = (int)((add1*(5.0/1024.0)*1000.0)+0.5); //sprintf(tmp,"%d",add) ; //SCI1_OUT_s(tmp) ; P5.DR.BIT.B0 = 1 ; } } void int_imia0 (void) { ITU0.TSR.BIT.IMFA = 0; ++cnt ; double w ; w = -A * (2.0*PI/T) * cos( (2.0*PI/T) * (double)(cnt)/500.0 ) ; setGRA( w ) ; P5.DR.BIT.B1 = 0 ; if( abs(w) < 8.58 ) P5.DR.BIT.B1 = 1 ; sprintf( tmp, "%d", add ) ; SCI1_OUT_s( "A/D1 : " ) ; SCI1_OUT_s( tmp ) ; } void ioinit(void) { PB.DDR = 0xff; P4.DDR = 0x00 ; P4.PCR.BYTE = 0xff ; P5.DDR = 0xff ; P5.DR.BIT.B0 = 0 ; P5.DR.BIT.B1 = 0 ; } void ituinit() { ITU0.TCR.BYTE = 0x22; ITU0.GRA = 12499; ITU0.TIER.BIT.IMIEA = 1; ITU0.TSR.BIT.IMFA = 0; ITU3.TCR.BYTE = 0x22; ITU4.TCR.BYTE = 0x22; ITU.TMDR.BIT.PWM3 = 1; ITU.TMDR.BIT.PWM4 = 1; ITU3.GRB = 62; ITU4.GRB = 62; } void setGRA(double deg) { if( abs( deg ) < 8.58){ deg = 0 ; }else if( abs( deg ) > 4537 ){ if( deg < 0 ){ deg=-4537 ; }else{ deg=4537 ; } } if( deg == 0 ){ ITU.TSTR.BIT.STR3 = 0 ; ITU.TSTR.BIT.STR4 = 0 ; }else if(deg>0){ ITU.TSTR.BIT.STR3 = 1 ; ITU.TSTR.BIT.STR4 = 0 ; ITU3.GRA = (180000.0*25.0/(8.0*deg))-1.0; } else{ deg *= -1 ; ITU.TSTR.BIT.STR3 = 0 ; ITU.TSTR.BIT.STR4 = 1 ; ITU4.GRA = (180000.0*25.0/(8.0*deg))-1.0; } } 以上です。コメントされているところを有効にしたりすると、無限改行?になったりします。 よろしくお願いします。

関連するQ&A