|
同意23楼
在中断程序中把所有的延时全部去掉。
中断程序应该越短越好,避免接收没有完下一数又到了。
楼主这个程序的确很乱!还要开按键中断等.
实验时也不能两个数一样,0X41也好一点.
while(!TI); //等待数据发送完毕
这局话更差
清理思路,重新写一个.出错可以解决,思路不改问题更大.
中断程序是用于快速处理,不是解决其他问题的.
Uchar tmp;
Uchar i;
Uchar SendN;
void serial() interrupt 4
{
if(RI){
RI=0; //清除接收中断标志
tmp=SBUF;
if(tmp==0x24) //判断是否为call
{
SBUF=0x24; //为call则回复应答信号
FlaMeasEnd=0; //发送完数据,清除测量完毕标志
return;
}
else if((tmp==0x25)&&(FlaMeasEnd==1)) //判断是否为发送数据请求标志及是否本次测量结束,如果都符合则发送数据
{
/*传送计数值*/
SendN=0;
SBUF=buf[SendN];
SendN++;
FlaMeasEnd=1;
}
}
else {/*ti=1)
TI=0;
if(FlaMeasEnd)
if(SendN<16)
{
SBUF=buf[SendN];
SendN++;
}
else FlaMeasEnd=0;
}
}
|
|