• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マイコン(PIC)とPC間での通信について)

マイコン(PIC)とPC間での通信について

このQ&Aのポイント
  • マイコン(PIC)とPC間での通信についての質問です。プログラムの考え方について教えてください。
  • 行いたいことは、PICのある値をTera Termを用いてシリアル通信で変化させることです。具体的には、5ケタの数値を入力する際に、「00001」ではなく、「1+[Enter]」で入力したいです。
  • 現状としては、Tera Termでの通信はできていますが、数値の入力において「015」と入力する必要があります。これをスマートにするための考え方やアルゴリズムの参考書籍やサイトについて教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

以下のように変更しましょう。 Adj_num = 0; putsUART1(Set_para_Adj_num); while(BusyUART1()); for(;;){ while(!U1STAbits.URXDA); // データ受信すると、「1」になるので次の行へ行く adj[0] = ReadUART1(); U1_Send(adj[0]); //受け取った文字をそのままエコーバックする while(BusyUART1()); if (adj[0] == 0x0d) { U1_Send(0x0a); //CRをエコーバックした後はLFもエコーバックする while(BusyUART1()); break; //Enterを受け取ったのでループを抜ける } else if ((adj[0] >= '0') && (adj[0] <= '9')) { Adj_num *= 10; Adj_num += (adj[0] - '0'); } } //Enterを受信してループを抜けた段階で、Ajd_numの中に、希望する答えが入っているので、これ以上、何もする必要はない。

Snoodam
質問者

お礼

chie65535様: ソースコードも示して頂き、ありがとうございます。 また、私の抜粋した説明不足のプログラムに、コメントまでつけて頂きありがとうございます。 惚れ惚れする洗練された、プログラムですね。 私のベタ書きが恥ずかしい限りです。 少しでもchie65535様の様なソースを書けるように様々なプログラムを読んでいきます。 本日は、PICの前にいないので、明日に試してみます。 一応頭の中で検算(chie65535様を疑っている訳でなく、コピペで終わらせない為に) したところ、 例)一回目が'5' 、二回目が'3'と打つと、53になりました。(あくまでも私の頭の中だけですが・・) また、非常に厚かましい質問ですが、 もし3桁欲しい場合はどうお考えになられますか? 単純に Adj_num *= 10;の前に Adj_num *= 100; を加えても、十の位の入力の時に値が更新されてしまいました。(あくまでも私の頭の中で) もしお時間があれば、アドバイスを頂けると幸いです。

Snoodam
質問者

補足

申し訳ございません。 おかしなことを言っていました。 Adj_num *= 100; は不要ですね。 三桁以上の場合も、chie65535様のプログラムで大丈夫ですね。 例)'1', '5', '3'と入力が来た場合 *10なので、1桁ずつシフトしていきますね。 お恥ずかしい限りです。

関連するQ&A