電子書籍の厳選無料作品が豊富!

このように入力された時間をPICマイコンからシリアル通信でPCに送信したいのですが、
数字を入力しても「hour:」となって数字が表示されません。

int型ではないので素直に行かないことは想定していましたが、
調べても??でした。

char型なのは、数字だけでなく文字も入力するためです。

知恵をお貸しください。m(_ _)m

PICは16F1938です。
ターミナルコンソールは、Tera Termです。
hhの変数はchar型です。
RXBUFF_3[]の型はchar型です。
out_put_tx();関数はRS-232Cポートからデータを出力する関数です。

*下記、ソース抜粋
*****************************************************************************

// 入力された時間(文字)を2次元配列から取り出して10の位にして変数hhに代入
hh = RXBUFF_3[0] * 10;
// 入力された時間(文字)を2次元配列から取り出して10の位と足す
hh += RXBUFF_3[1];

// 下記、1バイトづつ送信
out_put_tx('h);
out_put_tx('o');
out_put_tx('u');
out_put_tx('r');
out_put_tx(':');

// 1バイトづつしか送信できないので、10の位と1の位に分けて送信
out_put_tx(hh / 10);
out_put_tx(hh % 10);

out_put_tx('\n'); // 改行
out_put_tx('\r'); // 復帰

質問者からの補足コメント

  • 回答有り難うございます。
    補足です。
    >例えば…18時と入力した場合、

    RXBUFF_3[0]には「1」、RXBUFF_3[1]には「8」と入ります。

    >「数値」と「数字」の違い

    数値は「数そのもの」数字は「文字列」と認識していますが、合っていますでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/03/27 17:41
  • 0は、0x00(NULL文字)
    '0'は、0x30
    で合っていると思います。

      補足日時:2018/03/27 18:37
  • うーん・・・

    下記のようにしましたが、
    RXBUFF_3[0]に1
    RXBUFF_3[1]に0
    と入力すると出力が26
    同11と入力すると出力が27と出力されてしまいました。



    hh= RXBUFF_3[0]*10;
    hh+= RXBUFF_3[1];

    rs_out_tx(0x30 + (hh/10));
    rs_out_tx(0x30 +(hh%10));

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/03/27 19:36
  • うーん・・・

    hh= RXBUFF_3[0]*10;
    hh+= RXBUFF_3[1];

    >の計算のあと、hh には 10 または 11 が入っていますか。
    12と入力しましたが、直接数値を見れないため、内蔵EEPROMに書き込んだ場合は
    出力は、10進で26となっていました。
    コレはおかしいです。
    また??状態です。

    rs_out_tx(0x30 + (1));
    rs_out_tx(0x30 +(2));
    とした場合は、出力は12です。

    No.4の回答に寄せられた補足コメントです。 補足日時:2018/03/27 20:12

A 回答 (5件)

RXBUFF_3[] に数値ではなく、数字が入っているのでしょうね。



hh= (RXBUFF_3[0] - 0x30)*10;
hh+= RXBUFF_3[1] - 0x30;

としたらどうですか。
    • good
    • 0
この回答へのお礼

ありがとうございます。!!

この様に変更したところ、無事に出力が正常に出来ました。
hh= (RXBUFF_3[0]-0x30)*10;
hh+= RXBUFF_3[1]-0x30;
out_put_tx(0x30+(hh/10));
out_put_tx(0x30+(hh%10));

お礼日時:2018/03/27 20:41

hh= RXBUFF_3[0]*10;


hh+= RXBUFF_3[1];

の計算のあと、hh には 10 または 11 が入っていますか。

rs_out_tx(0x30 + (1));
rs_out_tx(0x30 +(2));

を実行したらどうなりますか。
この回答への補足あり
    • good
    • 0

hh / 10


hh % 10

は数値ですから、それを数字(文字) に変換してから出力する必要があります。

簡単には、
数字 = 0x30 + 数値;
この回答への補足あり
    • good
    • 0

例えば


char ch = 0;

char ch = '0';
との関係は理解できていますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

0は、0x00(NULL文字)
'0'は、0x30
で合っていると思います。

お礼日時:2018/03/27 18:36

>// 入力された時間(文字)を2次元配列から取り出して10の位にして変数hhに代入


>hh = RXBUFF_3[0] * 10;
>// 入力された時間(文字)を2次元配列から取り出して10の位と足す
>hh += RXBUFF_3[1];

例えば…18時と入力した場合、上記のRXBUFF_3[0]とRXBUFF_3[1]にはどういう値が入りますか?

その上で……
>// 1バイトづつしか送信できないので、10の位と1の位に分けて送信
>out_put_tx(hh / 10);
>out_put_tx(hh % 10);

「数値」と「数字」の違いは認識していますか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答よろしくお願いします。
補足をしましたのでよろしくお願いします。

お礼日時:2018/03/27 17:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!