單片機原理及接口技術(shù)課件:MCS-51單片機定時器、中斷系統(tǒng)及串行口_第1頁
單片機原理及接口技術(shù)課件:MCS-51單片機定時器、中斷系統(tǒng)及串行口_第2頁
單片機原理及接口技術(shù)課件:MCS-51單片機定時器、中斷系統(tǒng)及串行口_第3頁
單片機原理及接口技術(shù)課件:MCS-51單片機定時器、中斷系統(tǒng)及串行口_第4頁
單片機原理及接口技術(shù)課件:MCS-51單片機定時器、中斷系統(tǒng)及串行口_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

MCS-51單片機定時器、中斷系統(tǒng)及串行口單片機原理及接口技術(shù)單片機原理及接口技術(shù)目錄5.1MCS-51單片機的定時/計數(shù)器5.2MCS-51單片機的中斷系統(tǒng)5.3MCS-51單片機的串行接口單片機原理及接口技術(shù)5.1MCS-51單片機的定時/計數(shù)器5.1.1定時/計數(shù)器的結(jié)構(gòu)

MCS-51單片機內(nèi)部有兩個16位的可編程定時/計數(shù)器T0和T1??梢酝ㄟ^編程選擇是工作在定時模式,還是計數(shù)模式,并且在每一種工作模式之下都有4種工作方式。定時/計數(shù)器的邏輯結(jié)構(gòu)如圖5-1所示。

定時/計數(shù)器的核心是16位的加1計數(shù)器,在圖中用特殊功能寄存器TH0、TL0和TH1、TL1表示。TH0、TL0是T0加1計數(shù)器的高8位和低8位,TH1、TL1是T1加1計數(shù)器的高8位和低8位。

單片機原理及接口技術(shù)圖5-1MCS-51單片機的定時/計數(shù)器邏輯結(jié)構(gòu)圖單片機原理及接口技術(shù)

在作定時器使用時,16位加1計數(shù)器對單片機內(nèi)部的機器周期進行計數(shù),即每個機器周期產(chǎn)生1個計數(shù)脈沖,也就是每經(jīng)過一個機器周期的時間定時器加1,直至16位的計數(shù)器計滿溢出,此時可以向CPU發(fā)出中斷請求。定時器的定時時間與單片機的振蕩頻率密切相關(guān),MCS-51單片機的一個機器周期包含了12個振蕩周期,若晶振頻率為12MHz,則計數(shù)頻率為1MHz,即定時器每計一次數(shù)所需要的時間為1μs。適當選擇定時器的初值可獲得各種不同的定時時間。

單片機原理及接口技術(shù)

在作計數(shù)器使用時,16位加1計數(shù)器對單片機引腳P3.4、P3.5上輸入的脈沖計數(shù)。外部輸入的脈沖在負跳變時有效,計數(shù)器執(zhí)行加1操作。也就是說,在每個機器周期的S5P2節(jié)拍采樣外部輸入,當采樣值在這個機器周期為高,在下一個機器周期為低時,計數(shù)器加1。由此可見,識別一個從1到0的負跳變需要兩個機器周期,所以計數(shù)器的最高計數(shù)頻率為晶振頻率的1/24。同樣,計數(shù)器的初值可以程序設(shè)定,設(shè)置的初值不同,計數(shù)值也就不同。此外,無論是工作在定時模式還是計數(shù)模式,計數(shù)器對內(nèi)部時鐘或外部脈沖計數(shù)時都不會占用CPU工作時間,只有產(chǎn)生溢出時才會中斷CPU當前操作。

單片機原理及接口技術(shù)

MCS-51單片機對內(nèi)部定時/計數(shù)器的控制是通過特殊功能寄存器TMOD和TCON實現(xiàn)的。TMOD用于控制T0和T1的功能和工作方式;TCON用于控制T0和T1的啟動和停止計數(shù),同時也包含了二者的狀態(tài)。下面簡要介紹一下這兩個控制寄存器的格式。1.定時器方式寄存器TMOD定時器方式寄存器TMOD是一個8位寄存器,字節(jié)地址為89H,不可位尋址。它主要用于控制定時/計數(shù)器的工作方式,其中低4位用于控制T0,高4位用于控制T1。其格式如圖5-2所示。圖5-2TMOD寄存器的格式單片機原理及接口技術(shù)

GATE:門控制位。用于確定外部中斷請求引腳(/INT0,/INT1)是否參與T0或T1的操作控制。當GATE被設(shè)置為“0”時,只要定時器控制寄存器TCON中的TR0(或TR1)置“1”就可以控制T0(或T1)的啟/停計數(shù),這種控制方式通常稱為內(nèi)部控制;當GATE被設(shè)置為“1”時,定時器同時受TR0(或TR1)控制位和/INT0(或/INT1)引腳的控制,TR0(或TR1)只有在/INT0(或/INT1)引腳為高電平的條件下,才能對定時器的啟/停計數(shù)進行控制,這種控制方式通常稱為外部控制。

C//T:定時模式或計數(shù)模式選擇位。當C//T=0時,定時/計數(shù)器為定時模式,計數(shù)的脈沖是內(nèi)部脈沖,其周期等于機器周期;當C//T=1時,定時/計數(shù)器為計數(shù)模式,計數(shù)脈沖從P3.4或P3.5引腳輸入。單片機原理及接口技術(shù)M1和M0:定時/計數(shù)器工作方式選擇位。其值與工作方式的對應(yīng)關(guān)系如表5-1所示。表5-1定時/計數(shù)器工作方式選擇單片機原理及接口技術(shù)2.定時器控制寄存器TCON

定時器控制寄存器TCON也是一個8位寄存器,字節(jié)地址為88H,可進行位尋址。它主要用于控制定時/計數(shù)器的啟/停,以及表明定時器的溢出和中斷情況。TCON的低4位與外部中斷有關(guān),將在后面的內(nèi)容中介紹,這里只對高4位字段進行說明。其格式如圖5-3所示。圖5-3TCON寄存器格式單片機原理及接口技術(shù)

TF1:定時器T1的溢出中斷標志位。當定時器從初值開始遞增計數(shù)至計滿溢出時,由內(nèi)部硬件置位,并向CPU發(fā)出中斷請求。當CPU響應(yīng)中斷后,TF1由硬件自動清零。當工作在查詢方式時,TF1也可以用作狀態(tài)查詢位使用,但在查詢有效后,必須用軟件將TF1復(fù)位。

TR1:定時器T1的運行控制位。由軟件置位/復(fù)位來控制定時器T1的開啟/關(guān)閉。

TF0:定時器T0的溢出中斷標志位。功能類同TF1。

TR0:定時器T0的運行控制位。功能類同TR1。單片機原理及接口技術(shù)

通過編程設(shè)置寄存器TMOD中的控制位C/T,可以選擇定時或計數(shù)模式。同時,M1和M0的不同取值可以控制定時/計數(shù)器工作于不同的工作方式?,F(xiàn)以定時/計數(shù)器T0為例加以說明。1.方式0當M1和M0為00時,定時器選定為方式0工作。此時,16位的寄存器只用了13位,由TL0的低5位和TH0的高8位組成了一個13位的計數(shù)器,TL0的高3位未用。設(shè)計這種工作方式主要是為了它與MCS-48單片機定時/計數(shù)器兼容。定時器T0在方式0下的邏輯結(jié)構(gòu)如圖5-4所示。圖5-4方式0下定時器T0的邏輯電路結(jié)構(gòu)單片機原理及接口技術(shù)

