|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-8-31 13:30:59
|
显示全部楼层
本帖最后由 pogulu 于 2012-8-31 15:00 编辑
linucos 发表于 2012-8-31 10:26 ![](static/image/common/back.gif)
嗯,还是上代码看看!有查询应该也没事!
问:现在的问题是串口2收从来没有收到过数据,示波器看到是有数据的,但是每次都会超时错误了。直接进入if(m==0)这个条件里面。答:是因为时间设置的太小,改大就好了。
现在正常了,代码留下来给别人参考。
#define rev_delay 0x190
m=rev_delay;
for(j=0;j<AALEN;)
{
while((S2RI == 0) && m ) //串口2接收,查询,并超时判断
{
if(S2RI == 1) //如果串口2接收到数据,重装超时计数,跳出while循环,进行后续数据处理
{
m=rev_delay;
break;
}
else if(m==0) //如果超时,则进入超时处理
{
break;
}
if((m%10)==0) //打印调试信息
SendResponse(m,1,buf); //打印调试信息
m--;
}
if(m==0)
{
m=rev_delay;
SendResponse(0xE0,1,buf); // 超时出错返回
return;
}
TempAA = S2BUF; //读缓冲 一个数据,紧接着发送到串口1中发送
S2CON&=0xFE; //清接收S2RI标志位
j++;
SBUF = TempAA; //放入串口1发送缓冲
while(TI==0); //等待发送标志位置1 ,等待串口1发送完成
TI=0; //清串口1发送标志
}
|
|