以前、シリアル通信時のデータの動きを、固定長の観点からご紹介しました。
シーケンサでシリアル通信をしよう~中編~
引き続き QJ71C24N-R2 を使用して、可変長通信 を念頭にそれぞれの動きを更に見ていきましょう。
どうも! ずぶ です。今回は シーケンサでシリアル通信をしてみよう~後編~
※続きで書いている為、所々説明を端折っている箇所があります。
可変長で通信をしてみよう
前回のプログラムを流用して、少ない文字を通信してみます。
受信はもちろん、こうですよね。
隙間がありますね・・・
終了コード を 5ワード目 に入れ込んで、5ワード送信 しているからですよね。
↓ ここの箇所
[ MOV H0A0D D15 ]
ならば、3ワード目 に入れ込んで、3ワード送信 にしてみますか
[ MOV H0A0D D13 ]
それでも、隙間ができて しまいます。
文字(バイト)をシーケンサの ワード で扱っているのですから当然ですよね。
隙間があっても通信が OK になる場合も多いのですが、NG になる場合もあります。
通信が通るかどうかは、お相手次第 なのです。
文字をピッチリ引っ付けて、その数分送信する。
それが 可変長 ですね。
可変長にする手順としては、
1.文字列の最後に終了文字を引っ付けて
2.長さを数える。
文字の結合は
[ $+ ]
長さの計算は
[ LEN ]
を使えば良いのでしたね。
以上をふまえて、プログラムを変更します。
こんな感じでどうでしょう?
終了コードの場所が近すぎちゃいました。(><)
[ LEN ] のモニター数値を見ると、きちんと 5 を表示しています。
( 3文字と終了文字2文字で計5文字です。)
ここで来たらあと少し
ですが、少し説明書きを見てみましょう。
[ LEN ]の説明はご覧のとおり。
<
00H が来るまでの、文字の数を返す と書いてありますね
ということは、返り値は バイト
~中編~ を思い出して下さい。
[ G.OUTPUT ] は、ワード数 で動いていました。
このまま [ LEN ] の返り値を放り込んだら、ワードと認識されてしまいます。
なので、設定を変更してバイトで動く ようにしましょう。
ここを バイト単位 に変更するだけ
[ G.OUTPUT ] に掛けたいので、CH1側 を変更しましたよ。
※テストの流れで、CH2の受信終了データ数指定が6だった場合、511(デフォルト)に戻しておいて下さいね。
以上をふまえて、送信ドーン
お~ 引っ付いた!
もういっちょう、ドーン
きれいに引っ付いて、可変長の完成 です。
まとめ
文字の結合は [ $+ ]
長さの計算は [ LEN ]
設定を バイトで動く ように変更
あわせて読みたい
シーケンサでシリアル通信をしよう~中編~
最近のコメント