|
搂住的程序有问题:
unsinged char InStr[16]={'a','b','c','d','e','f'}; //全局数组;
void UartInStr() interrupt 4
{
unsinged char *Str; //没用
unsinged int i; //局部变量:这里是只能接收一个字符的主要问题所在
//因为是局部变量,每次来一个字符就进入中断服务程序,i每次被清0;所以
//你始终只有InStr[0]中有接收来的字符。
i=0;
while(RI==0);
RI=0;
InStr=SBUF;
while(InStr[i++]!=0x00) //由于发一串字符的时候中断非常快,所以i根本就不可能到达InStr[i++]==0x00
//所以可能一次在这里形成中断嵌套,所以你的程序应该还有跑飞的情况。
{
while(RI==0);
RI=0;
InStr=SBUF;
}
}
}
完全可以参考5楼:
#define MAXLEN 100 //根据实际情况设置
unsinged char InStr[16]={'a','b','c','d','e','f'} ;
unsinged char InStrLoc = 0; //存放接收到的数据在InStr中的位置
void UartInStr() interrupt 4
{
if(RI && InStrLoc < MAXLEN)
{
RI=0;
InStr[InStrLoc++]=SBUF;
}
}
接收中断程序这样就可以了,要判断一个字符 |
|