




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
AT89S52單片機中斷與定時
單元3學習目標:了解中斷的基本概念、中斷的作用及中斷請求方式掌握AT89S52單片機中斷結構,6個中斷源的中斷請求、中斷屏蔽、優先級設置等初始化編程方法掌握定時/計數器4種工作方式的初始化編程方法學會使用定時器/計數器編寫計數、定時應用程序的方法技能目標:會編寫中斷和定時/計數器初始化程序會計算定時/計數器初值根據項目要求,能夠靈活應用中斷和定時/計數器的資源項目一中斷控制的流水燈第一部分
項目要求采用中斷方法控制燈的亮滅,由中斷服務程序控制I/O口置高,置低,即可控制燈的全亮和全滅。外部中斷INT1接按鍵(KEY),作為中斷申請信號,開機后8個發光二極管從左到右流水,產生中斷后,8個發光管全亮、全滅,延時一定時間后,再循環。第二部分相關知識
一、中斷的概念中斷的定義:
當中央處理器CPU正在處理某事件時外界發生了更為緊急的請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完畢后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷。
從中斷的定義我們可以看到中斷應具備中斷源、中斷響應、中斷返回三個要素。中斷源發出中斷請求,單片機對中斷請求進行響應,當中斷響應完成后應進行中斷返回,返回被中斷的地方繼續執行原來被中斷的程序。二、AT89S52中斷源與中斷向量地址中斷源就是向CPU發出中斷請求的來源。AT89S52共有六個中斷源:2個外部中斷(INT0和INT1)、3個定時器中斷(定時器0、1和2)和1個串行中斷。如圖所示。(一)外部中斷外部中斷0←→
P3.2外部中斷1←→
P3.3外部中斷請求有兩種信號方式:電平方式和脈沖方式。電平方式的中斷請求信號是低電平有效。脈沖方式的中斷請求信號則是脈沖的負跳變有效。(二)內部定時和外部計數中斷定時:對內部振蕩器輸出的脈沖計數。計數脈沖的個數反映了時間的長短。計數:對外部脈沖計數。計數脈沖的個數僅僅反映外部脈沖輸入的多少。外部脈沖由T0引入←→P3.4外部脈沖由T1引入←→
P3.5外部脈沖由T2引入←→
P1.0當定時器/計數器發生溢出,便激活中斷。外部計數中斷請求信號是脈沖的負跳變引起。(三)串行中斷串行中斷是為串行通信的而需要設置的。當串行口發送完或接收完一幀信息時,單片機內部硬件便自動串行發送或接收中斷標志位置1。當CPU查詢到這些標志位為1時,便激活串行中斷。串行中斷是由單片機內部自動發生的,不需要在芯片外設置引入腳。(四)中斷矢量地址中斷源中斷標志位中斷矢量地址外部中斷0(
)IE00003H定時器0(T0)中斷TF0000BH外部中斷1()IE10013H定時器1(T1)中斷TF1001BH串行口中斷發送中斷TI0023H接收中斷RI定時器2(T2)中斷T2溢出中斷TF2002BHT2EX中斷EXF2三、中斷標志與控制
要實現中斷,首先中斷源要提出中斷申請,而中斷請求的過程是單片機內部特殊功能寄存器TCON和SCON相關狀態位—中斷請求標志位置1的過程,當CPU響應中斷時,中斷請求標志位才由硬件或軟件清0。圖3-3(一)定時器/計數器控制寄存器TCONTCON為定時器/計數器的控制器,它也鎖存外部中斷請求標志,其格式如下:TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)D7D6D5D4D3D2D1D0位地址8FH8EH8DH8CH8BH8AH89H88H與中斷有關的控制位共6位IE0和IE1:外部中斷請求標志。當CPU采樣到(或)端出現有效中斷請求(低電平或脈沖下降沿)時,IE0(或IE1)位由片內硬件自動置1;當中斷響應完成轉向中斷服務程序時,由片內硬件自動清0。IT0和ITl:外部中斷請求信號觸發方式控制標志。IT0(或IT1)=1,(或)信號為脈沖觸發方式,脈沖負跳沿有效;IT0(或IT1)=0,(或)信號電平觸發方式,低電平有效。IT0(或IT1)位可由用戶軟件置1或清0TF0和TFl:定時器/計數器溢出中斷請求標志。當定時器0(或定時器1)產生計數溢出時,TF0(或TF1)由片內硬件自動置1;當中斷響應完成轉向中斷服務程序時,由片內硬件自動清0。計數溢出標志位的使用有兩種情況:采用中斷方式時,作中斷請求標志位來使用;采用查詢方式時,作查詢狀態位來使用。(二)串行口控制寄存器SCONSM0SM1SM2RENTB8RB8
TIRISCON(98H)D7D6D5D4D3D2D1D0位地址9FH9EH9DH9CH9BH9AH99H98H與中斷有關的控制位共2位TI:串行口發送中斷請求標志。當串行口發送完一幀信號后,由片內硬件自動置1。但CPU響應中斷時,并不清除TI,必須在中斷服務程序中由軟件對TI清0。RI:串行口接收中斷請求標志。當串行口接收完一幀信號后,由片內硬件自動置1。但CPU響應中斷時,并不清除RI,必須在中斷服務程序中由軟件對其清0。應當指出,AT89S52系統復位后,TCON和SCON中各位被復位成“0”狀態,應用時要注意各位的初始狀態。(三)中斷允許控制寄存器IEEA——ET2ESET1EX1
ET0EX0IE(A8H)D7D6D5D4D3D2D1D0位地址AFHAEHADHACHABHAAHA9HA8H與中斷有關的控制位共7位EA:中斷允許總控制位。EA=0時,中斷總禁止,禁止一切中斷;EA=1時,中斷總允許,而每個中斷源允許與禁止,分別由各自的允許位確定。EX0和EX1:外部中斷允許控制位。EX0(或EX1)=0,禁止外部中斷;EX0(或EX1)=1,允許外部中斷。ET0和ET1:定時器中斷允許控制位。ET0(ET1)=0,禁止定時器0(或定時器1)中斷;ET0(ET1)=1,允許定時器0(或定時器1)中斷。ES:串行中斷允許控制位。ES=0,禁止串行(TI或RI)中斷;ES=1,允許串行(TI或RI)中斷。ET2:定時器2中斷允許控制位。ET2=0,禁止定時器2(TF2或EXF2)中斷;ET2=1,允許定時器2(TF2或EXF2)中斷;在單片機復位后,IE各位被復位成“0”狀態,CPU處于關閉所有中斷的狀態。例如:可以采用如下字節傳送指令來開放定時器T0的溢出中斷:
MOVIE,#82H
也可以用位尋址指令,則需采用如下兩條指令實現同樣功能:
SETBEASETBET0
在89S52復位后,IE各位被復位成“0”狀態,CPU處于關閉所有中斷的狀態。所以,在89S52復位以后,用戶必須通過程序中的指令來開放所需中斷。(四)中斷優先級控制寄存器IP89S52單片機具有高、低2個中斷優先級。高優先級用“1”表示,低優先級用“0”表示。對于所有的中斷源,均可由軟件設置為高優先級中斷或低優先級中斷,并可實現兩級中斷嵌套。IP寄存器可以位尋址。PSPT2PT1PX1PT0PX0IP(B8H)D7D6D5D4D3D2D1D0BDHBCHBBHBAHB9HB8H
與中斷有關的控制位共6位
PX0:外部中斷0優先級設定位。
PT0:定時器0(T0)優先級設定位。
PXl:外部中斷1優先級設定位。
PTl:定時器1(T1)優先級設定位。
PS:為串行口優先級設定位。
PT2:為定時器2優先級設定位。可用軟件對IP的各位置1或清0
例如CPU開中斷可由以下兩條指令來實現:
SETB0AFH;EA置1
或0RLIE,#80H;按位“或”,EA置1CPU關中斷可由以下兩條指令來實現:
CLR0AFH;EA清0
或ANLIE,#7FH;按位“與”,EA清0
又如設置外部中斷源為高優先級,外部中斷源為低優先級,可由下面指令來實現:
SETB0B8H;PX0置1CLR0BAH;PXl清0
或MOVIP,#000××0×1B;PX0置1,PXl清0
四、優先級結構中斷優先級只有高低兩級。所以在工作過程中必然會有兩個或兩個以上中斷源處于同一中斷優先級。若出現這種情況,內部中斷系統對各中斷源的處理遵循以下兩條基本原則:①低優先級中斷可以被高優先級中斷所中斷,反之不能。②一種中斷(不管是什么優先級)一旦得到響應,與它同級的中斷不能再中斷它。中斷源同級自然優先級外部中斷0最高級定時器0中斷↓外部中斷1┆
定時器1中斷↓串行口中斷最低級定時器2中斷最低級
例:設89S52的片外中斷為高優先級,片內中斷為低優先級。試設置IP相應值。解:(a)用字節操作指令
MOVIP,#05H
或MOV0B8H,#05H(b)用位操作指令
SETBPX0SETBPX1CLRPSCLRPT0CLRPT1
五、中斷系統的初始化及應用(一)中斷系統的初始化
(1)CPU開中斷或關中斷;
(2)某中斷源中斷請求的允許或禁止(屏蔽);
(3)設定所用中斷的中斷優先級;
(4)若為外部中斷,則應規定低電平還是負邊沿的中斷觸發方式。
例請寫出為低電平觸發的中斷系統初始化程序。解:(1)采用位操作指令
SETBEA;CPU開中斷
SETBEXl;開中斷
SETBPXl;令為高優先級
CLRITl;令為電平觸發
(2)采用字節型指令
MOVIE,#84H;開中斷
ORLIP,#04H;令為高優先級
ANLTCON,#0FBH;令為電平觸發(二)中斷系統的應用
中斷管理與控制程序一般包含在主程序中,根據需要通過幾條指令來實現,例如CPU開中斷,可用指令“SETBEA”或“ORLIE,#80H”來實現,關中斷可用指令“CLREA”,或“ANLIE,#7FH”來實現。
中斷服務程序的一般格式:
ORGADDRESSAJMPINTVS┇INTVS:CLREA;關中斷
PUSHPSW;保護現場
PUSHA┇SETBEA;開中斷,允許CPU響應高級中斷┇
中斷服務
┇
CLREA;關中斷
POPA;恢復現場
POPPSW┇SETBEA;開中斷
RETI;中斷返回編寫此程序應注意以下幾點:(1)為了要跳到用戶設計的中斷服務程序,在相應入口地址安排一條跳轉指令;(2)在中斷服務程序的末尾,安排一條返回指令RETI;(3)由于在響應中斷時,CPU只自動保護斷點,所以CPU的其他現場(如寄存器A、B狀態,狀態字PSW,通用寄存器R0、R1等)的保護和恢復也必須由用戶在中斷服務程序中安排;(4)在此多級中斷的中斷服務程序中,保護現場之后的開中斷(SETBEA)是為了允許有更高級中斷打斷此中斷服務程序,恢復現場和保護現場之前的關中斷(CLREA)是為了保證在恢復和保護現場時,CPU不響應新的中斷請求,從而使現場數據不受到破壞或者造成混亂;(5)當把程序中保護現場之后的"SETBEA"和恢復現場之前的"CLREA"刪除,就是一個單級中斷服務程序。(三)中斷程序舉例
【例3.3】使用一個按鍵控制圖3.4所示的流水燈,每按一次按鍵流水燈的流動方向改變一次,要求使用中斷技術處理按鍵。解:如圖3.4所示,按鍵接在P3.3,因此采用外部中斷1,中斷申請從輸入。每按一次按鍵,產生一次中斷,流水燈流動方向便改變一次。當開關SA17閉合時,發出中斷請求。中斷服務程序的矢量地址為0013H。圖3.4方向可控流水燈ORG0000H ;定義下一條指令的地址
LJMPSTART;轉向主程序
ORG0013H ;安排外部中斷1處理程序的第一條指令
LJMPKEYS;直接轉移到中斷處理程序
ORG0100H;主程序起點
START:MOVSP,#70H;設置堆棧棧底指針
SETBIT1 ;設置外部中斷1的中斷方式為下降沿中斷
SETBEX1 ;開放外部中斷1SETBEA ;開放總中斷
MOV A,#01H;#01H送累加器AL1:MOV P2,A ;累加器A中內容送P2口
MOV R7,#0FFH;延時
L3:MOV R6,#0FFH L2:DJNZR6,L2DJNZR7,L3 JNBFX,L4;FX=0時轉移到L4(FX是流水燈流動方向標志)
RLA;累加器A中內容左移一位
SJMPL5;轉移至L5L4:RRA;累加器A中內容右移一位
L5:SJMPL1;轉移至L1;按鍵中斷程序
;入口:外部中斷1;功能:確認按鍵后改變方向標志FX的狀態
ORG0300H ;中斷處理程序入口
KEYS:MOV R7,#20H ;首先延時去抖
K1:MOV R6,#0FFHDJNZR6,$DJNZR7,K1JBKEY,K2;延時完成后再檢測按鍵
CPLFX;確認按鍵按下,改變方向標志位狀態
K2:RETI;中斷結束返回
KEYBITP3.3 ;定義按鍵變量
FX BIT00H;定義位變量,用于判斷方向
END ;結束
第三部分項目實施
一、項目實施分析
(一)硬件電路
P1口連接8個發光二極管,外部中斷INT1接KEY(P2.7接按鍵SW8,P3.3接KEY),作為中斷申請信號,開機8個發光二極管從左到右流水,產生中斷后,8個發光管全亮、全滅,延時后,再循環。如圖3.5所示。參考程序:
ORG0000h;偽指令
LJMPSTART;跳轉到單片機的主程序
ORG0013H;外部中斷1的入口地址
LJMPEXT1;跳轉到中斷服務程序
ORG0100H;偽指令,單片機主程序的開始START:MOVIE,#10000100bMOVIP,#00000100bMOVTCON,#00000000b;定時器初始化
MOVSP,#40HMOVP1,#0FFHMOVP2,#00HMOVP3,#0FFH;設置 P1、P2、P3口狀態LOOP:MOVA,#0FFHCLRCMOVR2,#08HLOOP1:RLCAMOVP1,ALCALLDELAYDJNZR2,LOOP1JMPLOOP;小燈循環點亮EXT1:PUSHACC;中斷服務程序
PUSHPSWMOVA,#00H;小燈全亮
MOVR3,#0AHLOOP2:MOVP1,ALCALLDELAYCPLADJNZR3,LOOP2POPPSWPOPACCRETIDELAY:MOVR5,#20;延時程序D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND項目二速度可控流水燈第一部分
項目要求將8個發光二極管從左到右流水燈循環顯示,通過按鍵改變循環的速率,最小為0.2秒,最大為2秒,即流水燈的流動速度分為10級,使用按鍵控制流動速度。每按一次按鍵流水燈的流動速度改變1級。按一次按鍵,速度增加一級,逐步增加,增加到最高速度后,再循環。采用定時器T0,方式1,定時器定時時基是0.05秒。
第二部分相關知識AT89S52單片機內部有三個16位可編程的定時器/計數器,T0、T1和T2。它們既可用作定時器方式,又可用作計數器方式,且都有4種工作方式可供選擇。但T0、T1與T2的4種工作方式不同。
一、定時器/計數器結構與功能定時器0,定時器1是16位加法計數器,分別由兩個8位專用寄存器組成:定時器0由TH0和TL0組成,定時器1由TH1和TL1組成。見圖。圖3.6定時器/計數器結構框圖
1.計數功能計數方式時,T的功能是計來自T0(P3.4)、T1(P3.5)的外部脈沖信號的個數。
輸入脈沖由1變0的下降沿時,計數器的值增加1直到回零產生溢出中斷,表示計數已達預期個數。脈沖的計數長度與計數器預先裝入的初值有關。初值越大,計數長度越?。怀踔翟叫?,計數長度越大。最大計數長度為65536(216)個脈沖(初值為0)。2.定時方式定時方式時,T記錄89S52內部振蕩器輸出的脈沖(機器周期信號)個數。
每一個機器周期使T0或T1的計數器增加1,直至計滿回零自動產生溢出中斷請求。定時器的定時時間不僅與計數器的初值即計數器的長度有關,而且還與系統的時鐘頻率有關。在機器周期一定的情況下,初值越大,定時時間越短;初值越小,定時時間越長。最長的定時時間為65536(216)個機器周期(初值為0)。
定時器/計數器是一種可編程的部件,在其工作之前必須將控制字寫入工作方式和控制寄存器,用以確定工作方式,這個過程稱為定時器/計數器的初始化。對定時器/計數器進行控制的寄存器共有2個:TCON
、TMOD二、定時器/計數器控制寄存器1.定時控制寄存器TCON(88H)工作方式寄存器TCON:控制定時器的啟動、停止,標志定時器的溢出和中斷情況。TCON的高4位:
定時器的運行控制位和溢出標志位;低4位:
外部中斷觸發方式控制位和鎖存外部中斷請求源。
TF0和TF1:定時器/計數器溢出標志位。當定時器/計數器0(或定時器/計數器1)溢出時,由硬件自動使TF0(或TF1)置1,并向CPU申請中斷。CPU響應中斷后,自動對TF1清零。TF1也可以用軟件清零。
TR0和TR1:定時器/計數器運行控制位。TR0(或TR1)=0,停止定時器/計數器0(或定時器/計數器1)工作。TR0(或TR1)=1,啟動定時器/計數器0(或定時器/計數器1)工作。用指令SETBTR1(或CLRTR1)使TR1置1(或清零)。GATEC/TM1M0GATEC/TM1M0定時器1定時器0其中,低4位用于T0,高4位用于T1。2.工作方式寄存器TMOD(89H) M1、M0:工作方式控制位C/T:計數器/定時器方式選擇位C/T=0,為定時方式。C/T
=1,為計數方式。GATE:門控位GATE=0時,只要用軟件使TR0(或TRl)置1就可以啟動定時器T0(或T1);GATE=1時,只有/INT0(或/INT1)引腳為高電平且由軟件使TR0(或TRl)置1時,才能啟動定時器工作。
TMOD不能位尋址,只能用字節指令設置高4位定義定時器1,低4位定義定時器0定時器工作方式。復位時,TMOD所有位均置0。
例:設置定時器1工作于方式1,定時工作方式與外部中斷無關,則M1=0,M0=1,GATE=0,因此,高4位應為0001;定時器0未用,低4位可隨意置數,但低兩位不可為11(因方式3時,定時器1停止計數),一般將其設為0000。因此,指令形式為:
MOVTMOD,#10H三、定時器/計數器工作方式與程序設計(一)工作方式0圖3.7定時器/計數器0方式0的邏輯結構工作方式寄存器TMOD中的M1M0為:00
方式0為13位的計數器,由TL0的低5位和TH0的8位組成,TL0低5位計數溢出時向TH0進位,TH0計數溢出時,向中斷標志位TF0進位(硬件置位TF0),并申請中斷。T0是否溢出可查詢TF0是否被置位,以產生T0中斷。★工作在定時方式
C/T=0。定時器T0工作在定時方式。定時器T0對機器周期計數。
定時器T0在工作前,應先對13位的計數器賦值,開始計數時,在初值的基礎上進行減1計數。定時時間的計算公式為:
定時時間=(213–計數初值)×晶振周期×12或定時時間=(213–計數初值)×機器周期若晶振頻率為12MHz,則最短定時時間為
[213-(213-1)]×(1/12)×10-6×12=1μs最長定時時間為(213-0)×(1/12)×10-6×12=8192μs★工作在計數方式
C/T=1,定時器T0工作在計數方式。13位計數器對外部輸入信號進行加1計數。
當INT0由0變為1時,開始計數;當INT0由1變為0時,停止計數。這樣可以測量在INT0端出現的正脈沖的寬度。方式0計數時,最大計數值為
213=8192(個外部脈沖)。例3.5:假設89S52單片機晶振頻率為12MHz,要求定時時間8ms,使用定時器T0,工作方式0,計算定時器初值X。解:∵t=(213–X)×機器周期當單片機晶振頻率為12MHz時,機器周期=1μs∴8×103=(213–X)×1X=8192-8000=192
轉換成二進制數為:11000000B例3.6:利用T0方式0產生1ms的定時,在P1.2引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz。解:(1)解題思路要在P1.2引腳輸出周期為2ms的方波,只要使P1.2每隔1ms取反一次即可。執行指令為CPLP1.2。(2)確定工作方式:方式0TMOD=00HD0D1D2D3D4D5D6D7定時器/計數器T1定時器/計數器T0TMODGATEC/TC/TM0M1M0M1GATE(89H)bitC/=0:T0為定時功能;(D2位)GATE=0,只要用軟件使TR0(或TR1)置1就能啟動定時器T0(或T1);M1M0=00,工作方式0∴TMOD的值為=00HTMOD.4~TMOD.7可取任意值,因T1不用,這里取0值。使用
MOVTMOD,#00H即可設定T0的工作方式。(3)計算1ms定時時T0的初值機器周期T=1/fosc×12=1μs計數個數:X=1ms/lμs=1000設T0的計數初值為x0,則x0=(213一X)
=8192—1000
=7192D轉換成二進制數為:1110000011000B
高8位低5位將高8位11100000=0E0H裝入TH0
將低5位11000=18H裝入TL0(4)編程可采用中斷和查詢兩種方式編寫程序。方法一:中斷方式
ORG0000H LJMPMAIN;轉主程序MAIN ORG000BH
LJMPIT0P;轉T0中斷服務程序IT0PAFHAEHADHACHABHAAHA9HA8HA8HIEbitEAESET1EX1ET0EX011EA=1,CPU開放中斷;ET0=1,允許T0中斷;ORG1000HMAIN:MOVSP,#60H;設堆棧指針
MOVTMOD,#00H;設置T0為方式
0,定時
MOVTL0,#18H;送定時初值
MOVTH0,#0E0HSETBEA;CPU開中斷
SETBET0;T0允許中斷
SETBTR0;啟動T0定時HERE:SJMPHERE;等待中斷ORG1200H;T0中斷入口
IT0P:MOVTL0,#18H;重新裝入計數初值
MOVTH0,#0E0H
CPLP1.2;輸出方波
RETI;中斷返回
END方法二:查詢方式
MOVTMOD,#00H;設置T0為方式0,定時
MOVTL0,#18H;送初值
MOVTH0,#0E0H
SETBTR0;啟動T0定時LOOP:JBCTF0,NEXT;查詢定時時間到否?SJMPLOOPNEXT:MOVTL0,#18H;重新裝入計數初值
MOVTH0,#0E0HCPLP1.2;輸出方波
SJMPLOOP;重復循環(二)工作方式1方式1為16位的定時器/計數器圖3.8定時器/計數器0方式1的邏輯結構圖工作方式寄存器TMOD中的M1M0為:01定時器T0工作方式1與工作方式0類同,差別在于其中的計數器的位數。工作方式1以16位計數器參與計數。工作在定時方式
定時時間=(216–計數初值)×晶振周期×12或定時時間=(216–計數初值)×機器周期若晶振頻率為12MHz,則最短定時時間為[216-(216-1)]×(1/12)×10-6×12=1μs最長定時時間為(216-0)×(1/12)×10-6×12=65536μs工作在計數方式最大計數值為216=65536(個外部脈沖)Flash
例3.8:假設89S52單片機晶振頻率為12MHz,所需定時時間為10ms,當T0工作在方式1時T0計數器的初值是多少?解:∵t=(216–X0)×機器周期當單片機晶振頻率為12MHz時,機器周期=1μs∴10×103=(216–X0)×1X=65536-10000=55536轉換成二進制數為:1101100011110000B=0D8F0H
例3.9:假設89S52單片機晶振頻率為12MHz,定時器T0的定時初值為9800,計算T0工作在方式1時的定時時間。解:∵t=(216–X0)×機器周期當單片機晶振頻率為12MHz時,機器周期=1μs∴t=(216–9800)×1t=65536-9800=55736μs例3.10:用定時器T0產生50HZ的方波。由P1.0輸出此方波(設時鐘頻率為12MHZ)。采用中斷方式。解:50HZ的方波周期T為T=1/50=20ms20ms
可以用定時器產生10ms的定時,每隔10ms改變一次P1.0的電平,即可得到50HZ的方波。定時器T0應工作在方式1。(1)工作在方式1時的T0初值,根據下式計算:
t=(216–X)×機器周期 時鐘頻率為12MHz,則機器周期=1μs10×103=(216–X)×1X=65536–10000=55536轉換為二進制數:1101100011001100B高8位低8位
高8位=0D8H裝入TH0,低8位=0CCH裝入TL0。(2)程序
ORG0000H LJMPMAIN ORG000BH ;T0的中斷入口地址
LJMPT0INT ORG0100HMAIN:MOVTMOD,#01H
;設置T0為工作方式1MOVTH0,#0D8H
;裝入定時器初值
MOVTL0,#0CCHSETBET0 ;設置T0允許中斷
SETBEA ;CPU開中斷
SETBTR0 ;啟動T0SJMP$ ;等待中斷中斷服務程序;
ORG0300HT0INT:CPLP1.0 ;P1.0取反
MOVTH0,#0D8H
;重新裝入定時初值
MOVTL0,#0CCHRETI注:SETBET0 ;設置T0允許中斷
SETBEA ;CPU開中斷這兩條指令可以等效為MOVIE,#82H。Flash圖3.9定時器/計數器0方式2的邏輯結構圖T0(三)工作方式2工作方式寄存器TMOD中的M1M0為:10
定時器T0在工作方式2時,16位的計數器分成了兩個獨立的8位計數器TH0和TL0。此時,定時器T0構成了一個能重復置初值的8位計數器。其中,TL0用作8位計數器,TH0用來保存計數的初值。每當TL0計滿溢出時,自動將TH0的初值再次裝入TL0。工作在定時方式
定時時間=(28–計數初值)×晶振周期×12或定時時間=(28–計數初值)×機器周期若晶振頻率為12MHz,則最短定時時間為[28-(28-1)]×(1/12)×10-6×12=1μs最長定時時間為(28-0)×(1/12)×10-6×12=256μs
工作方式2常用于重復定時計數,省去了方式0、方式1重新裝入初值的麻煩。工作在計數方式工作方式2與工作方式0、方式1的差別,在于工作方式2是一個8位的計數器。計數工作方式時,最大計數值為28=256(個外部脈沖)【例3.11】利用T0方式2實現以下功能:當T0(P3.4)引腳每輸入一個負脈沖時,使P1.0輸出一個500μs的同步脈沖。設晶振頻率為6MHz,請編程實現該功能。其波形如圖所示。(1)確定工作方式首先選T0為方式2,外部事件計數方式。當P3.4引腳上的電平發生負跳變時,T0計數器加1,溢出標志TF0置1;然后改變T0為500μs定時工作方式,并使P1.0輸出由1變為0。T0定時到產生溢出,使P1.0引腳恢復輸出高電平。T0先計數,后定時,分時操作。根據題目要求方式控制字TMOD是:計數時:(TMOD)=00000110B=06H定時時:(TMOD)=00000010B=02H(2)計算初值機器周期T=12/fosc=12/6MHZ=2μs計數時:計數個數X=1計數初值=(256﹣X)=(256﹣1)=255=0FFH,(TH0)=(TL0)=0FFH定時時:計數個數X=T/Tm=500μs/2μs=250定時初值=256﹣X=256﹣250=6,(TH0)=(TL0)=06H (3)編程方法采用查詢方法START:MOVTMOD,#06H
;T0方式2,外部計數方式
MOVTH0,#0FFH;T0計數初值
MOVTL0,#0FFHSETBTR0;啟動T0計數LOOPl:JBCTF0,PTF01
;查詢T0溢出標志,TF0=1時轉移,且TF0=0(查P3.4負跳變)SJMPLOOPlPTF01:CLRTR0;停止計數
MOVTMOD,#02H;T0方式2,定時
MOVTH0,#06H;T0定時500μs初值
MOVTL0,#06HCLRP1.0;P1.0清0SETBTR0;啟動定時500μsLOOP2:JBCTF0,PTF02;查詢溢出標志,定時到TF0=l轉移,且TF0=0(第1個500μs到否?)SJMPLOOP2PTF02:SETBP1.0;P1.0置1(500μs到)CLRTR0;停止計數
SJMPSTARTFlash(四)工作方式3
T0分為兩個獨立的8位計數器TL0和TH0。TL0可以作為8位定時器或外部事件計數器,TH0被固定為一個8位定時器方式。圖3.11定時器/計數器0方式3的邏輯結構圖Flash工作方式寄存器TMOD中的M1M0為:11工作方式3僅對定時器T0有效。當定時器T0工作在方式3時,將16位的計數器分為兩個獨立的8位計數器TH0和TL0。當定時器T0工作在方式3時,定時器T1只能工作在方式0~2,并且工作在不需要中斷的場合。在一般情況下,當定時器T1用作串行口波特率發生器時,定時器T0才設置為工作方式3。此時常把定時器T1設置為方式2,用作波特率發生器。例3.12:設某用戶系統中已使用了兩個外部中斷源,并置定時器T1工作在方式2,作串行口波特率發生器用。現要求再增加一個外部中斷源,并由P1.0引腳輸出一個5kHz的方波。fosc=12MHz。(1)確定工作方式T0方式3下,TL0作計數用,而TH0可用作8位的定時器,定時控制P1.0引腳輸出5kHz的方波信號。T1為方式2,定時。TMOD是:00100111B=27H(2)計算初值TL0初值:FFH,TH0初值X0計算如下:∵P1.0的方波頻率為5kHz,故周期T=1/(5kHz)=0.2ms=200μs∴用TH0定時100μs時,X0=(256﹣100)×12/12=156
MOVTMOD,#27H
;T0為方式3,計數;T1為方式2,定時
MOVTL0,#0FFH
;置TL0計數初值
MOVTH0,#156
;置TH0計數初值
MOVTHl,#data
;data是根據波特率要求設置的常數
MOVTLl,#data
MOVTCON,#55H
;外中斷0,外中斷1邊沿觸發,啟動T0,T1
MOVIE,#9FH
;開放全部中斷:
TL0溢出中斷服務程序(由000BH轉來)TL0INT:MOVTL0,#0FFH
;TL0重賦初值(中斷處理)
RETITH0溢出中斷服務程序(由001BH轉來)TH0INT:MOVTH0,#156
;TH0重新裝入初值
CPLP1.0
;輸出波形
RETI
計數器初值的計算(1)工作方式0:M=213=8192。(2)工作方式1:M=216=65536。(3)工作方式2:M=28=256。(4)工作方式3:M=28=256。這樣,在計數器模式和定時器模式下,計數初值都是X=M-C(計數值,十六進制數)。定時器初值的計算定時器模式下對應的定時時間為
T=C·Tm=(M-X0)Tm
式中,Tm為單片機的機器周期(Tm為晶振時鐘周期的12倍)。四、定時器/計數器2
定時器/計數器2是一個16位定時器/計數器,是定時器或外部事件計數器。定時器2有三種操作方式:捕獲方式、自動重裝方式和波特速率發生器方式。工作方式由T2CON的控制位選擇。1.定時器/計數器2控制寄存器T2CONT2CON可位尋址,地址為0C8H。位序D7D6D5D4D3D2D1D0位標志TF2EXF2RCLKTCLKEXEN2TR2C/CP/位地址CFCEHCDHCCHCBHCAHC9HC8HTF2:定時器/計數器2溢出標志位。當定時器/計數器2溢出時,TF2置1,TF2置位后只能用軟件清除。當RCLK=1或TCLK=1時,TF2將不被置位。EXF2:在捕捉/重裝模式下,T2的外部觸發標志。當EXEN2=1時,引腳T2EX/P1.1的負跳變,使EXF2=1,并產生T2中斷。EXF2只能用軟件清除。當DCEN=1時,T2處于向上/向下計數模式,EXF2不引起中斷。RCLK:接收時鐘允許。當RCLK=1時,T2的溢出脈沖可作為串行口方式1和方式3的接收時鐘;當RCLK=0時,T1的溢出脈沖將作為串行接收時鐘。C/:定時器/計數器2工作方式選擇位。C/=0,為定時工作方式;C/=1,為計數工作方式。CP/:T2捕捉/重裝功能選擇位。當CP/=1且EXEN2=1時,引腳T2EX/P1.1的負跳變引起捕捉操作。當CP/=0且EXEN2=1時,引腳T2EX/P1.1的負跳變引起自動重裝操作。當CP/=0且EXEN2=1時,T2溢出將引起捕捉自動重裝操作。TCLK:發送時鐘允許。當TCLK=1時,T2的溢出脈沖可作為串行口方式1和方式3的發送時鐘;當TCLK=0時,T1的溢出脈沖將作為串行發送時鐘。EXEN2:T2外部允許。當EXEN2=1時,T2EX的負跳變引起T2捕捉或重裝,此時T2不能用做串行口的串行時鐘。當EXEN2=0時,T2EX的負跳變將不起作用。TR2:T2啟動控制位。當TR2=1時,啟動T2;TR2=0時,停止T2。2.定時器/計數器2模式寄存器T2MODT2MON不可位尋址,地址為0C9H。位序D7D6D5D4D3D2D1D0位標志——————T20EDCENT20E:定時器2輸出允許位。當T20E=1時,允許時鐘輸出至引腳T2/P1.0;當T20E=0時,禁止引腳T2/P1.0輸出。DCEN:計數器方向控制。當DCEN=0時,T2自動向上計數;當DCEN=1時,T2向上/向下計數方式,由引腳T2EX狀態決定計數方向。3.定時器/計數器2操作方式選擇C/RCLK+TCLKCP/T20ETR2模式X000116位自動重裝模式X010116位捕捉模式X1XX1波特率發生器模式X1X11時鐘輸出模式XXXX0T2停止例題:AT89S52單片機晶振頻率為6MHz,設有一重復周期為20ms的低頻脈沖信號由引腳T0/P3.4引入,要求該引腳每發生一次負跳變,P1.0端輸出一個10ms脈寬的同步負脈沖;同時P1.1輸出一個15ms的同步正脈沖。其波形如圖所示。P3.4P1.0P1.110ms15ms計數方式初值FFH定時方式初值06H計數方式初值FFH定時方式初值06H解:分析思路:(1)將定時器/計數器0作為方式2計數功能,初值為FFH,外部脈沖由P3.4口負跳變一次,便發生一次溢出,TF0置1。(2)改變定時器/計數器0為500μs的定時方式,初值為06H,并且使P1.0=0,P1.1=1。通過循環20次,延時10ms后,再使P1.0=1。(3)定時器0繼續延時,再循環10次,延時5ms,隨后使P1.1=0,定時器0再恢復到計數狀態。程序如下:
ORG1000HSTART4:SETBP1.0;P1.0為高電平
CLRP1.1;P1.1為低電平LOOPA:MOVTCON,#00HMOVTMOD,#06H;T0為計數方式2MOVTH0,#0FFH;計數一次就溢出
MOVTL0,#0FFHSETBTR0;啟動T0LOOPB:JBCTF0,LOOPC;檢測到溢出就跳轉
SJMPLOOPBLOOPC:CLRTR0MOVTMOD#02H;T0為定時方式2MOVTH0,#06H;置T0初值,延時500μsMOVTL0,#06HMOVR5,#1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業自動化與機器人技術的關系
- 工作壓力下的團隊合作挑戰與對策
- 工業設計創新與技術美學
- 工業風餐廳空間設計
- 工程中的綠色制造技術探討
- 工廠自動化設備的保養策略
- 工廠安全生產管理與監控系統
- 工程機械的智能化管理研究
- 工程機械的發展現狀及趨勢
- 2021年東營市專業技術人員公需科目試題及答案
- 清華版六年級信息技術下冊全冊教案
- 阿克蘇地區國土空間規劃(2021年-2035年)
- 2024年工業廢水處理工(高級)技能鑒定理論考試題庫(濃縮500題)
- 基本公共衛生服務項目村級考核用表
- 山東省棗莊市滕州市2023-2024學年七年級下學期期末數學試題
- 全屋定制板材直播話術腳本范文模版新手直播帶貨
- 2024家庭醫生式服務簽約協議書
- 江蘇省南師附中2024屆高一數學第二學期期末教學質量檢測試題含解析
- 教師禮儀與溝通技巧(山東聯盟)智慧樹知到期末考試答案章節答案2024年濰坊學院
- 產業園企業服務規范及管理辦法模板
評論
0/150
提交評論