單片機(jī)串口接收中斷老是接收到00 00 00 00
Sendstring("Receiving ............"); //串口向終端發(fā)送字符串,結(jié)尾處回車換行
Sendstring("----------------------");
void revdata(void) interrupt 4
{
unsigned char temp;
while(RI==0); //if(RI==0)
//return; // //如果沒有接收中斷標(biāo)志,返回
RI = 0; //清串行中斷標(biāo)志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
上面的程序在STC的串口上,接收的時(shí)候不會(huì)一直接收 00 00 00 00 00 ........
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI)
RI = 0; //清串行中斷標(biāo)志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
上面的程序在STC的串口上,接收的時(shí)候會(huì)一直接收 00 00 00 00 00 ........
該中斷程序的結(jié)構(gòu)有問題,單片機(jī)的中斷是根據(jù)SBUF中是否存在數(shù)據(jù)來中斷的,SBUF中存在“R”數(shù)據(jù)(Sendstring("Receiving ............"); )。開始的發(fā)送字符串觸發(fā)了發(fā)送中斷,所以中斷函數(shù)相當(dāng)于
void revdata(void) interrupt 4
{
unsigned char temp;
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
} 一直在往外發(fā)送“R”
所以必須要進(jìn)行限制,如下
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI)
{
RI = 0; //清串行中斷標(biāo)志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
}
評(píng)論