H8-3069ネット対応マイコンにMESを入れる > 基本編8.シリアルポートsci0を使ってみる(受信)

8.シリアルポートsci0を使ってみる(受信)

ケーブルの準備をする

さて、基本編7で送信動作が確認できたので、ここでは受信動作をやってみます。
ここでケーブルの結線を追加しました。送信動作ではRxD、TxD、GNDしかつなぎませんでしたが、ここでは4.DTR(データ端末レディ)と6.DSR(データ・セット・レディ)、それから7.RTS(送信要求)と8.CTS(送信可能)をそれぞれコネクタ側でつないでみました。
なお、ここでなぜつないだかというと、なかなか受信に成功しなかったからです。
私のような初心者はいろいろやってみて動けばとりあえずそれでOKです。難しいこと考えずに成功を素直に喜びました(笑)。

4と6、7と8をそれぞれ結線してみた

ここでやろうとしていることは、7.と同じようにパソコンとマイコンを接続して、今度はハイパーターミナルから文字を送って、それがちゃんとsci0を経由してマイコン側で受信できたかを確認したいと思います(つまりさっきの逆を行う)。

パソコンと通信

/*シリアルポート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); } // 画面に入力中の文字を表示する fd = open("com0",0); write(fd,a,1); close(fd); r = 0; // ポインタaを一要素分進める a = ++a; } // ENTERキーが押されるまで受け付ける while(*(a-1)!= 0x0D); //受信したらLCDに書き出す fd = open("lcd0", 0); write(fd, lcd, strlen(lcd)); close(fd); len = strlen(lcd); printf("\r\n%d文字受信しました",len); }//main

今回は上のようなプログラムで動きました。
特に大事なのは、readする前のsleep();です。最初ここを書かずにやっていたのですが、文字を受信できませんでした。com0をopenした後、sleepを入れたほうがよいようです。
sleepの数字はいくつか試して適当な値(ここでは80)を入れています。この数字が大きすぎても小さすぎてもだめなようです。いろいろ試してやってみると面白いかもしれません。
このsci0_2.cはこちらにおきます。ダウンロードして使ってください。保存先はC:\mes\sci0_2フォルダの中にします(sci0_2フォルダをmesフォルダの中に新規作成する)。
そして、コンパイル、RAMに転送します。RAMに転送する際、ハイパーターミナルからではなく、先ほどインストールしたTeraTermを使ってください。これまでのプログラム転送の手順と一緒です。ifconfigでマイコンにIPアドレスを設定し、pingでマイコン側からパソコンへ通信できるか確認、その後、tftpサーバを立ち上げて、プログラムをLANを使って転送します。
elfファイルの転送が完了したら、プログラムを実行する前に、(TeraTermも起動したまま)ハイパーターミナルを立ち上げます。ハイパーターミナルのシリアルポートの設定はCOM1に合わせ、ボーレート(速度)は57600にしておき、通話状態にさせます。

sci0_2.elfを転送し終わったところ

COM1側の準備が整ったら、TeraTerm画面から下のようにsci0_2.elfを実行します。

受信完了!

sci0_2.elfを実行すると、ハイパーターミナルの画面に「ニュウリョクシテクダサイ:」と半角カナで表示されます。これで受信まち状態に入っています。
ハイパーターミナルの画面の上でクリックして、ゆっくりと文字を打ち込んでいきます。早すぎると取りこぼすので一つずつキーを押して、取り込まれるのを確認しながら打ちましょう。Enterキーが押されるまで受信するようにプログラムを書いているので、終わったらEnterキーを押してください。
Enterキーが押されると、上図でいうと上部のほう(TeraTermの画面の一部です)にあるように、「○文字受信しました」という表示がでます。この○文字は最後のEnterキーを含んだ受信数です。

受信完了で液晶には受信した文字列が表示されます

なお、受信中にTeraTermの画面では、0や1の数字がだーっと並んで表示されていますが、これはrの値(受信した文字が何文字か)です。1と表示されているところで文字を受信したことが分かります。本当に受信が正しくできているかを見るために今回はこのように書きました。
今回の受信動作については実験を始めてからなかなか成功せず、少し時間が掛かってしまいました。プログラムも相変わらず無駄の多いものになってます。とりあえず動いた!っていうのを載せておこうと思います。
もっといいプログラムが書けたらそれに差し替えます。・・書けないだろうけど(汗)。

次は9.H8-3069ボード同士の通信です。>> 






[PR]看護師の好条件求人なら:転職活動不安ですか?なんでも相談OK!