從圖中可以看出,當C//T=0時,多路開關(guān)接通振蕩器的12分頻信號,定時器T0工作在定時模式,13位計數(shù)器對輸入的時鐘信號進行計數(shù);當C//T=1時,多路開關(guān)接通外部計數(shù)脈沖輸入端,定時器工作在計數(shù)模式,13位計數(shù)器在輸入的計數(shù)脈沖的負邊沿時加1計數(shù)。在方式0下,無論定時器T0是工作在定時模式還是計數(shù)模式,在TL0的低5位計滿溢出時向TH0進位,TH0計滿溢出時中斷標志位TF0置位,同時TH0和TL0變?yōu)槿?。在門控信號GATE為低電平時,與門是打開的,此時定時器T0是否工作取決于TR0的狀態(tài)。當TR0=1時,控制開關(guān)接通,定時器開始工作;當TR0=0時,控制開關(guān)斷開,定時器停止工作。在門控信號GATE為高電平時,控制開關(guān)除受控于TR0外,還受控于引腳INT0的狀態(tài)。在TR0=1的前提下,若INT0=1,定時器T0工作;若INT0=0,定時器T0停止工作。這種情況通常用于測量INT0引腳上輸入的正脈沖的寬度。單片機原理及接口技術(shù)

2.方式1當M1和M0為01時,定時器選定為方式1工作。由TL0的低8位和TH0的高8位組成了一個16位的計數(shù)器。定時器T0在方式1下的邏輯電路結(jié)構(gòu)和控制與方式0基本相同,區(qū)別只是在于計數(shù)器的位數(shù)不同,方式0為13位計數(shù)器結(jié)構(gòu),而方式1為16位計數(shù)器結(jié)構(gòu)。定時器T0在方式1下的邏輯結(jié)構(gòu)如圖5-5所示。圖5-5方式1下定時器T0的邏輯電路結(jié)構(gòu)單片機原理及接口技術(shù)3.方式2

當M1和M0為10時,定時器選定為方式2工作。在方式0和方式1下,定時器在計滿回零時需要通過軟件重裝初值,這在循環(huán)定時或計數(shù)時會給程序設(shè)計帶來不便。方式2的設(shè)置就解決了這一問題,此時定時/計數(shù)器具有自動重裝初值的功能,如圖5-6所示。圖5-6方式2下定時器T0的邏輯電路結(jié)構(gòu)單片機原理及接口技術(shù)

在作定時器使用時,16位加1計數(shù)器對單片機內(nèi)部的機器周期進行計數(shù),即每個機器周期產(chǎn)生1個計數(shù)脈沖,也就是每經(jīng)過一個機器周期的時間定時器加1,直至16位的計數(shù)器計滿溢出,此時可以向CPU發(fā)出中斷請求。定時器的定時時間與單片機的振蕩頻率密切相關(guān),MCS-51單片機的一個機器周期包含了12個振蕩周期,若晶振頻率為12MHz,則計數(shù)頻率為1MHz,即定時器每計一次數(shù)所需要的時間為1μs。適當選擇定時器的初值可獲得各種不同的定時時間。

單片機原理及接口技術(shù)

在作計數(shù)器使用時,16位加1計數(shù)器對單片機引腳P3.4、P3.5上輸入的脈沖計數(shù)。外部輸入的脈沖在負跳變時有效,計數(shù)器執(zhí)行加1操作。也就是說,在每個機器周期的S5P2節(jié)拍采樣外部輸入,當采樣值在這個機器周期為高,在下一個機器周期為低時,計數(shù)器加1。由此可見,識別一個從1到0的負跳變需要兩個機器周期,所以計數(shù)器的最高計數(shù)頻率為晶振頻率的1/24。同樣,計數(shù)器的初值可以程序設(shè)定,設(shè)置的初值不同,計數(shù)值也就不同。此外,無論是工作在定時模式還是計數(shù)模式,計數(shù)器對內(nèi)部時鐘或外部脈沖計數(shù)時都不會占用CPU工作時間,只有產(chǎn)生溢出時才會中斷CPU當前操作。

單片機原理及接口技術(shù)

從圖中可以看出,定時器T0被拆成一個8位計數(shù)器TL0和一個8位的常數(shù)寄存器TH0。在初始化時,通過軟件編程給TL0和TH0送相同的8位計數(shù)初值。當定時/計數(shù)器啟動后,TL0按8位加1計數(shù)器計數(shù)。當其溢出時,在置位溢出標志位TF0的同時,還自動從TH0中重新獲得計數(shù)初值并啟動計數(shù),TH0的內(nèi)容重新裝載后其值不變。當定時器作串口波特率發(fā)生器時,常選用工作方式2。單片機原理及接口技術(shù)4.方式3當M1和M0為11時,定時器選定為方式3工作。在方式3下,T0和T1的功能是不相同的。此時,T0中的TL0和TH0按兩個互相獨立的8位計數(shù)器工作,T1可以設(shè)置為方式0、方式1或方式2,但不能工作于方式3。定時器T0在方式3下的邏輯結(jié)構(gòu)如圖5-7所示。圖5-7方式3下定時器T0的邏輯電路結(jié)構(gòu)單片機原理及接口技術(shù)

在方式3下TL0和TH0是有區(qū)別的,TL0既可以設(shè)定為定時方式,也可以設(shè)定為計數(shù)方式工作,并且仍由TR0控制啟/停以及采用TF0作為溢出中斷標志,相應(yīng)的引腳信號也歸它使用;而TH0只能設(shè)定為定時方式,對機器周期計數(shù),它借用了TR1和TF1控制啟/停以及存放溢出中斷標志,故這時TH0占用了定時器1的中斷。因為控制位已經(jīng)被TH0占用,在這種情況下,定時器T1一般用作串行口的波特率發(fā)生器或不需要中斷控制的場合。單片機原理及接口技術(shù)5.1.4定時/計數(shù)器的初始化

1.初始化編程定時/計數(shù)器的功能是由軟件編程設(shè)定的,因此在使用定時/計數(shù)器之前,必須對它進行初始化編程。一般步驟如下:

1)確定工作方式,對TMOD寄存器寫入控制字;

2)根據(jù)定時時間或計數(shù)要求,計算出定時或計數(shù)初值,并裝入定時/計數(shù)器初值寄存器;

3)根據(jù)需要設(shè)置中斷允許寄存器IE和優(yōu)先級寄存器IP,以開放中斷和設(shè)定中斷優(yōu)先級;

4)給定時器控制寄存器TCON設(shè)置命令字,以啟動或禁止定時/計數(shù)器運行。

單片機原理及接口技術(shù)

2.定時初值的計算在定時器模式下,計數(shù)器是對單片機的振蕩頻率經(jīng)12分頻后的信號進行計數(shù)(1個機器周期)。因此,定時器的定時初值計算公式為

TC=M-T/TM其中,TC為定時器的定時初值;M為定時器模值,該值與定時器的工作方式有關(guān),在方式0時M為213,在方式1時M為216,在方式2和方式3時M為28;T為定時時間;TM為單片機的機器周期,其大小為12/fosc。單片機原理及接口技術(shù)

從定時初值計算公式可以看出,若設(shè)TC=0,則定時器的定時時間最大。由于M的值與定時器的工作方式有關(guān),因此在不同工作方式之下定時器的最大定時時間也是不同的。假設(shè)單片機的主頻fosc=12MHz,則不同工作方式下的最大定時時間為

方式0Tmax=213×1μs=8.192ms

方式1Tmax=216×1μs=65.536ms

方式2和3Tmax=28×1μs=0.256ms

3.計數(shù)初值的計算

相對于定時初值的計算,計數(shù)初值的計算比較簡單。其計算公式如下:

TC=M-C其中,TC為計數(shù)器的計數(shù)初值;M為計數(shù)器模值,該值與計數(shù)器的工作方式有關(guān);C為計數(shù)器所需要的計數(shù)值。單片機原理及接口技術(shù)

例5-1

設(shè)MCS-51單片機的主頻fosc=12MHz,要求使用T0,定時時間為200μs,分別計算方式0、方式1、方式2下的定時初值。

