標題: STC8單片機串口2中斷后程序運行變慢 [打印本頁]

作者: 溫柔的郎    時間: 2022-2-11 11:39
標題: STC8單片機串口2中斷后程序運行變慢
各位大神,我在學校STC8A8K64S4A12單片機,用到串口2中斷通信,
屏蔽掉中斷程序時,其他程序運行速度很快,但一旦投入中斷程序,且下載進去,程序進入串口2中斷程序時,整個程序運行就變得很慢很慢了,
這是哪的問題。空堄忻靼椎拇笊裰更c指點!!感謝感謝。
我用的串口2中斷程序如下
void commIntProc(void) interrupt 8
{


  if (!S2RI) return;//S2RI串口2接收中斷請求標志位
        S2CON &= ~S2RI;//S2RI不能位操作。復位串口2接收中斷請求標志位
        //S2RI = 0;//這樣操作錯誤。復位串口2接收中斷請求標志位


        a3++;//顯示累計進入中斷的次數(shù)
        receTimeOut = 100;
        receBuf[receCount] = S2BUF;
                //S2CON=S2CON & 0xfe;//清零接收標志位S2RI
        receCount ++;
        receCount &= 0x1f;                // 最多只接收32個字節(jié)數(shù)據(jù)
}


為了能證實進入中斷,我在中斷程序里放了個a3++的指令(如上代碼a3++;),a3值顯示在OLED屏上,明顯能看出這個a3在大幅度的變化。
可以確定程序進入了中斷程序,而且頻繁進入中斷,導致a3不停的高速自加,所以屏才顯示a3的數(shù)值大幅度變化的。
后來,我在后面加入了行清零指令,就是S2CON=S2CON & 0xfe;//清零接收標志位S2RI這行,但還是沒有啥效果,
請有明白的大神指點指點。「兄x感謝!
我的屏顯示a3如下


OLED觀察如下





作者: TEC    時間: 2022-2-11 13:38
為什么會頻繁進入串口接收中斷?要檢查一下其它代碼。因為你的程序頻繁執(zhí)行中斷函數(shù),所以其它的功能運行就受到影響了。
作者: lkc8210    時間: 2022-2-11 14:45
void commIntProc(void) interrupt 8
{
  if (!S2RI) return;//S2RI串口2接收中斷請求標志位
//下略。。。
}
S2RI在STC8.h里#define 為0x01(314行), 可以算是常數(shù)

當串口2有收到數(shù)據(jù)時, 串口2中斷標志(SCON2位0)置位
進入串口2中斷,if(!S2RI) => if(!0x01) => 永遠為真-> return 跳出串口2中斷
但是串口2標志(SCON2位0)沒有被清零,立刻再次進入串口2中斷
不斷循環(huán)

修改方法在我的貼子中已經(jīng)回答
但正被admin審查中



作者: Y_G_G    時間: 2022-2-11 16:25
if (!S2RI) return;
這就是錯的
串口2的中斷標志位不能位尋址
只能用 if ((SCON2&S2RI)來進行判斷





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1