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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)中斷過程與主程序調(diào)用子程序過程的比較

          51單片機(jī)中斷過程與主程序調(diào)用子程序過程的比較

          作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          3.1調(diào)用子程序過程

          主程序調(diào)用子程序過程應(yīng)包括保護(hù)斷點(diǎn)、跳至子程序首址、保護(hù)現(xiàn)場、子程序處理、恢復(fù)現(xiàn)場、恢復(fù)斷點(diǎn)(子程序返回)6步。這六步都是用軟件指令完成的。其中前兩步保護(hù)斷點(diǎn)和跳至子程序首址由調(diào)用指令CALL完成。保護(hù)斷點(diǎn)其實(shí)就是把斷點(diǎn)地址推入堆棧中保護(hù)起來,要注意的是保護(hù)的斷點(diǎn)應(yīng)是緊跟著調(diào)用指令的下一條指令地址,而不是調(diào)用指令本身地址,否則會(huì)引起重復(fù)調(diào)用“死循環(huán)”,這點(diǎn)必須提醒學(xué)生注意。LCALL與ACALL是MCS-51單片機(jī)的兩條調(diào)用指令,分別稱為長調(diào)用和絕對(duì)調(diào)用,兩指令主要區(qū)別在于LCALL后面操作數(shù)直接就是16位二進(jìn)制的子程序入口地址;而ACALL后面操作數(shù)只是11位二進(jìn)制數(shù),子程序入口地址是把這11位數(shù)作為低位地址,再加上ACALL的下一條指令地址(即斷點(diǎn)地址)的高5位作為高位地址,從而形成16位的子程序入口地址。由此可知,兩條調(diào)用指令的調(diào)用范圍是不一樣的,LCALL為64KB程序存貯器任何范圍,而ACALL在高5位地址不變的同一頁2KB范圍內(nèi)。

          本文引用地址:http://www.ex-cimer.com/article/201611/315913.htm

          由于主程序與子程序可能會(huì)使用相同的寄存器和存貯單元存放數(shù)據(jù),如果兩者這些數(shù)據(jù)無關(guān),那么子程序在使用這些相同寄存器和存貯單元之前,就必須先把主程序存放在這些區(qū)間里的數(shù)據(jù)現(xiàn)場保護(hù)起來,子程序在使用這些區(qū)間結(jié)束后,再把主程序現(xiàn)場恢復(fù)出來,以便子程序返回主程序后,主程序繼續(xù)使用這些區(qū)間?,F(xiàn)場保護(hù)與恢復(fù)一般采用堆棧推入PUSH指令與堆棧彈出POP指令實(shí)現(xiàn),當(dāng)然也可采用改變工作寄存器R0~R7區(qū)間指針等方法實(shí)現(xiàn)。子程序返回只需用RET指令就可把保護(hù)在堆棧中的斷點(diǎn)恢復(fù)出來,繼續(xù)執(zhí)行主程序。

          此外,主程序與子程序是密切聯(lián)系的,它們之間存在著入口參數(shù)與出口參數(shù)傳遞問題,也就是主程序如何把輸入?yún)?shù)傳給子程序,子程序又如何把處理結(jié)果的輸出參數(shù)帶回給主程序,兩者參數(shù)傳遞一般可采用寄存器或存貯單元、堆棧、數(shù)據(jù)指針等方法實(shí)現(xiàn)。

          子程序再調(diào)用子程序叫做子程序嵌套,由于MCS-51單片機(jī)只能把內(nèi)部RAM 00~7FH 128字節(jié)單元作為堆棧使用,斷點(diǎn)地址保護(hù)到堆棧中需占2字節(jié)單元,所以子程序最多可能嵌套64級(jí),當(dāng)然實(shí)際使用中子程序嵌套一般2~3級(jí),否則程序結(jié)構(gòu)就顯得太復(fù)雜了。

          3.2 中斷過程

          中斷過程遠(yuǎn)比調(diào)用子程序過程要復(fù)雜,它包括中斷請(qǐng)求(或申請(qǐng))、中斷排隊(duì)、中斷響應(yīng)、中斷服務(wù)(或處理)和中斷返回5大步。這5大步是由硬件和軟件結(jié)合完成的。

          中斷請(qǐng)求由中斷源向CPU提出。MCS-51單片機(jī)只有T/C0定時(shí)/計(jì)數(shù)器0溢出、T/C1定時(shí)/計(jì)數(shù)器1溢出、TXD/RXD串行口發(fā)送與接收一幀完、INT0外部中斷0和INT1外部中斷1等5個(gè)硬件中斷源,其中前三個(gè)為內(nèi)部中斷源,后兩個(gè)為外部中斷源。

          由于CPU在某一時(shí)刻只能響應(yīng)一個(gè)中斷請(qǐng)求,為處理執(zhí)行主程序時(shí)同時(shí)來了多個(gè)中斷請(qǐng)求和正在處理某一中斷時(shí)又來了新的中斷請(qǐng)求這兩種情況,計(jì)算機(jī)采用硬件或軟件給各個(gè)中斷源按優(yōu)先權(quán)大小進(jìn)行中斷排隊(duì),從多個(gè)中斷申請(qǐng)中選出一個(gè)級(jí)別最高中斷請(qǐng)求而響應(yīng)之,這一過程稱為中斷排隊(duì)。MCS-51單片機(jī)用戶可用指令設(shè)置高、低兩個(gè)優(yōu)先級(jí),而且同級(jí)中還有5個(gè)固定的隱含優(yōu)先級(jí),從高到低的優(yōu)先級(jí)順序分別是INT0、T/C0、INT1、T/C1、TXD/RXD。這樣,在執(zhí)行主程序時(shí),同時(shí)來了兩個(gè)以上中斷請(qǐng)求,則先按高低兩級(jí)選擇高優(yōu)先級(jí),如只有一個(gè)高級(jí)就直接選之,如有兩個(gè)以上都是同級(jí),則按同級(jí)隱含優(yōu)先級(jí),選擇其中一個(gè)高級(jí)別。如正在執(zhí)行一個(gè)低優(yōu)先級(jí),又來了一個(gè)高優(yōu)先級(jí)(即正在執(zhí)行的中斷級(jí)別低于新來的中斷級(jí)別),則高優(yōu)先級(jí)中斷低優(yōu)先級(jí),這就形成了兩級(jí)中斷嵌套。如正在執(zhí)行低的又來了另一低的或者正在執(zhí)行高的又來了一個(gè)低的或高的(即正在執(zhí)行的中斷級(jí)別高于或等于新來的中斷級(jí)別),則不予理睬,不會(huì)引起中斷嵌套,也就是說同級(jí)隱含原則在不同時(shí)來了同級(jí)中斷時(shí)無效??梢?,MCS-51單片機(jī)最多形成兩級(jí)中斷嵌套。

          CPU在執(zhí)行任何機(jī)器指令時(shí),在每一個(gè)機(jī)器周期TCY都要抽點(diǎn)時(shí)間(MCS-51單片機(jī)為S5P2狀態(tài)節(jié)拍)來采集查詢有無中斷請(qǐng)求,如沒有,則繼續(xù)執(zhí)行原程序機(jī)器指令,如有中斷請(qǐng)求,則先從中選出級(jí)別最高者,在中斷響應(yīng)條件成立時(shí),去處理響應(yīng)此中斷請(qǐng)求。

          MCS-51單片機(jī)的中斷響應(yīng)必要條件是中斷屏蔽總開關(guān)EA和中斷請(qǐng)求相應(yīng)的屏蔽分開關(guān)都必須閉合,只有這樣,中斷請(qǐng)求信號(hào)才能送到CPU。此外,還不能碰到以下3種情況,即有優(yōu)先級(jí)更高的中斷請(qǐng)求同時(shí)提出或者正在執(zhí)行同級(jí)或高級(jí)中斷,正在執(zhí)行的指令還沒有執(zhí)行完、正在執(zhí)行RETI或訪問中斷屏蔽寄存器IE和中斷排隊(duì)寄存器IP,這3種情況是中斷響應(yīng)的充分條件。這1種情況中斷排隊(duì)輪不到它響應(yīng);第2種情況必須等到現(xiàn)行指令執(zhí)行完,再響應(yīng)中斷,指令周期分為1、2、4TCY三種機(jī)器周期,計(jì)算機(jī)每個(gè)TCY出現(xiàn)僅查看一次中斷請(qǐng)求,因此,2TCY和4TCY機(jī)器指令有可能沒有執(zhí)行完。如果執(zhí)行指令沒執(zhí)行完就去響應(yīng)中斷,則中斷處理返回后,計(jì)算機(jī)很難把分?jǐn)嚅_執(zhí)行的同一條指令連貫起來;第3種情況處理與第2種情況類似,但它除了要把現(xiàn)行的RETI指令或訪問IE、IP指令執(zhí)行完處,還需再執(zhí)行下一條指令,方能響應(yīng)中斷。利用這個(gè)原理,很容易實(shí)現(xiàn)單步STEP操作(調(diào)試程序時(shí)使用)。

          中斷服務(wù)和中斷返回又由關(guān)(禁止)同級(jí)和低級(jí)中斷、中斷請(qǐng)求撤除、保護(hù)斷點(diǎn)、跳至中斷服務(wù)程序入口、保護(hù)現(xiàn)場、中斷處理、恢復(fù)現(xiàn)場、開(允許)同級(jí)和低級(jí)中斷、恢復(fù)斷點(diǎn)(中斷返回)等9小步組成。這9步中斷服務(wù)過程與前面介紹的6步調(diào)用子程序過程類似,只是增加了開、關(guān)同級(jí)和低級(jí)中斷請(qǐng)求以及中斷請(qǐng)求撤除3步,其余6步完全一致。開、關(guān)同級(jí)和低級(jí)中斷目的是使不同時(shí)來中斷請(qǐng)求的同級(jí)隱含排隊(duì)原則無效,此時(shí)只能實(shí)現(xiàn)高級(jí)嵌套低級(jí)的兩級(jí)中斷嵌套。在中斷處理的返回前清除原中斷請(qǐng)求原因是防止同一次中斷申請(qǐng)被重復(fù)響應(yīng)。

          中斷服務(wù)過程的前4步是由硬件自動(dòng)實(shí)現(xiàn)的,這點(diǎn)完全不同于調(diào)用子程序過程。當(dāng)然TXD/RXD中斷請(qǐng)求與INT0、INT1電平觸發(fā)中斷請(qǐng)求還需用戶分別用軟件和硬件清除中斷請(qǐng)求。MCS-51單片機(jī)的中斷服務(wù)程序入口地址是固定的,它們分別是INT0為0003H、T/C0為000BH、INT1為0013H、T/C1為001BH、TXD/RXD為0023H。斷點(diǎn)現(xiàn)場保護(hù)與恢復(fù)也是通過堆棧推入與彈出或改變工作寄存器區(qū)來實(shí)現(xiàn)的。

          中斷處理完后,就應(yīng)返回?cái)帱c(diǎn)繼續(xù)執(zhí)行主程序,開同級(jí)和低級(jí)中斷、恢復(fù)斷點(diǎn)2步可用中斷返回指令RETI實(shí)現(xiàn),注意子程序返回指令RET只能實(shí)現(xiàn)恢復(fù)斷點(diǎn),而不能開同級(jí)和低級(jí)中斷。



          評(píng)論


          技術(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); })();