微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机串口接收中断老是接收到00 00 00 00

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

时间:11-27 来源:互联网 点击:
发现一个问题,串口接收中断

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); //将接收的字符发送出去

}

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top