解:因為fosc=12MHz,因此機器周期TM=1μs1)方式0初值

213-200μs/1μs=8192-200=7992=1F38H

1F38H=0001111100111000B(劃線部分為13位計數(shù)初值)

由于方式0是由TL0的低5位和TH0的高8位組成的一個13位計數(shù)器,TL0的高3位未用,因此可得方式0初值為1111100100011000B,即TH0=F9H、TL0=18H。5.1.5定時/計數(shù)器應(yīng)用舉例單片機原理及接口技術(shù)2)方式1初值216-200μs/1μs=65536-200=65336=FF38H則方式1初值為FF38H,即TH0=FFH、TL0=38H。3)方式2初值28-200μs/1μs=256-200=56=38H則方式2初值為38H,即TH0=38H、TL0=38H。單片機原理及接口技術(shù)

例5-2設(shè)MCS-51單片機的主頻fosc=12MHz,請編出利用定時/計數(shù)器T1在P1.2引腳上輸出周期為1秒鐘的方波程序。

解:要產(chǎn)生周期為1秒的方波,定時器T1必須能定時500ms,這個值超過了定時器的最大定時時間。因此,我們可以采用軟件計數(shù)和硬件定時相結(jié)合的方法解決這個問題。可以讓定時器T1工作在方式1,定時50ms中斷方式,并且在主程序內(nèi)設(shè)置一個初值為10的軟件計數(shù)器。每當50ms時間到就進入中斷服務(wù)程序,軟件計數(shù)器減1,然后判斷它是否為零。若軟件計數(shù)器內(nèi)容為零,則表示500ms定時已到,便可恢復(fù)軟件計數(shù)器初值并且使P1.2引腳電平取反,然后返回主程序;若不為零,則表示500ms未到,也返回主程序。如此重復(fù)上述過程,我們便可以在P1.2引腳上輸出周期為1秒鐘的方波。

整個程序由主程序和中斷服務(wù)子程序兩部分組成。由主程序完成定時器、中斷和軟件計數(shù)器的初始化以及啟動定時器工作,中斷服務(wù)子程序完成方波信號的輸出。單片機原理及接口技術(shù);主程序ORG1000HSTART:MOVTMOD,#10H;定時器T1初始化為方式1MOVTH1,#3CH;裝入定時初值MOVTL1,#0B0HMOVIE,#88H;開放定時器T1中斷SETBTR1;啟動定時器T1定時MOVR0,#0AH;軟件計數(shù)器賦初值LOOP:SJMPLOOP;等待中斷;中斷服務(wù)子程序ORG001BHAJMPBRT1ORG0200HBRT1:DJNZR0,NEXT;若沒到500ms,則轉(zhuǎn)移到NEXTCPLP1.2;若到了500ms,則P1.2電平取反MOVR0,#0AH;恢復(fù)軟件計數(shù)器初值NEXT:MOVTH1,#3CH;重裝定時器初值MOVTL1,#0B0HRETI;中斷返回END相應(yīng)匯編程序如下:單片機原理及接口技術(shù)

在CPU響應(yīng)中斷到完成重裝定時器初值的這段時間,定時器T1并未停止工作,而是繼續(xù)計數(shù)的。因此,有時為了保證T1能夠精確定時50ms,重裝的定時初值需要進行修正,修正的定時器初值必須考慮從原定時器初值中扣除計數(shù)器多計的脈沖個數(shù)。由于定時器計數(shù)脈沖周期恰好和機器周期吻合,因此修正量等于CPU響應(yīng)中斷到重裝完TL1為止所用的機器周期數(shù),也就是響應(yīng)中斷所需的機器周期數(shù)(一般為4-5個)和中斷響應(yīng)結(jié)束到重裝完TL1所用的機器周期數(shù)(本例為6個)。因此,在中斷服務(wù)程序中定時器T1的初值可修正為3CBAH或3CBBH。單片機原理及接口技術(shù)本例的C51語言程序如下:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitp1_2=P1^2;/*進行位定義*/ucharn;/*聲明計數(shù)變量*/ucharcount;voidmain(){count=10;/*軟件計數(shù)器賦初值*/n=count;TMOD=0x10;/*定時器T1初始化為方式1*/TL1=0xb0;/*裝入定時初值*/TH1=0x3c;IE=0x88;/*開放定時器T1中斷*/TR1=1;/*啟動定時器T1定時*/while(1);/*等待中斷*/}單片機原理及接口技術(shù)voidtime1_int(void)interrupt3/*中斷號3是定時器T1中斷*/{TL1=0xb0;/*重裝定時器初值*/TH1=0x3c;n--;/*修改軟件計數(shù)器內(nèi)容*/if(n==0){p1_2=!p1_2;/*若定時時間到,則P1.2取反*/n=count;/*重裝軟件計數(shù)器初值*/}}單片機原理及接口技術(shù)

例5-3設(shè)MCS-51單片機的主頻fosc=12MHz,現(xiàn)有重復(fù)周期大于1ms的脈沖信號從P3.4(T0)引腳輸入,要求P3.4引腳每發(fā)生一次負跳變時,P1.0引腳輸出一個寬度為200μs的同步負脈沖,同時由P1.2引腳輸出一個寬度為400μs的同步正脈沖,其波形如圖5-8所示。請編寫相應(yīng)的程序。圖5-8利用定時器/計數(shù)器產(chǎn)生同步脈沖單片機原理及接口技術(shù)

解:首先將定時器T0設(shè)定為方式2計數(shù)器功能,初值為0FFH。當P3.4(T0)引腳有負跳變輸入時,計數(shù)器T0便溢出使TF0置位,然后改變定時器T0為方式2下的200μs定時功能,并且使P1.0輸出低電平,P1.2輸出高電平。定時器T0第一次溢出時,P1.0輸出取反,定時器T0第二次溢出時,P1.2輸出低電平,T0重復(fù)外部計數(shù)。相應(yīng)匯編程序如下:單片機原理及接口技術(shù)ORG1000HSTART:SETBP3.4;P3.4初值為1SETBP1.0;P1.0初值為1CLRP1.2;P1.2初值為0LOOP:MOVTMOD,#06H;T0為方式2,計數(shù)方式MOVTH0,#0FFH;裝入計數(shù)初值MOVTL0,#0FFHSETBTR0;啟動計數(shù)器T0計數(shù)NEXT:JBCTF0NEXT1;檢測外部負邊沿信號AJMPNEXTNEXT1:CLRTR0MOVTMOD,#02H;重置T0為方式2,定時200μsMOVTH0,#38H;裝入定時初值MOVTL0,#38HCLRP1.0;P1.0清零SETBP1.2;P1.2置位SETBTR0;啟動定時器T0定時NEXT2:JBCTF0,NEXT3;檢測首次200μsAJMPNEXT2NEXT3:SETBP1.0;P1.0置位NEXT4:JBCTF0,NEXT5;檢測第二次200μsAJMPNEXT4NEXT5:CLRP1.2;P1.2清零CLRTR0AJMPLOOPEND單片機原理及接口技術(shù)

C51語言程序如下:#include<reg51.h>sbitp3_4=P3^4;/*進行位定義*/sbitp1_0=P1^0;sbitp1_2=P1^2;voidmain(){while(1){p3_4=1;/*設(shè)置各個引腳的初始狀態(tài)*/p1_0=1;p1_2=0;TMOD=0x06;/*啟動定時器T1定時*/TL1=0xff;/*裝入計數(shù)初值*/TH1=0xff;TR0=1;/*啟動計數(shù)器T0計數(shù)*/while(!TF0);/*檢測外部負邊沿信號*/單片機原理及接口技術(shù)TF0=0;TR0=0;/*停止計數(shù)器T0計數(shù)*/TMOD=0x02;/*重置T0為方式2,定時200μs*/TL1=0x38;/*裝入定時初值*/TH1=0x38;p1_0=0;/*改變各個引腳的狀態(tài)*/p1_2=1;TR0=1;/*啟動定時器T0定時*/while(!TF0);/*檢測首次200μs*/TF0=0;p1_0=1;while(!TF0);/*檢測第二次200μs*/TF0=0;p1_2=0;TR0=0;}}單片機原理及接口技術(shù)

