通过串口从PC机向单片机发数据并在1602上显示出来,再将数据返回给PC机的问题

2024-12-04 17:22:10
推荐回答(3个)
回答(1):

不是很理解为什么你的
send_data();
redata_data();
这两个函数都有发送的
串口中断照你这样写可能会出现问题如果有RI中断,但是a>string_max就会直接退出中断函数,这样并不会将RI标志清0,建议分开写
void serial() interrupt 4
{
if(RI)
{
RI=0;
if(a<=string_max)
{
redata[a++]=SBUF;
if(redata[a]=='\0'||(a>=string_max-1))
{
a = 0; //这里a要清零
flag=1;
}
}
}
}

回答(2):

void serial() interrupt 4
{
ES=0;
if(RI&&(a<=string_max))
{
RI=0;
redata[a++]=SBUF;
if(redata[a]=='\0'||(a>=string_max-1))
{
flag=1;
}
}
ES=1;
}
接收中断不关试试。或者仿真的时候PC发了数据后暂停proteus,查看寄存器和data,看是不是受到了2个。

回答(3):

建议 逐个模块的调试,逐步解决问题。