【お題】王手、そして

void sci3(void){ //シリアル受信割り込み処理関数
 volatile static unsigned char i = 0;
 if(SCI3.SSR.BIT.RDRF ==1){
  rx_data = SCI3.RDR;
  if(rx_data != '\n'){
   rx_string[i] = rx_data;
   i++;
  }else{
   rx_string[i-1] = '\0';//-1必要性
   i=0;
   rx_flag = 1;
  }
  if(SCI3.SSR.BIT.OER == 1){
   SCI3.SSR.BIT.OER = 0;
   rx_flag = 2;
  }
  if(SCI3.SSR.BIT.FER == 1){
   SCI3.SSR.BIT.FER = 0;
   rx_flag = 3;
  }
  if(SCI3.SSR.BIT.PER == 1){
   SCI3.SSR.BIT.PER = 0;
   rx_flag = 4;
  }
 }
}
上記のプログラムでteratermを用いた通信を問題なく行えるのですが、
例えば
teratermに一文字目"a"を入力する。> i = 0 string[0] = 'a' i++
teratermに二文字目"b"を入力する。> i = 1 string[1] = 'b' i++
teratermに三文字目"\n"(Enter)。>i = 2 string[2-1] = '\0' i = 0
を行い、stringの文字列は'b'が消え、"a\0"になってしまうと思うのですが、
なぜ問題なく入力されるのでしょうか?

H83694Fのマイコンを使用し、RS232C通信です。

A 回答 (1件)

TeraTermの送信改行コードはどうなっています?


[設定][端末]から表示される端末の設定のうち、改行コードの送信の箇所です。

LFになっていたら、指摘の通り”a\0”となるでしょうが、CR+LFになっている場合は"\n"の受信前は"ab\r"になっています。
切り替えて動作を見てみるといいでしょう。
    • good
    • 0
この回答へのお礼

その設定が関与していたんですね!!
ありがとうございます。

お礼日時:2017/03/13 19:04

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


おすすめ情報