51单片机通过串口只能发送数据不能接受数据,仿真都是好的

#include <reg51.h>

int flag = 0;
//初始化串行口
void csh()
{
SM0=0;
SM1=1;
REN=1;
TI=0;
RI=0;
PCON=0;
TH1=0xF3;
TL1=0XF3;
TMOD=0X20;
EA=1;
ET1=0;
TR1=1;
}

void main()
{
int i,j;
csh();
while(1)
{
if(RI==1)
RI=0;
if(SBUF == 0x01)
{
ES=0;
SBUF=12;
while(!TI);
TI=0;
SBUF=13;
while(!TI);
TI=0;
ES=1;
for(j=0;j<25;j++)
for(i=0;i<5000;i++) ;

flag=0;
}
}
}

你这是仿真还是实物开发板?这串口通信是单片机与电脑吗?电脑上只能用串口调试助手,才能发送0x01,那接收的数据为什么用0x01?换个字母或数字的ASCII码,电脑上或仿真才方便发送。

程序简化一下,如下

#include <reg51.h>

void main()

{

SCON=0x50;

TH1=0xFD;//晶振11.0592M,波特率9600

TL1=0xFD;

TMOD=0x20;

TR1=1;

while(1)

{

if(RI==1)

{

RI=0;

if(SBUF=='A')//接收字母A

{

SBUF='B';//发送字母B

while(!TI);

TI=0;

SBUF=13;//回车

while(!TI);

TI=0;

}

}

}

}

仿真结果如下,可以接收和发送,都正常。请及时采纳。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-11
仿真与正常运行的不同之处,主要是时钟或者时序的相关问题。
第2个回答  2019-06-11
目录1 情节梗概
相似回答