【摘要】調(diào)用和中斷是《單片機(jī)原理與應(yīng)用》課程中的兩個(gè)比較難的理論知識(shí)點(diǎn),經(jīng)常會(huì)有學(xué)生將這兩個(gè)知識(shí)點(diǎn)混淆。本文針對(duì)這一問(wèn)題,將調(diào)用和中斷結(jié)合起來(lái),采用比較的教學(xué)方法,詳細(xì)地討論兩者的異同,此方法在教學(xué)中發(fā)揮了良好的作用,提高了教學(xué)效果。
【關(guān)鍵詞】比較教學(xué)法;單片機(jī)原理與應(yīng)用;調(diào)用;中斷;
從事《單片機(jī)原理與應(yīng)用》教學(xué)工作已有多年,在教學(xué)過(guò)程中發(fā)現(xiàn)初學(xué)者很容易把中斷和調(diào)用這兩個(gè)過(guò)程混淆,這兩個(gè)知識(shí)點(diǎn)既是教學(xué)重點(diǎn)又是教學(xué)難點(diǎn),根據(jù)多年的經(jīng)驗(yàn)把它們對(duì)比起來(lái)進(jìn)行施教能收到良好的教學(xué)效果。
一、調(diào)用和中斷的定義
1、調(diào)用
程序設(shè)計(jì)過(guò)程中,經(jīng)常會(huì)遇到在不同的程序中或同一程序的不同位置要用到功能相同的程序段,對(duì)于這樣的程序段,將其獨(dú)立出來(lái),附加少量的額外指令,編制成可供反復(fù)調(diào)用的獨(dú)立程序段。這種程序設(shè)計(jì)方法稱為子程序設(shè)計(jì)。被獨(dú)立出來(lái)的程序段稱為子程序。調(diào)用子程序的程序稱為主程序。
單片機(jī)執(zhí)行主程序的過(guò)程中,需要用到子程序的功能,稱為“調(diào)用”。子程序執(zhí)行完后,必須回到主程序,稱為“返回”。
2、中斷
CPU正在執(zhí)行程序的過(guò)程中,由于CPU之外的某種原因,有必要暫停該程序的執(zhí)行,轉(zhuǎn)而去執(zhí)行相應(yīng)的處理程序,待處理程序結(jié)束之后,再返回原程序斷點(diǎn)處繼續(xù)運(yùn)行。這一過(guò)程稱為中斷。
二、調(diào)用和中斷的聯(lián)系與區(qū)別
1、聯(lián)系。調(diào)用和中斷兩過(guò)程屬于完全不同的概念,但它們也有不少相似之處。兩者都需要保護(hù)斷點(diǎn)(即下一條指令首地址)、跳至子程序或中斷服務(wù)程序、保護(hù)現(xiàn)場(chǎng)、子程序或中斷處理、恢復(fù)現(xiàn)場(chǎng)、恢復(fù)斷點(diǎn)(即返回主程序)。兩者都可實(shí)現(xiàn)嵌套,即正在執(zhí)行的子程序再調(diào)另一子程序或正在處理的中斷程序又被另一新中斷請(qǐng)求所中斷,嵌套可為多級(jí)。正是由于這些表面上的相似處,很容易使學(xué)生把兩者混淆起來(lái),特別是把中斷也看為子程序,這就大錯(cuò)特錯(cuò)了。
2、區(qū)別。調(diào)用與中斷過(guò)程相似,但都是表面的,從本質(zhì)上講兩者是完全不一樣的。兩者的根本區(qū)別主要表現(xiàn)在服務(wù)時(shí)間與服務(wù)對(duì)象不一樣上。第一,調(diào)用子程序過(guò)程發(fā)生的時(shí)間是已知和固定的,即在主程序中的調(diào)用指令(CALL)執(zhí)行時(shí)發(fā)生主程序調(diào)用子程序,因?yàn)檎{(diào)用指令所在位置是已知和固定的。而中斷過(guò)程發(fā)生的時(shí)間一般是隨機(jī)的,CPU在執(zhí)行某一主程序時(shí)收到中斷源提出的中斷申請(qǐng)時(shí),就發(fā)生中斷過(guò)程,而中斷申請(qǐng)一般由硬件電路產(chǎn)生,申請(qǐng)?zhí)岢鰰r(shí)間是隨機(jī)的。也可以說(shuō),調(diào)用子程序是程序設(shè)計(jì)者事先安排的,而執(zhí)行中斷服務(wù)程序是由系統(tǒng)工作環(huán)境隨機(jī)決定的。第二,子程序完全為主程序服務(wù)的,兩者屬于主從關(guān)系,主程序需要子程序時(shí)就去調(diào)用子程序,并把調(diào)用結(jié)果帶回主程序繼續(xù)執(zhí)行。而中斷服務(wù)程序與主程序兩者一般是無(wú)關(guān)的,不存在誰(shuí)為誰(shuí)服務(wù)的問(wèn)題,兩者是平行關(guān)系。第三,主程序調(diào)用子程序過(guò)程完全屬于軟件處理過(guò)程,不需要專門的硬件電路,而中斷處理系統(tǒng)是一個(gè)軟、硬件結(jié)合系統(tǒng),需要專門的硬件電路才能完全中斷處理的過(guò)程。第四,子程序嵌套可實(shí)現(xiàn)若干級(jí),嵌套的最多級(jí)數(shù)由計(jì)算機(jī)內(nèi)存開(kāi)辟的堆棧大小限制,而中斷嵌套級(jí)數(shù)主要由中斷優(yōu)先級(jí)數(shù)來(lái)決定,MCS-51單片機(jī)的中斷優(yōu)先級(jí)數(shù)為兩級(jí)(即高級(jí)和低級(jí))。第五,子程序返回指令是RET,中斷返回指令是RETI.。子程序返回指令RET的功能是從子程序返回到主程序,并從調(diào)用指令的下一條指令處繼續(xù)執(zhí)行主程序,它一般位于子程序結(jié)束處;中斷返回指令RETI作為中斷服務(wù)程序的結(jié)束指令,除了具有RET的功能外,還具有清除中斷響應(yīng)時(shí)被置位的優(yōu)先級(jí)狀態(tài)、恢復(fù)中斷邏輯等功能。因此這兩條返回指令使用時(shí)是有區(qū)別的,不能用子程序返回指令RET代替中斷返回指令RETI。
三、調(diào)用和中斷兩過(guò)程的詳細(xì)比較
1、調(diào)用過(guò)程。主程序調(diào)用子程序過(guò)程應(yīng)包括保護(hù)斷點(diǎn)、跳至子程序首地址、保護(hù)現(xiàn)場(chǎng)、子程序處理、恢復(fù)現(xiàn)場(chǎng)、恢復(fù)斷點(diǎn)(子程序返回)六步。這六步都是用軟件指令完成的。其中前兩步保護(hù)斷點(diǎn)和跳至子程序首地址由調(diào)用指令CALL完成。保護(hù)斷點(diǎn)其實(shí)就是把斷點(diǎn)地址推入堆棧中保護(hù)起來(lái),要注意的是保護(hù)的斷點(diǎn)應(yīng)是緊跟著調(diào)用指令的下一條指令的首字節(jié)地址,而不是調(diào)用指令本身的地址,否則會(huì)引起重復(fù)調(diào)用“死循環(huán)”,這點(diǎn)必須提醒學(xué)生注意。LCALL和ACALL是MCS-51單片機(jī)的兩條調(diào)用指令,分別稱為長(zhǎng)調(diào)用和絕對(duì)調(diào)用,
2、中斷過(guò)程。中斷過(guò)程遠(yuǎn)比調(diào)用子程序過(guò)程復(fù)雜,它包括中斷請(qǐng)求、中斷排隊(duì)(中斷優(yōu)先級(jí)控制)、中斷響應(yīng)、中斷服務(wù)和中斷返回五步。這五步是由硬件和軟件結(jié)合完成的。中斷請(qǐng)求:MCS-51單片機(jī)共5個(gè)中斷源,包括兩個(gè)外部中斷(由 和 引腳輸入中斷請(qǐng)求信號(hào))和三個(gè)內(nèi)部中斷源(定時(shí)器/計(jì)數(shù)器溢出中斷T0、定時(shí)器/計(jì)數(shù)器溢出中斷T1和片內(nèi)串行口中斷TXD發(fā)送/RXD接收)。中斷請(qǐng)求由中斷源向CPU提出并將中斷請(qǐng)求標(biāo)志寄存器(TCON、SCON)中相應(yīng)的中斷請(qǐng)求標(biāo)志位置1。中斷排隊(duì):由于CPU在某一時(shí)刻只能響應(yīng)一個(gè)中斷請(qǐng)求,為處理執(zhí)行主程序時(shí)同時(shí)來(lái)了多個(gè)中斷請(qǐng)求和正在處理某一中斷時(shí)又來(lái)了新的中斷請(qǐng)求這兩種情況,計(jì)算機(jī)采用硬件或軟件給各個(gè)中斷源優(yōu)先權(quán)大小進(jìn)行中斷排隊(duì),從多個(gè)中斷申請(qǐng)中選出一個(gè)級(jí)別最高的中斷請(qǐng)求并響應(yīng),這一過(guò)程稱為中斷排隊(duì)。MCS-51單片機(jī)用戶可用指令設(shè)置中斷優(yōu)先級(jí)控制寄存器IP的值,將5個(gè)中斷源的請(qǐng)求分為高級(jí)和低級(jí)兩個(gè)優(yōu)先級(jí)。而且同級(jí)中還有5個(gè)固定的自然優(yōu)先級(jí)別,從高到低的優(yōu)先順序分別是、T0、、T1、TXD/RXD。這樣,在執(zhí)行主程序時(shí),同時(shí)來(lái)了兩個(gè)以上中斷請(qǐng)求,則先按高低兩級(jí)選擇高優(yōu)先級(jí)。如果只有一個(gè)高級(jí)的中斷請(qǐng)求就直接選之,如果有兩個(gè)以上都是同級(jí),則按同級(jí)自然優(yōu)先級(jí)別選擇其中的一個(gè)優(yōu)先響應(yīng)。如果正在執(zhí)行一個(gè)低優(yōu)先級(jí),又來(lái)了一個(gè)高優(yōu)先級(jí),則高優(yōu)先級(jí)中斷低優(yōu)先級(jí),這就形成了兩級(jí)中斷嵌套;如果正在執(zhí)行的中斷級(jí)別高于或等于新來(lái)的中斷級(jí)別,則不予理睬,不會(huì)引起中斷嵌套。可見(jiàn),MCS-51單片機(jī)最多形成兩級(jí)中斷嵌套。中斷響應(yīng):滿足響應(yīng)條件時(shí),進(jìn)入指定的中斷服務(wù)程序入口地址。MCS-51單片機(jī)的中斷服務(wù)程序入口地址是固定的,它們分別是 為0003H、T0為000BH、為0013H、T1為001BH、TXD/RXD為0023H。中斷服務(wù):有關(guān)(禁止)同級(jí)和低級(jí)中斷、中斷請(qǐng)求撤除、保護(hù)斷點(diǎn)、跳至中斷服務(wù)程序入口、保護(hù)現(xiàn)場(chǎng)、中斷處理、恢復(fù)現(xiàn)場(chǎng)等七步組成。這七步中斷服務(wù)過(guò)程與前面介紹的五步調(diào)用子程序過(guò)程類似,只是增加了禁止同級(jí)和低級(jí)中斷請(qǐng)求以及中斷請(qǐng)求撤除兩步,其余五步完全一致。禁止同級(jí)和低級(jí)中斷目的是使不同時(shí)來(lái)中斷請(qǐng)求的同級(jí)隱含排隊(duì)原則無(wú)效,此時(shí)只能實(shí)現(xiàn)高級(jí)嵌套低級(jí)的兩級(jí)中斷嵌套。在中斷處理的返回前清除原中斷請(qǐng)求原因是防止同一次中斷申請(qǐng)被重復(fù)響應(yīng)。中斷返回:中斷處理完后,就應(yīng)返回?cái)帱c(diǎn)繼續(xù)執(zhí)行主程序,包括開(kāi)(允許)同級(jí)和低級(jí)中斷和恢復(fù)斷點(diǎn)兩步。
中斷服務(wù)過(guò)程的前四步是由硬件自動(dòng)實(shí)現(xiàn)的,這點(diǎn)完全不同于調(diào)用子程序過(guò)程。當(dāng)然TXD/RXD中斷請(qǐng)求與、電平觸發(fā)中斷請(qǐng)求還需用戶分別用軟件和硬件清除中斷請(qǐng)求。斷點(diǎn)現(xiàn)場(chǎng)保護(hù)與恢復(fù)也是通過(guò)堆棧推入與彈出或改變工作寄存器區(qū)來(lái)實(shí)現(xiàn)的。
中斷過(guò)程與調(diào)用子程序過(guò)程是《單片機(jī)原理及應(yīng)用》教學(xué)中的重點(diǎn)和難點(diǎn)內(nèi)容之一。兩過(guò)程之間既有聯(lián)系又有區(qū)別,本文從多個(gè)不同角度詳細(xì)地對(duì)比了它們的異同。對(duì)于培養(yǎng)學(xué)生編制軟件及開(kāi)展計(jì)算機(jī)應(yīng)用方面的能力,具有積極的指導(dǎo)意義,采用這種比較教學(xué)法,有利于教學(xué)質(zhì)量的提高。
參考文獻(xiàn):
[1]《單片機(jī)原理與應(yīng)用》 梁潔婷 首衍 肖玲妮 主編 高等教育出版社 2002
[2]《單片機(jī)原理及應(yīng)用技術(shù)》 劉振海 主編 高等教育出版社2003