找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2910|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STC8單片機(jī)串口2中斷后程序運(yùn)行變慢

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:476652 發(fā)表于 2022-2-11 11:39 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大神,我在學(xué)校STC8A8K64S4A12單片機(jī),用到串口2中斷通信,
屏蔽掉中斷程序時,其他程序運(yùn)行速度很快,但一旦投入中斷程序,且下載進(jìn)去,程序進(jìn)入串口2中斷程序時,整個程序運(yùn)行就變得很慢很慢了,
這是哪的問題?請有明白的大神指點指點。「兄x感謝。
我用的串口2中斷程序如下
void commIntProc(void) interrupt 8
{


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


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


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


OLED觀察如下




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:625730 發(fā)表于 2022-2-11 13:38 | 只看該作者
為什么會頻繁進(jìn)入串口接收中斷?要檢查一下其它代碼。因為你的程序頻繁執(zhí)行中斷函數(shù),所以其它的功能運(yùn)行就受到影響了。
回復(fù)

使用道具 舉報

板凳
ID:161164 發(fā)表于 2022-2-11 14:45 | 只看該作者
void commIntProc(void) interrupt 8
{
  if (!S2RI) return;//S2RI串口2接收中斷請求標(biāo)志位
//下略。。。
}
S2RI在STC8.h里#define 為0x01(314行), 可以算是常數(shù)

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

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


回復(fù)

使用道具 舉報

地板
ID:401564 發(fā)表于 2022-2-11 16:25 | 只看該作者
if (!S2RI) return;
這就是錯的
串口2的中斷標(biāo)志位不能位尋址
只能用 if ((SCON2&S2RI)來進(jìn)行判斷
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表