0

AT89S51のchar値をシリアルに送信するプログラムを作成しました。それは完全に機能しています。

プログラムは以下のとおりです。-

 #include<reg51.h>
 void main()
 {
 TMOD=0x20;
 TH1=0xFD;
 SCON=0x50;
 TR1=1;
 while(1)
 {
 SBUF='A';
 while(TI==0);
 TI=0;
 }
 }

上記のコードでは、char'A'が送信されます。

今、私は整数値を送信したいと思います、そして私はそれのためのプログラムを書きました。

プログラムは以下のとおりです。-

 #include<reg51.h>
 void main()
 {
 int i=61;
 TMOD=0x20;
 TH1=0xFD;
 SCON=0x50;
 TR1=1;
 while(1)
 {
 SBUF=i;
 while(TI==0);
 TI=0;
 }
 }

上記のプログラムは'='を送信しています(つまり、10進数の61 はASCIIの' ='文字に対応します)。

整数値を送信する方法を知りたいです。

この点について教えてください。

4

2 に答える 2

1

SBUF送信される1バイト(つまりchar)が含まれます。そこに「A」を入れると、それが送信されます(実際には、「A」のASCII値に対応する0x41が送信されます)。iに値を割り当てると、SBUFのタイプに関係なくバイトとして解釈されますi。このバイトは、受信側が望む任意の方法で解釈できます。整数またはASCII値として扱うことができ、送信に関しては同じです。違いは、データの処理方法にあります。

于 2013-03-09T06:54:04.023 に答える
0

Icepackは、charまたはunsigned charのみを送信したい場合に適していますが、実際に8ビット以上を送信したい場合は、バイトごとに送信する必要があります。あなたがやろうとしていることは、バイトを配列に入れて、一度に1バイトずつ回線を介して送信する必要があります(8051のSBUFは、一度に1つのTX値と1つのRX値しか保持できません)。別の問題があるよりも、最上位バイトを最初に送信しますか、それとも最後に送信しますか?次に、相手があなたのデータ形式を知っていると仮定して、バイナリデータを送信するかどうかを自問する必要があります(回線を介してバイトを吐き出すだけです)。または、文字列を操作したいので、ある種のターミネータ、改行、またはその他の印刷できない文字が必要な場合は、数値「34567」がたとえば5バイト(5つのASCIIコード)以上かかるようにします。

于 2013-03-13T17:58:20.343 に答える