版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 中斷與定時(shí)單片機(jī)技術(shù)及應(yīng)用授課人:莊友誼第5章 中斷與定時(shí) 5.1 MCS-51單片機(jī)的中斷系統(tǒng)5.4 簡(jiǎn)易數(shù)字頻率計(jì)設(shè)計(jì)案例及Proteus仿真 5.3 中斷與定時(shí)器/計(jì)數(shù)器綜合應(yīng)用舉例5.2 MCS-51單片機(jī)定時(shí)器/計(jì)數(shù)器5.1 MCS-51單片機(jī)的中斷系統(tǒng)5.1.1 單片機(jī)中斷技術(shù)概述:1、CPU與外設(shè)數(shù)據(jù)傳送方式及中斷的基本概念:(1)無(wú)條件傳送方式:CPU直接與外設(shè)進(jìn)行數(shù)據(jù)傳送。缺點(diǎn):只適用于總是處于準(zhǔn)備好狀態(tài)的外設(shè)常見的用直接傳送方式的簡(jiǎn)單外設(shè)有: 發(fā)光二極管、數(shù)碼管、開關(guān)、繼電器、步進(jìn)電機(jī)等P1.0P1.1P1.2P1.3P1.4P1.5.89C51+5V紅綠黃3003
2、00300(2)查詢方式:CPU在進(jìn)行數(shù)據(jù)傳送前,先檢查設(shè)備狀態(tài)。例:查詢方式的紅外防盜報(bào)警系統(tǒng)缺點(diǎn):CPU效率低,數(shù)據(jù)傳送的實(shí)時(shí)性差準(zhǔn)備好?N數(shù)據(jù)傳送Y讀入狀態(tài)(3)中斷方式: CPU不主動(dòng)查詢,只執(zhí)行自己的程序,當(dāng)事件發(fā)生提出要求CPU進(jìn)行處理的請(qǐng)求時(shí),若CPU準(zhǔn)予請(qǐng)求,則CPU暫時(shí)中斷正在運(yùn)行的程序,轉(zhuǎn)而去處理該事件,待處理完畢再返回被中斷的程序繼續(xù)執(zhí)行。中斷請(qǐng)求主程序RETI 中斷服 務(wù)程序中斷方式下程序運(yùn)行流程:查詢方式下程序運(yùn)行流程:CPU主動(dòng)查詢CPU被動(dòng)等待中斷事件發(fā)生和處理是在程序中設(shè)計(jì)好的事件發(fā)生是隨機(jī)的,事件處理由中斷服務(wù)程序完成準(zhǔn)備好?N事件處理Y讀入狀態(tài)效率低,實(shí)時(shí)性
3、差效率高,實(shí)時(shí)性好2、中斷的優(yōu)點(diǎn)及功能:(1)解決速度矛盾(2)實(shí)現(xiàn)并行工作(分時(shí))、提高CPU效率(3)實(shí)現(xiàn)實(shí)時(shí)處理、應(yīng)對(duì)突發(fā)事件中斷功能強(qiáng)弱是體現(xiàn)計(jì)算機(jī)性能優(yōu)劣的一個(gè)重要標(biāo)志過(guò)壓溫度濃度CPU外設(shè)1外設(shè)2外設(shè)3CPU中斷處理(4)故障處理3、有關(guān)中斷的幾個(gè)概念:(2) 中斷源:產(chǎn)生中斷的外部和內(nèi)部事件。(1)中斷請(qǐng)求:外設(shè)向CPU發(fā)出的“中斷申請(qǐng)信號(hào)” 。通常中斷源有:請(qǐng)求CPU外設(shè)鍵盤打印機(jī)磁盤掉電定時(shí)器另外,還有為調(diào)試程序而設(shè)的中斷,如單步、斷點(diǎn)設(shè)置等。外設(shè)請(qǐng)求輸入輸出數(shù)據(jù),報(bào)告故障等事件掉電、硬件故障、軟件錯(cuò)誤、非法操作、 定時(shí)時(shí)間到等(5) 中斷優(yōu)先級(jí): 當(dāng)有幾個(gè)中斷源同時(shí)申請(qǐng)中斷
4、時(shí),或者CPU正在處理某中斷源服務(wù)程序時(shí),又有另一中斷源申請(qǐng)中斷,CPU按照一定的優(yōu)先規(guī)則對(duì)這些中斷進(jìn)行處理,這樣的處理規(guī)則稱為中斷優(yōu)先級(jí)。(3) 中斷響應(yīng):(4) 中斷服務(wù)程序:CPU由于中斷響應(yīng),為處理該事件而執(zhí)行的計(jì)算機(jī)程序。CPU由于接收到中斷請(qǐng)求信號(hào),而去進(jìn)行相應(yīng)處理的操作。中斷請(qǐng)求中斷請(qǐng)求RETIRETI主程序中斷系統(tǒng)能實(shí)現(xiàn)中斷嵌套中斷服務(wù)程序4、中斷過(guò)程:中斷申請(qǐng)中斷響應(yīng)中斷處理中斷返回中斷判優(yōu)1、中斷源與中斷向量MCS-51中有5個(gè)中斷源: MCS-52有6個(gè)中斷源,即增加了一個(gè)定時(shí)器計(jì)數(shù)器溢出中斷源T2。兩個(gè)內(nèi)部的定時(shí)/計(jì)數(shù)器溢出中斷源T0和T1一個(gè)內(nèi)部的串行口發(fā)送或接收中斷
5、源。兩個(gè)外部中斷源INT0和INT1每一個(gè)中斷源都能被程控設(shè)置為高優(yōu)先級(jí)或低優(yōu)先級(jí)。5.1.2 MCS-51單片機(jī)的中斷系統(tǒng)2、MCS-51中斷系統(tǒng)結(jié)構(gòu):各單路開關(guān)總開關(guān)IP寄存器實(shí)行兩級(jí)控制SCON寄存器 EA總允許位中斷源標(biāo)志位查詢機(jī)構(gòu)高優(yōu)先級(jí)低優(yōu)先級(jí)中斷入口中斷源標(biāo)志位中斷入口中斷源標(biāo)志位IE0EX0TF0IE1TF1TIESET1EX1ET0RI+源允許位優(yōu)先級(jí)外部中斷 請(qǐng)求0外部中斷 請(qǐng)求1定時(shí)器/計(jì)數(shù)器0定時(shí)器/計(jì)數(shù)器1串行口TRINT0INT1RXDTXDT1T0中斷標(biāo)志位IE寄存器TCON寄存器與中斷系統(tǒng)相關(guān)的特殊功能寄存器有:中斷源寄存器:TCON(88H),SCON(98H
6、) 中斷允許控制寄存器IE(A8H) 中斷優(yōu)先級(jí)控制寄存器IP(B8H) 實(shí)行兩級(jí)控制,即以EA位作為總控制位,以各中斷源的中斷允許位作為分控制位。只有當(dāng)總控制位EA有效時(shí),即開放中斷系統(tǒng),這時(shí)各分控制位才能對(duì)相應(yīng)中斷源分別進(jìn)行開放或禁止。各中斷允許控制位=0,開關(guān)斷開各中斷允許控制位=1,開關(guān)接通 MCS-51單片機(jī)在CPU響應(yīng)中斷時(shí),由硬件直接產(chǎn)生一個(gè)固定的地址,稱為矢量地址,由矢量地址指出每個(gè)中斷源設(shè)備的中斷服務(wù)程序的入口。3、 中斷向量(矢量) 外部中斷0 0003H 計(jì)時(shí)器T0溢出 000BH 外部中斷1 0013H 計(jì)時(shí)器T1溢出 001BH 串行口中斷 0023H 計(jì)時(shí)器 T2/
7、T2EX 002BH MCS-51單片機(jī)的 5 個(gè)(MCS-52為6個(gè))中斷源對(duì)應(yīng)的中斷服務(wù)程序入口地址中斷矢量為: 當(dāng)CPU識(shí)別出某個(gè)中斷源時(shí),由硬件直接給出一個(gè)與該中斷源相對(duì)應(yīng)的矢量地址,從而轉(zhuǎn)入各自中斷服務(wù)程序。1、中斷標(biāo)志:(1)TCON(Timer Control): 定時(shí)器/計(jì)數(shù)器的中斷標(biāo)志控制寄存器,鎖存外部中斷請(qǐng)求標(biāo)志,其字節(jié)地址為88H 。 位地址8FH8EH8DH8CH8BH8AH89H88H符號(hào)TF1TR1TF0TR0IE1IT1IE0IT0D7 D6 D5 D4 D3 D2 D1 D0 INT0,INT1,T0 及 T1的中斷標(biāo)志存放在 TCON(定時(shí)器計(jì)數(shù)器控制)寄存
8、器中; 串行口的中斷標(biāo)志存放在 SCON(串行口控制)寄存器中。5.1.3 中斷控制B、IE0、IE1(external interrupt flag)A、IT0、IT1 (interrupt trigger mode):當(dāng)ITi=0當(dāng)ITi=1INT0INT1ITi=1 為負(fù)跳沿觸發(fā)方式;ITi 可由軟件置“1”或清“0”。ITi=0 為低電平觸發(fā)方式;當(dāng)ITi=0 時(shí),若INTi=0,則由硬件對(duì)IEi置“1” ,否則IEi清“0”當(dāng)ITi=1 時(shí),若INTi=,則由硬件對(duì)IEi置“1” ,否則IEi清“0” IEi=1表示外部正在向CPU申請(qǐng)中斷,CPU響應(yīng)中斷后由硬件自動(dòng)清0外部中斷請(qǐng)求
9、觸發(fā)方式外部中斷標(biāo)志,當(dāng)有外部中斷請(qǐng)求時(shí),該位置“1”0C、 TF0、TF1(Timer overflow interrupt flag) 當(dāng)定時(shí)器/計(jì)數(shù)器最高位進(jìn)位時(shí),由硬件對(duì)TFi置“1” ,表示正在向CPU申請(qǐng)中斷,CPU響應(yīng)中斷后, TFi由硬件自動(dòng)清“0” 。定時(shí)器溢出中斷標(biāo)志D、 TR0、TR1: 定時(shí)器運(yùn)行控制位。 =1 啟動(dòng)計(jì)數(shù); =0 停止計(jì)數(shù)(2)SCON (Serial port Control) :位地址9FH9EH9DH9CH9BH9AH99H98H符號(hào)SM0SM1SM2RENTB8RB8TIRI低兩位鎖存接收中斷源RI和發(fā)送中斷源TI。TI(SCON1):串行口發(fā)送
10、中斷源。發(fā)送完一幀,由硬件置位。RI(SCON0):串行口接收中斷源。接收完一幀,由硬件置位。D7 D6 D5 D4 D3 D2 D1 D0串行口控制寄存器,字節(jié)地址為98H響應(yīng)中斷后,必須用軟件清0。IP(Interrupt priority):中斷優(yōu)先權(quán)控制寄存器(1)PS:串行口中斷優(yōu)先級(jí)控制位(2)PT0、PT1:定時(shí)器/計(jì)數(shù)器中斷優(yōu)先級(jí)控制位(3)PX0、PX1:外部中斷優(yōu)先級(jí)控制位 上述中:“1”表示高優(yōu)先級(jí),“0”表示低優(yōu)先級(jí)。位地址BFHBEHBDHBCHBBHBAHB9HB8H符號(hào) PSPT1PX1PT0PX0D7 D6 D5 D4 D3 D2 D1 D0設(shè)置中斷優(yōu)先權(quán),字節(jié)
11、地址為B8H。 系統(tǒng)復(fù)位后IP寄存器中各位均為0,即此時(shí)全部設(shè)定為低中斷優(yōu)先級(jí)。3、 中斷優(yōu)先級(jí)控制 在同一優(yōu)先級(jí)內(nèi)有一個(gè)由內(nèi)部查詢序列確定的笫二個(gè)優(yōu)先級(jí)結(jié)構(gòu)。其排列如下: 中斷源中斷優(yōu)先級(jí)1、 外部中斷02、 定時(shí)器T0中斷3、外部中斷14、定時(shí)器T1中斷5、串行口中斷6、定時(shí)器T2中斷最高最低對(duì)發(fā)生多個(gè)中斷申請(qǐng)時(shí): 不同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng) 先高后低 相同優(yōu)先級(jí)的中斷同時(shí)申請(qǐng) 按序執(zhí)行 正處理低優(yōu)先級(jí)中斷又接到高級(jí)別中斷 高打斷低 正處理高優(yōu)先級(jí)中斷又接到低級(jí)別中斷 高不理低中斷優(yōu)先級(jí)處理原則:(P.131)中斷源提出了中斷申請(qǐng);CPU響應(yīng)中斷的條件:在現(xiàn)行指令結(jié)束后才響應(yīng)中斷;若正在執(zhí)行
12、RETI,或正在訪問(wèn)IE或IP寄存器,須執(zhí)行完上述指令,并再執(zhí)行一條指令后方能響應(yīng)中斷。中斷是開放的或者是允許的;沒(méi)有同級(jí)的中斷或更高級(jí)別的中斷正在處理; CPU 在每個(gè)機(jī)器周期的S5P2期間,會(huì)自動(dòng)查詢各個(gè)中斷申請(qǐng)標(biāo)志位,若查到某標(biāo)志位被置位,將啟動(dòng)中斷機(jī)制。CPU識(shí)別中斷申請(qǐng)的依據(jù):Tc=1/fosc Ts=6Tc Tm=12Tc =6TsTcTsTmTmS5S6S4S3S2S5S6S4S3S2S15.1.4 外部中斷中斷響應(yīng)過(guò)程1、 中斷的響應(yīng)過(guò)程:采樣并置標(biāo)志查詢標(biāo)志,轉(zhuǎn)入處理每個(gè)周期的S5P2對(duì)外部中斷采樣,并置入相應(yīng)標(biāo)志在下一個(gè)周期的S6期間按優(yōu)先級(jí)順序依次進(jìn)行中斷查詢?nèi)舨樵兊侥持?/p>
13、斷標(biāo)志為1,從相鄰的下一個(gè)機(jī)器周期的S1狀態(tài)開始進(jìn)行中斷響應(yīng)CPU執(zhí)行硬件LCALL轉(zhuǎn)向相應(yīng)中斷的特定單元,進(jìn)入中斷服務(wù)程序 CPU響應(yīng)中斷時(shí)先置“1”相應(yīng)的優(yōu)先級(jí)觸發(fā)器,然后執(zhí)行硬件LCALL(壓棧與轉(zhuǎn)移),同時(shí)清“0”中斷請(qǐng)求標(biāo)志(TI、RI除外)。 (1)關(guān)于中斷請(qǐng)求采樣: 對(duì)于外部中斷才需要對(duì)中斷請(qǐng)求信號(hào)進(jìn)行采樣,而其他中斷源由于中斷請(qǐng)求都發(fā)生在芯片內(nèi)部,可以直接置位相應(yīng)的中斷請(qǐng)求標(biāo)志位,因此不存在中斷請(qǐng)求采樣問(wèn)題。 當(dāng)外部中斷為邊沿觸發(fā)方式。CPU在每一個(gè)機(jī)器周期的S5P2期間對(duì)和引腳進(jìn)行采樣,若在連續(xù)兩個(gè)機(jī)器周期采樣到先高后低的電平變化,則認(rèn)為有中斷請(qǐng)求,將IE0或IE1置1;否則
14、認(rèn)為沒(méi)有中斷請(qǐng)求,IE0或IE1繼續(xù)為0。 當(dāng)外部中斷為電平觸發(fā)方式時(shí),CPU在每一個(gè)機(jī)器周期的S5P2期間對(duì)引腳進(jìn)行采樣。若測(cè)得為低電平,則認(rèn)為有中斷請(qǐng)求,將外部中斷請(qǐng)求標(biāo)志位IE0或IE1置1;否則,則認(rèn)為沒(méi)有中斷請(qǐng)求或中斷請(qǐng)求已撤除,將IE0或IE1清0。幾點(diǎn)說(shuō)明:(2)關(guān)于中斷查詢與響應(yīng): 中斷查詢是指CPU測(cè)試各中斷請(qǐng)求標(biāo)志位的狀態(tài),以確定有沒(méi)有中斷請(qǐng)求發(fā)生以及是哪一個(gè)中斷請(qǐng)求。 在每一個(gè)機(jī)器周期的最后一個(gè)狀態(tài)S6,按優(yōu)先級(jí)順序?qū)χ袛嗾?qǐng)求標(biāo)志位進(jìn)行查詢。如果查詢到有標(biāo)志位1,則表明有中斷請(qǐng)求發(fā)生,接著就從下一個(gè)機(jī)器周期開始進(jìn)行中斷響應(yīng)。 當(dāng)中斷請(qǐng)求被響應(yīng)時(shí),由硬件生成長(zhǎng)調(diào)用指令(LC
15、ALL),將當(dāng)前的PC值自動(dòng)壓棧保護(hù),但PSW寄存器的內(nèi)容不壓棧,然后將對(duì)應(yīng)的中斷入口地址裝入PC,程序轉(zhuǎn)向中斷服務(wù)子程序,處理被響應(yīng)的中斷。(3) 中斷服務(wù) CPU響應(yīng)中斷結(jié)束后轉(zhuǎn)入中斷服務(wù)程序的入口。從中斷服務(wù)子程序的第一條指令開始到返回指令為止,這個(gè)過(guò)程稱為中斷處理或中斷服務(wù)。 一般情況下,中斷處理包括兩部分內(nèi)容:現(xiàn)場(chǎng)保護(hù)和中斷源服務(wù)。 現(xiàn)場(chǎng)通常有PSW、通用寄存器、專用寄存器等。如果在中斷服務(wù)程序中要用這些寄存器,則在進(jìn)入中斷服務(wù)之前應(yīng)將它們的內(nèi)容保護(hù)起來(lái)稱保護(hù)現(xiàn)場(chǎng);同時(shí)在中斷結(jié)束,執(zhí)行RETI指令之前應(yīng)恢復(fù)現(xiàn)場(chǎng)。中斷源服務(wù)是針對(duì)中斷源的具體要求進(jìn)行處理。(4)中斷返回 中斷處理程序的
16、最后一條指令是中斷返回指令RETI。它的功能是將斷點(diǎn)彈出送回PC中,使程序能返回到原來(lái)被中斷的程序繼續(xù)執(zhí)行。 中斷響應(yīng)是有條件的,在接受中斷申請(qǐng)時(shí),如遇下列情況之一時(shí),硬件生成的長(zhǎng)調(diào)用指令“LCALL”將被封鎖: CPU正在執(zhí)行同級(jí)或高一級(jí)的中斷服務(wù)程序中。 查詢中斷請(qǐng)求的機(jī)器周期不是執(zhí)行當(dāng)前指令的最后一個(gè)周期。 當(dāng)前正在執(zhí)行RETI指令或執(zhí)行對(duì)IE、IP的讀寫操作指令。 MCS-51中斷系統(tǒng)規(guī)定:在當(dāng)前指令執(zhí)行完畢后,才能響應(yīng)中斷。 中斷服務(wù)程序由中斷矢量地址開始,直至遇到RETI。 執(zhí)行RETI,一是撤銷中斷申請(qǐng),彈出斷點(diǎn)地址進(jìn)入PC,先彈出高位地址,后彈出低位地址,同時(shí)堆棧指針SP減2,
17、恢復(fù)原程序的斷點(diǎn)地址執(zhí)行;二是恢復(fù)中斷觸發(fā)器原先狀態(tài)。中斷的執(zhí)行過(guò)程與調(diào)用子程序有許多相似點(diǎn): 都是中斷當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行子程序或中斷服務(wù)程序。 都是由硬件自動(dòng)地把斷點(diǎn)地址壓入堆棧,然后通過(guò)軟件完成現(xiàn)場(chǎng)保護(hù)。 執(zhí)行完子程序或中斷服務(wù)程序后,都要通過(guò)軟件完成現(xiàn)場(chǎng)恢復(fù),并通過(guò)執(zhí)行返回指令,重新返回到斷點(diǎn)處,繼續(xù)往下執(zhí)行程序。 二者都可以實(shí)現(xiàn)嵌套,如中斷嵌套和子程序嵌套。中斷的執(zhí)行與調(diào)用子程序也有一些大的差別: 中斷請(qǐng)求信號(hào)可以由外部設(shè)備發(fā)出,是隨機(jī)的;子程序調(diào)用卻是由軟件編排好的。 中斷響應(yīng)后由固定的矢量地址轉(zhuǎn)入中斷服務(wù)程序,而子程序地址由軟件設(shè)定。 中斷響應(yīng)是受控的,其響應(yīng)時(shí)間會(huì)受一些
18、因素影響;子程序響應(yīng)時(shí)間是固定的。在單級(jí)中斷系統(tǒng)中,中斷的響應(yīng)時(shí)間為38個(gè)機(jī)器周期。2、 中斷響應(yīng)時(shí)間最短:中斷請(qǐng)求標(biāo)志位查詢占1個(gè)機(jī)器周期,CPU即響應(yīng)中斷,產(chǎn)生硬件長(zhǎng)調(diào)用LCALL指令,執(zhí)行這條長(zhǎng)調(diào)用指令需要2個(gè)機(jī)器周期。最長(zhǎng):如果CPU正在執(zhí)行的是RETI指令或訪問(wèn)IP、IE指令,則等待時(shí)間不會(huì)多于2個(gè)機(jī)器周期,而中斷系統(tǒng)規(guī)定把這幾條指令執(zhí)行完必須再繼續(xù)執(zhí)行一條指令后才能響應(yīng)中斷,如這條指令恰好是4個(gè)機(jī)器周期長(zhǎng)的指令,再加上執(zhí)行長(zhǎng)調(diào)用指令LCALL所需2個(gè)機(jī)器周期,總共需要8個(gè)機(jī)器周期。 如果中斷請(qǐng)求被前面所列三個(gè)條件之一所阻止,不能產(chǎn)生硬件長(zhǎng)調(diào)用LCALL指令,那么所需的響應(yīng)時(shí)間就更長(zhǎng)
19、些。如果正在處理同級(jí)或優(yōu)先級(jí)更高的中斷,那么中斷響應(yīng)的時(shí)間還需取決于處理中的中斷服務(wù)程序的執(zhí)行時(shí)間。5.1.5 中斷處理流程 CPU響應(yīng)中斷請(qǐng)求,轉(zhuǎn)向中斷服務(wù)程序執(zhí)行,在其執(zhí)行中斷返回指令(RETI)之前,中斷請(qǐng)求信號(hào)必須撤除,否則將會(huì)再一次引起中斷而出錯(cuò)。5.1.6 中斷請(qǐng)求的撤除中斷請(qǐng)求撤除的方式有三種:1、由單片微機(jī)內(nèi)部硬件自動(dòng)復(fù)位: 對(duì)于T0、T1 的溢出中斷和采用跳變觸發(fā)方式的外部中斷請(qǐng)求,在CPU響應(yīng)中斷后,由內(nèi)部硬件自動(dòng)清除中斷標(biāo)志TF0和TF1、 IE0和IE1,而自動(dòng)撤除中斷請(qǐng)求。2、應(yīng)用軟件清除相應(yīng)標(biāo)志: 對(duì)于串行接收發(fā)送中斷請(qǐng)求,在CPU響應(yīng)中斷后,必須在中斷服務(wù)程序中應(yīng)
20、用軟件清除RI和 TI中斷標(biāo)志。3、外部中斷采用外加硬件結(jié)合軟件清除中斷請(qǐng)求: 對(duì)于采用電平觸發(fā)方式的外部中斷請(qǐng)求,中斷標(biāo)志的撤消是自動(dòng)的,但中斷請(qǐng)求信號(hào)的低電平可能繼續(xù)存在,在以后機(jī)器周期采樣時(shí)又會(huì)把已清“0”的IE0、IE1標(biāo)志重新置“1”,再次申請(qǐng)中斷。(1)硬件電路:原理:在中斷響應(yīng)后,利用直接置位端SD來(lái)撤消低電平引起的中斷請(qǐng)求。采用MCS-51的一根I/O口線來(lái)控制SD端。ANL P1,#0FEH ;Q置1(SD為直接置位端,低電平有效)ORL P1,#01H ;SD無(wú)效,準(zhǔn)備接受下一次中斷請(qǐng)求(2)軟件:5.1.7 中斷編程 中斷程序包括中斷控制程序和中斷服務(wù)程序兩部分。 MCS
21、-51共有5個(gè)中斷源,由4個(gè)特殊功能寄存器TCON、SCON、IE和IP進(jìn)行管理和控制。在MCS-51中,需要用軟件對(duì)以下5個(gè)內(nèi)容進(jìn)行設(shè)置: 中斷服務(wù)程序入口地址的設(shè)定。 某一中斷源中斷請(qǐng)求的允許與禁止。 對(duì)于外部中斷請(qǐng)求,還需進(jìn)行觸發(fā)方式的設(shè)定。 各中斷源優(yōu)先級(jí)別的設(shè)定。 CPU開中斷與關(guān)中斷。 中斷控制程序即中斷初始化程序,一般包含在主程序中,根據(jù)上述的5點(diǎn)通過(guò)編寫幾條指令來(lái)實(shí)現(xiàn)。例. 試編寫設(shè)置外部中斷INT0和串行接口中斷為高優(yōu)先級(jí),外部中斷INT1為低優(yōu)先級(jí)。屏蔽T0 和T1中斷請(qǐng)求的初始化程序段。 將中斷請(qǐng)求優(yōu)先級(jí)寄存器IP的第0、4位置“l(fā)”,其余位置“0”。將中斷請(qǐng)求允許寄存器
22、的第0、2、4、7位置“l(fā)”,其余位置“0” 。位地址AFHAEHADHACHABHAAHA9HA8H符號(hào)EA ESET1EX1ET0EX0位地址BFHBEHBDHBCHBBHBAHB9HB8H符號(hào) PSPT1PX1PT0PX0IEIP1、匯編程序:編程如下:ORG0000HSJMPMAINORG0003HLJMPINT0INT;設(shè)外部中斷/INT0中斷矢量 ORG 0013HLJMPINT1INT;設(shè)外部中斷/INT1中斷矢量ORG0023HLJMPSIOINT;設(shè)串行口中斷矢量ORG0030HMAIN:MOV IP, #00010001B ;設(shè)外部中斷INT0和 ;串行口中斷為高優(yōu)先級(jí)MO
23、V IE, #10010101B ;允許INT0、INT1、;串行口中斷,開CPU中斷中斷響應(yīng)很突出的一點(diǎn)是它的隨機(jī)性。 保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)、恢復(fù)斷點(diǎn)和現(xiàn)場(chǎng) 在中斷響應(yīng)過(guò)程中,斷點(diǎn)的保護(hù)主要由硬件電路自動(dòng)實(shí)現(xiàn)。 所謂現(xiàn)場(chǎng)是指中斷發(fā)生時(shí)單片微機(jī)中存儲(chǔ)單元、寄存器、特殊功能寄存器中的數(shù)據(jù)或標(biāo)志位等。保護(hù)的方法可以有以下幾種: 通過(guò)堆棧操作指令PUSH direct; 通過(guò)工作寄存器區(qū)的切換; 通過(guò)單片微機(jī)內(nèi)部存儲(chǔ)器單元暫存。 現(xiàn)場(chǎng)保護(hù)一定要位于中斷服務(wù)程序的前面,在中斷服務(wù)程序結(jié)束之前要恢復(fù)現(xiàn)場(chǎng),中斷服務(wù)程序的最后一條指令必須是RETI指令。 對(duì)中斷的控制 MCS-51單片機(jī)具有多級(jí)中斷功能(即多重中
24、斷嵌套),為了不至于在保護(hù)現(xiàn)場(chǎng)或恢復(fù)現(xiàn)場(chǎng)時(shí),由于CPU響應(yīng)其它中斷請(qǐng)求,而使現(xiàn)場(chǎng)破壞。一般規(guī)定,在保護(hù)和恢復(fù)現(xiàn)場(chǎng)時(shí),CPU不響應(yīng)外界的中斷請(qǐng)求,即關(guān)中斷。因此,在編寫程序時(shí),應(yīng)在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)之前,關(guān)閉CPU中斷;在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)之后,再根據(jù)需要使CPU開中斷。 對(duì)于重要中斷,不允許被其它中斷所嵌套。除了設(shè)置中斷優(yōu)先級(jí)外,還可以采用關(guān)中斷的方法,徹底屏蔽其它中斷請(qǐng)求,待中斷處理完之后再打開中斷系統(tǒng)。2、C51中斷服務(wù)函數(shù): 由于標(biāo)準(zhǔn)C沒(méi)有處理單片機(jī)中斷的定義,為直接編寫中斷服務(wù)程序,C51編譯器對(duì)函數(shù)的定義進(jìn)行了擴(kuò)展,增加了一個(gè)擴(kuò)展關(guān)鍵字interrupt,使用該關(guān)鍵字可以將一個(gè)函數(shù)定
25、義成中斷服務(wù)函數(shù)。由于C51編譯器在編譯時(shí)對(duì)聲明為中斷服務(wù)程序的函數(shù)自動(dòng)添加了相應(yīng)的現(xiàn)場(chǎng)保護(hù)、阻斷其他中斷、返回時(shí)恢復(fù)現(xiàn)場(chǎng)等處理的程序段,因而在編寫中斷服務(wù)函數(shù)時(shí)可不必考慮這些問(wèn)題,減輕了用匯編語(yǔ)言編寫中斷服務(wù)程序的繁瑣程度,而把精力放在如何處理引發(fā)中斷請(qǐng)求的事件上。函數(shù)類型 函數(shù)名(參數(shù))interrupt n using m /中斷服務(wù)程序 說(shuō)明: 1、 n是中斷源編號(hào) (可為031,04對(duì)應(yīng)著51的5個(gè)中斷, 其它值預(yù)留); 2、m是使用的寄存器組號(hào),默認(rèn)是Bank 0; 3、當(dāng)調(diào)用函數(shù)時(shí),SFR的ACC、B、DPTR、PSW自動(dòng)入棧; 4、不使用寄存器組切換,中斷所用到的寄存器自動(dòng)入棧
26、; 5、中斷返回(RETI)前,所有寄存器自動(dòng)出棧;中斷服務(wù)函數(shù)的一般形式為 :C51中斷號(hào)與中斷向量 中斷號(hào) n中 斷 源中斷向量 8n+30外部中斷 00003H1定時(shí)器 0000BH2外部中斷 10013H3定時(shí)器 1001BH4串行口0023H例、外中斷1的中斷服務(wù)函數(shù)書寫如下:void int1( ) interrupt 2 using 0/*中斷號(hào)n=2,選擇0區(qū)工作寄存器區(qū)*/ 關(guān)鍵字using和關(guān)鍵字interrupt都不允許用于外部函數(shù)。編寫AT89S51中斷程序時(shí),應(yīng)遵循以下規(guī)則:(1)中斷函數(shù)沒(méi)有返回值,如果定義了一個(gè)返回值,將會(huì)得到不正確的結(jié)果。因此建議在定義中斷函數(shù)時(shí)
27、,將其定義為void類型,以明確說(shuō)明沒(méi)有返回值。(2)中斷函數(shù)不能進(jìn)行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。 (3)在任何情況下都不能直接調(diào)用中斷函數(shù),否則會(huì)產(chǎn)生編譯錯(cuò)誤。因?yàn)橹袛嗪瘮?shù)的返回是由指令RETI完成的。RETI指令會(huì)影響51單片機(jī)中的硬件中斷系統(tǒng)內(nèi)的不可尋址的中斷優(yōu)先級(jí)寄存器的狀態(tài)。如果在沒(méi)有實(shí)際中斷請(qǐng)求的情況下,直接調(diào)用中斷函數(shù),也就不會(huì)執(zhí)行RETI指令,其操作結(jié)果有可能產(chǎn)生一個(gè)致命的錯(cuò)誤。(4)如果在中斷函數(shù)中再調(diào)用其他函數(shù),則被調(diào)用的函數(shù)所使用的寄存器區(qū)必須與中斷函數(shù)使用的寄存器區(qū)不同。例1:如圖所示,單片機(jī)上電,程序運(yùn)行后發(fā)光二極管D4點(diǎn)亮,按下P3.2
28、所接的按鍵K,D4滅掉,再按按鍵K,D4又點(diǎn)亮,循環(huán)往復(fù)。5.1.8 外部中斷舉例 ORG 0000H SJMP MAIN;上電,轉(zhuǎn)向主程序 ORG 0003H;外部中斷0入口地址 SJMP INSER;轉(zhuǎn)向中斷服務(wù)程序 ORG 0030H ;主程序MAIN: SETB EX0 ;允許外部中斷0中斷 SETB IT0 ;選擇邊沿觸發(fā)方式 SETB EA ;CPU開中斷 CLR P1.0HERE:SJMP HERE ;等待中斷 ORG 0200H ;中斷服務(wù)程序INSER:CPL P1.0 RETI ;中斷返回 END#include sbit P1_0=P10;void main( )/*主函
29、數(shù)*/EX0=1; /*外部中斷0中斷允許*/IT0=1; /*選擇外部中斷0為跳沿觸發(fā)方式*/EA=1;/*總中斷允許*/ P1_0=0; /* P1.0=0,LED亮*/ while(1);void xint0( ) interrupt 0 using 0 /外中斷0的中斷服務(wù)函數(shù) P1_0= ! P1_0; ORG 0000H SJMP MAIN ORG 0003H SJMP INSER ORG 0030HMAIN: SETB EX0 SETB IT0 SETB EA CLR P1.0HERE:SJMP HERE ORG 0200HINSER:CPL P1.0 RETI END#incl
30、ude sbit P1_0=P10;void main( )EX0=1;IT0=1; EA=1; P1_0=0; while(1);void xint0( ) interrupt 0 using 0 P1_0= ! P1_0; 例2:?jiǎn)纹瑱C(jī)上電,單燈按一定的頻率循環(huán),一旦按下P3.2所接的按鍵,發(fā)光二極管全亮,2秒鐘后,單燈繼續(xù)原來(lái)的循環(huán)。1、流水燈的源程序2、流水燈的源程序+中斷初始化程序中斷服務(wù)程序及延時(shí)子程序3、 用查詢程序?qū)崿F(xiàn)上述任務(wù)4、從INT0輸入,并采用了去抖動(dòng)電路。1、流水燈的源程序 ORG 0000H SJMP MAIN ORG 0030H ;主程序MAIN: MOV A,
31、#0FEH MOV R5, #4OUTPUT:MOV P1,A RL A LCALL Delay DJNZ R5, Output LJMP MAINDelay: MOV R6, #250 MOV R7, #200Dela: DJNZ R7, Dela DJNZ R6, DelaRETEND開始設(shè)置初始值設(shè)移位次數(shù)數(shù)據(jù)輸出左移一位延時(shí)100ms移位完 成?是否主程序框圖#include void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);main() unsigned
32、 char n; while(1) for(n=0, P1=0 xFE;n8;n+) delay(100); P1 = RL(0 xFE,n); 2、流水燈的源程序+中斷初始化程序 ORG 0000H SJMP MAIN;上電,轉(zhuǎn)向主程序 ORG 0003H;外部中斷0入口地址 AJMP INSER;轉(zhuǎn)向中斷服務(wù)程序 ORG 0030H ;主程序MAIN: SETB EX0 ;允許外部中斷0中斷 SETB IT0 ;選擇邊沿觸發(fā)方式 SETB EA ;CPU開中斷MAIN1: MOV A, #0FEH MOV R5, #8Output: MOV P1,A RL A LCALL DEL100MS
33、 DJNZ R5, Output LJMP MAIN1中斷服務(wù)程序及延時(shí)子程序 ORG 0200HINSER:PUSH P1 MOV P1, #00H ACALL DEL2S POP P1 RETIDEL2S: MOV R4, #20LLL:ACALL DEL100MSDJNZ R4, LLLRETDEL100MS:;2502002=100000MOV R6, #250Delay: MOV R7, #200Dela: DJNZ R7, Dela DJNZ R6, DelayRET ENDvoid main(void) unsigned char n; IT0=1; EA=1; EX0=1; w
34、hile(1) for(n=0, P1 = 0 xFE;n8;n+) delay(100); P1 = RL (0 xFE,n); #include void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);void INT_0(void) interrupt 0 using 0 char c; c=P1; P1=0; delay(200); P1=c;開始設(shè)置初值數(shù)據(jù)輸出左移一位延時(shí)P3.2按下?是否輸出00H延時(shí)2秒 ORG 0000H SJMP MAIN ORG 0
35、030H MAIN: MOV A, #0FEHOutput: MOV P1,A RL A LCALL Delay JB P3.2, output ;JNB IE0,OUTPUT ; CLR IE0MOV P1,#00HACALL delay2sSJMP output Delay: MOV R6, #0Dela1: MOV R7, #0Dela2: DJNZ R7, Dela2 DJNZ R6, Dela1RETDelay2s: RETEND8位的流水燈+鍵查詢流程圖3、 用查詢程序?qū)崿F(xiàn)上述任務(wù)void main(void) unsigned char n; while(1) if(!P32)
36、P1=0;delay(2000); else for(n=1, P1 =0 xFE;n8;n+) delay(100); P1 = RL(0 xFE,1); #include sbit P32=P32;void delay(int i) int j,k; for(j=0;ji;j+) for(k=0;k(8-n); b=cn; result=a|b; return(result);例3、在單片機(jī)系統(tǒng)的P1口上接有8只LED,LED的陽(yáng)極接+5V,陰極接P1口的引腳。當(dāng)P1口某一口線輸出為0時(shí),將LED點(diǎn)亮。在外部中斷0輸入腳P3.2引腳接上拉電阻并接有一只按鈕開關(guān)K1。用K1按鈕來(lái)產(chǎn)生外部中斷
37、0的輸入信號(hào)。接口電路如圖所示。 要求:將外部中斷0設(shè)為負(fù)跳沿觸發(fā)。在程序剛啟動(dòng)時(shí),P1口上的8只LED亮。按一次按鈕開關(guān)K1,使引腳P3.2接地,產(chǎn)生一個(gè)外中斷0的中斷請(qǐng)求,在中斷服務(wù)程序中,讓低4位LED和高4位LED交替閃爍。#include void Delay(unsigned int i)/* 定義延時(shí)函數(shù)Delay( ), i是形式參數(shù),不能賦初值*/ unsigned int j; for(;i 0;i-) for(j=0;j333;j+);void main( )/*主函數(shù)*/ EA=1; /*總中斷允許*/EX0=1; /*外部中斷0中斷允許*/IT0=1; /*選擇外部中
38、斷0為跳沿觸發(fā)方式*/ while(1) P1=0; /* P1口的8只LED全亮*/void int0( ) interrupt 0 using 0 /外中斷0的中斷服務(wù)函數(shù) EX0=0;/*禁止外部中斷0中斷*/P1=0 x0f;/*低4位LED滅,高4位LED亮*/Delay(800) ;/*延時(shí)800ms*/P1=0 xf0;/*高4位LED滅,低4位LED亮*/Delay(800); /*延時(shí)800ms */EX0=1; /*中斷返回前,打開外部中斷0中斷*/例4、 對(duì)下圖要求每中斷一次,發(fā)光二極管顯示開關(guān)狀態(tài)#include int0( ) interrupt 0 /*INT0中斷
39、函數(shù)*/ P1=0 x0f; /*輸入端先置1,燈滅*/ P1=4; /* 讀入開關(guān)狀態(tài),并左移四位, 使開關(guān)反映在發(fā)光二極管上*/ main() EA=1; /*開中斷總開關(guān)*/ EX0=1; /*允許INT0中斷*/ IT0=1; /*下降沿產(chǎn)生中斷*/ while(1); /*等待中斷*/ 例5、 記錄并顯示中斷次數(shù)用C語(yǔ)言編程。方法1:在主程序中判斷中斷次數(shù),程序如下:#include char i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F,0 x66,0 x6d, 0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39
40、,0 x5e,0 x79,0 x71;xint1( ) interrupt 2 i+; /*計(jì)中斷次數(shù)*/ main() EA=1; EX1=1; IT1=1; i=0;while(1) if(i16) P1=tabi; /*查表,次數(shù)送顯示*/ else i=0; 方法2:在中斷程序中判斷中斷次數(shù):#include char i;code char tab16=0 x3f,0 x06,0 x5b,0 x4F,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;xint1( ) interrupt 2
41、 i+; if(i15) i=0;main() EA=1; EX1=1; IT1=1; P1=0 x3f; while(1) P1=tabi; /*顯示并等待中斷*/ ORG 0100HINTP:JB F0, FS CLR P1.0 ;F0=0,關(guān)水 CPL F0 RETIFS: SETB P1.0 ;F0=1,放水 CPL F0 RETIENDORG 0003HSJMP MAINORG 0003HLJMP INTPORG 0040HMAIN:CLR P1.0CLR IT0 ;低電平觸發(fā)SETB PX0 ;高優(yōu)先級(jí) SETB EA ;開總中斷SETB EX0 ;開INT0中斷SETB F0主程
42、序例6、水塔問(wèn)題:例7:分析下圖電路及其程序,指出其功能。P1.0P1.7INT1300 ORG 0000H LJMP MAIN ORG 0013H ;中斷矢量 LJMP INTMAIN:SETB EA ;開總中斷允許“開關(guān)” SETB EX1 ;開分中斷允許“開關(guān)” CLR PX1 ;0 優(yōu)先級(jí)(也可不要此句) SETB IT1 ;邊沿觸發(fā) MOV B,#01H ;給 B 寄存器賦初值HERE:SJMP HERE ;原地等待中斷申請(qǐng)INT:MOV A,B ;自B寄存器中取數(shù) RL A ;左環(huán)移一次 MOV B,A ;存回B,備下次取用 MOV P1,A ;輸出到P1口 RETI ;中斷返回中
43、斷服 務(wù)程序功能:通過(guò)外部中斷1,每按一下按鈕就申請(qǐng)一次中斷,中斷服務(wù)則是:依次點(diǎn)亮八盞燈中的一盞。 例8、交通燈控制: (1)要求:以P0作為輸出口,控制4個(gè)雙色LED燈(可發(fā)紅,綠,黃光),模擬交通燈管理。 (2)電路及連線1、96H DR4 DR3 DR2 DR1 DG4 DG3 DG2 DG1 1 0 0 1 0 1 1 0 HL4、HL1 綠 (南北) HL3、HL2 紅 (東西)2、69H 0 1 1 0 1 0 0 1 HL4、HL1 紅 (南北) HL3、HL2 綠 (東西)3、9FH 1 0 0 1 1 1 1 1 HL4、HL1 暗 (南北) HL3、HL2 紅 (東西)
44、6FH 0 1 1 0 1 1 1 1 HL4、HL1 紅 (南北) HL3、HL2 暗 (東西)0FH 全紅F0H 全綠00H 全黃4、06H 0 0 0 0 0 1 1 0 HL4、HL1 黃 (南北) HL3、HL2 紅 (東西) 09H 0 0 0 0 1 0 0 1 HL4、HL1 紅 (南北) HL3、HL2 黃 (東西)ORG 0000H LJMP START ORG 0040HSTART: MOV SP,#60H LCALL STATUS0 ;初始狀態(tài)(都是紅燈)CIRCLE: LCALL STATUS1 ;南北綠燈,東西紅燈 LCALL STATUS2 ;南北綠燈閃轉(zhuǎn)黃燈,東
45、西紅燈 LCALL STATUS3 ;南北紅燈,東西綠燈 LCALL STATUS4 ;南北紅燈,東西綠燈閃轉(zhuǎn)黃燈 LJMP CIRCLESTATUS0: ;南北紅燈,東西紅燈 MOV A,#0FH MOV P0,A MOV R2,#10 ;延時(shí)1秒 LCALL DELAY RETSTATUS1: ;南北綠燈,東西紅燈MOV A,#96H ;南北綠燈,東西紅燈 MOV P0,A MOV R2,#200 ;延時(shí)20秒 LCALL DELAY RETSTATUS2: ;南北綠燈閃轉(zhuǎn)黃燈,東西紅燈MOV R3,#03H ;綠燈閃3次FLASH: MOV A,#9FH MOV P0,A MOV R2,
46、#03H LCALL DELAY MOV A,#96H MOV P0,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH MOV A,#06H ;南北黃燈,東西紅燈 MOV P0,A MOV R2,#10 ;延時(shí)1秒 LCALL DELAY RETSTATUS3: ;南北紅燈,東西綠燈 MOV A,#69H MOV P0,A MOV R2,#200 ;延時(shí)20秒 LCALL DELAY RETSTATUS4: ;南北紅燈,東西綠燈閃轉(zhuǎn)黃燈 MOV R3,#03H ;綠燈閃3次FLASH1: MOV A,#6FH MOV P0,A MOV R2,#03H LCALL
47、DELAY MOV A,#69H MOV P0,A MOV R2,#03H LCALL DELAY DJNZ R3,FLASH1 MOV A,#09H ;南北紅燈,東西黃燈 MOV P0,A MOV R2,#10 ;延時(shí)1秒 LCALL DELAYNOP RETDELAY: ;延時(shí)子程序 PUSH 2 PUSH 1 PUSH 0DELAY1: MOV 1,#00HDELAY2: MOV 0,#0B2H DJNZ 0,$ DJNZ 1,DELAY2 ;延時(shí) 100 mS DJNZ 2,DELAY1 POP 0 POP 1 POP 2 RET END例9、外部中斷實(shí)驗(yàn)(急救車與交通燈) (1)要求
48、:有急救車到達(dá)時(shí),兩向交通信號(hào)全紅,以便讓急救車通過(guò)。假定急救車通過(guò)路口時(shí)間為10秒,急救車通過(guò)后,交通燈恢復(fù)中斷前狀態(tài)。本實(shí)驗(yàn)以按鍵為中斷申請(qǐng),表示有急救車通過(guò) (2)PO0PO3接DG1DG4,PO4PO7接DR1DR4,K8接P3.2。 TRLED2.ASM ORG 0000H LJMP START ORG 0003H ;INT 0 中斷入口地址 LJMP INT0 ORG 0040HSTART: MOV SP,#60H SETB EX0 ;INT 0 中斷有效 SETB IT0 SETB EA LCALL STATUS0 ;初始狀態(tài)(都是紅燈)CIRCLE: LCALL STATUS1
49、 ;南北綠燈,東西紅燈 LCALL STATUS2 ;南北綠燈閃轉(zhuǎn)黃燈,東西紅燈 LCALL STATUS3 ;南北紅燈,東西綠燈 LCALL STATUS4 ;南北紅燈,東西綠燈閃轉(zhuǎn)黃燈 LJMP CIRCLEINT0: PUSH PSW ;保護(hù)現(xiàn)場(chǎng) PUSH 2 PUSH ACCMOV DPTR,#8300H MOV A,#0FH ;南北,東西都亮紅燈 MOVX DPTR,A MOV R2,#100 ;延時(shí)10秒 LCALL DELAY POP ACC ;恢復(fù)現(xiàn)場(chǎng) MOVX DPTR,A POP 2 POP PSW RETI因此,中斷服務(wù)程序應(yīng)做的工作: (1)關(guān)中斷(硬件自動(dòng)實(shí)現(xiàn)) (2
50、)保留斷點(diǎn)(硬件自動(dòng)實(shí)現(xiàn)) (3)保護(hù)現(xiàn)場(chǎng)(軟件完成) (4)中斷服務(wù)程序(軟件完成) (5)恢復(fù)現(xiàn)場(chǎng)(軟件完成) (6)開中斷與返回(由RETI指令實(shí)現(xiàn)) 在單片微機(jī)應(yīng)用系統(tǒng)中,常常會(huì)需要定時(shí)或計(jì)數(shù),通常采用以下三種方法來(lái)實(shí)現(xiàn):5.2 MCS-51單片機(jī)定時(shí)器/計(jì)數(shù)器特點(diǎn):可以通過(guò)軟件編程來(lái)實(shí)現(xiàn)定時(shí)時(shí)間的改變,通過(guò)中斷或查詢方法來(lái)完成定時(shí)功能或計(jì)數(shù)功能。1、利用軟件實(shí)現(xiàn)(延時(shí)程序): 優(yōu)點(diǎn):簡(jiǎn)單,控制方便;缺點(diǎn):CPU效率低。2、硬件實(shí)現(xiàn),專門設(shè)計(jì)一個(gè)單穩(wěn)態(tài)定時(shí)器: 優(yōu)點(diǎn):CPU效率高;缺點(diǎn):修改參數(shù)麻煩。3、利用計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)器溢出預(yù)置數(shù)輸入脈沖1us8位256us5.2.1定時(shí)器/計(jì)數(shù)器
51、的功能 定時(shí)功能和計(jì)數(shù)功能的設(shè)定和控制都是通過(guò)軟件來(lái)設(shè)定的,有關(guān)的特殊功能寄存器: TCON 和 TMOD。外來(lái)脈沖T0機(jī)器周期片內(nèi)計(jì)數(shù)器單片機(jī)計(jì)數(shù)器:對(duì)外來(lái)脈沖進(jìn)行計(jì)數(shù) T0、T1 引腳上從1到0的跳變時(shí),計(jì)數(shù)器內(nèi)容加1。 定時(shí)器:對(duì)機(jī)器周期計(jì)數(shù) 每過(guò)一個(gè)機(jī)器周期,計(jì)數(shù)器內(nèi)容加1 ;T0、T1 的內(nèi)部結(jié)構(gòu)簡(jiǎn)圖示: 計(jì)數(shù)器TH0 、TL0和TH1、TL1; 特殊功能寄存器TMOD、TCON; 時(shí)鐘分頻器; 輸入引腳T0、T1。MCS-51包含有兩個(gè)16位的定時(shí)器計(jì)數(shù)器:T0和T1;1、定時(shí)器計(jì)數(shù)器T0、T1 的控制寄存器TCON: 位地址8FH8EH8DH8CH8BH8AH89H88H符號(hào)TF
52、1 TR1TF0 TR0IE1IT1IE0IT05.2.2 定時(shí)器/計(jì)數(shù)器的控制寄存器字節(jié)地址為88H,位尋址的地址為88H8FH。 (1) TF0、TF1:定時(shí)器溢出中斷標(biāo)志 =1 計(jì)數(shù)溢出;=0 計(jì)數(shù)未滿; 用于申請(qǐng)中斷或供CPU查詢。 進(jìn)入中斷服務(wù)程序時(shí)自動(dòng)清零;查詢方式時(shí)必須軟件清零(2) TR0、TR1:運(yùn)行控制位。 =1 啟動(dòng)計(jì)數(shù); =0 停止計(jì)數(shù)2. T0、T1 的方式寄存器TMOD字節(jié)地址為89H。M1C/TD7D6 D5 D4D3 D2 D1 D0M0GATEM0M1C/TGATET1T0(1)GATE門控位:GATE =0 普通用法: 僅由TR0和TR1置位來(lái)啟動(dòng)定時(shí)器T0
53、和T1。GATE =1 門控用法: 由外部中斷引腳INTx 和TRx共同來(lái)啟動(dòng)定時(shí)器。 當(dāng)外部中斷引腳INTx=1時(shí),TRx置位啟動(dòng)定時(shí)器。(2)C/T:定時(shí)器/計(jì)數(shù)器選擇: “1”:計(jì)數(shù)器 “0”:定時(shí)器(3)M1、M0工作方式選擇位:0 0:方式0 13位定時(shí)器/計(jì)數(shù)器0 1:方式1 16定時(shí)器/計(jì)數(shù)器1 0:方式2 8位自動(dòng)重裝定時(shí)器/計(jì)數(shù)器1 1:方式3 定時(shí)器0分為兩個(gè)8位計(jì)數(shù)器TL0和TH0,定時(shí)器1停止計(jì)數(shù)(T1可工作于方式0、1、2)3、 T0、T1 的數(shù)據(jù)寄存器: 由TH1(地址為8DH)、TL1(地址為8BH)和TH0(地址為8CH)、TL0(地址為8AH)寄存器所組成。4
54、、定時(shí)器/計(jì)數(shù)器中斷: 中斷允許寄存器IE: EA位-中斷允許總控制位 ET0位、ET1位、ET2位(IE.5) - T0、T1和T2的中斷允許控制位。 中斷矢量:定時(shí)器T0:000BH定時(shí)器T1:001BH定時(shí)器T2:002BH 中斷優(yōu)先級(jí)寄存器IP: PT0位、PT1位、PT2位(IP.5) -T0、T1和T2中斷優(yōu)先級(jí)控制位。 T0可選擇四種不同的工作方式,而T1只具有三種工作方式(即方式0、方式1和方式2)。5.2.3 定時(shí)器計(jì)數(shù)器T0、T1 的工作方式1、方式0:13位定時(shí)器/計(jì)數(shù)器 計(jì)數(shù)溢出時(shí),TFx置位。如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件自動(dòng)清0。 TFx
55、也可以由程序查詢和清零。振蕩器12TLx THx (5位) (8位)TFx申請(qǐng)中斷Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1開關(guān)接通或門與門 方式0的計(jì)數(shù)器是13位結(jié)構(gòu),因而在完成計(jì)數(shù)功能時(shí),其計(jì)數(shù)范圍為18192(213)。由于進(jìn)行加1計(jì)算,并在計(jì)數(shù)器計(jì)滿溢出時(shí)將溢出中斷標(biāo)志TF0(TF1)置位,此時(shí)計(jì)數(shù)完成,所以計(jì)數(shù)初值計(jì)算為: 計(jì)數(shù)初值=213-N其中N為要求的計(jì)數(shù)值。 在完成定時(shí)功能時(shí),計(jì)數(shù)器對(duì)機(jī)器周期數(shù)進(jìn)行加1計(jì)算,因此其定時(shí)時(shí)間的計(jì)算公式為: (213計(jì)數(shù)初值)機(jī)器周期 或 (213計(jì)數(shù)初值)振蕩周期12例1 現(xiàn)用T0作計(jì)數(shù)器,計(jì)算從引腳T0輸入的脈沖個(gè)數(shù)
56、,當(dāng)計(jì)數(shù)值N為5000時(shí)結(jié)束,計(jì)算TH0、TL0的初值。計(jì)數(shù)初值=8192-5000=3192=0 1100 0111 1000B 所以 (TH0)=63H (TL0)=18H例2.設(shè)單片機(jī)晶振頻率fosc=6MHz,選用定時(shí)器1以方式0產(chǎn)生周期為1ms的方波,并由P1.0輸出。 計(jì)算計(jì)數(shù)初值: 欲產(chǎn)生周期為1ms寬的方波,只需在P1.0端以500s為周期交替輸出高低電平即可實(shí)現(xiàn),為此定時(shí)時(shí)間應(yīng)為500s。使用6MHz晶振,則每個(gè)機(jī)器周期為2s。設(shè)待求的計(jì)數(shù)初值為X,則: (213-X)210-6=50010-6 求解得:X=7942=1 1111 0000 0110B轉(zhuǎn)換為十六進(jìn)制,高8位為
57、F8H,即(TH1)=F8H。低5位為06H,因TL1的高3位未用,應(yīng)填0,故(TL1)=06H。 TMOD寄存器的初始化: 為把定時(shí)器1設(shè)定為方式0,則M1M0=00;為實(shí)現(xiàn)定時(shí)功能,應(yīng)使C/T=0;為實(shí)現(xiàn)定時(shí)器的運(yùn)行控制,則GATE=0。定時(shí)器0不用,有關(guān)位設(shè)定為0。因此(TMOD)=00H。 由定時(shí)器控制寄存器TCON中的TR1位控制定時(shí)的啟動(dòng)和停止,TR1=1啟動(dòng),TR1=0停止。程序設(shè)計(jì)1:ORG0000HAJMPMAINORG001BHAJMPIN1PORG0100HMAIN:MOVTMOD,#00H;設(shè)置T1工作方式MOVTH1,#0F8H ;設(shè)置計(jì)數(shù)初值MOVTL1,#06H
58、;MOVIE,#88H;允許中斷SETBTR1;啟動(dòng)定時(shí)SJMP$;等待中斷中斷服務(wù)程序:IN1P:MOVTH1,#0F8H;重新設(shè)置計(jì)數(shù)初值MOVTL1,#06H;CPLP1.0;輸出取反RETI;中斷返回程序設(shè)計(jì)2:ORG0100HMOVTMOD,#00H ;設(shè)置T1工作方式MOVTH1,#0F8H ;設(shè)置計(jì)數(shù)初值MOVTL1,#06H ;MOVIE,#00H ;禁止中斷SETBTR1;啟動(dòng)定時(shí)LOOP:JBCTF1,LOOP1;查詢計(jì)數(shù)溢出;并對(duì)溢出標(biāo)志位清0AJMPLOOPLOOP1:MOVTH1,#0F8H;重新設(shè)置計(jì)數(shù)初值MOVTL1,#06H;CPLP1.0;輸出取反AJMPLO
59、OP;重復(fù)循環(huán)#include reg51.hsbit P1_0=P10;timer1() interrupt 3 using 1 /* T1中斷服務(wù)程序 */ P1_0=! P1_0; /* 100ms到P1.0反相*/ TH1=0 xF8; /* 重載計(jì)數(shù)初值 */ TL1=6; main () TMOD=0; /*設(shè)置T1工作方式*/ TH1=0 xF8; /* 預(yù)置計(jì)數(shù)初值 */ TL1=6; IE=0 x88; /* 開中斷 */ TR1=1; /* 啟動(dòng)計(jì)數(shù)器 */ while(1); /* 等待中斷 */ 2、方式1:16位定時(shí)器/計(jì)數(shù)器 計(jì)數(shù)時(shí),TLx溢出后向THx進(jìn)位,THx
60、溢出后將TFx置位,如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件自動(dòng)清TFx。TFx也可以由程序查詢和清零。振蕩器12TLx THx (8位) (8位)TFx申請(qǐng)中斷Tx端TRx位GATE位INTx端1&C/T=0C/T=1控制 =1開關(guān)接通或門與門例3 用定時(shí)器1以方式1產(chǎn)生頻率為50Hz的方波,由P1.0輸出。以中斷方式完成。設(shè)單片機(jī)晶振頻率fosc=12MHz。 計(jì)算計(jì)數(shù)初值方波周期T=1/50=0.02s=20 ms,只要每隔10 ms P1.0引腳輸出取反一次。因此定時(shí)時(shí)間為10 ms,計(jì)算計(jì)數(shù)初值X:(216-X)110-6=1010-3 求解得:X=55536=D8
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025民間個(gè)人向個(gè)人借款合同
- 2025年度知識(shí)產(chǎn)權(quán)保密協(xié)議范本(含研發(fā)成果)3篇
- 二零二五年度科技園區(qū)銀行貸款擔(dān)保協(xié)議2篇
- 2025年度農(nóng)村自建房合同協(xié)議書(含空氣源熱泵安裝)
- 二零二五年度農(nóng)業(yè)現(xiàn)代化農(nóng)村土地承包經(jīng)營(yíng)權(quán)租賃協(xié)議
- 二零二五年度特種設(shè)備制造許可證轉(zhuǎn)讓合同3篇
- 2025年度飼料行業(yè)人才培養(yǎng)合作協(xié)議詳盡版3篇
- 二零二五年度XX教育機(jī)構(gòu)收取管理費(fèi)服務(wù)協(xié)議3篇
- 2025年二零二五企業(yè)研發(fā)基地場(chǎng)地租賃合作協(xié)議3篇
- 2025年度碼頭租賃及集裝箱裝卸業(yè)務(wù)一體化合作協(xié)議3篇
- 項(xiàng)目駐場(chǎng)服務(wù)合同協(xié)議書
- 終止合同告知函 委婉
- 11SG102-3 鋼吊車梁系統(tǒng)設(shè)計(jì)圖平面表示方法和構(gòu)造詳圖
- DL∕T 1901-2018 水電站大壩運(yùn)行安全應(yīng)急預(yù)案編制導(dǎo)則
- 三年級(jí)上冊(cè)100道口算練習(xí)題(各類齊全)
- 電動(dòng)叉車充電區(qū)安全規(guī)程
- 全球與中國(guó)電動(dòng)旋轉(zhuǎn)夾爪市場(chǎng)格局分析及前景深度研究報(bào)告2024-2030年
- 宋代學(xué)者邵康節(jié)名著《漁樵問(wèn)答》譯文
- 社會(huì)工作行政復(fù)習(xí)題
- 廣東省初級(jí)中學(xué)學(xué)生學(xué)籍表
- 體育特長(zhǎng)生足球?qū)m?xiàng)測(cè)試表
評(píng)論
0/150
提交評(píng)論