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;
 }
 }

在上面的代码中,传输了字符“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;
 }
 }

上面的程序正在传输'='(即十进制61对应ASCII中的'=' 字符)。

我想知道如何传输整数值。

请在这方面指导我。

4

2 回答 2

1

SBUF包含要传输的单个字节(即字符)。如果你把'A'放在那里,这就是将要传输的内容(实际上0x41将被传输,它对应于'A'的ASCII值)。分配iinto的值时SBUF,它将被解释为字节,而与 的类型无关i。这个字节可以以接收方希望的任何方式解释——它可以将其视为整数或 ASCII 值,就传输而言,它是相同的;不同之处在于处理数据的方式。

于 2013-03-09T06:54:04.023 回答
0

如果您只想传输 char 或 unsigned char,Icepack 是正确的,但如果您真的想传输超过 8 位,则必须逐字节进行。您正在尝试做的事情需要将字节放入数组中,并通过线路一次发送一个字节(8051 中的 SBUF 一次只能保存单个 TX 和单个 RX 值)。除了你还有另一个问题,你是先传输最高有效字节,还是最后传输?然后你应该问自己,如果对方知道你的数据格式,你是否想传输二进制数据(只是通过网络传输字节)?或者您是否想使用字符串,如果您想要某种终止符、换行符或其他不可打印的字符,那么数字“34567”将占用例如五个字节(五个 ASCII 码)或更多,

于 2013-03-13T17:58:20.343 回答