新聞中心

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

單片機串口接收中斷老是接收到00 00 00 00

作者: 時間:2016-11-27 來源:網絡 收藏
發(fā)現(xiàn)一個問題,串口接收中斷

Sendstring("Receiving ............"); //串口向終端發(fā)送字符串,結尾處回車換行
Sendstring("----------------------");

void revdata(void) interrupt 4
{
unsigned char temp;
while(RI==0); //if(RI==0)
//return; // //如果沒有接收中斷標志,返回
RI = 0; //清串行中斷標志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
上面的程序在STC的串口上,接收的時候不會一直接收 00 00 00 00 00 ........
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI)
RI = 0; //清串行中斷標志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
上面的程序在STC的串口上,接收的時候會一直接收 00 00 00 00 00 ........
該中斷程序的結構有問題,單片機的中斷是根據SBUF中是否存在數(shù)據來中斷的,SBUF中存在“R”數(shù)據(Sendstring("Receiving ............"); )。開始的發(fā)送字符串觸發(fā)了發(fā)送中斷,所以中斷函數(shù)相當于
void revdata(void) interrupt 4
{
unsigned char temp;
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
} 一直在往外發(fā)送“R”
所以必須要進行限制,如下
void revdata(void) interrupt 4
{
unsigned char temp;
if(RI)
{
RI = 0; //清串行中斷標志位
temp = SBUF; //接收緩沖器中的字符
Sendchar(temp); //將接收的字符發(fā)送出去
}
}



評論


技術專區(qū)

關閉