×
嵌入式 > 技术百科 > 详情

单片机串口接收中断老是接收到00 00 00 00

发布时间:2020-06-06 发布时间:
|
发现一个问题,串口接收中断

Sendstring("Receiving ............ ");         //串口向终端发送字符串,结尾处回车换行
Sendstring("---------------------- "); 

 
void revdata(void) interrupt 4
{
unsigned char temp;
while(RI==0); //if(RI==0) 
//return; //        //如果没有接收中断标志,返回
RI = 0;            //清串行中断标志位
temp = SBUF;        //接收缓冲器中的字符
Sendchar(temp);        //将接收的字符发送出去
}
上面的程序在STC的串口上,接收的时候不会一直接收 00 00 00 00 00 ........
 
 
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI) 
RI = 0;            //清串行中断标志位
temp = SBUF;        //接收缓冲器中的字符
Sendchar(temp);        //将接收的字符发送出去
}
上面的程序在STC的串口上,接收的时候会一直接收 00 00 00 00 00 ........
 
该中断程序的结构有问题,单片机的中断是根据SBUF中是否存在数据来中断的,SBUF中存在“R”数据(Sendstring("Receiving ............ ");  )。开始的发送字符串触发了发送中断,所以中断函数相当于
void revdata(void) interrupt 4
{
unsigned char temp;
temp = SBUF;        //接收缓冲器中的字符
Sendchar(temp);        //将接收的字符发送出去
} 一直在往外发送“R”
 
所以必须要进行限制,如下
void revdata(void) interrupt 4
{
unsigned char temp;
 
if(RI)
{
RI = 0;            //清串行中断标志位
temp = SBUF;        //接收缓冲器中的字符
Sendchar(temp);        //将接收的字符发送出去
}
}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展