• ベストアンサー

RS232Cを用いたSCIでのシリアル通信について

PCで計算して吐き出した5~6個の数値データ(それぞれ3桁の数字で最大2バイトあれば足りる大きさです)をRS232Cを使ってSCIでマイコンに送り、マイコン側でそのデータを使って計算する、というシステムを考えています。 色々勉強してみたのですが、例えばPC側プログラムがテキストデータで吐き出した数値を読み込んで送信する場合、全てアスキーコードで送られてしまうのでしょうか?少なくともキーボード入力の値はアスキーコードで送られているようだとはわかりましたが・・・。 また、まだアルゴリズムは考えてませんが、PC側の計算プログラムから直接に数値をPC側送信プログラムに渡してあげた場合は、やはりそのままの値(例えば8なら1バイト2進法で00001000で送られるものなのでしょうか? 開発環境はC言語で、マイコンはSH2だということです。通信は今はテスト段階でハイパーターミナルを使っていますが、いずれは命令を出したときに適切な値を送信するようにしたいので、C言語で書かれたSCI通信のフリーウェアなどを使う検討もしています。 その理由はC言語プログラムの中にハイパーターミナルをどのように含めればいいのかわからなくて・・・ C言語でできたソフトなら、そのままPC側計算プログラムに組み込めばいいかなぁと思いまして・・・。(浅はか?) この点についてもご教授頂ければ幸いです。 説明不足かもしれませんが、その場合はご指摘ください。 どうぞ、宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • likipon
  • ベストアンサー率38% (44/114)
回答No.1

1.データの形式 文字列としても二進法としても送ることができます. PC側がテキストとして数値を投げた場合には, 文字として数値が渡されること になります. 送信側で数値→文字列の変換, 受信側で文字列→数値の変換が必 要となります. これをアスキー形式といいます. データは"8" などと, そ のまま数字の文字列で送信されます. 一方, PC側が数値をテキスト化しないで送った場合には, 2進数のビット列が そのまま送信されます. これをバイナリ形式といいます. 8なら. '00001000' などとなります. アスキー形式は1桁1文字(=8bit)で数値を表すので, データ量が多くなりがち である欠点があります. 逆に, バイナリ形式はデータの開始, 終了をどのように 表すかという点で工夫が必要です. (考えてみてください) どちらも一長一短ではありますが, 質問の件のようなそれほどデータ量の 多くないシステムであれば, アスキー形式にしておけば楽でよいかもしれません. 2.ターミナル? C言語とおっしゃるのが, PC側のアプリケーションの話なのかSH2側の組み込み アプリのことなのかよくわかりませんが, PC側のことであれば, COMポート (RS232) を使ってデータの送受信を行うライブラリなどがありますから, そういったものを利用します. ハイパーターミナルはあまり関係ありません. フリーウェアの件ですが, それはソースコードが公開されているという意味 ですよね? 単にアプリケーションを拾ってきただけだと「組み込む」のは ムズカシイと思いますが・・・ ※ところで, SCIってのは"H8やSH2のシリアル通信機能"の名前ですよね. 一般的な言い方をするなら単にシリアル通信とか, RS232とか, UARTなんて 呼び方の方がいいかもしれません. SCIって検索かけてもパソコン上で役に立ちそうな話はでてこないのではないですか.

その他の回答 (2)

  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.3

通信文を見てデバッグすることも考えるなら、バイナリを生で送信せずに アスキー列でSTX-ETXかCRLFの目印を付けたほうがいいです。 アナライザで人間が読むのに苦労するかも。 バイナリだと固定長フレームでと考えてるんでしょうか? バイナリの方が通信時間では短縮ですが、文頭文末の検出も大変ですし、 文字欠けなどの異常対策で開発の手間がかかりそうな気がします。 ハイパータームってあたりで市販PCのようですが、PC側ってMSCommに文 字列渡すだけなんじゃないのかな? マイコン側はルネサスのシリアル通信アプリサンプルをもじれば十分と思 います。 ハード的にはレジスタ操作で受信文字を読むからバイナリでもテキストで も問題ないですが、解釈アプリ的にはタイムアウトとか駆使するのは苦労 する可能性がありますよ。

factory-second
質問者

お礼

大変お礼が遅くなり、申し訳ありません。 1~3の方みなさんのアドバイスを参考に、何とか通信プログラムを作り上げることができました・・・! (かなり前の話で申し訳ありませんが・・・) 結局はフリーソフトをC言語に組み込んで、通信を達成しました。 ポイントは、大変申し訳ないのですが早くにご回答くださった方から順に振り分けさせていただこうと思います。 (matycryさん、本当にごめんなさい!) ありがとうございました。

  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.2

SH2での経験はありませんが、H8で開発を行っています。まぁターゲットが違うだけで一緒ですが... 通信する型式・アルゴリズムはあなたが作成するシステムですので何でもありです。あなたがバイナリで送受信しようと思えばバイナリだし、テキストで送受信しようとすればテキスト形式です。 私はバイナリ形式をお勧めします。理由は簡単で、送受信のコストが低いということです。バイナリで送受信すれば、送受信のバイト数も少なくなりますし、テキストへ変換するオーバヘッドもなくなります。(もちろんPC側がx86でターゲットがSH2だとエンディアン(バイトオーダー)が異なりますので、その分の変換は必要ですが...) それにチェックサムなんかをつければ、簡単な送受信チェックも出来るでしょう。 PC側がWindowsだとすれば、サンプルはインターネットを探せばいくつかあるはずです。 参考URLはMSDNの「Communications Functions」の解説です。これとCreateFile()、ReadFile()、WriteFile()などを使えばシリアル通信を行うことが出来ます。 他の人が作ったDLLがあれば組み込むことは割と容易に出来ると思いますが、自分で作ったほうが早いような...それほど難しくは無いはずです。 Vectorのサイトに登録されているActive-Xコントロールなんかも使えると思いますが、ライセンスは熟読して正しい使用目的かどうかを確認しましょう。

参考URL:
http://msdn.microsoft.com/library/?url=/library/en-us/devio/base/communications_functions.asp

関連するQ&A