例5-4設(shè)MCS-51單片機的主頻fosc=12MHz,現(xiàn)利用定時器T0測量正脈沖信號的寬度,脈沖從P3.2(INT0)引腳輸入。假設(shè)這個正脈沖的寬度小于50ms,要求測量此脈沖的寬度(機器周期數(shù)),并將結(jié)果存放在以30H為首地址的片內(nèi)RAM單元。

解:利用門控位GATE的功能。當GATE=1時,只有在INT0輸入高電平,并且在TR0由軟件置位時,才能啟動定時/計數(shù)器。利用這個特性,便可以測量輸入脈沖的寬度。相應(yīng)的程序如下:單片機原理及接口技術(shù)ORG0000HAJMPMAINORG1000HMAIN:MOVTMOD,#09H;T0為方式1,計數(shù)方式,GATE=1MOVTH0,#00H;裝入計數(shù)初值MOVTL0,#00HMOVR0,#30HWAIT:JBP3.2,WAIT;等待INT0變?yōu)榈碗娖絊ETBTR0;準備啟動計數(shù)器T0WAIT1:JNBP3.2,WAIT1;等待INT0變?yōu)楦唠娖剑瑔覶0WAIT2:JBP3.2,WAIT2;T0已開始計數(shù),此時等待INT0再次變低CLRTR0;INT0變低,停止計數(shù)MOV@R0,TL0;存入計數(shù)值INCR0MOV@R0,TH0SJMP$END單片機原理及接口技術(shù)#include<reg51.h>#defineucharunsignedcharsbitp3_2=P3^2;/*進行位定義*/uchardata*int0_data;/*定義數(shù)據(jù)接收緩沖區(qū)*/voidmain(){int0_data=0x30;/*設(shè)置緩沖區(qū)首地址*/TMOD=0x09;/*定時器T0初始化*/TL1=0x00;/*設(shè)置計數(shù)初值*/TH1=0x00;while(p3_2);/*等待INT0變?yōu)榈碗娖?/TR0=1;/*啟動定時器T0計數(shù)*/C51語言程序如下:while(!p3_2);/*等待INT0變?yōu)楦唠娖?/while(p3_2);/*等待INT0變?yōu)榈碗娖?/TR0=0;/*停止定時器T0計數(shù)*/*int0_data=TL0;/*讀入當前計數(shù)值*/int0_data++;*int0_data=TH0;while(1);}單片機原理及接口技術(shù)

中斷技術(shù)是計算機在實時處理和實時控制中不可缺少的關(guān)鍵技術(shù)。中斷是指CPU暫時停止原程序的執(zhí)行,轉(zhuǎn)而為外部設(shè)備服務(wù)(執(zhí)行中斷服務(wù)子程序),并在服務(wù)完成后自動返回到斷點處,繼續(xù)執(zhí)行原來的程序的過程。實現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)稱為中斷系統(tǒng),對于不同的計算機具有不同的中斷系統(tǒng)。中斷系統(tǒng)大大提高了單片機處理外部或內(nèi)部突發(fā)事件的能力,較好的實現(xiàn)了CPU與外設(shè)之間的同步操作,提高了數(shù)據(jù)處理的實時性。5.2MCS-51單片機的中斷系統(tǒng)單片機原理及接口技術(shù)5.2.1中斷系統(tǒng)組成

MCS-51單片機的中斷系統(tǒng)主要由中斷源、中斷控制電路和中斷入口地址電路等部分組成,其結(jié)構(gòu)如圖5-9所示。從圖中可以看出,MCS-51單片機允許接受5個獨立的中斷源的中斷請求信號。這5個中斷源的中斷請求是否會得到響應(yīng),受中斷允許寄存器IE各位的控制;它們的優(yōu)先級分別由中斷優(yōu)先級控制寄存器IP的各位來確定;若同一優(yōu)先級的各中斷源同時發(fā)出中斷請求,還要靠內(nèi)部的查詢邏輯確定響應(yīng)的次序;不同的中斷源有不同的中斷服務(wù)子程序入口地址。與中斷系統(tǒng)有關(guān)的寄存器有4個,分別為定時/計數(shù)器控制寄存器TCON、串行控制寄存器SCON、中斷允許寄存器IE以及中斷優(yōu)先級控制寄存器IP。其中TCON和SCON用于保存中斷請求標志和設(shè)定外部中斷的觸發(fā)方式;IE用于控制5個中斷源中哪些中斷請求被允許,哪些中斷請求被禁止;IP用于控制5個中斷源中哪個中斷請求的優(yōu)先級為高,可以被CPU優(yōu)先進行響應(yīng)。單片機原理及接口技術(shù)圖5-9MCS-51單片機中斷系統(tǒng)功能結(jié)構(gòu)單片機原理及接口技術(shù)5.2.2中斷源和中斷請求標志1.中斷源

中斷源是指引起中斷原因的設(shè)備或部件,或發(fā)出中斷請求信號的來源。MCS-51單片機共有5個中斷請求源。其中,兩個外部中斷源(由/INT0、/INT1輸入);兩個內(nèi)部定時/計數(shù)器(T0、T1)的溢出中斷源TF0和TF1;一個串行口接收/發(fā)送中斷源RI或TI?,F(xiàn)分別說明如下。(1)外部中斷源

外部中斷源是由I/O設(shè)備中斷請求信號或掉電故障等異常事件中斷請求信號提供的,MCS-51單片機共有2個外部中斷源。單片機原理及接口技術(shù)1)/INT0:外部中斷0,來自P3.2引腳的中斷請求。一旦該引腳輸入有效電平,寄存器

TCON中對應(yīng)的中斷請求位IE0就自動置位,向CPU申請中斷。2)/INT1:外部中斷1,來自P3.3引腳的中斷請求。一旦該引腳輸入有效電平,寄存器TCON中對應(yīng)的中斷請求位IE1就自動置位,向CPU申請中斷。

外部中斷請求信號的觸發(fā)方式有兩種:低電平觸發(fā)方式和負邊沿觸發(fā)方式??梢苑謩e通過寄存器TCON中的IT0和IT1位來設(shè)置。低電平觸發(fā)方式是以/INT0或/INT1引腳上輸入的低電平作為有效的中斷請求信號,而負邊沿觸發(fā)方式是以/INT0或/INT1引腳電平的負跳變作為有效的中斷請求信號。單片機原理及接口技術(shù)(2)定時/計數(shù)器中斷源

定時/計數(shù)器中斷是由單片機內(nèi)部集成的定時器定時時間到或計數(shù)值已滿引起的中斷,共有兩個中斷源,即定時器0和定時器1中斷。1)T0:定時器0溢出中斷,當定時器T0定時時間到(根據(jù)單片機內(nèi)部計數(shù)脈沖)或計數(shù)值已滿(從P3.4引腳輸入計數(shù)脈沖)而產(chǎn)生溢出時,寄存器TCON中對應(yīng)的中斷請求位TF0就自動置位,向CPU申請中斷。2)T1:定時器1溢出中斷,當定時器T1定時時間到(根據(jù)單片機內(nèi)部計數(shù)脈沖)或計數(shù)值已滿(從P3.5引腳輸入計數(shù)脈沖)而產(chǎn)生溢出時,寄存器TCON中對應(yīng)的中斷請求位TF1就自動置位,向CPU申請中斷。單片機原理及接口技術(shù)(3)串行口中斷源

