<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          PT1:?。茫校獭。校保病?;高級中斷程序發(fā)光二極管閃爍

          INC?。常埃取?;WATCHDOG計數(shù)器增值

          MOV?。粒常埃?p>ADD?。?,#0FD

          JC?。牛遥摇?;達到3次否?

          RETI

          ERR:?。茫蹋摇。牛痢?;關(guān)中斷

          CLR?。痢。粶?zhǔn)備地址(0000H)

          PUSH?。粒茫?p>PUSH?。粒茫?p>RETI??;清除中斷激活標(biāo)志并

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

          LOOP: CPL?。校保?p>MOV?。遥?,#80H

          MOV?。遥?,#0H

          TT1:?。模剩危凇。遥?,TT1

          DJNZ?。遥?,TT1

          SJMP?。蹋希希?p>PT0:?。茫校獭。校保?p>JB 00H,STOP

          RETI

          STOP:?。蹋剩停小。樱裕希小?;掉入死循環(huán)。

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

          5. 修改出錯處理如下:

          ERR:?。茫蹋摇。牛痢。徽_的復(fù)位入口

          MOV?。叮叮?,#0AAH??;重建上電標(biāo)志

          MOV?。叮罚?,#55H

          MOV?。模校裕遥#牛遥遥薄?;準(zhǔn)備第一次返回地址

          PUSH?。模校?p>PUSH?。模校?p>RETI??;清除高級中斷激活標(biāo)志

          ERR1:?。茫蹋摇。?p>PUSH?。粒茫?p>PUSH?。粒茫?p>RETI??;清除低級中斷激活標(biāo)志



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();