用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助

2024-11-07 16:49:14
推荐回答(2个)
回答(1):

发送函数中,这样写,防止TI还未来得及置为1,就一直在发送,这样写可防止上述情况
#include
#define uint unsigned int
#define uchar unsigned char
sbit D0=P1^0;
uchar flag;
uchar a[30];
uint y, u,c;

/*发送子程序*/
void fasong(uchar dat)
{

ES=0;
SBUF=dat;
while(!TI);
TI=0;
ES=1;
}

/*延时子程序*/
void delay(uint n)
{
uint i,j;
for(i=0;i {
for(j=0;j<250;j++);
}
}

/*主程序*/
void main()
{

SM0=0;//选择工作方式一
SM1=1;
TR1=1;
REN=1;
TMOD=0X20;//设置定时器1为工作方式2
TH1=0XFD;
TL1=0XFD;//设置波特率为9600
EA=1;//开CPU中断
ES=1;//开串行口中断

delay(1000);
D0=0;
while(1)
{
while(flag)
{
y=0;
while(a[y]!='\0')
{
fasong(a[y]);
a[y]='\0'; //清空字符,方便下次接收
y++;
}
y=0;
flag=0; }
}
}

void jsfs() interrupt 4
{
c=0;
u=1000;
ES=0;
while(u--) //一直接收 直到字符串接收完毕
{
while(RI)
{
a[c]=SBUF;
c++;
RI=0;
u=1000;
}
}
ES=1;
flag=1;
}

回答(2):

发送子程序修改如下:
/*发送子程序*/
void fasong(uchar dat)
{
SBUF=dat;
while(TI==0)
{
_nop_; }
TI=0;
}