请大侠们帮我看看这个程序哪里出了错,关于单片机串口与pc通信问题

2025-03-01 00:09:28
推荐回答(3个)
回答1:

程序第六行, 改成这样
uchar Rcv[5],bur[5]; /* 要给空间的 */
------------------------------------------------------

程序第十行, 改成这样
uchar buf1[5] = "og", buf2[5] = "ohw", buf3[5]= "emoh" ;

------------------------------------------------------
最后一个副程序 INT_UartRcv(void) , 改成这样

void INT_UartRcv(void) interrupt 4
{
bur[4]=bur[3];
bur[3]=bur[2];
bur[2]=bur[1];
bur[1]=bur[0];

if(RI)
{
bur[0] = SBUF;
RI = 0;
}

c=strncmp(bur,buf1,2 );
d=strncmp(bur,buf2,3 );
e=strncmp(bur,buf3,4 );

if( c != 0 )
for (c=0;c<17;c++)
{ Rcv[0]= f[c] ;
LED=0;
delay();
LED=1; i=0;
Uart_SendData(Rcv[0]);
}

if( d != 0 )
for (d=0;d<17;d++)
{ Rcv[0]= g[d] ;
LED=0;
delay();
LED=1;
i=0;
Uart_SendData(Rcv[0]);
}

if( e != 0 )
for (e=0;e<22;e++)
{ Rcv[0]= h[e] ;
LED=0;
delay();
LED=1;
i=0;
Uart_SendData(Rcv[0]);
}
}

==========================================================================
To batsong : 你的代码如果可以, 太阳就从西边出来啦

回答2:

void INT_UartRcv(void) interrupt 4
{
if(RI) --收到一字节,即进入本中断函数
{ --这个字节(如g),没有处理,就进入下面的循环?
for (i=0; i<4; i++)
{
while (!RI);--持续等待接受四次,而主机,并没有发送这么多,
--单片机就死在这里了
bur[i] = SBUF;
RI = 0;
}

回答3:

Acetsai1971的代码有问题,每次中断数组向后移动,并把收到的写buf[0],这样收到的串在数组中是反序的,strncmp根本比较不出来。
这个代码太粗糙,你试试看吧
void INT_UartRcv(void) interrupt 4
{

if(RI)
{
bur[i] = SBUF;
RI = 0;
i++;
}

c=strncmp(bur,buf1,2 );
d=strncmp(bur,buf2,3 );
e=strncmp(bur,buf3,4 );

if( c == 1 )
for (c=0;c<17;c++)
{ Rcv[0]= f[c] ;
LED=0;
delay();
LED=1; i=0;
Uart_SendData(Rcv[0]);
}

if( d == 1 )
for (d=0;d<17;d++)
{ Rcv[0]= g[d] ;
LED=0;
delay();
LED=1;
i=0;
Uart_SendData(Rcv[0]);
}

if( e == 1 )
for (e=0;e<22;e++)
{ Rcv[0]= h[e] ;
LED=0;
delay();
LED=1;
i=0;
Uart_SendData(Rcv[0]);
}

if(i>4)i=0;
}