使用AT89S51串行传输整数值

时间:2013-03-08 04:42:28

标签: c microcontroller 8051

我编写了一个程序来为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中的'='字符。)

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

请在这方面指导我。

2 个答案:

答案 0 :(得分:1)

SBUF包含要传输的单个字节(即char)。如果你在那里放'A',那就是将要发送的内容(实际上将发送0x41,这对应于'A'的ASCII值)。将i的值分配到SBUF时,无论i的类型如何,都会将其解释为字节。该字节可以以接收方所需的任何方式进行解释 - 它可以将其视为整数或ASCII值,它与传输相同;区别在于数据的处理方式。

答案 1 :(得分:0)

如果你只想传输一个char或unsigned char,那么Icepack是正确的,但是如果你真的想要传输8位以上,那么你必须逐字节地进行传输。你要做的是要求将字节放入数组,并一次一行地发送它们(8051中的SBUF一次只能保存单个TX和单个RX值)。比你有另一个问题,你先发送最重要的字节,还是最后一个?假设对方知道您的数据格式,那么您应该问自己是否要传输二进制数据(只是通过线路吐出字节)?或者你想使用字符串,所以如果你想要某种终结符,换行符或其他不可打印的字符,那么数字'34567'将需要五个字节(五个ASCII码)或更多,而二进制它真的会是8051上占用两个字节的整数。正如您所看到的,您的问题可以解决许多其他问题。