新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MCS51系列單片機(jī)軟件復(fù)位的方法

        MCS51系列單片機(jī)軟件復(fù)位的方法

        作者: 時(shí)間:2012-04-27 來源:網(wǎng)絡(luò) 收藏

        4. 在所有指令中,只有RETI指令能清除中斷激活標(biāo)志。出錯(cuò)處理程序ERR主要是完成這一功能,其它的善后工作交由后的系統(tǒng)去完成。為此,我們重新設(shè)計(jì)T1中斷子程序如下所示:

        PT1: CPL P1.2 ;高級中斷程序發(fā)光二極管閃爍

        INC 30H ;WATCHDOG計(jì)數(shù)器增值

        MOV A,30H

        ADD A,#0FD

        JC ERR ;達(dá)到3次否?

        RETI

        ERR: CLR EA ;關(guān)中斷

        CLR A ;準(zhǔn)備地址(0000H)

        PUSH ACC

        PUSH ACC

        RETI ;清除中斷激活標(biāo)志并

        這段程序先關(guān)中斷,以便后續(xù)處理能順利進(jìn)行,然后用RETI指令替代LJMP指令,從而既清除了中斷激活標(biāo)志又完成了轉(zhuǎn)向0000H的任務(wù)。按這樣改好后程序再運(yùn)行,結(jié)果仍不理想:按下按鈕后,有時(shí)只有主程序和高級中斷子程序能迅速恢復(fù)正常,而低級中斷仍有被關(guān)閉的可能。如果按如下把干擾轉(zhuǎn)移到低級中斷中,則按下按鈕后低級中斷必然被關(guān)閉:

        LOOP: CPL P1.0

        MOV R6,#80H

        MOV R7,#0H

        TT1: DJNZ R7,TT1

        DJNZ R6,TT1

        SJMP LOOP

        PT0: CPL P1.1

        JB 00H,STOP

        RETI

        STOP: LJMP STOP ;掉入死循環(huán)。

        仔細(xì)分析后可能得出結(jié)論:當(dāng)WATCHDOG是嵌套在低級中斷中起作用時(shí),復(fù)位后只清除了高級中斷激活標(biāo)志,低級中斷標(biāo)志仍然被置位,從而使低級中斷一直被關(guān)閉。

        5. 修改出錯(cuò)處理如下:

        ERR: CLR EA ;正確的復(fù)位入口

        MOV 66H,#0AAH ;重建上電標(biāo)志

        MOV 67H,#55H

        MOV DPTR,#ERR1 ;準(zhǔn)備第一次返回地址

        PUSH DPL

        PUSH DPH

        RETI ;清除高級中斷激活標(biāo)志

        ERR1: CLR A

        PUSH ACC

        PUSH ACC

        RETI ;清除低級中斷激活標(biāo)志



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 务川| 祁阳县| 永兴县| 高邮市| 东丰县| 湟源县| 新乡县| 津南区| 土默特右旗| 湘乡市| 大姚县| 灵武市| 库尔勒市| 广德县| 峨眉山市| 始兴县| 南城县| 海宁市| 博乐市| 淳化县| 佛山市| 五台县| 宾川县| 江陵县| 东城区| 防城港市| 安庆市| 镶黄旗| 泸西县| 乡宁县| 小金县| 宜兰县| 舒城县| 开封市| 深泽县| 松溪县| 巢湖市| 金乡县| 宣恩县| 北辰区| 大厂|