51单片机串行单向通信如何发送单字节数据,就是发送完8位数据和停止位后停止发送数据.

#include<reg51.h>
main()
{TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
SCON=0x50;
PCON=0x00;
TR1=1;
{
unsigned char SW;
while(1)
{
SW=P1;
SW=SW&0x3c;
if(SW==0x38)
SBUF=0xfc;
else if(SW==0x34)
SBUF=0xf8;
else if(SW==0x2c)
SBUF=0xf0;
else if(SW==0x1c)
SBUF=0xe0;
else
SBUf delete(0, SBUf.length());
while(!TI);
TI=0;
}
}
}
如上程序是不是P1口无输入的话就一直发送0X00,我只要发送一次8位数据,程序结束后停止串口发送该怎么写?
搞错.是如下程序
#include<reg51.h>
main()
{TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
SCON=0x50;
PCON=0x00;
TR1=1;
{
unsigned char SW;
while(1)
{
SW=P1;
SW=SW&0x3c;
if(SW==0x38)
SBUF=0xfc;
else if(SW==0x34)
SBUF=0xf8;
else if(SW==0x2c)
SBUF=0xf0;
else if(SW==0x1c)
SBUF=0xe0;
else
SBUF=0x00;
while(!TI);
TI=0;
}
}
}

说实话,这个程序你写的很乱!!!
我读你的程序,觉得大概意思是这样的,不知道对不对:你需要读一次P1口,判断P1^5、P1^4、P1^3、P1^2的状态,然后发不同的数据。

你问:“如上程序是不是P1口无输入的话就一直发送0X00,我只要发送一次8位数据,程序结束后停止串口发送该怎么写?”

问题1:你程序设计为默认值发送0x00,并不是没有输入发送0x00,只是单片机检测一次P1口,没有合适的入口,所以就发默认值。
解决方法:
else
SBUF=0x00;

改为
else
break;
也就是默认如果没有合适入口就不做发送,直接跳出,这也解决了一只发送的问题

问题2:发送一次数据后程序停止。帅哥,你设置的是while(1)死循环好不好,当然是不断检测P1口,不断判断,不断发送了!
解决方法;
while(!TI);
TI=0;

后面加一句:break;
温馨提示:答案为网友推荐,仅供参考
相似回答