TI和RI為串行口發(fā)送和接收中斷請求標志。每當串行口完成一幀數(shù)據(jù)的發(fā)送或接收時,寄存器SCON中對應(yīng)的中斷請求位TI或RI就自動置位,向CPU申請中斷。需要注意的是,這兩個標志位不能自動清“0”,必須由用戶用軟件復(fù)位。2.中斷請求標志

如前所述,每一個中斷源都有一個對應(yīng)的中斷請求標志位,它們設(shè)置在特殊功能寄存器TCON和SCON中。當這些中斷源請求中斷時,分別由這兩個寄存器中的相應(yīng)位來鎖存。單片機原理及接口技術(shù)(1)定時器控制寄存器TCON

寄存器TCON是定時器T0和T1的控制寄存器,同時也鎖存T0和T1以及外部中斷源的中斷請求標志位。其字節(jié)地址為88H,可進行位尋址。其格式如圖5-10所示。圖5-10TCON寄存器中斷標志格式T0、T1控制、狀態(tài)標志單片機原理及接口技術(shù)TF1:定時器T1的溢出中斷標志位。當定時器計滿溢出時,由內(nèi)部硬件置位,并向CPU發(fā)出中斷請求。當CPU響應(yīng)中斷后TF1由硬件自動清零。TF0:定時器T0的溢出中斷標志位。功能同TF1。IE1:外部中斷1請求標志。當外部中斷采用低電平觸發(fā)方式時,/INT0引腳上輸入低電平使IE1置位,向CPU發(fā)出中斷請求。在中斷服務(wù)程序返回之前必須由外部中斷源撤消有效電平,使IE1清零,否則CPU返回主程序后會再次響應(yīng)中斷。當外部中斷采用負邊沿觸發(fā)方式時,/INT0引腳上電平由高變低使其置位,向CPU發(fā)出中斷請求。此時要求輸入的負脈沖寬度至少保持12個振蕩周期,才能被CPU采樣到有效負跳變,在CPU響應(yīng)中斷時,IE1自動復(fù)位。單片機原理及接口技術(shù)IT1:外部中斷1觸發(fā)方式控制位。當IT1=0時,外部中斷1為低電平觸發(fā)方式;當IT1=1時,外部中斷1為負邊沿觸發(fā)方式;IE0:外部中斷0請求標志。功能類同IE1。IT0:外部中斷0觸發(fā)方式控制位。功能類同IT1。(2)串行口控制寄存器SCON

寄存器SCON是串行口的控制寄存器,同時也鎖存串行口的發(fā)送和接收中斷請求標志位。其字節(jié)地址為98H,可進行位尋址。其格式如圖5-11所示。單片機原理及接口技術(shù)TI(位地址98H):串行口發(fā)送中斷標志位。用于指示一幀數(shù)據(jù)是否發(fā)送完,串行口可以通過該位以查詢或中斷的方式與CPU聯(lián)絡(luò)。RI(位地址99H):串行口接收中斷標志位。用于指示一幀數(shù)據(jù)是否接收完。

SCON的其余位將在下一節(jié)串行通信中敘述。圖5-11SCON寄存器中斷標志格式串行口設(shè)置標志單片機原理及接口技術(shù)5.2.3中斷控制

在MCS-51單片機中,和中斷系統(tǒng)控制有關(guān)的寄存器有中斷允許寄存器IE和中斷優(yōu)先級寄存器IP。用戶通過對這兩個寄存器的編程設(shè)置,可以控制每個中斷源的允許或禁止以及中斷優(yōu)先級。下面簡要介紹一下這兩個控制寄存器的格式。1.中斷允許寄存器IE

IE寄存器的字節(jié)地址為A8H,用于控制CPU對各中斷源的開放或屏蔽,其內(nèi)容可以通過用戶程序設(shè)定。它也是一個可以位尋址的專用寄存器,位地址為A8H~AFH。其格式如圖5-12所示。單片機原理及接口技術(shù)圖5-12IE寄存器的格式

EA:中斷允許總控位。EA=0時,CPU禁止所有的中斷,即CPU屏蔽所有的中斷請求;EA=1時,CPU開放所有的中斷,但它們能否被CPU響應(yīng)還取決于IE中相應(yīng)中斷源的中斷允許位狀態(tài)。

ES:串行口中斷允許位。ES=0時,禁止串行口中斷;ES=1時,允許串行口中斷,但是CPU最終能否響應(yīng)這一中斷還取決于中斷允許總控位的狀態(tài)。

單片機原理及接口技術(shù)

ET1:定時器1溢出中斷允許位。ET1=0時,禁止定時器1的溢出中斷;ET1=1時,允許定時器1的溢出中斷,但是CPU最終能否響應(yīng)這一中斷還取決于中斷允許總控位的狀態(tài)。

EX1:外部中斷1中斷允許位。EX1=0時,禁止外部中斷1的中斷請求;EX1=1時,允許外部中斷1的中斷請求,但是CPU最終能否響應(yīng)這一中斷還取決于中斷允許總控位的狀態(tài)。ET0:定時器0溢出中斷允許位。作用類同ET1。EX0:外部中斷0中斷允許位。作用類同EX1。單片機原理及接口技術(shù)2.中斷優(yōu)先級寄存器IP

MCS-51單片機中斷系統(tǒng)提供兩級中斷優(yōu)先權(quán)等級,對于每一個中斷請求源都可以通過編程設(shè)定為高優(yōu)先級或低優(yōu)先級,以實現(xiàn)兩級中斷嵌套。IP寄存器的字節(jié)地址為B8H,用于控制各中斷源的中斷優(yōu)先級,其內(nèi)容可以通過用戶程序設(shè)定。它也是一個可以位尋址的專用寄存器,位地址為B8H~BFH。其格式如圖5-13所示。圖5-13IP寄存器的格式單片機原理及接口技術(shù)

PS:串行口中斷優(yōu)先級控制位。PS=0時,設(shè)定串行口中斷為低優(yōu)先級中斷;PS=1時,設(shè)定串行口中斷為高優(yōu)先級中斷。

PT1:定時器1溢出中斷優(yōu)先級控制位。PT1=0時,設(shè)定定時器1溢出中斷為低優(yōu)先級中斷;PT1=1時,設(shè)定定時器1溢出中斷為高優(yōu)先級中斷。

PX1:外部中斷1中斷優(yōu)先級控制位。PX1=0時,設(shè)定外部中斷1為低優(yōu)先級中斷;PX1=1時,設(shè)定外部中斷1為高優(yōu)先級中斷。

PT0:定時器0溢出中斷優(yōu)先級控制位。作用類同PT1。

PX0:外部中斷0中斷優(yōu)先級控制位。作用類同PX1。單片機原理及接口技術(shù)

對于MCS-51單片機來說,共有5個中斷源,但中斷優(yōu)先級只有高低兩級。因此,在工作過程中必然會有兩個或兩個以上的中斷源處于同一中斷優(yōu)先級。那么此時單片機優(yōu)先響應(yīng)哪一個中斷請求,取決于內(nèi)部的查詢順序。這相當于在每個優(yōu)先級內(nèi),還同時存在另一個輔助優(yōu)先級結(jié)構(gòu),其優(yōu)先順序如表5-2所示。表5-2MCS-51單片機中斷源優(yōu)先級的順序單片機原理及接口技術(shù)

在每一個機器周期內(nèi),中斷系統(tǒng)中所有的中斷源都順序地被檢查一遍,這樣到任意一個機器周期的S6狀態(tài)時,找到了所有已激活的中斷請求,并且按照優(yōu)先級的高低進行排序。在下一個機器周期的S1狀態(tài),就開始對其中最高優(yōu)先級的中斷請求進行響應(yīng)。在中斷響應(yīng)的過程中,MCS-51單片機允許中斷的嵌套,也就是高優(yōu)先級中斷打斷低優(yōu)先級中斷請求的中斷服務(wù),但中斷的嵌套必須遵循以下規(guī)則:(1)正在進行處理的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷。(2)在中斷是開放的情況下,正在處理的低優(yōu)先級中斷服務(wù)程序能被高優(yōu)先級中斷請求所中斷,實現(xiàn)兩級的中斷嵌套。

