- ベストアンサー
H8/36064のAD変換データの文字列化について
- H8/36064のAD変換データを文字列化する方法について調査中です。
- 前回の質問後、10ビットのA/D変換データを文字列に置き換える方法を調べstatic void uint2Hex()によって文字列に置き換えを行っていますが、解消できませんでした。
- H8/36064を使用しTera Termに取り込むことでAD変換データを確認しています。シリアル通信の設定はマイコン側、Tera Term側で合わせています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> static void uint2Hex()によって文字列に置き換えを行っているのですが とのことですが、unit2Hex() は一度も呼ばれていないようです。 つまり、文字列の置き換えなどされてないと言うことです。 また、data1, data2 をそれぞれ、0xfa00, 0xfa10 番地に割り当てているようですが、これも意図が理解できません。 ここには、未定義のレジスタが存在するようですが、定義されないところを何かに使うのは、良くない気がします。 その他にも、rs_puts() が定義してあるのに使っていないとか、ずいぶんと不思議な気がします。 他のところがあっているとすれば、 Getad() { unsigned int data; char buff[16]; initSCI3(); // SCI3初期化 data = AD.ADDRA >> 6; uint2Hex(data, 0,buff); rs_puts(buff); rs_putc(':'); // 区切り記号(適当に) data = AD.ADDRB >> 6; uint2Hex(data, 0, buff); rs_puts(buff); rs_putc('\x0d'); // 区切り記号(適当に) AD.ADCSR.BIT.ADF = 0; AD.ADCSR.BIT.ADST = 0; } こんな感じで、16進の文字列で出てくる気がします。 data も省くなら、 Getad() { char buff[16]; initSCI3(); // SCI3初期化 uint2Hex(AD.ADDRA >> 6, 0, buff); rs_puts(buff); rs_putc(':'); // 区切り記号(適当に) uint2Hex(AD.ADDRB >> 6, 0, buff); rs_puts(buff); rs_putc('\x0d'); // 区切り記号(適当に) AD.ADCSR.BIT.ADF = 0; AD.ADCSR.BIT.ADST = 0; } でも、いけるのではないかと思います。
その他の回答 (2)
- tsunji
- ベストアンサー率20% (196/958)
rs_putc(*data); rs_putc(*data2); の部分を以下の様に書き換えてみてください。 rs_putc(':'); rs_putc((*data / 1000) % 10 + '0'); rs_putc((*data / 100) % 10 +'0' ); rs_putc((*data / 10) % 10 +'0' ); rs_putc(*data % 10 + '0'); rs_putc(':'); rs_putc((*data2 / 1000) % 10 + '0'); rs_putc((*data2 / 100) % 10 +'0' ); rs_putc((*data2 / 10) % 10 +'0' ); rs_putc(*data2 % 10 + '0'); 10進数で結果が出力されると思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
具体的には ・何がどうなることを期待していて ・実際には何がどうなる のでしょうか?
補足
data,data2に格納されたA/D変換のデータを16進数の文字列に変換し、 シリアル通信を使ってTera Teramに表示することが目的です。 しかし、今のままではTera Teramに表示はできるのですが、 送られてくるデータが文字化けしてしまっています。
お礼
ありがとうございました。おかげさまでTera Term上に表示させることができました。 data,data2にそれぞれ0xfa00,0xfa10を割り当てたのはHEW上で確認を行うためのものでした。