新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)串口接收中斷老是接收到00 00 00 00

單片機(jī)串口接收中斷老是接收到00 00 00 00

作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
發(fā)現(xiàn)一個(gè)問題,串口接收中斷

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ā)送出去
}
}



關(guān)鍵詞: 單片機(jī)串口接收中

評(píng)論


技術(shù)專區(qū)

關(guān)閉