這兩條規(guī)則是由單片機內(nèi)部兩個用戶不可見的優(yōu)先級狀態(tài)觸發(fā)器來保證的,即高優(yōu)先級觸發(fā)器(屏蔽所有中斷源)和低優(yōu)先級觸發(fā)器(屏蔽同級中斷源)。當哪一級中斷被響應(yīng),則相應(yīng)的優(yōu)先級觸發(fā)器被激活,當中斷結(jié)束時則自動清零。單片機原理及接口技術(shù)5.2.4中斷的處理過程及響應(yīng)時間

一個完整的中斷過程包括中斷申請、中斷響應(yīng)、中斷處理和中斷返回。前面已經(jīng)討論了MCS-51單片機中斷源的問題,下面將介紹它的中斷響應(yīng)、中斷處理和中斷返回及中斷響應(yīng)時間的有關(guān)問題。1.中斷響應(yīng)

在CPU接收到中斷請求信號之后,如果滿足響應(yīng)中斷的條件,則CPU就會響應(yīng)該中斷請求。此時CPU就將程序計數(shù)器PC中的斷點地址壓入堆棧(在MCS-51單片機中,程序計數(shù)器PC是16位的,占用了兩個字節(jié),沒有自動保存程序狀態(tài)字PSW的內(nèi)容),再把與中斷源對應(yīng)的中斷入口地址送入程序計數(shù)器PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。單片機原理及接口技術(shù)

1)若CPU處于非響應(yīng)中斷狀態(tài)且中斷是開放的,即中斷允許寄存器中相應(yīng)位置1,則MCS-51單片機在現(xiàn)行指令執(zhí)行完后就會自動響應(yīng)來自某中斷源的中斷請求。

2)若CPU正在為某一中斷請求服務(wù)時又來了優(yōu)先級更高的中斷請求且此時中斷是開放的,則MCS-51單片機會立即對其響應(yīng)實現(xiàn)中斷的嵌套。

3)若CPU正處在執(zhí)行中斷返回指令RETI或訪問IE/IP指令的時刻,則MCS-51單片機必須等到下一條指令執(zhí)行結(jié)束后才能響應(yīng)該中斷請求。單片機原理及接口技術(shù)(2)中斷響應(yīng)的過程

在CPU開始響應(yīng)中斷以后,由硬件自動執(zhí)行下列的功能操作:

1)將有效的中斷請求信號鎖存到各自的中斷標志位中,按照優(yōu)先級高低順序進行排隊,對最高優(yōu)先級中斷請求進行響應(yīng);

2)保護斷點地址,也就是將當前程序計數(shù)器PC的內(nèi)容壓入堆棧保存,以便在中斷服務(wù)子程序結(jié)束時,執(zhí)行RETI指令能夠正確的返回到原程序執(zhí)行;

3)關(guān)閉中斷,以防在響應(yīng)中斷期間受其它中斷的干擾;單片機原理及接口技術(shù)

4)將被響應(yīng)的中斷服務(wù)程序入口地址(見表2-2)送入程序計數(shù)器PC,同時清除中斷請求標志(串行口中斷和外部電平觸發(fā)中斷除外),從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。2.中斷處理和中斷返回

中斷處理子程序從中斷入口地址開始執(zhí)行,到返回指令RETI結(jié)束。一般情況下,中斷處理程序包括以下幾個部分:(1)關(guān)閉中斷

若在執(zhí)行當前中斷程序時禁止更高優(yōu)先級的中斷,可用軟件關(guān)閉CPU的中斷,或屏蔽更高優(yōu)先級中斷。單片機原理及接口技術(shù)(2)保護現(xiàn)場

CPU響應(yīng)中斷時會自動的將斷點地址入棧保護,但是主程序中使用的寄存器內(nèi)容的保護則由用戶視情況而定。由于在中斷處理子程序中要用到某些寄存器,因而若不保護這些寄存器原有的內(nèi)容,當中斷處理子程序的執(zhí)行修改了相應(yīng)寄存器的內(nèi)容時,一旦返回主程序,就會造成主程序的混亂。用戶對相關(guān)寄存器的內(nèi)容進行保護的過程就稱為保護現(xiàn)場。(3)中斷處理

中斷處理的具體內(nèi)容,因中斷源的要求不同而不同。它是中斷處理子程序的核心。單片機原理及接口技術(shù)(4)恢復(fù)現(xiàn)場為了保證中斷處理子程序結(jié)束后能正確地執(zhí)行原來被終止的程序,應(yīng)使中斷處理子程序中所使用的寄存器內(nèi)容不變,也就是將原來保護的內(nèi)容再恢復(fù)到相應(yīng)的寄存器。(5)打開中斷在恢復(fù)現(xiàn)場之后,中斷返回之前,應(yīng)通過軟件指令開放中斷,以便CPU響應(yīng)新的中斷請求。(6)中斷返回中斷處理子程序的最后一條指令無一例外的都使用中斷返回指令RETI。CPU執(zhí)行這條指令,對中斷響應(yīng)時置位的優(yōu)先級狀態(tài)觸發(fā)器清零,然后將堆棧中的斷點地址彈出到程序計數(shù)器PC中,以便CPU返回到斷點處繼續(xù)執(zhí)行主程序。單片機原理及接口技術(shù)3.中斷請求的撤除

CPU響應(yīng)中斷請求后,在中斷返回之前,應(yīng)及時撤除該中斷請求,否則會造成對同一中斷請求多次響應(yīng)的錯誤。MCS-51單片機各中斷源中斷請求撤除的方法各不相同,分述如下:(1)定時器溢出中斷請求。CPU在響應(yīng)中斷以后,由硬件自動清除中斷標志位TF0或TF1,即中斷請求是自動撤除的,不需要采取其它措施。(2)串行口中斷請求。對于串行口中斷,在CPU響應(yīng)中斷后,硬件不能自動將TI和RI復(fù)位,故串行口中斷不能自動撤除。在響應(yīng)串行口中斷請求后,必須在中斷處理程序中,用軟件將中斷標志TI或RI清零,以撤除中斷請求。單片機原理及接口技術(shù)(3)外部中斷請求。對于負邊沿觸發(fā)的外部中斷,CPU在響應(yīng)中斷以后,也由硬件自動清除中斷標志位IE0或IE1,即自動撤除了中斷請求,不需要采取其它措施。對于低電平觸發(fā)的外部中斷,雖然在CPU響應(yīng)中斷以后,中斷標志位IE0或IE1也由硬件自動清零,但若中斷請求信號的低電平還在,那么還會錯誤的再一次產(chǎn)生中斷。因此對于低電平觸發(fā)的外部中斷,除了中斷標志位自動清零之外,還應(yīng)在中斷響應(yīng)后立即撤除/INT0或/INT1引腳上的低電平中斷請求信號。單片機原理及接口技術(shù)

一種可供采用的電平型外部中斷的撤除電路如圖5-14所示。由圖可見,外部的中斷請求信號不直接加在/INT0端,而是加在D觸發(fā)器的時鐘CP端。由于D端接地,當外部中斷請求出現(xiàn)在CP端時,Q觸發(fā)器復(fù)位成“0”狀態(tài),Q端的低電平被送到/INT0,發(fā)出中斷請求。CPU響應(yīng)中斷后,利用P1.0作為應(yīng)答線,在中斷服務(wù)子程序開頭安排如下指令來撤除/INT0上的低電平。圖5-14多外部中斷擴展電路INSV:ANLP1,#FEHORLP1,#01HCLRIE0MCS-51單片機執(zhí)行上述程序段就可在P1.0上產(chǎn)生一個寬度為兩個機器周期的負脈沖。在該負脈沖的作用下,Q觸發(fā)器被置位成“1”狀態(tài),INT0上電平也因此而變高,從而撤除了其上的中斷請求。單片機原理及接口技術(shù)

