H8-3069ネット対応マイコンにMESを入れる > 基本編11.LabVIEWとH8-3069ボードH8で文字受信)

11.LabVIEWとH8-3069ボード(H8で文字受信)

プログラム

H8-3069LANマイコンに送るプログラムは下のsci1_2.cです。こちらにおきます。ダウンロードして使ってください。
内容はほとんど基本編8のsci0_2.cと同じです。不要なところを削ったくらいです。
あと、文字受信終了の判断文字を0x0A(LF=改行)に変更しました。

/*シリアルポートsci0を使った通信(受信)*/ #include <string.h> #include <mes2.h> int main() { int fd,i,len,r = 0; unsigned char lcd[82]; char *a; unsigned char Word[] = "ニュウリョクシテクダサイ:"; // ポインタに配列lcdの先頭アドレスを入れる a = lcd; // LCD画面の消去 fd = open("lcd0", 0); for(i=0;i<32;++i){ seek(fd, i); fprintf(fd, " "); } close(fd); fd = open("com0", 0); write(fd, Word, strlen(Word)); close(fd); do{ // 文字入力があるまで待つ while(r == 0){ fd = open("com0",0); sleep(80); r = read(fd, a, 1); close(fd); printf("%d",r); } r = 0; // ポインタaを一要素分進める a = ++a; } // ENTERキーが押されるまで受け付ける while(*(a-1)!= 0x0A); //受信したらLCDに書き出す fd = open("lcd0", 0); write(fd, lcd, strlen(lcd)); close(fd); len = strlen(lcd); printf("\r\n%d文字受信しました\r\n",len); }//main

また、LabVIEWプログラム(ブロックダイアグラム)は以下のとおりです。下の図をクリックすると、大きい図が見られます。
こちらも少し手を加えました。ベースは前回の基本編11のプログラムです。LabVIEWが速いのでH8マイコン側の受信が追いつくように、文字一つ一つを送る間の「送信間隔」をだいぶ長めに取っています。

ブロックダイアグラム

動かしてみる

まず、「ニュウリョクシテクダサイ:」の文字列をH8側から受信するために、フロントパネル上の「読み取り」をONにし、「書き込み」をOFFにしておきます。

スタート前

LabVIEWプログラム(VI)をスタートします。
その後、予めハイパーターミナルからH8に送っておいたsci1_2.elfの実行をします。実行すると、フロントパネルの「読み取り文字列」欄にH8から送られてきた「ニュウリョクシテクダサイ:」が表示されます。そして一旦、VIが終了します。
このとき、ハイパーターミナルには0が連続して書き出されたままであり、H8は文字を受け取る状態を保持しています。
フロントパネルの「読み取り」をOFFにし、今度は「書き込み」をONして「書き込み文字列」欄に書き込みたい文字列を入力します。ここでは最後の文字としてEnterキー(\n)を打ち込んでおきます。
この状態で再びVIを実行します。すると送信が開始されます。

書き込み時のフロントパネル

受信したときにハイパーターミナル上に、「1」が書き出されます。
受信が終了すると次のようになります。VIも止まります。

ハイパーターミナルの様子

何回かテストしていろんな文字列を送ってみました。下は「VIVA!Mendori\n」を送った時の液晶画面の様子です。

液晶画面の様子

よく見ると、途中の「o」が受信できていないことが分かります。(ダメじゃん!(笑))
VIからちゃんと文字を送ったかどうか確認するために、フロントパネル上に配列(1文字送信したら1を配列の中に入れる)を表示させて確認しましたが、送信はちゃんとしているようです。しかも5秒もの間隔を置いて送信しています。これはどうやらH8で受け取るタイミングがうまくいってないようです。
難しいですね・・・(^_^:)
いつまでたっても初心者です。

とりあえず、今回はここまでです。

次は12.電圧を取り込む(A/D変換)です。>> 






[PR]口が臭う人の共通点…:臭いが見える対策は?