51单片机用1602显示从串口发送来的字符串,为什么这段代码的字符串会累加?如果不想累加该怎么改进??

void serial() interrupt 4
{

ES=0; //关串口中断
if(RI==1){
table[ccc]=SBUF;//命令存到命令数组
if(!(table[ccc]>=0x30&&(table[ccc]<=0x7a))){table[ccc]=0x20;}
RI=0; //软件清除接收中断
ccc++;
if(ccc==31){ccc=0;}
}
ES=1;//开串口中断
}

应该在接收完一组完整的数据后,
把接收计数器ccc清空。
这样就不会累加显示了。追问

这个想到了,但是代码不知道大概哪里修改

主要是接收字符串的话,来几个字符串就要进行几次中断每次中断给数组里面填一个内容,要是在中断里面先清楚数组的内容,就只能接收到第一个字符了!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-03
接收之前,先清空缓存追问

是不是在串口中断关闭那之前ccc=0?

主要是接收字符串的话,来几个字符串就要进行几次中断每次中断给数组里面填一个内容,要是在中断里面先清楚数组的内容,就只能接收到第一个字符了!

第2个回答  2017-03-03
ccc 等于 31 的时候,就会清除追问

不对啊

追答

怎么个不对,你是想实现什么功能?

相似回答