※ ChatGPTを利用し、要約された質問です(原文:マイコン(PIC)とPC間での通信について)
マイコン(PIC)とPC間での通信について
このQ&Aのポイント
マイコン(PIC)とPC間での通信についての質問です。プログラムの考え方について教えてください。
行いたいことは、PICのある値をTera Termを用いてシリアル通信で変化させることです。具体的には、5ケタの数値を入力する際に、「00001」ではなく、「1+[Enter]」で入力したいです。
現状としては、Tera Termでの通信はできていますが、数値の入力において「015」と入力する必要があります。これをスマートにするための考え方やアルゴリズムの参考書籍やサイトについて教えていただけると助かります。
プログラムの考え方についての質問です。
環境:
Windows環境にて、Tera Termを用いています。
PICはdsPICです。
行いたいこと:
PICのある値をTera Termを用いてシリアル通信で変化させたい。
その時、5ケタの数値を入れる時に「00001」では無く、「1+[Enter]」で入力をしたい。
質問:
上記を実現する考え方を教えて頂けると幸いです。
(プログラムはもちろん自分で考えます)
または、アルゴリズムの参考書籍や、参考サイト等を教えて頂けると幸いです。
書店で「アルゴリズム」の本を見ても、マイコンや組込みシステムの本が見当たりませんでした。
(私の探し方が悪いとは思うのですが・・)
現状:
1.Tera Term での通信はできています。
3桁の数値を入力し、その値が反映され、PICは動作しています。
しかし、「15」と打つ時も「015」と打っており、スマートではありません。
以下のソースの通り、1文字ずつ受信した文字を、数値に変換し、
各桁に変換しています。
/*ソース抜粋*/
putsUART1(Set_para_Adj_num);
while(BusyUART1());
for(i=0;i<3;i++){
while(!U1STAbits.URXDA); // データ受信すると、「1」になるので次の行へ行く
adj[i] = ReadUART1();
}
for(i=0;i<3;i++){
U1_Send(adj[i]);
while(BusyUART1());
}
CRLF();
adj[0]=(adj[0]-'0')*100; // -'0'でASCII⇒数値への変換
adj[1]=(adj[1]-'0')*10;
adj[2]=adj[2]-'0';
Adj_num=adj[0]+adj[1]+adj[2];
2.Tera TermでのEnterキーの受信は出来ています。
0X0D (CR)を受信すると、「ENETR」が表示されることは確認できています。
下名の考え:
if文で「Enterが押された時」に、今までの入力された桁数を覚えておいて、上位の桁に「0」
を代入するしかないのでしょうか。
お礼
chie65535様: ソースコードも示して頂き、ありがとうございます。 また、私の抜粋した説明不足のプログラムに、コメントまでつけて頂きありがとうございます。 惚れ惚れする洗練された、プログラムですね。 私のベタ書きが恥ずかしい限りです。 少しでもchie65535様の様なソースを書けるように様々なプログラムを読んでいきます。 本日は、PICの前にいないので、明日に試してみます。 一応頭の中で検算(chie65535様を疑っている訳でなく、コピペで終わらせない為に) したところ、 例)一回目が'5' 、二回目が'3'と打つと、53になりました。(あくまでも私の頭の中だけですが・・) また、非常に厚かましい質問ですが、 もし3桁欲しい場合はどうお考えになられますか? 単純に Adj_num *= 10;の前に Adj_num *= 100; を加えても、十の位の入力の時に値が更新されてしまいました。(あくまでも私の頭の中で) もしお時間があれば、アドバイスを頂けると幸いです。
補足
申し訳ございません。 おかしなことを言っていました。 Adj_num *= 100; は不要ですね。 三桁以上の場合も、chie65535様のプログラムで大丈夫ですね。 例)'1', '5', '3'と入力が来た場合 *10なので、1桁ずつシフトしていきますね。 お恥ずかしい限りです。