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;
温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机串行口发送数据到上位机(1)
在软件层,单片机的串行口通常按照异步串行通信模式工作。发送数据时,需先发送起始位(低电平),接着发送8位数据,之后发送奇偶校验位,最后发送停止位(高电平)。例如,发送数据“10101001”时,实际发送的数据为“1 10101001 0”。收发双方需要设置相同的波特率。在实现单片机与外部设备的通信时,单片机...

51单片机串口通信问题求解
51单片机串口通信接收数据和发送出去,这不是一个整个过程,即接收和发送没有什么关系的,是完全可以只发送,或只接收的,不需要接收就发出去的。而且不论是接收或发送,每次都是一个字节的,没有什么8个字节的事。但是每发送一个字节,或接收一个字节,数据本身是8个位,注意是8个位,并不是8个字节。

51单片机的串行通信有哪几种格式
当执行一条“MOV SBUF,A”指令时,启动发送操作,由TXD输出移位脉冲,由RXD串行发送SBUF中的数据。发送完8位数据后自动置TI=1,请求中断。要继续发送时,T1必须有指令清零。(3)接收操作 在RI=0条件下,置REN=1,启动一帧数据的接收,由TXD输出移位脉冲,由RXD接收串行数据到A中。接收完一帧自动...

51单片机的串口接收一帧数据有几位?
方式1:一帧信息也是10位;即 1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后一次移位。方式2和方式3:发送(通过TXD)和接收(通过RXD)一帧信息都是 11位: 1位起始位(0), 8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。可见:不论...

单片机串口每一次传送一个字节多少位?
51单片机串行口每一次传送一个字节8位 1.方式0同步方式有8位波特率是fosc\/12 2.方式1有10位加了一个起始位和一个停止位且波特率由定时器控制 3.方式2有11位除了一个起始位和一个停止位外加了个第9位波特率是fosc\/32或fosc\/64 4.方式3有11位除了一个起始位和一个停止位外加了个第9位且...

51单片机串口是什么工作方式?
串行接口定义为工作方式1时,则被控制为8位的异步通讯接口,传送一帧信息为10位,其中1位为起始位,8位数据位(先低位后高位),1位停止位。(1)方式1输出 串行接口以方式1发送时,数据由TXD端输出。CPU执行一条数据写入发送缓冲 器SBUF的指令(例如,MOVSBUF,A),数据字节写入SBUF后,便启动串行...

51单片机如何初始化成8-n-1(8数据位,无奇偶校验位,1停止位)波特率,是...
这种模式就是:8-n-1(8数据位,无奇偶校验位,1停止位)的模式。完全符合你的要求。--- 带奇偶校验位的,要用方式2或方式3。把奇偶校验位,放到TB8上,就可以发送了,这就是偶校验。接收的奇偶校验位,在RB8中。--- 呵呵,你还用上了示波器!奢侈 你观察的很正确。记住:串行通信,是“低...

单片机串行通信中起始位和停止位与数据位区别
这个嘛,起始位——顾名思义,第一位是0才开始,也就是说检测到1不开始执行,检测到0才开始;停止位嘛,一样,比如要发送8位数据,一个起始位,一个停止位。在第10位的时候检测到1才停止。也许你会问那如果不是1呢?你想想,如果第10位不是1,不停止,那说明传输的数据是错误的。这个结果是...

51单片机通信 的一个简单问题
4、由于初始是整个寄存器各位全部为1,当停止位来临时,9位移位寄存器的最高位为0,此时单片机就认为通讯将结束,触发最后一次移位,这样9位移位寄存器的高8位就是实际的数据,而最低位起始就是停止位信息。5、移位完成后,单片机开始做最后一件事:将9位移位寄存器的高8位写入SBUF,将最低位写入RB8...

用51单片机串口发送,按键按下时发送一个数,松开后再发送一个数,然后停...
if(!key) \/\/当键按下 { delay_ms(20);\/\/延时消抖 if(!key) \/\/延时完毕键依然是按下状态 {while(!key); \/\/等待键释放 your code; \/\/发送数;} } 难道你的意思是按下键的时候一直发送?这样的话if(!key){ delay_ms(20);if(!key){your code;} } ...

相似回答