找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2300|回復(fù): 9
收起左側(cè)

一個Proteus仿真模擬單片機(jī)中斷的問題,請指教

[復(fù)制鏈接]
ID:152785 發(fā)表于 2023-10-11 19:32 | 顯示全部樓層 |閱讀模式
protues線路圖如下:
屏幕截圖 2023-10-11 192321.png

keil5代碼如下:
#include <reg52.h>

sbit k3=P3^2;
#define led P2

void Delay100ms(unsigned int ms)        //@12.000MHz
{
        unsigned char data i, j;
        while(ms>0)
        {
                i = 195;
                j = 138;
                do
                {
                        while (--j);
                } while (--i);
                ms--;
        }
}

void Init_interrupt()
{
        IT0=1;
        EX0=1;
        EA=1;
}

void main()
{
        Init_interrupt();
        while(1);
}

void k3_led() interrupt 0
{
        Delay100ms(1);
        if(k3==0)
        {
                led=!led;
                Delay100ms(1);
        }
}


仿真報錯如下
屏幕截圖 2023-10-11 192749.png

如果把led用位定義,操作單個led燈是正常.這是什么BUG?
回復(fù)

使用道具 舉報

ID:94031 發(fā)表于 2023-10-11 20:15 | 顯示全部樓層
led=!led; 改成 led=~led;
回復(fù)

使用道具 舉報

ID:1093723 發(fā)表于 2023-10-11 20:26 | 顯示全部樓層
在使用Proteus進(jìn)行STM32單片機(jī)仿真時,某些情況下會發(fā)現(xiàn)中斷無反應(yīng)的現(xiàn)象,即中斷未能正常觸發(fā)或中斷觸發(fā)后程序無法正常運(yùn)行。這種問題可能會對開發(fā)過程造成嚴(yán)重影響,所以我們需要找出問題的原因并解決它。  首先,我們需要確認(rèn)中斷向量表是否正確。在STM32中,中斷向量表存儲在存儲器的前面一段,它是中斷服務(wù)程序的入口地址。如果中斷向量表設(shè)定錯誤,將會導(dǎo)致中斷無法正常觸發(fā)。在Proteus仿真中,可以使用Debug功能驗證向量表的位置和地址是否正確。  其次,檢查中斷服務(wù)程序是否正確編寫。中斷服務(wù)程序一般由ISR函數(shù)(中斷服務(wù)函數(shù))和IRQ函數(shù)(中斷請求函數(shù))兩部分組成。中斷請求函數(shù)將中斷請求標(biāo)志位清零并跳轉(zhuǎn)到中斷服務(wù)函數(shù),ISR函數(shù)處理中斷請求并返回原程序。如果這兩部分出現(xiàn)了錯誤,就會導(dǎo)致中斷無反應(yīng)。在Proteus仿真中,可以使用Debug功能逐行調(diào)試中斷服務(wù)程序,查看程序執(zhí)行情況是否正確。  第三,檢查中斷優(yōu)先級設(shè)置是否正確。在STM32中,不同的中斷優(yōu)先級可能會產(chǎn)生中斷嵌套,如果嵌套深度過大,將會導(dǎo)致CPU處理中斷的效率降低。因此,我們需要根據(jù)實(shí)際應(yīng)用需要,合理設(shè)置中斷優(yōu)先級,以避免出現(xiàn)中斷嵌套的情況。在Proteus仿真中,可以使用NVIC Registers查看中斷控制器中的優(yōu)先級設(shè)置是否正確。  最后,檢查硬件連接是否正確。在STM32中,一些外設(shè)和中斷引腳通過外部中斷連接,如果硬件連接出現(xiàn)問題將會導(dǎo)致中斷無法正常觸發(fā)。因此,我們需要仔細(xì)檢查外設(shè)和中斷引腳的連接是否正確。在Proteus仿真中,可以使用Schematic Editor查看連接是否正確。  總之,在Proteus仿真中,出現(xiàn)中斷無反應(yīng)的問題需要通過多種方法進(jìn)行排查和解決。我們需要仔細(xì)檢查中斷向量表、中斷服務(wù)程序、中斷優(yōu)先級設(shè)置和硬件連接等方面,以確保仿真能夠正常進(jìn)行,避免延誤項目進(jìn)度。
回復(fù)

使用道具 舉報

ID:152785 發(fā)表于 2023-10-11 21:04 | 顯示全部樓層
xuyaqi 發(fā)表于 2023-10-11 20:15
led=!led; 改成 led=~led;

試了,同樣報錯,下到板子上,和仿真效果一樣
回復(fù)

使用道具 舉報

ID:18307 發(fā)表于 2023-10-12 10:04 | 顯示全部樓層
v115488 發(fā)表于 2023-10-11 21:04
試了,同樣報錯,下到板子上,和仿真效果一樣

在初始化里加上  INT0 = 1;
在中斷里把if比較去掉試一下
因為K3為低電平時 就進(jìn)中斷了
要不把2個延時都去掉,中斷里只保留1句LED取反 試一下看進(jìn)不進(jìn)中斷
回復(fù)

使用道具 舉報

ID:94031 發(fā)表于 2023-10-12 10:11 | 顯示全部樓層
v115488 發(fā)表于 2023-10-11 21:04
試了,同樣報錯,下到板子上,和仿真效果一樣

中斷里不要用延時,我把中斷屏蔽后功能是正常的, 延時.png
回復(fù)

使用道具 舉報

ID:94031 發(fā)表于 2023-10-12 10:21 | 顯示全部樓層
v115488 發(fā)表于 2023-10-11 21:04
試了,同樣報錯,下到板子上,和仿真效果一樣

改了后的效果。 效果.zip (4.72 MB, 下載次數(shù): 0)
回復(fù)

使用道具 舉報

ID:94031 發(fā)表于 2023-10-12 16:34 | 顯示全部樓層
xuyaqi 發(fā)表于 2023-10-12 10:21
改了后的效果。

燈閃.gif
回復(fù)

使用道具 舉報

ID:152785 發(fā)表于 2023-10-12 21:51 | 顯示全部樓層

首先感謝您的回復(fù),跟您添麻煩了,問題已解決
過程是這樣的:
今天把代碼反復(fù)改了又改,仿真的時候按一下k3,CPU總是飚的70%,然后和昨天一樣報錯,自動終止仿真.
屏蔽掉中斷,代碼都精簡到只有按鍵和翻轉(zhuǎn)了,還是飚70%.
我才意識到可能是Protues這邊出問題了.
你仿真正常
然后我就對比我們兩個的線路,發(fā)現(xiàn)你用的是單個電阻,我用的是排阻,果斷拆除排阻,問題完美解決,再次感謝

討論:
排阻不是單電阻的集合體嗎,Protues出BUG了?
回復(fù)

使用道具 舉報

ID:108361 發(fā)表于 2023-10-26 18:37 | 顯示全部樓層
v115488 發(fā)表于 2023-10-12 21:51
首先感謝您的回復(fù),跟您添麻煩了,問題已解決
過程是這樣的:
今天把代碼反復(fù)改了又改,仿真的時候按一下k3 ...

不要過于相信proteus,要相信物理定律
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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