どうで送ることはできない文字列を直列から8051は一度しかできないのですか?

StackOverflow https://stackoverflow.com/questions/1216376

質問

私は、8051マイクロコントローラ通信無線でコンピューターのマイクロコントローラを送信する文字列にシリアルポート(DB9のコンピュータこの文字列を操作します。

私の問題はわからないか、8051に伝える文字列だけます。てから、必要な操作文字列のPC末で受信しています。現在では、もののCコードを送りたいと思い文字列に一度、自分のコンピュータを得ていますが、同じ文字列です。っているものと推察されるからであるSBUFを連続的に送信されます。ができたらいいのに送の文字列は一度しかできないのですか?があるので、空のSBUF?

私は利用しようとしたのRTS(訂正-追加-削除請求書の送付)端子7番ピン)のDB9が読んだのどこかにいっ拒否され、電圧がピンでまとめられるというメリットデータの流れをシリアルポートです。そこでプログラム私のマイクロコントローラを送信する文字列を送信ロジックレベル0を出力端子に接続した私のDB9RTSピンです。しかし、なかった。

いたの?今本当に感謝しています。

編集

ソフトウェアのみを使用しているPCはX-BOMのためのモジュールxbeeによ.このコード私のマイクロコントローラ:

include reg51.h 
void SerTx(unsigned char);  
void main(void)  
{  
  TMOD = 0x20;  
  TH1 = 0xFD;  
  SCON = 0x50;  
  TR1 = 1;   

  SerTx('O');  
  SerTx('N');  
  SerTx('L');  
  SerTx('Y'); 

}

void SerTx(unsigned char x)  
{  
  SBUF = x;  
  while(TI==0);   
  TI = 0;   
}  

ば誰かがいるか確認してくださいこのみの送信は文字列は一回しか出来ないのですか?

編集

ようになスティーブ,brookesmoses、ニール-チューリップの花が頭をきってきていると述べている中で何が起きているかを後、私の主な機能するための問題です。ったことを示唆コードSteveけ(より具体的には、for(;;);と定義serTX外の主要があります。コントローラは再起動と同じコードを常に繰り返します。

おそらく得ることができたのは助かります!:)

役に立ちましたか?

解決

できることを確認するもの8051が送信データは一度しかできないのですか?一方にチェックする利用範囲んのUART TXピンです。

どのソフトウェアを使用していまのでしょうか?思いを簡単な通信ソフトウェアのようにハイパーターミナルまたは パテ.いを示す文字列が相手に送られているPCに複数回、そのチャンスの断層のソフトウェアの8051.

編集: 正直、この音のような種類のデバッグする技術者を正面から向き合って定期的なので良い機会に実践しい昔ながらの系統的です。

この非常に鈍いることをお勧めしたいの

  1. Debug.うものが なん.実験です。少し変えてみましょうコードで、何が起こるか見てみてください.いものと考えることができます。Webで検索します。
  2. ばなければならない解決後、このとみなしていますので、個人を識別できる情報または必要です。を含む関連する作品のコードでは、インターナショナルの日本支部とハードウェアのご利用に関する情報だったステップ1です。

編集: ないから職を編集できなくなるので注意しましょうこちらのコード掲載のOPのコメントを彼女の質問:

#include<reg51.h>

void SerTx(unsigned char);

void main(void)
{
    TMOD = 0x20; TH1 = 0xFD; SCON = 0x50; TR1 = 1;
    SerTx('O'); SerTx('N'); SerTx('L'); SerTx('Y');

    void SerTx(unsigned char x)
        { SBUF = x; while(TI==0); TI = 0; } 
}

としてのNeilとBrooksmosesもその答えは、組み込みシステムの主な機能はいますが停止されます。いずれているコードは無限ループがもっと好きになるかうっかり起きてい)を追加したり、無限ループに、そのプログラムの有効ば停止する。

また、機能SerTxすべき外部で定義された主なものです。こsyntatically正しいものでもないシンプルな宣言機能します。

もう(私も見ていないこと、コードをわかりやすい):

#include<reg51.h>

void SerTx(unsigned char);

void main(void)
{
    /* Initialise (need to add more explanation as to what
        each line means, perhaps by replacing these "magic
        numbers" with some #defines) */
    TMOD = 0x20;
    TH1  = 0xFD;
    SCON = 0x50;
    TR1  = 1;

    /* Transmit data */
    SerTx('O'); SerTx('N'); SerTx('L'); SerTx('Y');

    /* Stay here forever */
    for(;;) {}

}

void SerTx(unsigned char x)
{
    /* Transmit byte */
    SBUF = x;

    /* Wait for byte to be transmitted */
    while(TI==0) {}

    /* Clear transmit interrupt flag */
    TI = 0;
} 

他のヒント

このコードで掲載していないループにmain()で必要なものをコンパイラのCランタイムな時にmain()を返します送信後に'Y'.に考える問題、そしてコンパイラ生成の一部のコードをいくつかの清掃活動を再開しますマイクロ(そのハードウェアリセットは、それを再起動C実行時).おかしくなってしまいそうです。プログラムの作品の意のままに書いちゃったので、そのまで無視されその前後のmain()が呼び出されます。

いくつか表示してください文字列を送信後に一度だけ、その後必要なもののようなもの while(1) {} 加え最後の文字が送信されます。でも、そのプログラムには何もしない--だけだと思います実空のループです。リセットなどの電力サイクリング)が必要で、再度送信する文字列です。

になることがありマイクロは、ウォッチドッグタイマに設定で介入力で予想外のリセットします。このような場合は、文字列が送信されまウォッチドッグセット(できるようにそれぞれ次の利率によってはしているページがあります。

また、serTx()を定義の子が主()がなくなるだろうと考えている。

でも何が問題なのかを見ることなく、8051ます。たとえば、論理エラーにすることができ、データの送信を複数回、8051ソフトウェアがあなたを待ってACKがしいパスワードを入力してくださ。

通常、8051コードを明示的に送の各文字がっているものと推察されるので、なたのためのC実行します。

の利用におけるRTS/CTS(Requestを送信/送)のためのフロー制御(防止バッファのバッファは通常、か小さいこれらのマイコン)を停止させることがない送信します。

コニールの回答(回答ていない時の職コメント):典型的なマイクロコントローラの状況なOSではすぐに明らかにし、出口()関数で取得する黙示的に呼び出のmain()はなく、より正確にできない通常のもの"終了プログラムに戻り、OS"ありがとうございます。いOSを返します。

また、実際には、ほとんどないといったプログラムだけに止めなければoffにする。うひとつの出口()実装はレコード店ディスクユニオンが多くのコード空間です。

システムもあったので、exit()が実際に実施すべて--ればならない使用しないで廃棄物をバイトです。その結果、この場合の実行パスを取得するのmain()は、チップだけろともあり、ララ地実施機関は、どんなことが起こっても、次のメモリは、一般的に早期終了までのいずれかにこだわったループまたは断層と不正opcode.通常より断層と不正opcodeが---を再起動するとチップです。

このように思わplausable理論のために何が起こっているのか。

この特定の条項が組み立て、Cのものとして役立つことが示される:http://www.8052.com/tutser.phtml

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top