




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第4 章 單片機定時器/計數器、中斷 和串行口 內容提要 本章介紹51單片機硬件資源:定時器結構、定時方式、定時方式控制寄存器TMOD和定時控制寄存器TCON、定時器應用及編程;中斷系統、中斷允許寄存器IE、中斷優先級控制寄存器IP、中斷響應和中斷入口地址,中斷系統編程應用;串行口工作方式、串行口控制寄存器SCON、串行數據緩沖器SBUF、波特率、串行口應用和多機通信。對它們的應用主要通過指令操作相應的寄存器來實現,所有的理論、定義、表述都通過程序編輯體現出來,在學習功能單元原理時,應重點研究其在指令中的用法,在學習練習程序時要聯想到其結構原理。思考其寄存器的用法和編程方法。41 MCS-5
2、1的定時器/計數器 定時器計數器是 MCS51單片機的重要功能模塊之一。其定時器是加法脈沖計數器。在實際應用中,常用定時器作實時時鐘,實現定時檢測、定時控制。計數器主要用于外部事件的計數。4.1.1主要特性1. MCS51單片機有兩個可編程的定時器計數器T 0與T 1,可由程序選擇作為定時器用或作為計數器用,可由程序設置定時時間或計數值。 2. 定時器計數器具有4種不同的工作方式,可由程序選擇。 3. 任一定時器計數器在定時時間到或計數值到時,可由程序安排產生中斷請求信號或不產生中斷請求信號。 4.1.2定時器計數器的結構 定時器計數器的工作結構框圖如下圖4.1所示。與定時器計數器有關的特殊功
3、能寄存器有:TMOD、TCON、TH1、TL1、TH0、TL0。l.16位加法計數器定時器計數器的核心是16位加法計數器,由特殊功能寄存器THO、TLO及TH1、TL1組成。TH0、TLO是定時器計數器0加法計數器的高8位和低8位;TH1、TL1是定時器計數器1加法計數器的高8位和低8位。作計數器用時,加法計數器對芯片引腳TO(P34)或T1(P35)上輸入的脈沖計數。每個機器周期采樣一次該引腳電平,前一次檢測為“1”,后一次檢測為“0”,加法計數器加一。所以所采樣的外部脈沖的“0”和“1”的持續時間都不能少于一個機器周期。由于需要兩個機器周期才能識別高電平到低電平的跳變,所以外部計數脈沖的頻
4、率應小于 fosc24。如使用12MHZ時鐘,計數頻率不能超過500KHZ。 作定時器用時,加法計數器對內部機器周期脈沖Tc計數。由于機器周期的時間確定,所以對Tc的計數也就是定時,如使用12MHz晶振,Tc=1S,當計數次數值為10000時,相當于定時10mS。 加法計數器的初值可以由程序設定,設置的初值不同,計數值或定時時間就不同。由于是加法計數器,計滿置位TFX為時間到,所以計數初值要換算成補碼。如計數值為10000時,對應16位計數器的十六進制補碼為 0D8F0H。也就是說從0D8F0H開始計數到0000H計滿。在定時器計數器的工作過程中,加法計數器的內容可用程序讀回CPU。 計數器在
5、計滿回零時能自動使TCON中的TFX。置位,表示計數器產生了溢出,若此時中斷是開放的,CPU將響應計數器的溢出中斷請求。 2 定時器計數器方式控制寄存器TMOD 特殊功能寄存器TMOD用來確定定時器計數器 0和1的工作方式,其低4位用于定時器計數器0,高4位用于定時器計數器1。TMOD格式如下: D7 D6 D5 D4 D3 D2 D1 D0TMOD GATE C/T M1 M0 GATE C/T M1 M0 89H (1)定時器計數器功能選擇位CT : CT=“1”為計數器方式, CT“0”為定時器方式。 (2)定時器計數器工作方式選擇位M1、 M0 定時器計數器 4種工作方式的選擇由M1、
6、M0的值決定,見表4.1。 表4.1定時器計數器工作方式 M1 M0 工作方式 0 0 方式0 13位定時器計數器(THi的 高8位和TLi的低 5位) 0 1 方式1 16位定時器計數器(THi的 8位和TLi的8位構成高低共16位) 1 0 方式2 具有自動重裝初值的8位定時器計 數器 1 1 方式3 定時器計數器0分為兩個8位定時 器計數器,定時器 計數器1在此方式無意義。(3)門控制位GATE 如果GATE“1”,定時器計數器0的工作受芯片引腳INT0(P32)控制,高電平有效。定時器計數器1的工作受芯片引腳INT1(P33)控制;如果 GATE=“0”,定時器計數器的工作與引腳INT
7、0、INT1無關。復位時GATE=“0”。圖4.1中的與門和或門都輸出1開啟計數。 (1)定時器計數器運行控制位TR0、TR1: TRi =“1” 時,啟動定時器計數器工作,TRi =“0”,停止定 時器計數器工作。TRi由軟件置“1”或清“0”。 3定時器計數器控制寄存器 TCON高4位用于控制定時器0的運行其中其D7、D6兩位用于定時器計數器1,D5、D4兩位用于定時器計數器0;低4位用于控制外部中斷,與定時器計數器無關,將在本章第二節中介紹。TCON格式如下:TF1TR1TF0TR0IE1IT1IE0IT0TCON88HD7D6D5D4D3D2D1D0 (2)定時器計數器1溢出中斷標志T
8、F0、TF1: 定時器計數器計滿溢出時,由硬件自動置TFi“1”。 在中斷允許的條件下,向 CPU發出定時器計數器的中 斷請求信號;CPU響應中斷,轉入中斷服務程序時,TFX 由硬件自動清零。在中斷屏蔽條件下,可把TFi作查詢測 試用,但需要用程序清“0”。 (3) 外部中斷請求INT0、INT1的兩種觸發方式控制位: 當 ITO(IT1)=“0”時,引腳 INT0、INT1為低電平觸發方 式。當 ITO(IT1)=“1”時為下降沿觸發方式。 (4) IE1和IE0是外部中斷請求INT0、INT1的標志位,為“1”時 發生中斷請求 。4.1.3定時器計數器的4種工作方式 1工作方式0 M1=“
9、0”、MO=“0”時定時器計數器設定為工作方式 0,構成 13位定時器計數器。圖4.2是定時器計數器方式0的結構圖。THi是高8位加法計數器, TLi是低 5位加法計數器(只用低5位,其高3位未用)。TLi計數溢出時向THi進位,THi計數溢出時置 TFi。圖4.2定時器計數器工作方式 0計數器結構圖D0D4TLiTHiTFiD7D0D7 可用程序將08191(213l)的某一數送入THi、TLi作為初值。THi、TLi從初值開始加法計數,直至溢出,所設置的初值不同,定時時間或計數值也不同。由于Tli只用低5位,設置初值要將計數初值轉換成二進制數,在D4與D5之間插入三個“0”,再分成兩個字節
10、,分別送THi、Tli。還要注意:加法計數器溢出后,必須用程序重新對THi、TLi設置初值,確保下次也從初值開始計數,否則下一次THi、TLi將從0開始加法計數。 圖4.3定時器計數器工作方式 1計數器結構圖 2工作方式1D0TLiTHiTFiD7 M1=“0”、MO=“1”時定時器計數器設定為工作方式1,構成 16位定時器計數器。圖4.3是定時器計數器方式1的結構圖。THi是高8位加法計數器, TLi是低 8位加法計數器。TLi計數溢出時向THi進位,THi計數溢出時TFi被置“1”。 D0 D7D0TLiTHiTFiD7 在工作方式1時,計數器的計數初值由下式 N = 65536 - X
11、求出。式中X為記數次數,范圍l65536。定時器的定時時間為 T =(65536 X)Tc, 如果fosc12MHZ,那么定時范圍為165536s。【例4.1】 已知振蕩器振蕩頻率fosc = 12MHz,要求定時器計數器 0產生周期為40ms的方波,正負半波長都為20ms定時,試編寫初始化程序。 由于定時時間大于8192us,應選用工作方式1。 (l)TH0、TLO初值的計算:由于Tc = 1s,故有 T =(65536 - X)Tc =(65536 - X)* 1s 20000s =20mS 得X = 45536 = B1EOH即定時器T0的初值為:THO = 0B1H,TLO = 0E0
12、H(2)定時方式寄存器TMOD的編程:TMOD各位的內容確定:定時器計數器0為定時器工作方式,C/T(TMOD2) =“0”;非門控方式,GATE(TMOD.3)=“0”;采用工作方式1,M1(TMOD.l)=“0”,MO(TMOD.0)“l”,定時器計數器1沒有使用,相應的D7D4為隨意態“X”,若取“X”為 0,則(TMOD)= 0lH。(3)初始化程序 START: MOV TLO,#OEOH;定時器計數器0寫入初值 MOV THO,#OB1H MOV TMOD,#01H ;設置定時器計數器 0工作方式1 SETB TR0 ;啟動定時器計數器0執行指令 SETB TRO后,定時器計數器
13、0開始定時,待 20ms到時,硬件使 TFO“1”,向CPU申請中斷。在中斷服務程序中需要重新對TH0、TLO設置初值。3工作方式2M1=“1”、MO=“0”時定時器計數器設定為工作方式2,構成自動重新裝入初值的8位定時器計數器。圖4.4是定時器計數器方式2的結構圖。圖4.4 定時器計數器工作方式2計數器結構圖圖4.4中,TLi作為8位加法計數器使用,THi作為初值寄存器用。THi、TLi的初值都由軟件預置。TLi計滿溢出時,不僅置位TFi,而且發出重裝載信號,使三態門打開,將THi中初值自動送入TLi,使TLi從初值開始重新計數。重新裝入初值后,THi的內容保持不變。工作方式2的計數范圍為0
14、256,fosc = 12MHz時,定時范圍為lS256S。由于工作方式2不需要在中斷服務程序中重新設置計數初值,兩次中斷的間隔準確,所以特別適用于定時控制。但其定時時間較短。 4工作方式3M1=“1”、MO=“1”時,定時器計數器0處于工作方式3。工作方式3僅對定時器計數器0有意義。此時定時器計數器1可以設置為其他工作方式。若要將定時器計數器1設置為工作方式3,則定時器計數器1將停止工作。圖4.5 定時器計數器0工作方式3計數器結構圖 定時器計數器0工作方式3的結構如圖4.5所示。TLO、TH O成為兩個獨立的8位加法計數器。TL0使用定時器計數器0的狀態控制位CT、GATE、TRO及引腳I
15、NT0,它的工作情況與方式0方式 1類似,僅計數范圍為 1256,定時范圍為 1256s(fosc = 12MHZ時)。THO只能作為非門控方式的定時器,它借用了定時器計數器 1的控制位TR1、 TF1。定時器計數器 0采用工作方式 3后,51單片機就具有 3個定時器計數器,即 8位定時器計數器TLO,8位定時器TH O和16位定時器計數器1(TH1、TL1)。定時器計數器1雖然還可以選擇為方式0、方式1或方式2,但由于TR1和TF1被TH O借用,不能產生溢出中斷請求,所以只用作串行口的波特率發生器。練習 5 定時器應用 應用定時器計數器時應注意兩點:一是初始化(寫入控制字),二是計算計數初
16、值。初始化步驟為:(1)向TMOD寫工作方式控制字。(2)向計數器TLi、THi裝入初值。(3)置ETX“1”,允許定時器計數器中斷(若需要時)。(4)置EA“1”,CPU開中斷(若需要時)。(5)置TRX“1”,啟動計數。【例4.2】 利用定時計數器1定時,采用查詢方式,在P1.1引腳輸出1000HZ方波。設T1為工作方式2,設置為定時狀態,定時時間為方波周期的1/2即0.5mS,查詢0.5mS時間到,將P1.0的狀態取反(假設晶振為6MHZ)。先設置TMOD控制字:定時器計數器1為定時器工作方式,C/T(TMOD6) = “0”;非門控方式,GATE(TMOD.7)= “0”; 采用工作方
17、式2,M1(TMOD.5)=“1”,MO(TMOD.4)“0”,定時器計數器0沒有使用,相應的D7D4為隨意態“X”,若取“X”為 0,則 (TMOD)= 20H。 再計算0.5mS定時的T1初始值: 由fosc = 6MHZ得Tc = 2s,工作方式2時有 T =(256 - X)Tc =(256 - X)* 2s500S 得 TH1 = TL1 = 06H。 程序如下: ORG 0100HSQU:MOVTMOD,#20H;設置定時器計數器工作方式 MOVTH1,#06H;設置定時初始值 MOV TL1,#06H;方式2用高8位作低8位的裝載值 SETBTR1;啟動定時器計數器1LOOP:
18、JNBTF1,$;定時時間不到循環等待 CLRTF1;時間到清中斷標志位 CPL P1.1;P1.0狀態取反 SJMPLOOP圖4.6 驅動LED電路圖 【例4.3 】P1.0、P1.1經7407驅動LED交替發光并以每秒一次的頻率閃爍。硬件連接見圖4.6。(采用6MHZ晶振) 閃爍周期為1S,亮、滅各占一半,定時時間需要500mS。使用6MHZ晶振,單片機最長定時時間僅為131mS,所以需要采用軟件計數方法擴展定時時間。 使用定時/計數器0,定時方式,工作方式1。 設置TMOD控制字: TMOD = 01H 使用6MHZ晶振,機器周期為2s,設定時時間100mS,定時初值:100 mS/2s
19、 =5000,其十六進制補碼為:3CB0H。定時器溢出5次為500mS。 軟件流程見圖4.7。 程序如下: ORG 0140H LED1: MOV TMOD,#01H ;設置定時器工作方式 SETB P1.0 ;輸出初始狀態 CLR P1.1 SETB TR0 ;啟動定時器LOOP0: MOV R2,#05H ;送軟件計數初值LOOP1: MOV TL0,#0B0H ;送定時常數 MOV TH0,#3CH JNB TF0,$ ;循環等待定時時間到 CLR TF0 ;時間到清標志位 DJNZ R2,LOOP1;軟件計數10循環 XRL P1,#03H ;P1.0、P1.1求反 SJMP LOOP
20、0 ;循環 開始設置定時器工作方式輸出初始狀態啟動定時器送軟件計數初值送定時常數清TF0P1.0、P1.1求反YNYN定時器溢出?定時器溢出?圖4-7 驅動LED程序流程圖 【例4.4 】當GATEX =“1”時,定時/計數器只有INTX為高電平才能進行計數。利用這一點,可以方便的測量脈沖信號的寬度。設被測脈沖接至INT1引腳,將定時/計數器1設置為定時方式,即可進行脈寬測量。要求測量脈寬單位為1s,選用12MHZ晶振。 設置TMOD控制字: GATE1 =“1”,定時/計數器1為定時方式C/T =“0”,選用工作方式1。TMOD = 90H。 定時初值為零,在脈沖下跳沿讀出計數器的計數值即為
21、脈沖寬度。 程序如下: ORG 0180H PULSEW: MOVTOMD,#90H;設置定時/計數器工作方式 CLRA;定時初值為零 MOVTH1,A MOVTL1,A JBP3.3,$;在低電平時啟動定時, 保證測量整個脈沖寬度。 SETBTR1;啟動定時器 JNBP3.3,$;等待脈沖到來 JBP3.3,$;等待脈沖結束 CLRTR1;停止計數 MOVR2,TH1 ;讀出脈沖寬度 MOVR3,TL1 運行上面程序后,只要將R2、R3兩單元內容轉換成十進制數,即可送顯示以讀出脈沖寬度。由于工作方式1的最大計數值為65536,所以上面程序所測脈沖寬度不能大于65536s。 【例4.5】 利用
22、單片機定時/計數器測量脈沖信號頻率。 頻率定義為單位時間1S內的周期數,用定時/計數器測頻率,需要用一個定時器產生單位時間,另一個計數器對脈沖計數。若被測量的信號頻率較高,而測量精度有限的話,單位時間可以小于1S。單位時間選用10mS,其間計的脈沖數乘以100即為信號頻率。 設置工作方式: 設單片機系統時鐘頻率 fosc = 12MHz。定時/計數器1定時,工作方式1,產生10mS單位時間;定時/計數器0計數,工作方式1。 TMOD = 00010101B = 15H 計數初值:定時器1計數值10000,計數初值的十六進制補碼為 0D8F0H。10000化為十六進制是=2161616+7161
23、6+116+0=2710H,0000H-2710H=0D8F0H。 計數器0計數初值為0000H。 程序: ORG01C0H FREQ:MOVTMOD,#15H ;設置工作方式 MOVTH0,#0 ;送計數初值 MOVTL0,#0 MOVTH1,#0D8H ;定時10mS溢出中斷 MOVTL1,#0F0H MOVTCON,#50H ;啟動定時/計數器0和1 JNB TF1,$ ;等待單位時間到 MOVTCON,#0 ;停止計數(TRi=0) MOVR2,TH0 ;讀出計數值 MOVR3,TL0 將R2,R3中的計數值轉換成BCD碼,即為頻率,單位是0.1KHz。用此種方式測量的頻率上限為500
24、KHz。 42 單片機中斷系統 4.2.1中斷概述 中斷是指計算機暫時停止主程序執行轉而響應需要服務的緊急事件(執行中斷子程序),并在子程序完成后自動返回來執行主程序的過程。中斷由中斷源產生,中斷源在需要時可以向CPU提出“中斷請求”。“中斷請求”通常是一種電信號,CPU一旦對這個電信號進行檢測和響應便可自動轉入該中斷源的中斷服務程序處執行,并在執行完后自動返回主程序繼續執行,中斷源不同中斷服務子程序的功能也不同。 1.采用中斷控制方式的優點:(1)可以提高CPU的工作效率 采用中斷控制方式CPU可以通過分時操作啟動多個外設同時工作,并能對它們進行統一管理。CPU執行主程序時同時安排有關各外設
25、開始工作,當任何一個設備工作完成后,通過中斷通知CPU,CPU響應中斷,在中斷服務子程序中為它安排下一工作。這樣就可以避免CPU和低速外部設備交換信息時的等待和查詢,大大提高CPU的工作效率。 (2)可以提高實時數據的處理時效 在實時控制系統中,計算機必須及時采集被控系統的實時參量、越限數據和故障信息,并進行分析判斷和處理,以便對系統實施正確調節和控制。計算機對實時數據的處理時效,是影響產品質量和系統安全的關鍵。CPU有了中斷功能,系統的失常和故障都可以通過中斷立刻通知 CPU,使它可以迅速采集實時數據和故障信息,并對系統作出應急處理。 2.中斷源 中斷源是指引起中斷的設備、部件或事件。通常,
26、中斷源有以下幾種: (1)外部設備中斷源 外部設備主要為計算機輸入和輸出數據,它是最常見的中斷源。在用作中斷源時,通常要求它在輸入或輸出數據時能自動產生一個“中斷請求”信號(高電平或低電平)送到CPU的中斷請求輸入引腳,以供CPU檢測和響應。例如:打印機打印完一個字符時可以通過打印中斷要求CPU為它送下一個打印字符,因此,打印機可以作為中斷源。 (2)控制對象中斷源 在計算機用作實時控制時,被控對象常常被用作中斷源,用于產生中斷請求信號,要求CPU及時采集系統的控制參量、越限參數以及要求發送和接收的數據等等。例如:電壓、電流、溫度、壓力、流量和流速等超越上限和下限以及開關和繼電器的閉合或斷開都
27、可以作為中斷源來產生中斷請求信號,要求CPU通過執行中斷服務程序來加以處理。 (3)故障中斷 故障也可以作為中斷源,CPU響應中斷對已發生故障進行分析處理。如掉電中斷。在掉電時,掉電檢測電路可以檢測到它并產生一個掉電中斷請求,CPU響應中斷,在電源濾波電容維持正常供電的很短時間內,通過執行掉電中斷服務程序來保護現場和啟用備用電池,以便市電恢復正常后繼續執行掉電前的用戶程序。 (4)定時脈沖中斷源 定時脈沖中斷源又稱為定時器中斷源,是由脈沖電路或定時器產生。定時脈沖中斷源用于產生定時器中斷,定時器中斷有內部和外部之分。內部定時器中斷由單片機內部的定時器計數器溢出時自動產生,故又稱為內部定時器溢出
28、中斷;外部計數器中斷通常由外部振蕩電路的定時脈沖通過CPU的中斷請求輸入線引起。不論是內部定時器中斷還是外部計數脈沖中斷都可以使CPU進行計數處理,以便達到計時或計數控制的目的。 3.中斷優先級與中斷嵌套 通常,一個CPU總會有若干中斷源,但在同一瞬間,CPU只能響應其中的一個中斷請求,為了避免在同一瞬間若干個中斷源請求中斷而帶來的混亂,必須給每個中斷源的中斷請求設定一個中斷優先級,CPU先響應中斷優先級高的中斷請求。中斷優先級直接反映每個中斷源的中斷請求被CPU響應的優先程度,也是分析中斷嵌套的基礎。 和子程序類似,中斷也是允許嵌套的。在某一瞬間,CPU因響應某一中斷源的中斷請求而正在執行它
29、的中斷服務子程序時,若有中斷優先級更高的中斷源提出中斷請求,那它可以把正在執行的中斷服務子程序停下來,轉而響應和處理中斷優先權更高的中斷源的子程序,等到處理完后再轉回來繼續執行原來的中斷服務子程序,這就是中斷嵌套 。 4中斷系統功能 中斷系統是指能夠實現中斷功能的那部分硬件電路和軟件程序。中斷系統的功能通常有如下幾條: (1)進行中斷優先級排隊 (2)實現中斷嵌套 (3)自動響應中斷 (4)實現中斷返回 4.2.2 51單片機中斷系統結構和功能 1中斷源 MCS5l有5個中斷源。外部中斷INT0、INT1,定時器計數器0、l和串行口中斷。 (1)外部中斷INT0、INT1 輸入輸出設備的中斷請
30、求,系統故障的中斷請求等都可以作為外部中斷源,從引腳INT0或INT1輸入。外部中斷請求INT0、INT1可有兩種觸發方式:電平觸發及脈沖跳沿觸發,由TCON的ITO位及IT1位選擇。ITO(IT1)=“0”時,為INT0、INT1電平觸發方式,當引腳INT0或INT1上出現低電平時就向 CPU申請中斷, CPU響應中斷后要采取措施撤消中斷請求信號,使INT0或INT1恢復高電平。ITO(IT1)=“1”時為跳沿觸發方式,當INT0或INT1引腳上出現負跳變時,該負跳變經邊沿檢測器使IEO(TCON.1)或IE1(TCON3)置1,向CPU申請中斷。CPU響應中斷轉入中斷服務程序時,由硬件自動
31、清除IEO或IE1。CPU在每個機器周期采樣INT0、INT1,為了保證檢測到負跳變,引腳上的高電平與低電平至少應各自保持1個機器周期。 (2)定時器計數器0、l溢出中斷 定時器計數器計數溢出時,由硬件分別置TF0 =“1”或TF1 =“1”,TFi向CPU申請中斷。CPU響應中斷轉入中斷服務程序時,由硬件自動清除TFO或TF1。 (3)串行口中斷 串行口中斷由單片機內部串行口中斷源產生。串行口中斷分為單行口發送中斷和串行口接收中斷兩種。在串行口進行發送接收數據時,每當發送接收完一組數據,使串行口控制寄存器 SCON中的 RI =“1”或 TI =“1”,并向CPU發出串行口中斷請求,CPU響
32、應串行口中斷后轉入中斷服務程序執行。由于RI和TI作為一個中斷源,所以需要在中斷服務程序中安排一段對RI和TI中斷標志位狀態的判斷程序,以區分發生了接收中斷請求還是發送中斷請求,而且必須用軟件清除TI和RI。 2.中斷控制 (1)中斷允許控制 MCS5l單片機有多個中斷源,為了便于靈活使用,在每一個中斷請求信號的通路中設置了一個中斷屏蔽觸發器,控制各個中斷源的開放或關閉。在CPU內部還設置了一個中斷允許觸發器,只有在允許中斷的情況下,CPU才會響應中斷。如果禁止中斷,CPU不響應任何中斷,即中斷系統停止工作。 中斷屏蔽觸發器與中斷允許觸發器由中斷允許寄存器IE控制工作。IE的格式如下: IE的
33、每一位都可以由軟件置“1”或清“0”。置“l”中斷允許,0中斷屏蔽。EAESET1EX1ET0EX0IE0A8HD7D6D5D4D3D2D1D0 EX0ET0EX1ET1ESEAIE0TF0IE1TF1RI+TI中斷優先級控制圖4.8 中斷允許寄存器IE各位作用 CPU中斷允許位EA: EA =“l”時CPU中斷允許, EA =“0”時CPU屏蔽一切中斷請求,不響應全部中斷請求。 串行接口中斷允許位ES: ES =“1”時允許串行接口中斷,ES =“0”時禁止串行接口申請中斷。 定時器計數器中斷允許位ET0、ET1: ETi =“1”時,允許定時器計數器申請中斷,ETi =“0”時禁止定時器計
34、數器中斷。 外部中斷中斷允許位EX0、EX1:EXi =“1”時允許外部中斷申請中斷,EXi =“0”時禁止外部中斷。 (2)中斷優先權選擇 MCS-51單片機有兩個中斷優先級,每一個中斷源都可以通過編程,確定為高優先級中斷或低優先級中斷,高優先級的優先權高。同一優先級別中的中斷源不止一個,所以也有中斷優先權排隊問題。 中斷優先級由中斷優先級寄存器IP控制。IP的格式如下: PSPT1PX1PT0PX0IP0B8HD7D6D5D4D3D2D1D0 IP中的每一位都可以由軟件來置“1”或清“0”,置“l”高優先級,清“0”低優先級。 串行口中斷優先級選擇位PS: PS =“1”,串行接口中斷確定
35、為高優先級,PS =“0”時為低優先級。 定數器計數器中斷優先級選擇位PT0、PT1: PTi =“1”時,定時器計數器中斷確定為高優先級,PTi =“0”時為低優先級。 外部中斷優先級選擇位PX0、PX1: PXi =“1”時,外部中斷為高優先級,PXi =“0”時外部中斷為低優先級。圖4.9 中斷優先級 IE0IT0IE1IT0SI+RIIEIP1010101010PX0PT0PX1PT1PS高級別中斷低級別中斷 寄存器IP各位作用 同一優先級中的中斷源優先權排隊由中斷系統的硬件確定,用戶無法自行安排。優先權排隊順序如下: 外部中斷0 高 定時器計數器 0中斷 外部中斷1 定時器計數器1中
36、斷 串行口中斷 低 (3)MCS51系列單片機的中斷響應順序: CPU同時接收到幾個中斷請求時,首先響應優先權最高的中斷請求。其次按排隊順序響應中斷,正在進行的低優先級中斷服務程序能被高優先級中斷請求所中斷,實現二級中斷嵌套。正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷,一直到該中斷服務程序結束,返回了主程序且執行了主程序中的一條指令后,CPU才響應新的中斷請求。各中斷源優先級的設置要注意各個要求服務的中斷事件的輕重緩急和中斷服務程序的執行時間。原則是:緊急事件和處理時間短的中斷優先級別高。 【例4.6】 某單片機應用系統中需要處理的中斷事件有:一路外部中斷請求,兩路定時/計數器
37、中斷和串行口中斷。要求定時器1的工作方式2,定時時間200S(200個機器周期),中斷服務處理簡單,服務程序短;外部中斷較為緊急;串行口中斷間隔時間長,服務程序長。排定各中斷源的中斷優先級并確定中斷控制字。 排定中斷優先級: 定時器1設置為高優先級;外部中斷從引腳INT0引入,優先級其次;接下來是定時/計數器0;串行口中斷優先級別較低。 中斷允許控制字: IE = 10011011B = 9BH 中斷優先級控制字: IP = 00001000B = 08H , 只有定時器1為高優先級。 3中斷響應 MCS-5l CPU在每個機器周期的結束時期間順序采樣各中斷請求標志位,如有中斷請求標志位置位,
38、且滿足下列三個條件,則在下一機器周期響應中斷。否則,采樣的結果被取消。三個條件是: (1)沒有同級或高優先級的中斷正在處理。 (2)現行的機器周期是所執行指令的最后一個機器周期。 (3)正在執行的指令不是RETI或訪問IE、IP的指令。CPU在執行RETI或訪問IE、IP的指令后,至少需要再執行一條其他指令后才會響應中斷請求。 CPU響應中斷后,由硬件執行如下功能:(1)根據中斷請求源的優先級高低,使相應的 優先級狀態觸發器置1。(2)保留斷點,即把當前程序計數器PC的內容 壓入堆棧保存。(3)清相應的中斷請求標志位 IEO、IE1、TFO 或TF1。(4)把被響應的中斷服務程序的入口地址送入
39、 PC,轉而執行相應的中斷服務程序。4中斷服務程序 各中斷源對應的中斷服務子程序入口地址如下: 外部中斷0 0003H 定時器計數器 0中斷 000BH 外部中斷1 0013H 定時器計數器1中斷 001BH 串行口中斷 0023H 中斷響應時,硬件只將返回地址壓入堆棧,把中斷服務程序的入口地址送入PC。若在中斷服務程序中使用了其它寄存器,則需要在中斷服務程序中保護中斷現場。通常將累加器A、DPTR和程序狀態字PSW用軟件壓入堆棧,工作寄存器可以采用切換工作寄存器組的方法保護。中斷返回前,按相反的順序恢復現場。 要注意中斷服務程序的執行時間應小于兩次中斷事件的間隔時間。若中斷服務要處理的工作比
40、較復雜,程序執行時間較長,可以在中斷服務程序中設置標志,而在主程序中處理有關服務,這樣可以保持中斷系統響應其它中斷申請的靈敏度。 中斷服務程序的最后一條指令必須是中斷返回指令RETI。CPU執行該指令時,先將相應的優先級狀態觸發器清零,然后從堆棧中彈出棧頂的兩個字節到PC,從而返回到主程序的斷點處。保護現場(處理好主程序和子程序都用到的寄存儲器)及恢復現場的工作必須由用戶設計的中斷服務程序處理,外部中斷為電平觸發方式時,中斷請求的撤除也要由中斷服務程序來實現。串行接口中斷時,中斷服務程序中應有清除RI或TI的操作。練習6 中斷系統應用 在上一節例題中,定時/計數器工作時,CPU循環等待其計數溢
41、出,占用了大量CPU運行時間,其計數過程中CPU的其他處理任務只能在不同時間進行,效率低下。若采用中斷方式,在計數過程中CPU可處理其他工作,這樣可大大提高CPU工作效率。 【例4.7】 在P1.0引腳上輸出頻率1KHz,占空比3:1的方波信號。系統時鐘頻率 fosc =12MHz。 使用定時/計數器0定時,工作方式2,定時常數250。允許定時/計數器0中斷。采用30H單元進行軟件計數以擴展定時時間。 參考程序: ORG0000H AJMPMAIN ;復位入口 ORG 000BH AJMPST0 ;定時/計數器0中斷 服務程序入口 ORG 0030HMAIN: MOVSP,#6FH ;重設棧底
42、 MOVTMOD,#02H;設置定時/計數 器0工作方式2 MOVTH0,#06H ;送定時器0初值 MOVTL0,#06H SETBEA;開放CPU中斷 SETBET0;開放定時/計數器0中斷 MOV30H,#0;軟件計數器初值 SETBP1.0;輸出脈沖初始狀態 SETBTR0;啟動定時/計數器0 ;執行其他處理程序 ORG 0200H;定時/計數器0中斷服務程序ST0:PUSHACC ;保護現場 PUSHPSW INC30H ;軟件計數器加一 MOV A,#03H CJNE A,30H, HIGH ;軟件計數器3轉移 CLR P1.0 ;軟件計數器 = 3 (750S)輸出清“0” AJ
43、MP STF ;轉返回HIGH: INC A CJNE A,30H,ST01;軟件計數器4轉返回 MOV 30H,#00H ;清軟件計數器ST01: SETB P1.0;軟件計數器 = 4(1mS)輸出置“1” STF:POP PSW ;恢復現場 POP ACC RETI ;中斷返回【例4.8】 設計一個按24小時制運行的實時時鐘。 使用定時/計數器1定時,工作方式2,定時時間250S。系統時鐘頻率 fosc = 12MHz,計數初值250。允許定時/計數器0中斷。 使用30H、31H,作為擴展定時時間的軟件計數器。30H作為第一級計數器,計數到40(10mS);31H作為第二級計數器,計數到
44、100(1S=10040250S)。在中斷服務程序中對30H、31H計數。1S定時到置“1”秒標志(20H.1),在主程序中進行秒、分、時計數。32H為秒計數器,用BCD碼計數,60秒進位;33H為分計數器, 60分進位;34H為時計數器,24小時清“0”。三個計數器均用BCD碼計數,程序中應寫成十六進制形式。程序: ORG0000H AJMPMAIN ;復位入口 ORG001BH AJMPST1 ;定時/計數器1中斷服務 程序入口;主程序 ORG0030HMAIN:MOVSP,#6FH;重設棧底 CLRA;軟件計數單元清“0” MOVR1,#30H MOVR2,#5LOOP:MOVR1,A
45、INCR1 DJNZR2,LOOP CLR20H.1 ;秒標志清“0” MOVTMOD,#20H ;設置定時/計數器1工作方式 MOVTH1,#06H;送定時初值 MOVTL1,#06H SETBEA;開放CPU中斷 SETBET1;開放定時/計數器1中斷 SETBTR1;啟動定時器1LOOPA:JNB 20H.1,NEXT1;沒有秒標志轉移 CLR20H.1 ;清除秒標志 MOVR0,#32H ;R0指向秒計數器 MOVA,#1 ;秒計數器加一 ADDA,R0 DAA MOVR0,A CJNER0,#60H,NEXT1 ;不到60 秒轉移 MOVR0,#0 ;秒計數器清“0” INCR0 ;
46、R0指向分計數器 MOVA,#1;分計數器加一 ADDA,R0 DAA MOVR0,A CJNER0,#60H,NEXT1;不到60分轉移 MOVR0,#0;分計數器清“0” INCR0 ;R0指向小時計數器 MOVA,#1;小時計數器加一 ADDA,R0 DAA MOVR0,A CJNER0,#24H,NEXT1;不到24小時轉移 MOVR0,#0 ;小時計數器清“0”NEXT1:ACALLDISP ;調用顯示程序將計數送顯示 AJMPLOOPA ;循環;中斷服務程序 ST1: PUSH ACC ;保護現場 PUSH PSW INC 30H ;第一級計數器加一 MOV A,#28H;40轉返
47、回 XRL A,30H JNZSTF MOV30H,A;第一級計數器清“0” INC31H ;第二級計數器加一 MOVA,#64H;100轉返回 XRLA,31H JNZSTF MOV31H,A ;第二級計數器清“0” SETB20H.1 ;置“1”秒標志STF: POPPSW ;恢復現場 POPACC RETI ;中斷返回4.3.1串行口的基本概念 1. 串行通信和并行通信 計算機與外界的信息交換稱為通信。基本的通信方法有并行通信和串行通信兩種。 一組信息(通常是字節)的各位數據被同時傳送的通信方法稱為并行通信。并行通信依靠并行IO接口實現。并行通信速度快,但傳輸線根數多,只適用于近距離(相
48、距數公尺)的通信。 一組信息的各位數據被逐位順序在一條線上傳送的通信方式稱為串行通信。串行通信可通過串行接口來實現。串行通信速度慢,但傳輸線少,適宜長距離通信。2. 信息傳送方向 根據信息的傳送方向,串行通信可以進一步分為單工、半雙工和全雙工3種。信息只能單方向傳送稱為單工;信息能雙向傳送,但不能同時雙向傳送稱為半雙工;能夠同時雙向傳送則稱為全雙工。 MCS-5l單片機有一個全雙工串行口。全雙工的串行通信只需要一根輸出線(TXD)和一根輸入線(RXD),如圖4.10 所示。TXDRXDRXDTXD圖4.10 MCS-51雙工通信圖4.11 異步通信的格式 3. 異步串行通信 串行通信又有異步通
49、信和同步通信兩種方式。MCS-51單片機主要采用異步通信方式。 異步串行通信格式如圖 4.11所示。起始位停止位數據位 異步通信用起始位“0”表示字符的開始,然后從低位到高位逐位傳送數據,最后用停止位“1”表示字符結束。一個字符又稱一幀信息。圖4.10中,一幀信息包括1位起始位、8位數據位和1位停止位,數據位也可以增加到9位。在MCS-5l計算機系統中,第九位數據D9可以用作奇偶校驗位,在多機通信方式中也可以用作地址數據幀標志。兩幀信息之間可以無間隔,也可以有間隔,且間隔時間可任意改變,間隔用空閑位“1”來填充。異步通信只用一條線傳送數據,通信前發收雙方應協商確定傳送速度。4. 波特率 異步通
50、信在一幀信息中,每一位的傳送時間(位寬)是協商確定的,位傳送時間的倒數稱為波特率(Baud rate),波特率表示每秒傳送的位數。例如每秒960個字符,若每個字符為10位,則波特率為9600。位傳送時間是104S。 MCS-51串行IO接口的基本工作是:發送時,將CPU送來的并行數據轉換成一定格式的串行數據,從引腳TXD上按規定的波特率逐位輸出;接收時,要監視引腳RXD,一旦出現起始位“0”,就將外圍設備送來的一定格式的串行數據轉換成并行數據放在緩沖器中,等待CPU讀入。4.3.2 51單片機的串行口功能與結構1功能 MCS-5l單片機中的異步通信串行口能方便地與其他計算機或串行傳送信息的外圍
51、設備(如串行打印機、CRT終端等)實現雙機、多機通信。 串行口有四種工作方式,如表4.2所示。 SM0 SM1 工作方式 功能 波特率 0 0 方式0 移位寄存器方式, 用于并行IO擴展 fosc/12 0 1 方式18 位通用異步 可變 接收器發送器 1 0 方式29 位通用異步 fosc/12 接收器發送器 或fosc/24 1 1 方式39 位通用異步 可變 接收器發送器 方式0是同步通信方式,用兩條線傳送數據,一條傳送字符,一條傳送每位的同步信號。該功能可通過外接移位寄存器芯片實現擴展并行IO接口。該方式又稱移位寄存器方式。方式1、方式2、方式3都是異步通信方式。方式1是8位異步通信方
52、式,一幀信息中包括8位數據,l位起始位,l位停止位,共10位組成。方式1用于雙機串行通信。方式2、方式3都是9位異步通信接口、一幀信息中包括9位數據,l位起始位,l位停止位,共11位組成。方式2、方式3的區別在于波特率不同,方式2、方式3可用于雙機通信或多機通信。 2結構 串行口結構如圖4.12,主要由發送數據緩沖器、發送控制器、輸出控制門、接收數據緩沖器、接收控制器、輸入移位寄存器等組成。發送數據緩沖器只能寫入,不能讀出,接收數據緩沖器只能讀出,不能寫入,故兩個緩沖器共用一個符號特殊功能寄存器SBUF,共用一個地址99H。串行口中還有兩個特殊功能寄存器SCON、PCON,分別用來控制串行口的
53、工作方式和波特率。波特率發生器由定時器計數器1構成。圖4.12串行口結構示意圖3串行口控制寄存器SCON 串行口控制寄存器SCON的格式如下:SM0SM1SM2RENTB8RB8TIRISCON98HD7D6D5D4D3D2D1D0 (l)串行口工作方式選擇位SMO、SM1: SMO、SM1由軟件置“1”或清“0”,用于選擇串行口的4種工作方式。 (2)多機通信控制位SM2: SM2 =“1”時,接收到一幀信息,如果接收到的第9位數據為1,硬件將RI置“1”,申請中斷;如果第九位數據為“0”,則RI不置“1”,且所接收的數據無效。 SM2 =“0”時,只要接收到一幀信息,不管第九位數據是 0還
54、是 1,硬件都置RI =“1”,并申請中斷。RI由軟件清“0”,SM2由軟件置“1”或清“0”。 多機通信時,各從機先將SM2置“l”。接收并識別主機發來的地址,當地址與本機相同時,將SM2清“0”,并與主機進行數據傳遞。各機所發送的數據第9位必須為“0”。 (3)允許接收控制位REN: REN =“1”時允許并啟動接收,REN =“0”時禁止接收。REN由軟件置“1”或清“0”。 (4)發送數據第九位(D8位)TB8: TB8是方式2、方式3中要發送的第九位數據,事先用軟件寫入1或0。方式0、方式1不用。 (5)接收數據第九位(D8位)RB8:方式2、方式3中,由硬件將接收到的第九位數據存入
55、RB8。方式1中,停止位存入RB8。 (6)發送中斷標志位TI:發送完一幀信息,由硬件使TI置“1”,TI必須由軟件清“0”。 (7)接收中斷標志位RI:接收完一幀有效信息,由硬件使RI置“1”,RI必須由軟件清“0”。 4串行口數據緩沖寄存器 SBUF: 串行口數據緩沖寄存器SBUF由串行輸出移位寄存器和兩級緩沖的串行輸入寄存器組成。發送時當數據寫入SBUF時啟動串行數據發送,連同此前置入的TB8,按設定波特率串行輸出。發送完一幀信息,置中斷標志位TI。接收時串行數據移入串行輸入寄存器完成后,自動將數據并行送入接收SBUF,并置標志位RI 為“1”通知CPU讀取數據,CPU應該在下一個串行數
56、據接收完成之前讀出。 5. 工作方式 (1)方式0 方式0為同步傳送方式。這時串行口輸出端可直接與移位寄存器相連,RXD引腳傳送數據,TXD引腳輸出同步移位脈沖。用來擴展IO口或外接同步輸入輸出設備。在方式0下發送、接收的是8位數據,且低位在前。 發送過程: 當 CPU將數據寫入到發送緩沖器 SBUF時(如執行 MOV SBUF,A命令),串行口即將 8位數據以fosc12的波特率從RXD引腳輸出,同時由TXD引腳輸出同步脈沖。當一幀數據(8位)發送完畢后,置中斷標志 TI為“1”。 在方式0中,SCON寄存器中的SM2、TB8、RB8均無意義,通常將其設為“0”。(2)方式1 方式l為8位異
57、步通信方式。一幀信息為10位:l位起始位、8位數據位(低位在前)和1位停止位。TXD為發送端,RXD為接收端。 發送過程 串行口以方式1發送數據時,數據由TXD端輸出。當CPU將數據寫入到發送緩沖器時,便啟動串行口發送。發送完一幀信息,置“1”TI。 方式1發送時的定時信號,即發送移位脈沖,是由定時器1送來的溢出信號經過16或32分頻(取決于SMOD的值)獲得的。因此,其波特率是可變的,其中m取決于SMOD,值為“0”或“1”。 方式1的波特率=(2m32)T1的溢出率。 接收過程 接收數據由RXD端輸入,串行口以所選定波特率的16倍速率采樣 RXD端狀態。在 REN =“1”時,當檢測到由1
58、到0的變化,即一個字符的起始位,則接收過程開始。在移位脈沖的控制下,把收到的數據一位一位的移入接收移位寄存器,直到9位全部接收完畢(包括1位停止位)且當RI =“0”時,將接收移位寄存器中的8位數據裝入接收緩沖器SBUF中,把停止位送入RB8,并將RI置“1”。 為保證數據接收可靠無誤,對每一位數據要連續采樣3次,接收的值取3次采樣中至少兩次相同的值。這樣既可以避開信號兩端的邊緣失真,又可以防止由于收、發時鐘頻率不完全一致而導致的接收錯誤。(3)方式2和方式3 方式2、3可用于多機通信,SM2 =“1”,第9位數據,作為地址數據的識別位;也可以用于雙機通信,此時第9位數據可作為奇偶校驗位,但必
59、須使SM2 =“0”。 這兩種方式均為9位異步通信方式。一幀信息由11位組成:l位起始位,9位數據位(低位在前),其中第9位數據可以用作奇偶校驗位,或在多機通信方式中用作地址數據幀標志,1位停止位。方式2和方式3的操作完全一樣,只是波特率不同。方式 2的波特率是固定的,為(2m64)X fosc;方式 3的波特率是可變的,為(2m32) X(定時器1的溢出率)。 發送過程 方式2、3發送時,數據由TXD端輸出,發送一幀信息為11位。啟動發送前,必須把要發送的第 9位數據裝入SCON寄存器的 TB8位中(如用 SETB TB8或 CLR TB8指令)。準備好TB8的值后,CPU執行一條將數據寫入
60、發送緩沖器SBUF的指令即可啟動發送過程。串行口會自動把TB8的值取出,裝入第9位數據的位置,再逐一發送出去。一幀信息發送完畢,使TI置“1”。 接收過程 接收數據從RXD端輸入,當REN“1”時,CPU便不斷的對RXD采樣,采樣速率為波特率的16倍。檢測到負跳變時,啟動接收器。位檢測器對每位采集3個值,用三中取二的辦法確定每位的狀態。接收完一幀信息后,只有滿足RI =“0”、SM2 =“0”或接收到的第9位為1這兩個條件,8位數據才裝入接收緩沖器SBUF,而將第9位數據裝入SCON中的RB8位,并將RI置“1”。否則接收到的信息無效,且不置“1”RI。 TXDRXD主機TXD RXD0# 從
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論