4.中斷響應(yīng)的時間

所謂中斷響應(yīng)時間是指從查詢中斷請求標志到轉(zhuǎn)入中斷處理子程序入口地址所需要的時間。了解中斷響應(yīng)時間,對實時控制系統(tǒng)的設(shè)計是十分重要的。中斷響應(yīng)的最短的時間是3個機器周期。第一個機器周期用于查詢中斷標志位的狀態(tài),如果此時CPU正處在一條指令執(zhí)行的最后一個機器周期,那么在這個機器周期結(jié)束后,中斷請求立即得到響應(yīng)。接下來保護斷點、關(guān)中斷和執(zhí)行長轉(zhuǎn)移指令需要2個機器周期。因此,最短響應(yīng)中斷的時間需要3個機器周期。單片機原理及接口技術(shù)中斷響應(yīng)的最長時間是8個機器周期。如果CPU在執(zhí)行中斷返回指令RETI或訪問IE/IP指令的第一個機器周期檢測到有中斷請求,那么CPU必須等到下一條指令執(zhí)行結(jié)束后才能響應(yīng)該中斷請求。執(zhí)行RETI或訪問IE/IP指令需要2個機器周期,繼續(xù)執(zhí)行的下一條指令最長需要4個機器周期,再用2個機器周期進入中斷處理子程序的入口地址。這樣,總共需要8個機器周期。因此,在系統(tǒng)中只有一個中斷源的情況下,響應(yīng)中斷的時間總是在3個機器周期到8個機器周期之間。單片機原理及接口技術(shù)5.2.5中斷系統(tǒng)的初始化及應(yīng)用

在使用中斷系統(tǒng)之前,必須對它進行初始化編程,也就是對相應(yīng)的特殊功能寄存器各控制位進行賦值。中斷系統(tǒng)初始化的一般步驟如下:1)對中斷允許寄存器IE進行設(shè)置,開相應(yīng)中斷源的中斷;2)對中斷優(yōu)先級寄存器IP進行設(shè)置,確定各中斷源的優(yōu)先級;3)若為外部中斷,則應(yīng)規(guī)定是低電平還是負邊沿的中斷觸發(fā)方式。單片機原理及接口技術(shù)例5-5請寫出/INT0為低電平觸發(fā)的中斷系統(tǒng)初始化程序。

解:因為與MCS-51單片機中斷系統(tǒng)有關(guān)的控制寄存器既可以位尋址,也可以字節(jié)尋址,因此初始化程序可以采用位操作指令,也可以采用字節(jié)操作指令實現(xiàn)。相應(yīng)的匯編語言初始化程序段如下:

1)采用位操作指令SETBEA

;開中斷總允許控制位SETBEX0

;開/INT0中斷SETBPX0

;令/INT0為高優(yōu)先級CLRIT0

;令/INT0為低電平觸發(fā)單片機原理及接口技術(shù)2)采用字節(jié)型指令MOVIE,#81H

;開/INT0中斷ORLIP,#01H

;令/INT0為高優(yōu)先級ANLTCON,#FEH

;令/INT0為低電平觸發(fā)

若采用C語言編程,則初始化程序段如下:EA=1;

/*開/INT0中斷*/EX0=1;PX0=1;

/*令/INT0為高優(yōu)先級*/IT0=0;

/*令/INT0為低電平觸發(fā)*/

從上述程序段可看出,采用位操作指令進行中斷系統(tǒng)初始化是比較簡單的。單片機原理及接口技術(shù)

例5-6

如圖5-15所示,利用INT1引入單脈沖,每來一個負脈沖,將連接到P1口的發(fā)光二極管循環(huán)點亮圖5-15MCS-51單片機中斷應(yīng)用接口圖單片機原理及接口技術(shù)解:可以利用/INT1的下降沿觸發(fā)中斷。每次進入中斷服務(wù)程序,就將連接至P1口的發(fā)光二極管順次點亮。相應(yīng)的匯編語言程序如下:;主程序ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#60H;設(shè)置堆棧指針MOVA,#01HMOVP1,#00HSETBIT1;設(shè)置下降沿觸發(fā)中斷SETBEX1;開放外部中斷1SETBEASJMP$;等待中斷END;中斷服務(wù)子程序ORG0013HLJMPINT1_ISRORG0100HINT1_ISR:CJNEA,#00H,AAMOVA,#01HAA:MOVP1,ARLARETI單片機原理及接口技術(shù)C51語言程序如下:#include<reg51.h>#defineucharunsignedcharuchari=0x01;/*設(shè)置初始顯示值*/voidmain(){P1=0;IT1=1;/*設(shè)置下降沿觸發(fā)中斷*/EX1=1;/*開放外部中斷1*/EA=1;while(1);/*等待中斷*/}voidint1_int(void)interrupt2/*中斷號2是外部中斷1*/{if(i==0)i=1;/*移位8次后,重新給i賦值*/P1=i;/*輸出顯示*/i<<1;/*循環(huán)左移*/}單片機原理及接口技術(shù)5.2.6中斷源的擴展

MCS-51單片機為外部的中斷提供了兩個中斷請求輸入端。但在實際應(yīng)用系統(tǒng)中,外部中斷請求源可能比較多,這就需要擴展外部中斷源。常用的中斷源擴展方法有三種:利用定時器溢出中斷法、中斷查詢法以及利用8259中斷控制器擴展中斷源。這里主要介紹前兩種中斷擴展方法。單片機原理及接口技術(shù)

1.利用定時器擴展中斷源

MCS-51單片機內(nèi)部集成了兩個定時器,若將定時器設(shè)置為計數(shù)器方式,計數(shù)初值設(shè)為滿量程,同時將定時器的輸入端T0或T1用于輸入外部中斷請求信號。每當T0或T1引腳上出現(xiàn)下降沿的時候,計數(shù)器就會產(chǎn)生溢出中斷。利用這個特性,可以把P3.4和P3.5作為外部中斷請求輸入端,TF0和TF1作為外部中斷請求標志,其中斷入口地址000BH和001BH就是擴展的外部中斷源的入口地址。下面結(jié)合實例加以說明。單片機原理及接口技術(shù)例5-7寫出定時器T0中斷源用作外部中斷源的初始化程序。

解:初始化程序?qū)0設(shè)置為方式2計數(shù)模式,計數(shù)初值為FFH。每當P3.4引腳有負跳變信號輸入時,定時器T0的溢出中斷標志位TF0就會置位,向CPU發(fā)出中斷請求。相應(yīng)的匯編初始化程序段為

MOVTMOD,#06H;T0初始化為方式2,計數(shù)模式

MOVTH0,#0FFH;裝入計數(shù)初值

MOVTL0,#0FFH

SETBEA

SETBET0;開放定時器T0中斷

SETBTR0;啟動定時器T0定時單片機原理及接口技術(shù)若采用C語言編程,則初始化程序段如下:

TMOD=0x06;/*T0初始化為方式2*/

TH0=0xff;/*裝入計數(shù)初值*/

TL0=0xff;

IE=0x82;/*開放定時器T0中斷*/

TR0=1;/*啟動定時器T0定時*/

借用T0來擴展外部中斷源,實際上相當于使MCS-51單片機的P3.4引腳變成了一個下降沿觸發(fā)型外部中斷請求輸入端,而少了一個定時器溢出中斷源。單片機原理及接口技術(shù)2.利用查詢方式擴展中斷源

