- ベストアンサー
RS232Cを用いたSCIでのシリアル通信について
PCで計算して吐き出した5~6個の数値データ(それぞれ3桁の数字で最大2バイトあれば足りる大きさです)をRS232Cを使ってSCIでマイコンに送り、マイコン側でそのデータを使って計算する、というシステムを考えています。 色々勉強してみたのですが、例えばPC側プログラムがテキストデータで吐き出した数値を読み込んで送信する場合、全てアスキーコードで送られてしまうのでしょうか?少なくともキーボード入力の値はアスキーコードで送られているようだとはわかりましたが・・・。 また、まだアルゴリズムは考えてませんが、PC側の計算プログラムから直接に数値をPC側送信プログラムに渡してあげた場合は、やはりそのままの値(例えば8なら1バイト2進法で00001000で送られるものなのでしょうか? 開発環境はC言語で、マイコンはSH2だということです。通信は今はテスト段階でハイパーターミナルを使っていますが、いずれは命令を出したときに適切な値を送信するようにしたいので、C言語で書かれたSCI通信のフリーウェアなどを使う検討もしています。 その理由はC言語プログラムの中にハイパーターミナルをどのように含めればいいのかわからなくて・・・ C言語でできたソフトなら、そのままPC側計算プログラムに組み込めばいいかなぁと思いまして・・・。(浅はか?) この点についてもご教授頂ければ幸いです。 説明不足かもしれませんが、その場合はご指摘ください。 どうぞ、宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- マイコンを用いたバイナリー形式での通信の方法
以下のようなハード環境とプログラムで、マイコンの変数値をPCへ取り込む環境(データロガー)を実現しております。ただし、更にデータの取り込み速度を向上させたく考えておりますが、その手段として、”バイナリー形式”での通信が適用できると情報を得ておりますが、具体的な手法が不明です。よろしくご教授をお願いします。 <環境> ・H8マイコン ・RS-232CでPCと接続 ・PCでのデータ取得は、ハイパーターミナルを利用 <プログラム> (1)送信する部分 H8のSCI3を利用して、1文字ずつ送信 以下具体的に作成したプログラムです void sci3_tx(char data){ while (SCI3.SSR.BIT.TDRE==0); SCI3.TDR=data; } (2)実際の送信 "1234"(←千二百三十四)と"3456"(←三千四百五十六)というデータを連続して送信したい場合には、 sci3_tx(1+48); sci3_tx(2+48); sci3_tx(3+48); sci3_tx(4+48); sci3_tx('\r'); sci3_tx('\n'); sci3_tx(3+48); sci3_tx(4+48); sci3_tx(5+48); sci3_tx(6+48); sci3_tx('\r'); sci3_tx('\n'); と処理し、ハイパーターミナルでデータを保存して、"1234"と"3456"を取り出しています。 <ご質問の詳細> (1) 上記のように2つの数値をバイナリー形式で送信するためには、どのように実施したらよいのでしょうか? 例えば、バイナリーの場合2の8乗であるので、 1234を送信する場合、255+255+255+255+214で、11111111、11111111、11111111、11111111、 11010110と送信して、加算処理をすればよろしいでしょうか? (→255を11111111と送信するプログラムもいまいち不明ですが) (2)バイナリー形式で送信する際の送信始め/終わりの区切りはどのように考えたらよろしいでしょうか? (3)バイナリー形式を受信できるソフト(ハイパーターミナルに対応するもの)は、何になりますでしょうか? 以上、いくつかのご質問をさせていただきましたが、参考となる情報(Web、書籍)がありましたら、合せてご紹介をお願いいたします。
- 締切済み
- C・C++・C#
- H8/3069 SCIについて
H8/3069のシリアル通信機能についての質問です。 SCI0を調歩同期式に設定して、パソコン上のハイパーターミナルと通信しています。SCI1とSCI2をクロック同期式に設定して、tx1とrx2,tx2とrx1,sck1とsck2を配線接続した状態です。 このとき、PC(ハイパーターミナル)からの送信データ⇒SCI0で受信⇒SCI1から送信⇒SCI2で受信⇒SCI0からパソコンに対してデータ送信したいと思っています。 ところが、SCI1のクロック同期式でのデータ送信がまずできません。データもクロックも出せていないです。 そこで、SCI0,SCI1,SCI2のすべてを調歩同期式に設定した場合は、上記のデータの送受信は成功しています。 H8/3069において、SCI0,SCI1,SCI2のシリアル通信方式の設定を上記のように、1つのH8に対してクロック同期と調歩同期を混在させた場合、何かうまく動作しない原因は考えられますでしょうか。 プログラムでのSCI0とSCI1,SCI2の初期設定の違いは、SCI1とSCI2は、SMRレジスタC/Aビットを1(SCI0は0)にして、SCI2については、SCRレジスタのCKE1ビットを1(SCI0,SCI1は0)にした状態にしています。 よろしくお願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- マイコン同士をsciを使ってシリアル通信をしたいと考えています。
マイコン同士をsciを使ってシリアル通信をしたいと考えています。 単純に マイコン1側 マイコン2側 RXD<->TXD TXD<->RXD GND<->GND を接続すれば通信できると考えたのですが、上手くデータを送ることが出来ません。 どうすれば通信できるでしょうか? また、参考になる書籍・WEBサイトをご紹介して頂ければ幸いです。
- ベストアンサー
- その他(プログラミング・開発)
- C#とマイコンでSCI通信
マイコンとC#で仮想COMポートを使ってSCI通信しているんですが、 ・「マイコン⇒C#」でデータを受信するときは、 正常に受信でき、 「C#⇒マイコン」がデータを受信するときは 正常に受信できません。 ・C#から何を送っても0x0aの値しかマイコンが受け取りません。 (TeraTermからは正常な値を受け取っています) 以上の点から、C#の送信プログラムの中身が悪いと思うのですが、 C#は初めて手をつけたのでよくわかりません。 送信にはWriteLine()関数を使っています serialPort1.WriteLine("a"); このような感じで一文字一文字送り、マイコンでLCDに表示させ結果を見ています。 シリアルポートの設定は次のように行っています try { beginTime = DateTime.Now; //←プログラムの関係上いれてるだけです this.serialPort1.PortName = this.textBox2.Text; this.serialPort1.BaudRate = 9600; this.serialPort1.Parity = System.IO.Ports.Parity.None; this.serialPort1.DataBits = 8; this.serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Open(); serialPort1.DtrEnable = true; serialPort1.RtsEnable = true; } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } COMポートに関してはFormに別途ボタンを作りそこから選択するようにしています。 どこが悪いのか概要だけでも教えてほしいください;; よろしくおねがいしますm(__)m
- ベストアンサー
- その他([技術者向] コンピューター)
- シリアル通信のデータ受信について質問です
PCからマイコン(H8/3664)に文字を送信したいのですが、受信のしかたがわかりません。PC側のプログラムはC#を使っていて、8bit送信しています。マイコン側はC言語で、8bitで送られた文字を、C言語でどういう風に受信したらいいかわかりません。受信する関数があるのでしょうか?ちなみに割り込みは使いません。
- ベストアンサー
- C・C++・C#
- H8マイコンでの割り込み(シリアルポート入力で)
マイコン:AKI H8/3048F 開発環境:GCC Developer Lite マイコンとパソコンをRS-232Cケーブルでつないでいます。 ハイパーターミナルを使用して、マイコンを制御したいと考えております。 それで、パソコンのキーボードから入力があった時だけ、割り込みを実行したいです。 割り込みが無い場合は、パソコンでマイコンを制御することができたのですが、割り込みを追加したら、うまくいかなくなりました。 アセンブラを使用せずに、C言語だけでプログラムを完成させたいと思っています。 SCI1からの割り込み処理をするには、どの様にしたらよいのでしょうか? どうか、お願いいたします。
- ベストアンサー
- C・C++・C#
- シリアル通信について
VB6にてシリアル通信プログラムを作成しましたが、データが受信できません。 ハイパーターミナルなら受信できて、一度ハイパーターミナルを使用すると、作成したプログラムでもデータが受信できるようになります。(再起動するとまたハイパーターミナルを使用するまで受信できません) 自作プログラムでなにか処理がたりないのでしょうか?
- ベストアンサー
- Visual Basic
- geko201とマイコンのシリアル通信について
GPS受信機(geko201)をマイコン(pic18f452)の基板にrs23-2cで接続して、 GPS受信機からのデータを取り、その数値を計算するプログラムをC言語で組んでいます。 処理手順としては マイコン側のボタンを押すと、 GPS受信機からのデータ(@051125004805N3529538E13638632G005+00041E0000N0000D0000) を受信してその値の計算をはじめます。 そこで問題があり、 仮想GPSとしてプログラムで任意のタイミングで一件だけマイコンにGPSデータを送った場合 ちゃんと計算してくれるんですが、 本物のGPS受信機は1秒毎にデータを垂れ流し状態で そこで受信したら、受信待ちで止まってしまいます 改善策がわからないので、どなたか教えてください 受信部分のソース↓ while(1) { if(input(PIN_A0)){ gets(mes); 以下略 } }//roop end
- ベストアンサー
- C・C++・C#
- C言語によってシリアル通信をおこないたいのですが
PCとマイコンとでシリアル通信でデータの受け渡しを行いたいのですがよくわかりません。 PC←マイコン方向はハーイパーターミナルを使え値を確認できるのでよいのですが、PC→マイコンの方向でのプログラムがわかりません何か参考になるものはありませんか? PCはVC++を使用しています。 マイコンはH8/3664です。
- ベストアンサー
- C・C++・C#
- A/DデータをSCIを利用してPCに表示したいのですが
H8/3052Fとポテンショメータ(通信ケーブルはRS232-C)を利用して得られるA/DデータをPCに表示させようとしています。 SCIとPCに最初から入っているハイパーターミナルを利用してA/Dデータを得たいのですが上手く行きません。 参考にしている資料のサンプルプログラム(文字をPCに返す)が上手く行ったのでそれと、A/Dデータ変換プログラムを組み合わせて行いました。 ですが、結果として文字列が表示されるものの数値データが帰ってきませんでした。 組みなおしましたが、出てくるのは文字(プログラム変更で無限に出る場合あり)と無限スペース(改行?)で進展しません。 考えとしては、文字データを返すプログラム文とは別に数値データを返すプログラム文にしないといけないのかな?と、思って調べたのですがこの考えを裏づけるものはありませんでした。(着目点が違うのかもしれませんが・・・)
- 締切済み
- C・C++・C#
お礼
大変お礼が遅くなり、申し訳ありません。 1~3の方みなさんのアドバイスを参考に、何とか通信プログラムを作り上げることができました・・・! (かなり前の話で申し訳ありませんが・・・) 結局はフリーソフトをC言語に組み込んで、通信を達成しました。 ポイントは、大変申し訳ないのですが早くにご回答くださった方から順に振り分けさせていただこうと思います。 (matycryさん、本当にごめんなさい!) ありがとうございました。