若系統(tǒng)中有多個外部中斷源,采用定時器溢出中斷來擴展外部中斷源已不能滿足實際應(yīng)用的需要,這時可采用中斷和查詢相結(jié)合的方式來擴展外部中斷源。這種方法是將多個中斷源按照重要程度進行排隊,把最高優(yōu)先級的中斷源接到單片機的一個外部中斷輸入端,其余的中斷源通過或門連接到另一個外部中斷輸入端,同時還連接到一個并行I/O口。中斷請求由硬件電路產(chǎn)生,而中斷源的識別由程序查詢來處理,查詢的次序決定了中斷源的優(yōu)先級?,F(xiàn)舉例加以說明。

例5-8現(xiàn)有5個外部中斷源EX1~EX5,如圖5-16所示。中斷請求信號高電平有效,編寫查詢外部中斷請求端EX1~EX5上中斷請求的程序。

解:相應(yīng)的匯編語言程序如下:單片機原理及接口技術(shù)ORG0013H;外部中斷1入口地址LJMPINT1;進入外部中斷1中斷處理程序MAIN:MOVSP,#60H;置堆棧指針ANLTCON,#0FAH;設(shè)置外部中斷為電平觸發(fā)方式MOVIE,#85H;開放兩個外部中斷MOVIP,#01H;設(shè)置外部中斷0為高優(yōu)先級……;主程序內(nèi)容ORG1000HINT0:PUSHPSW;保護現(xiàn)場PUSHACCACALLEX1;調(diào)用EX1服務(wù)子程序POPACC;恢復(fù)現(xiàn)場POPPSWRETIORG1200HINT1:PUSHPSW;保護現(xiàn)場PUSHACCORLP1,#0FH;讀出P1口低4位

MOVA,P1

JNBP1.0,N1

ACALLEX2;調(diào)用EX2服務(wù)子程序N1:JNBP1.1,N2

ACALLEX3;調(diào)用EX3服務(wù)子程序N2:JNBP1.2,N3

ACALLEX4;調(diào)用EX4服務(wù)子程序N3:JNBP1.3,N4

ACALLEX5;調(diào)用EX5服務(wù)子程序N4:POPACC;恢復(fù)現(xiàn)場POPPSWRETI……END單片機原理及接口技術(shù)C51語言程序如下:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitp1_0=P1^0;/*進行位定義*/sbitp1_1=P1^1;sbitp1_2=P1^2;sbitp1_3=P1^3;voidmain(){TCON=0x00;/*設(shè)置外部中斷為電平觸發(fā)方式*/IE=0x85;/*開放兩個外部中斷*/IP=0x01;/*設(shè)置外部中斷0為高優(yōu)先級*/……單片機原理及接口技術(shù)while(1);}voidint0_int(void)interrupt0/*外部中斷0的中斷號為0*/{EX1();/*調(diào)用EX1服務(wù)子程序*/}voidint1_int(void)interrupt2/*外部中斷1的中斷號為2*/{if(p1_0==1)/*調(diào)用EX2服務(wù)子程序*/

{EX2();}elseif(p1_1==1)/*調(diào)用EX3服務(wù)子程序*/

{EX3();}elseif(p1_2==1)/*調(diào)用EX4服務(wù)子程序*/

{EX4();}elseif(p1_3==1)/*調(diào)用EX5服務(wù)子程序*/

{EX5();}}單片機原理及接口技術(shù)圖5-16多外部中斷擴展電路

采用查詢法擴展外部中斷源比較簡單,但當擴展的外部中斷源個數(shù)比較多時,查詢時間太長,常常不能滿足現(xiàn)場的控制要求。為此,可采用可編程的中斷控制器8259來擴展外部中斷源。限于篇幅,在這里不作詳細的介紹。單片機原理及接口技術(shù)

MCS-51單片機內(nèi)部除了含有4個并行I/O接口之外,還有一個可編程的全雙工串行通信接口,具有UART的全部功能。該接口電路不僅能同時進行數(shù)據(jù)的發(fā)送和接收,也可作為一個同步移位寄存器使用。MCS-51單片機的串行接口有4種工作方式,波特率可由軟件設(shè)置片內(nèi)的定時/計數(shù)器來控制。每當串行接口完成接收或發(fā)送1個字節(jié)的數(shù)據(jù)后,均可以向CPU發(fā)出中斷請求。MCS-51單片機的串行接口除了可用于串行通信之外,還可以非常方便的用來擴展并行接口。下面對串行接口的結(jié)構(gòu)、工作方式和波特率以及應(yīng)用進行討論。5.3.1串行口的結(jié)構(gòu)

MCS-51單片機的串行口由發(fā)送電路、接收電路和串行口控制寄存器等三部分組成。串行口的內(nèi)部結(jié)構(gòu)如圖5-17所示。5.3MCS-51單片機的串行接口單片機原理及接口技術(shù)圖5-17串行接口結(jié)構(gòu)示意圖單片機原理及接口技術(shù)1.發(fā)送電路和接收電路

串行口的發(fā)送電路由發(fā)送緩沖器SBUF和發(fā)送控制器等電路組成,用于串行口數(shù)據(jù)的發(fā)送;接收電路是由接收緩沖器SBUF和接收控制器以及接收移位寄存器等電路組成,用于串行口數(shù)據(jù)的接收。在物理上,SBUF有兩個,一個是用于發(fā)送的8位緩沖寄存器,只能寫入不能讀出,另一個是用于接收的8位緩沖寄存器,只能讀出不能寫入;在邏輯尋址上,這兩個緩沖寄存器共用一個端口地址99H,CPU可以通過不同的指令對它們進行存取。

在串行通信的過程中,數(shù)據(jù)的發(fā)送和接收都是在時鐘信號的控制下進行的,發(fā)送時鐘用于控制數(shù)據(jù)的發(fā)送,接收時鐘用于控制數(shù)據(jù)的接收。發(fā)送時鐘和接收時鐘都必須同字符位數(shù)的波特率保持一致。MCS-51單片機的串行口所需的時鐘信號既可由主機頻率fosc經(jīng)過分頻以后提供,也可以由單片機內(nèi)部定時器T1或T2的溢出率經(jīng)過16分頻后提供。

單片機原理及接口技術(shù)

當CPU執(zhí)行指令MOVSBUF,A時,啟動一幀數(shù)據(jù)的發(fā)送過程。發(fā)送控制器在發(fā)送時鐘的作用下,自動在發(fā)送字符前后添加起始位、停止位以及其它控制位,然后在移位時鐘信號的控制下,將二進制信息由TXD引腳一位一位的發(fā)送出去。一幀數(shù)據(jù)發(fā)送完即發(fā)送SBUF為空時,TXD引腳呈高電平,同時TI標志位置1,表示一幀數(shù)據(jù)已經(jīng)發(fā)送完畢。

在進行串行數(shù)據(jù)接收時,外部的數(shù)據(jù)通過RXD引腳輸入。當該引腳由高電平變?yōu)榈碗娖綍r,表示一幀數(shù)據(jù)的接收已經(jīng)開始。數(shù)據(jù)的最低位首先進入移位寄存器,它在移位時鐘的作用下自動地去掉數(shù)據(jù)的格式信息,在連續(xù)接收到一幀字符后將其并行送入接收SBUF,同時將RI標志位置1,表示一幀數(shù)據(jù)接收完畢。單片機原理及接口技術(shù)2.串行口控制寄存器

MCS-51單片機和串行通信有關(guān)的控制寄存器有SCON和PCON,下面簡要介紹一下這兩個控制寄存器的格式。(1)串行口控制寄存器SCONSCON寄存器的字節(jié)地址為98H,用于串行口工作方式的設(shè)定和數(shù)據(jù)傳送的控制。它也是一個可以位尋址的專用寄存器,位地址為98H~9FH。其格式如圖5-18所示。圖5-18SCON寄存器的格式SM0和SM1:串行口工作方式選擇

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論