




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章80C51單片機的CTC與中斷系統§6.180C51單片機的CTC及其應用§6.280C51單片機的中斷系統及其應用§6.180C51單片機的CTC及其應用一、80C51單片機的定時器/計數器二、定時器/計數器的應用舉例概述
在測、控領域往往需要定時檢測某個參數,或按一定的時間間隔來進行某種控制。還有一些控制是根據對某種事件的計數結果進行的。因此幾乎所有單片機內部都集成了定時/計數器,以簡化微機測控系統的設計。一、80C51單片機的定時器/計數器80C51系列單片機典型產品中80C51等有兩個16位定時器/計數器T0,T1;80C52等有三個16位定時器/計數器T0、T1和T2。它們都可以用作定時器或外部事件計數器。概述一、80C51單片機的定時器/計數器(一)定時器/計數器T0、T1的結構原理(二)定時器/計數器T0、T1的工作方式(三)定時器/計數器T2(四)看門狗(WTD)一、80C51單片機的定時器/計數器1、結構框圖
80C51單片機內部有2個可編程的16位定時器/計數器T0、T1,結構框圖如下圖所示。它是由6個專用寄存器構成的:TH0、TL0構成16位計數器T0,TH1、TL1構成16位計數器T1,TMOD、TCON為兩個定時器共用,用來選擇工作方式和控制啟停。(一)定時器/計數器T0、T1的結構原理1、結構框圖(一)定時器/計數器T0、T1的結構原理
T0、T1是加1計數器,每當輸入信號有一個負跳變時,計數器加1,它們可用于計數也可用于定時。1、結構框圖(一)定時器/計數器T0、T1的結構原理
當用作計數時,它對外部輸入(自引腳T0、T1)的脈沖信號計數。每個機器周期的S5P2采樣引腳電平,若前一個機器周期采樣值為1,后一個機器周期采樣值為0,則計數器加1。對輸入計數信號的要求:
由于識別一個從1到0的負跳變信號需要兩個機器周期(24個振蕩周期),所以最高的計數頻率為系統時鐘頻率的1/24;又因為一個機器周期對信號采樣一次,因此輸入信號的電平至少應持續一個機器周期。1、結構框圖(一)定時器/計數器T0、T1的結構原理
當用作定時時,它對內部時鐘計數,每個機器周期,計數器加1。1個機器周期為12個振蕩周期,因此定時時間由計數長度和時鐘頻率共同決定。1、結構框圖(一)定時器/計數器T0、T1的結構原理2、定時器方式寄存器TMOD
TMOD用來選擇定時器的工作方式,各位定義如下圖所示:(一)定時器/計數器T0、T1的結構原理2、定時器方式寄存器TMOD(一)定時器/計數器T0、T1的結構原理功能選擇方式選擇門控方式選擇3、定時器控制寄存器TCON
TCON的高4位分別作為T0、T1的溢出標志和運行控制位,低4位用于外部中斷,如下圖所示:(一)定時器/計數器T0、T1的結構原理3、定時器控制寄存器TCON(一)定時器/計數器T0、T1的結構原理(二)定時器/計數器T0、T1的工作方式簡述80C51單片機定時器T0有四種工作方式:方式0、方式1、方式2和方式3。定時器T1有三種工作方式:方式0、方式1、方式2。1、工作方式0
當M1M0兩位為00時,定時器/計數器選為工作方式0。它是一個13位的計數器,由TLX的低5位和THX組成。結構如下圖所示:(二)定時器/計數器T0、T1的工作方式1、工作方式0(二)定時器/計數器T0、T1的工作方式1、工作方式0
當TLX的低5位計數溢出時即向THX進位,而THX計數溢出時向中斷標志位TFX進位。在開中斷的情況下,會向CPU發出中斷請求;CPU響應中斷后,硬件自動清除TFX標志。TFX也可供CPU讀寫,CPU寫入狀態與硬件置“1”或清“0”的效果相同。(二)定時器/計數器T0、T1的工作方式1、工作方式0由結構圖可見,當C/T=1時,多路開關接通引腳TX,計數器對外部時鐘計數;(二)定時器/計數器T0、T1的工作方式當C/T=0時,多路開關接振蕩器經12分頻后的輸出,計數器對機器周期計數,即工作于定時方式。1、工作方式0
當門控位GATE=0時,定時器的啟停僅由TRX控制,而當GATE=1時,定時器的啟停還受到INTX引腳電平的控制。(二)定時器/計數器T0、T1的工作方式1、工作方式0在方式0應用時應注意以下幾點:①
因計數器是做加1計數的,所以時間常數初值應用補碼裝入。②
方式0為13位計數器,應正確安排13位二進制碼。③
如果要重復定時或計數,則須重新設置時間常數初值。(二)定時器/計數器T0、T1的工作方式
當M1M0兩位為01時,定時器/計數器選為工作方式1,它是一個16位的計數器,結構如下圖所示。
方式1和方式0唯一不同的就是位數,其它控制方式和用法均相同。(二)定時器/計數器T0、T1的工作方式2、工作方式1(二)定時器/計數器T0、T1的工作方式2、工作方式1
當M1M0兩位為10時,定時器/計數器選為工作方式2,為8位時間常數可自動再裝入的計數器,結構如下圖所示。(二)定時器/計數器T0、T1的工作方式3、工作方式2(二)定時器/計數器T0、T1的工作方式3、工作方式2
這時TLX為8位計數器,THX為時間常數初值寄存器。當TLX計滿溢出時,置位TFX,并將THX的內容(即時間常數初值)重新裝入TLX中。方式2特別適合于需要重復定時/計數的場合。(二)定時器/計數器T0、T1的工作方式3、工作方式2
當M1M0兩位為11時,選擇工作方式3。方式3只適用于T0,如果企圖將T1置為方式3,則將使T1停止計數,與清“0”TR1的效果相同。
T0工作于方式3時,變成兩個獨立的8位計數器TL0和TH0,結構如下圖所示。(二)定時器/計數器T0、T1的工作方式4、工作方式3(二)定時器/計數器T0、T1的工作方式4、工作方式3TL0占用了原T0的所有資源;TH0占用了原T1的部分資源TR1和TF1,且TH0只能作為定時器用。
這種情況下,T1仍可工作于方式0、1或2的定時或計數,但TR1、TF1被TH0占用。該方式一般用在T1作為串口的波特率發生器,或不需要中斷的場合。(二)定時器/計數器T0、T1的工作方式4、工作方式3(三)定時器/計數器T2
T2內部除了兩個8位計數器TH2、TL2和控制寄存器T2CON及方式控制寄存器T2MOD外,還設置了捕捉寄存器RCAP2L(低字節)和RCAP2H(高字節)。概述80C52中有一個功能較強的定時器/計數器T2,它是一個16位的、具有自動重裝載和捕捉能力的定時器/計數器。
T2的計數脈沖源有兩個:內部機器周期和外部計數脈沖(從T2即P1.0端輸入)
此時P1.1作為外部控制信號輸入端T2EX。(三)定時器/計數器T2概述TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2捕捉/重裝載選擇1,選擇捕捉0.選擇重裝載計數定時方式選擇1,計數0,定時運行控制位1,啟動T20,關閉T2允許/禁止外部信號觸發捕捉或重裝載1,允許0,禁止1、T2中的特殊功能寄存器(1)T2控制寄存器T2CON(字節地址C8H):(三)定時器/計數器T21、T2中的特殊功能寄存器TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2串行口發送波特率發生器選擇1,選擇T20,選擇T1串行口接收波特率發生器選擇1,選擇T20,選擇T1T2外部標志1,T2EX引腳(P1.1)上出現,造成捕捉/重裝載,0,CPU響應中斷,應由軟件清除該標志。(EXEN2=1)T2溢出標志,T2溢出時置位(在波特率發生器方式下不置位)并申請中斷,只能靠軟件清除。該位置1,申請中斷。(1)T2控制寄存器T2CON(字節地址C8H):(三)定時器/計數器T2(2)T2方式控制寄存器T2MOD:T2OEDCEN1,向下計數向下計數允許位0,向上計數T2輸出允許位(僅對80C54/58)1,允許時鐘輸出至T2(P1.0)0,不允許輸出T2MOD的復位值為:××××××00B1、T2中的特殊功能寄存器(三)定時器/計數器T2(3)數據寄存器:TH2,TL2兩個8位寄存器構成16位計數器,可供CPU以字節方式讀寫。(4)捕捉寄存器:RCAP2H、RCAP2L用于捕捉計數器TH2、TL2的計數狀態或預置計數初值。1、T2中的特殊功能寄存器(三)定時器/計數器T22、T2的功能選擇:定時/計數(1)C/T2=0,選擇定時方式。每個機器周期,T2的內容增1。(2)C/T2=1,選擇計數方式,當T2(P1.0)引腳有一個負跳變,T2內容增1。注意計數脈沖頻率不得超過振蕩器頻率的1/24。(三)定時器/計數器T23、T2的工作方式選擇包括捕捉、自動重裝載和波特率發生器三種。由T2CON中的CP/RL2和RCLK+TCLK來選擇,見下表:(三)定時器/計數器T2T2的工作方式選擇表捕捉方式:即在一定條件下,自動將計數器TH2和TL2中的數據讀入RCAP2H和RCAP2L。捕捉方式的原理圖如下:3、T2的工作方式選擇(三)定時器/計數器T2(P1.0)(P1.1)T2外部標志(在T2CON中)允許/禁止外部觸發(在T2CON中)捕捉方式:3、T2的工作方式選擇(三)定時器/計數器T2當CP/RL2=1,選擇捕捉方式。下述情況下將發生捕捉操作:當EXEN2=1,且引腳T2EX(P1.1)出現負跳變時,發生捕捉,同時標志EXF2置1,申請中斷。捕捉方式:3、T2的工作方式選擇(三)定時器/計數器T2
如果T2的中斷開放,CPU響應后轉到002BH執行中斷服務程序。
注意:在中斷返回之前,必須用軟件來清除TF2/EXF2。捕捉方式:3、T2的工作方式選擇(三)定時器/計數器T2自動重裝載方式:即在一定條件下,自動將RCAP2H和RCAP2L中的數據裝入計數器TH2和TL2中。一般RCAP2H和RCAP2L中預置了T2的計數初值。自動重裝載方式的原理圖如下:3、T2的工作方式選擇(三)定時器/計數器T2自動重裝載方式:3、T2的工作方式選擇(P1.0)(P1.1)T2的自動重裝載方式(三)定時器/計數器T2當CP/RL2=0時,選擇自動重裝載方式,以下兩種情況下發生自動重裝載操作:①T2溢出時,打開重裝載三態緩沖器,發生重裝載操作,同時置位TF2,申請中斷。自動重裝載方式:3、T2的工作方式選擇(三)定時器/計數器T2當CP/RL2=0時,選擇自動重裝載方式,以下兩種情況下發生自動重裝載操作:②當EXEN2=1,且引腳T2EX(P1.1)有負跳變時,發生重裝載操作,同時置位EXF2標志,申請中斷。自動重裝載方式:3、T2的工作方式選擇(三)定時器/計數器T2如果T2中斷允許,CPU響應后轉到002BH執行中斷服務程序。注意:在返回之前,應該用軟件清除TF2/EXF2
標志。自動重裝載方式:3、T2的工作方式選擇(三)定時器/計數器T2波特率發生器方式:當T2CON中RCLK+TCLK=1時,T2作為串行口的波特率發生器,其結構原理如下圖所示:3、T2的工作方式選擇(三)定時器/計數器T2波特率發生器方式:3、T2的工作方式選擇T2的波特率發生器方式結構圖(三)定時器/計數器T2
當T2用作波特率發生器時,TH2的溢出不使TF2置位,不產生中斷,所以此時T2不必禁止中斷。計數時鐘可以是內部,也可以是外部,由C/T狀態決定,波特率的值決定于RCAP2H和RCAP2L裝載的初值。波特率發生器方式:3、T2的工作方式選擇(三)定時器/計數器T2該方式下,在T2計數過程中,不能再讀寫TH2和TL2;可以讀但不能改寫RCAP2H和RCAP2L;如果要訪問RCAP2H和RCAP2L,應先關閉定時器。
上圖可見,當T2用作波特率發生器時,若T2CON中EXEN2位置1,引腳T2EX(P1.1)可作為一個外部中斷源。波特率發生器方式:3、T2的工作方式選擇(三)定時器/計數器T2(四)看門狗(WTD)概述看門狗亦稱監視定時器T3,它的作用是強迫單片機進入復位狀態,使之從硬件或軟件故障中解脫出來。即單片機的程序進入了錯誤狀態后,在一個指定的時間內,用戶程序沒有重裝定時器T3,將產生一個系統復位。
80C552中WTD是由一個11位的分頻器和8位定時器T3(加1計數)組成。結構其結構如下圖所示:看門狗T3結構圖(四)看門狗(WTD)結構T3由外部引腳及PCON.4(WLE)和PCON.1(PD)控制。低電平,允許WTD工作,禁止掉電方式,也不能置位掉電位PCON.1。高電平,禁止WTD工作,允許掉電方式。引腳在軟件調試階段,通過將接高電平來禁止T3工作,待調試結束后,再將接低電平。(四)看門狗(WTD)WLE(PCON.4)——看門狗定時器允許重裝標志1:允許定時器T3重裝。0:T3裝入后WLE自動清除,若該位為0,說明T3已被重裝。T3的重裝和溢出,產生復位的時間間隔,由裝入T3的值決定。結構
對T3的裝入分兩步:先置位PCON.4(WLE),然后裝入T3。T3裝入后,PCON.4自動復位。如果PCON.4=0,則T3不能被裝入。(四)看門狗(WTD)工作過程
定時器T3的工作原理:在T3溢出時,復位8X552并產生復位脈沖輸出至復位引腳RST。為防止系統復位,必須在定時器T3溢出前,通過軟件對其進行重裝。如果發生軟件或硬件故障,將使軟件對定時器T3的重裝失敗,從而T3溢出導致復位信號的產生。用這樣的方法可以在軟件失控時,恢復程序的正常運行。(四)看門狗(WTD)編程實例例如:watchdog使用的一段程序如下:T3EQU0FFH;定時器T3的地址PCONEQU87H;PCON的地址WATCH_INTVEQU156;看門狗的時間間隔LCALLWATCHDOG看門狗服務程序WATCHDOG:ORLPCON,#10H;允許定時器T3重裝MOVT3,#WATCH_INTV;裝載定時器T3RET(四)看門狗(WTD)二、定時器/計數器的應用舉例(一)定時器/計數器編程步驟(二)定時器/計數器的應用舉例(1)確定工作方式,把方式字寫入TMOD寄存器。(2)計算定時/計數初值,并將初值寫入寄存器TH0、TL0或TH1、TL1。計數初值應用補碼寫入。作計數器:計數初值X=2n-C,作定時器:時間常數初值X=2n-T/TC,式中n為計數器位數,C是實際計數值,TC是機器周期,T是設定的時間。(一)定時器/計數器編程步驟(3)將中斷控制字和中斷優先級別分別寫入中斷允許寄存器IE和中斷優先級寄存器IP。(4)向TCON寫入適當命令字,控制定時器/計數器的運行。(一)定時器/計數器編程步驟例1利用T0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz
解:要在P1.0輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。T0的方式字為:TMOD=00H計算要定時1ms,T0的初值:機器周期Tc=(1/fosc)×12=[1/(12×106)]×12=1μs(二)定時器/計數器的應用舉例(二)定時器/計數器的應用舉例
利用T0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz
例1設T0的計數初值為X,則(213-X)×1×10-6=1×10-3
X=213-1×10-3/(1×10-6)
=8192-1000
=7192
=1110000011000B高8位
E0H
低5位
18H利用T0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻fosc=12MHz。那么:TH0初值為E0H,TL0初值為18H。采用查詢TF0的狀態來控制P1.0輸出。程序清單:MOVTMOD,#00H;置T0為方式0MOVTL0,#18H;送計數初值MOVTH0,#0E0HSETBTR0;啟動T0例1(二)定時器/計數器的應用舉例利用T0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz。
LOOP:JBCTF0,NEX;查詢定時時間到否SJMPLOOPNEX:MOVTL0#18H;重賦計數初值MOVTH0#0E0HCPLP1.0;輸出取反SJMPLOOP;重復循環例1(二)定時器/計數器的應用舉例利用T0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc=12MHz。
采用查詢方式的程序很簡單,但CPU要不斷地查詢溢出標志TF0的狀態,這就占用了CPU工作時間,以致CPU的效率不高。采用定時溢出中斷方式,可以提高CPU的效率。例1(二)定時器/計數器的應用舉例采用定時溢出中斷方式產生前例所要求的方波。
解:方式字和初值與上例一樣。程序清單:主程序:ORG0000HAJMPMAIORG000BH;T0中斷入口AJMPIST0;轉中斷服務程序例2(二)定時器/計數器的應用舉例采用定時溢出中斷方式產生前例所要求的方波。MAI:MOVSP,#53H;設置堆棧MOVTMOD,#00H;置T0為方式0MOVTL0,#18H;送初值MOVTH0,#OE0HSETBEA;CPU開中斷SETBET0;T0中斷允許SETBTR0;啟動T0HERE:SJMPHERE;等待中斷例2(二)定時器/計數器的應用舉例采用定時溢出中斷方式產生前例所要求的方波。中斷服務程序:IST0:MOVTL0,#18H;重裝初值MOVTH0,#0E0HCPLP1.0;輸出方波RETI;中斷返回例2(二)定時器/計數器的應用舉例采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。解:輸出周期為1s的方波要求定時值為500ms,在時鐘為12MHz的情況下,即使采用方式1(16位計數器),這個值也超過了方式1可能提供的最大定時值(65.536ms)。如果采用降低單片機時鐘頻率來延長定時時間,在一定的范圍內可以,但會降低CPU運行速度,而且定時誤差也會加大。例3(二)定時器/計數器的應用舉例采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。要獲得500ms的定時,可選用定時器T0方式1,定時時間為50ms。另設一個軟件計數器,初始值為10。每隔50ms定時時間到,產生溢出中斷,在中斷服務程序中使軟件計數器減1,當軟件計數器減到0時,就獲得500ms定時。下面介紹一種利用定時器定時和軟件計數來延長定時時間的復合方法。例3(二)定時器/計數器的應用舉例采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。若時鐘頻率f=12MHz,50ms定時的計數初值為:X=216-50×10-3/(1×10-6)=65536-50000
=15536D=0011110010110000B3CH
B0H
例3(二)定時器/計數器的應用舉例即X=3CB0H,因此TH0初值為3CH,TL0初值為B0H。采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。程序清單:ORG0000HAJMPMAI;轉主程序ORG000BHAJMPTIS;轉定時器T0中斷服務程序例3(二)定時器/計數器的應用舉例采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。MAI:MOVSP,#53HMOVTMOD,#01H;定時器T0方式1MOVTL0,#0B0H;T0低8位初值MOVTH0,#3CH;T0高8位初值MOVIE,#82H;T0開中斷SETBTR0;啟動T0MOVR1,#10;軟件計數器初值DEFG:SJMPDEFG;等待中斷例3(二)定時器/計數器的應用舉例采用定時器控制輸出一方波信號,要求方波的周期為1s。設單片機晶振頻率為12MHz。中斷服務程序:TIS:DJNZR1,NEXT;(R1)=0,則不對P1.0取反CPLP1.0;輸出方波MOVR1,#10;重裝軟件計數器初值NEXT:MOVTL0,#0B0H;重裝定時器初值MOVTH0,#3CHRETI;中斷返回例3(二)定時器/計數器的應用舉例利用定時器方式2對外部脈沖計數,要求每計滿110次,將P1.0端取反。解:外部信號由T1引腳輸入,每發生一次負跳變計數器加1,每輸入110個脈沖,計數器發生溢出中斷,中斷服務程序將P1.0取反一次。T1為計數方式2的方式字為:TMOD=60H。設T0不用,TMOD的低4位可任意,但不能使T0進入方式3,一般取0。例4(二)定時器/計數器的應用舉例利用定時器方式2對外部脈沖計數,要求每計滿110次,將P1.0端取反。計算T1的計數初值:X=28-110=146=92H則TL1的初值為92H,重裝初值寄存器TH1=92H。例4(二)定時器/計數器的應用舉例利用定時器方式2對外部脈沖計數,要求每計滿110次,將P1.0端取反。程序清單:MAI:MOVTMOD,#60H
;置T1方式2計數MOVTL1,#92H;賦初值MOVTH1,#92HMOVIE,#88H;定時器T1開中斷SETBTR1;啟動計數器HERE:SJMPHERE;等待中斷例4(二)定時器/計數器的應用舉例利用定時器方式2對外部脈沖計數,要求每計滿110次,將P1.0端取反。ORG001BH;中斷服務程序入口CPLP1.0;對P1.0取反RETI;中斷返回例4(二)定時器/計數器的應用舉例利用T0門控位測試引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上。解:根據要求,解題思路為:將T0設為定時器方式1,計數初值為0,GATE程控為1,置TR0為1。一旦P3.2引腳出現高電平即開始計數,直到出現低電平為止,然后讀取T0的計數值并顯示。測試過程如下圖所示:例5(二)定時器/計數器的應用舉例對T0初始化,09H→TMOD,GATE=1T0從0開始計數,測量脈沖寬度0→TR0,停止計數讀T0值,送顯示利用T0門控位測試引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上。程序清單:START:MOVTMOD,#09H;T0定時方式1,GATE置1MOVTL0,#00HMOVTH0,#00HSETBTR0;啟動定時器計數WAIT1:JBP3.2,WAIT1;等待INT0變低例5(二)定時器/計數器的應用舉例利用T0門控位測試引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上CLRTR0;停止T0計數MOVR0,#DISBUF;顯示緩沖器首址送R0MOVA,TL0;機器周期存放格式為低位占低地址WAIT2:JNBP3.2,WAIT2;等待INT0升高WAIT3:JBP3.2,WAIT3;等待INTO變低例5(二)定時器/計數器的應用舉例利用T0門控位測試引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上。XCHDA,@R0;高位為占高地址。連續4個顯示緩沖單元INCR0SWAPAXCHDA,@R0INCR0MOVA,TH0XCHDA,@R0INCR0例5(二)定時器/計數器的應用舉例利用T0門控位測試引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上。SWAPAXCHDA,@R0DIS:LCALLDISUP;長調用顯示子程序AJMPDIS...;重復顯示脈寬機器周期數...
由于定時器方式1的16位計數長度有限,被測脈沖高電平寬度必須小于65536個機器周期。例5(二)定時器/計數器的應用舉例利用定時器/計數器測定周期示意圖利用定時器測定下圖所示波形的一個周期的長度。例6(二)定時器/計數器的應用舉例
解:設T0為定時、門控方式,當INT0為高電平時,啟動定時器,之后應改為非門控方式;T1為計數方式。信號波形及連接方式如上圖(b)所示。①定時器設置:當脈沖速率低于每秒3個時,每個脈沖周期為330ms左右,且設脈沖寬度小于100ms,故設置定時器的基本定時為100ms,可滿足測時的精度要求。例6利用定時器測定下圖所示波形的一個周期的長度。(二)定時器/計數器的應用舉例T0的TMOD的設置:采用門控方式啟動定時器,按方式1定時,故方式字為09H。GATEC/TM1M01001例6門控定時器方式1利用定時器測定下圖所示波形的一個周期的長度。(二)定時器/計數器的應用舉例時間常數計算:振蕩頻率6MHz,機器周期Tc為Tc=12/6×106=2×10-6s,設置初值為x:基本定時時間為100ms,于是(216-x)*(2×10-6)=100×10-3x=216-50×103=15536=3CB0H預置:(TH0)=3CH,(TL0)=0B0H例6利用定時器測定下圖所示波形的一個周期的長度。(二)定時器/計數器的應用舉例②計數器設置:T1設為計數器,計數值為2。當計數1時,啟動定時器;當計數2時,中斷計數器T1,并停止T0的定時;T1的中斷優先級高于定時器T0。T1的方式字為5H;計數初值為0FFFEH。預置:(TH1)=0FFH,(TL1)=0FEH。例6利用定時器測定下圖所示波形的一個周期的長度。(二)定時器/計數器的應用舉例
③編程:ORG000BH;定時器T0中斷入口AJMPTIME0ORG001BH;定時器T1中斷入口AJMPTIME1ORG××××HMOVR3,#0;清T0定時次數計數器SETBP3.2;置P3.2、P3.5為輸入狀態SETBP3.5
例6利用定時器測定下圖所示波形的一個周期的長度。(二)定時器/計數器的應用舉例
MOVTMOD,#59H
MOVTH0,#3CH;置定時器初值MOVTL0,#0B0HMOVTH1,#0FFH;置計數器初值MOVTL1,#0FEHSETBTR0;啟動定時器、計數器SETBTR1
MOVIP,#08H;T1中斷優先于T0例6利用定時器測定下圖所示波形的一個周期的長度。③編程:續1(二)定時器/計數器的應用舉例SETBET0;
允許T0、T1中斷SETBET1CLR20H.0;清T0、T1中斷軟標志CLR20H.1
SETBEA;CPU開中斷JNB20H.0,$;T0若未中斷,則踏步等待JNB20H.1,$;T1若未中斷,則踏步等待RET例6利用定時器測定下圖所示波形的一個周期的長度。③編程:續2(二)定時器/計數器的應用舉例TIME0:JB20H.0,LP;T0非初次中斷,轉MOVTMOD,#51H;取消門控方式SYTB20H.0
;置T0中斷軟標志
LP:MOVTH0,#3CH;重置定時器初值MOVTL0,#0B0HINCR3;軟件計數器加1RETI例6利用定時器測定下圖所示波形的一個周期的長度。③編程:續3(二)定時器/計數器的應用舉例TIME1:CLR20H.0;清除T0、T1中斷軟標志CLR20H.1CLRET0;禁止T0、T1中斷CLRET1
CLREA;CPU關中斷CLRTR0;關定時器,計數器CLRTR1
RETI
注:結果(R3)×100ms即為所測波形的周期。嚴格地講還應加上T0中的內容,即[(T0)-3CB0H)]×2us例6利用定時器測定下圖所示波形的一個周期的長度。③編程:續4(二)定時器/計數器的應用舉例§6.280C51單片機的中斷系統及其應用一、80C51單片機的中斷系統二、80C51單片機的中斷系統應用舉例中斷:程序在執行過程中,允許外部或內部事件打斷它,使其轉向為處理外部或內部事件的中斷服務程序中去;完成中斷服務程序后,CPU繼續執行原來被打斷的程序。這樣的過程稱為中斷。如下圖所示:概述一、80C51單片機的中斷系統中斷源:能產生中斷的外部和內部事件。概述一、80C51單片機的中斷系統
中斷優先級:當幾個中斷源同時申請中斷,CPU必須區分哪個中斷源更重要,從而確定優先處理哪個事件,這就是中斷優先級問題。當CPU正在處理某中斷事件時,又有另一事件申請中斷,CPU是否相應?
約定:高優先級的中斷源可以中斷CPU正在處理的低級的中斷服務程序,這就是中斷嵌套問題。概述一、80C51單片機的中斷系統
80C51單片機有5個中斷源,2個中斷優先級,它的中斷處理程序可實現兩級嵌套,有較強的中斷處理能力。單片機對中斷系統的管理是通過相關的專用寄存器來實現的。概述一、80C51單片機的中斷系統(一)中斷源及相關的專用寄存器(二)單片機對中斷請求的控制(三)單片機對中斷的響應一、80C51單片機的中斷系統1、80C51單片機的中斷源80C51(一)中斷源及相關的專用寄存器中斷源中斷服務程序入口中斷標志優先級順序0003HIE0高低定時器T0000BHTF00013HIE1定時器T1001BHTF1串行口中斷0023HTI或RI中斷源及相應的中斷矢量和中斷標志1、80C51單片機的中斷源(一)中斷源及相關的專用寄存器INT0INT12、定時器控制寄存器TCON定時器控制寄存器TCON的結構如下圖所示TCONTF1TR1TF0TR0IE1IT1IE0IT0位地址8F8E8D8C8B8A8988復位/未溢出:0T1溢出中斷:1T1中斷標志位停T1計數:0啟T1計數:1T1啟停位復位/未溢出:0T0溢出中斷:1停T0計數:0啟T0計數:1T0中斷標志位T0啟停位0:INT1無中斷請求1:INT1有中斷請求0:INT1為電平觸發1:INT1為邊沿觸發0:INT0無中斷請求1:INT0有中斷請求0:INT0為電平觸發1:INT0為邊沿觸發(一)中斷源及相關的專用寄存器2、定時器控制寄存器TCON
當定時器T0或T1定時到或計數滿時(即由全“1”變為全“0”),溢出標志TF0或TF1被硬件置位,若中斷是開放的,即可向CPU發出中斷請求。CPU響應此中斷時由內部硬件自動將標志TF0或TF1清“0”,控制轉到相應中斷入口。注意:TF0或TF1可由軟件讀寫,軟件寫入與硬件置位、復位效果相同。定時器T0、T1中斷(一)中斷源及相關的專用寄存器(一)中斷源及相關的專用寄存器2、定時器控制寄存器TCON外部中斷INT0、INT1外部中斷有兩種觸發方式:
在邊沿觸發方式下,有專門的中斷請求標志IE0、IE1,當CPU響應時,內部硬件自動將IE0或IE1清“0”,控制轉到相應的中斷入口。沿(一)中斷源及相關的專用寄存器3、串行口控制寄存器SCONSCON的結構如下圖所示,其中RI/TI是串行口接收/發送中斷標志SCONSM0SM1SM2RENTB8RB8TIRI位地址9F9E9D9C9B9A9998
0:無接收中斷1:有接收中斷0:無發送中斷1:有發送中斷在串行口一節中介紹(一)中斷源及相關的專用寄存器3、串行口控制寄存器SCON
RI
接收中斷標志。當串行口接收完一幀數據,該標志置“1”,CPU響應串行口中斷后內部硬件不清除,必須通過軟件清“0”。
(一)中斷源及相關的專用寄存器3、串行口控制寄存器SCON
TI
發送中斷標志。當串行口發送完一幀數據,該標志置“1”,CPU響應串行口中斷后內部硬件不清除,必須通過軟件清“0”。
(一)中斷源及相關的專用寄存器3、串行口控制寄存器SCON注意:RI、TI的中斷入口都是0023H,故CPU響應后轉入0023H開始執行服務程序,首先必須判斷是RI中斷還是TI中斷,然后進行相應服務。
在返回主程序之前需用軟件清除RI或TI,否則會出現一次請求多次響應的錯誤。(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明
電平觸發方式
CPU在每個機器周期的S5P2采樣INT0和INT1的輸入電平,在電平觸發方式下,單片機中沒有專門的中斷請求標志,外部中斷申請觸發器的狀態隨著CPU在每個機器周期采樣到的外部中斷輸入線的電平變化而變化,同時單片機響應中斷后,也不能自動清除請求信號。(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明對觸發信號的要求:觸發信號低電平必須保持足夠長的時間,直到CPU響應為止;但持續時間亦不能太長,在中斷返回之前必須撤去。
電平觸發方式(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明
電平觸發方式
解決這個問題的方法有兩種:
一是用具有相應功能的接口芯片,如8255在選通輸入方式時,當外部數據被選通到其數據輸入寄存器時,INTR變高,向80C51單片機發中斷請求,當單片機讀取8255輸入數據寄存器中的內容后,INTR自動變低,INTX變高,撤消中斷請求。80C51(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明
另一種方法是在單片機之外增設一個請求標志(使用觸發器),如下圖所示,再配合相應程序即可。
電平觸發方式80C51(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明
電平觸發方式外部設置標志的程序如下:MAIN:SETBP3.0CLRIT0SETBEX0SETBEAHERE:AJMPHERE(一)中斷源及相關的專用寄存器
電平觸發方式4、關于外部中斷觸發方式的說明WBINT:CLRP3.0MOVA,#0FFHMOVP1,AMOVA,P1SWAPAMOVP1,ASETBP3.0
RETI(一)中斷源及相關的專用寄存器4、關于外部中斷觸發方式的說明
邊沿觸發方式
CPU在每個機器周期的S5P2采樣INT0和INT1的輸入電平,如果前一個周期采樣到為高電平,接著的下一個周期采樣到為低電平,則置位中斷請求標志IE0或IE1(在TCON中),表示外部中斷源正在向CPU申請中斷,直到該中斷被響應后,標志IE1或IE0才被硬件清“0”。1、中斷使能控制
通過中斷允許寄存器IE進行兩級控制:總控位EA和各中斷源允許位。IE各位安排如下圖IEEAET2ESET1EX1ET0EX0位地址AFADACABAAA9A80:關INT0中斷1:開INT0中斷0:關T0中斷1:開T0中斷0:關INT1中斷1:開INT1中斷0:關T1中斷1:開T1中斷0:關串行口中斷1:開串行口中斷0:關T2中斷1:開T2中斷0:關CPU中斷1:開CPU中斷(二)80C51單片機對中斷請求的控制(二)80C51單片機對中斷請求的控制2、中斷優先級控制80C51單片機對中斷優先級的控制也分為兩級:第一級軟件控制,由中斷優先級寄存器IP的某位狀態為1或0決定相應中斷源為高優先級或低優先級。第二級硬件控制,即由硬件查詢電路決定。(二)80C51單片機對中斷請求的控制2、中斷優先級控制IP各位的定義如下圖所示(二)80C51單片機對中斷請求的控制2、中斷優先級控制
對于同一優先級的各中斷源的優先順序,由內部硬件查詢電路規定為:INT0T0INT1T1串行口中斷RI/TIT2(二)80C51單片機對中斷請求的控制3、中斷系統結構示意圖(三)80C51單片機對中斷的響應1、中斷響應的條件
單片機在每個機器周期對所有的中斷源進行順序檢測,當發現有中斷源請求,便根據下列條件決定是否響應。80C51單片機中斷響應條件是:中斷源有請求,中斷允許寄存器IE相應位置“1”,CPU開中斷(EA=1)且:(三)80C51單片機對中斷的響應(1)
CPU不在處理同級的或更高優先級的中斷;(2)現行的機器周期是所執行指令的最后一個機器周期;(3)
CPU正在執行的指令不是RETI或任何訪問IE/IP的指令。
同時滿足上述三個條件的情況下,80C51單片機才可響應中斷源的請求。1、中斷響應的條件(三)80C51單片機對中斷的響應2、中斷響應的過程
當單片機判明有中斷請求,并滿足響應條件時,便在下一個機器周期的S1狀態開始響應最高優先級的中斷源的請求。在響應中斷的過程中,80C51單片機必須做以下三件事:(三)80C51單片機對中斷的響應2、中斷響應的過程
(1)將相應的優先級狀態觸發器置位(指明CPU開始處理的中斷優先級別)。(2)清中斷標志(TI和RI除外)。(3)執行一個硬件子程序:把中斷的斷點地址,也就是當前程序計數器PC中的內容壓入堆棧,將相應的中斷服務程序的入口送給PC。(三)80C51單片機對中斷的響應3、外部中斷的響應時間80C51單片機在每個機器的S5P2期間對INT0和INT1進行檢測,如果發現有中斷請求,又能滿足響應的條件,便在下一個機器周期的S1狀態開始應答:先執行一個內部硬件子程序--占用兩個機器周期,因此從外部發出中斷請求信號到執行中斷服務程序的第一條指令至少需要三個完整的機器周期。(三)80C51單片機對中斷的響應3、外部中斷的響應時間討論:(1)如果現行的機器周期是本指令的最后一個周期,又無前述的其它響應條件所阻止,CPU馬上響應,需要三個機器周期。(三)80C51單片機對中斷的響應3、外部中斷的響應時間
(2)如果現行的機器周期不是本指令的最后一個機器周期,則可能會增加1~3個周期,因為80C51單片機指令最長執行時間為4個機器周期,這樣響應時間為4~6個機器周期。討論:(三)80C51單片機對中斷的響應3、外部中斷的響應時間討論:(3)如果CPU正在執行的是RETI或是訪問IE、IP寄存器的指令,則單片機需要再執行一條其它指令才會響應中斷。當然這條指令可以是1~4個機器周期,所以這種情況下,可能會增加5個機器周期。(三)80C51單片機對中斷的響應3、外部中斷的響應時間討論:
所以,一個單級外部中斷,單片機響應時間為3~8個機器周期,如果fosc=6MHz,則響應時間為6~16us。中斷系統的應用主要是編程,下面先說明設計中斷服務程序時應注意的一些問題。80C51單片機有5個中斷源,由4個特殊功能寄存器TCON、SCON、IE和IP進行管理和控制。其中TCON和SCON用來鎖存5個中斷源的中斷請求信號。關于中斷程序的編制二、80C51單片機的中斷系統應用舉例關于中斷程序的編制
IE用來控制CPU和5個中斷源請求允許和禁止。IP用來對5個中斷源的優先級別進行管理。TCON的第0位(IT0)和第2位(IT1),用來控制外部中斷的觸發方式。80C52單片機增加了一個T2。由T2CON進行控制,中斷請求標志位是T2CON的第7位(TF2)和第6位(EXF2),使能控制是IE的第5位(ET2),優先級控制是IP寄存器的第5位(PT2)。二、80C51單片機的中斷系統應用舉例關于中斷程序的編制從軟件角度看,中斷控制實質上就是對這幾個寄存器的管理和控制,主要項目有:①
CPU開中斷與關中斷。②
某一中斷源中斷請求的允許與禁止。③各中斷源優先級別的設定。④外部中斷請求的觸發方式的設定。二、80C51單片機的中斷系統應用舉例關于中斷程序的編制(1)中斷控制程序
中斷程序一般包含中斷控制程序和中斷服務程序兩部分。
中斷控制程序即中斷初始化程序,一般不獨立編寫,而是包含在主程序中,根據需要通過幾條指令來實現。二、80C51單片機的中斷系統應用舉例關于中斷程序的編制例如設置INT0和串口中斷為高優先級INT1為低優先級。屏蔽T0和T1中斷請求的程序。編程如下:MOVIP,#00010001BMOVIE,#10010101B(1)中斷控制程序二、80C51單片機的中斷系統應用舉例關于中斷程序的編制(2)中斷服務程序
中斷服務程序是為中斷源的特定事件服務的獨立程序段,以中斷返回指令RETI結束。在程序存儲器中有五個固定的單元作為中斷服務程序的入口,即是0003H、000BH、0013H、001BH及0023H單元。每兩個入口地址之間間隔8個單元。二、80C51單片機的中斷系統應用舉例如果中斷服務程序少于8個字節,可以放在其中。否則,應將中斷服務程序存放在程序存儲器的其它部位,而在相應入口處安排一條無條件轉移指令。這樣,當CPU響應中斷后,就執行該無條件轉移指令,轉向實際的中斷服務程序的入口。二、80C51單片機的中斷系統應用舉例關于中斷程序的編制(2)中斷服務程序二、80C51單片機的中斷系統應用舉例關于中斷程序的編制(2)中斷服務程序中斷服務程序和子程序一樣,也有一個保護/恢復斷點和現場的問題。斷點的保護是由硬件電路自動實現;而現場保護卻要由中斷服務程序來進行。因此在編寫中斷服務程序時必須考慮保護現場的問題,方法與子程序相同。二、80C51單片機的中斷系統應用舉例關于中斷程序的編制(2)中斷服務程序在允許中斷嵌套的情況下,為了不至于在保護現場或恢復現場時,由于CPU響應其它中斷請求而使現場被破壞。在編寫程序時,應在保護現場和恢復現場之前,關閉CPU中斷;在保護現場和恢復現場之后,再根據需要使CPU開中斷。下面通過具體例子來說明中斷程序的設計方法。二、80C51單片機的中斷系統應用舉例例1利用80C51單片機的外部中斷實現系統的單步操作。解:一般單片機的開發系統都有單步運行用戶程序的功能。在調試程序時,每按一次單步執行鍵,CPU就執行一條用戶程序的指令,之后進入暫停等待狀態,還顯示累加器中的內容和下條指令的地址。這是利用單片機的外部中斷,配上簡單硬件(如下圖),再經適當編程實現的。二、80C51單片機的中斷系統應用舉例例1下圖中,INT0設為電平觸發方式,INT0引腳平時為低電平,單片機處于中斷服務中。用戶一次按鍵出現一個正脈沖,CPU在中斷服務程序中檢測到一個正脈沖便返回主程序執行一條用戶程序指令,又得響應中斷,等待用戶按鍵,實現了單步操作。利用80C51單片機的外部中斷實現系統的單步操作。二、80C51單片機的中斷系統應用舉例例1利用80C51單片機的外部中斷實現系統的單步操作。二、80C51單片機的中斷系統應用舉例例1利用80C51單片機的外部中斷實現系統的單步操作。初始化程序為:
CLR
IT0
;設INT0為電平觸發SETB
EA
;CPU開中斷SETB
PX0
;置為高中斷優先級SETB
EX0
;允許INT0中斷二、80C51單片機的中斷系統應用舉例例1利用80C51單片機的外部中斷實現系統的單步操作。中斷服務程序
:┋;顯示必要的數據HIGH:JNBP3.2,HIGH;等待引腳為高電平LOW:JB
P3.2,LOW;再等待引腳為低電平RETI
;中斷返回例2利用80C51將開關所設置的數據讀入后驅動發光二極管。將下圖中P1口的P1.7~P1.4設置成輸入,P1.3~P1.0設置成輸出。現要求利用80C51將開關所設置的數據讀入后分別通過P1.3~P1.0輸出,驅動發光二極管,以檢查P1.7~P1.4輸入電平的情況。要求采用外部中斷方式,每邊沿觸發一次,完成一次讀、寫任務。二、80C51單片機的中斷系統應用舉例例2利用80C51將開關所設置的數據讀入后驅動發光二極管。二、80C51單片機的中斷系統應用舉例例2利用80C51將開關所設置的數據讀入后驅動發光二極管。二、80C51單片機的中斷系統應用舉例程序清單如下:
ORG0000HAJMPGAFN
;轉向主程序
ORG0003H
;外部中斷0入口地址
AJMPPAUSEO
;轉向中斷服務程序解:由圖可見,中斷請求從INT0輸入,并采用了去抖動電路。當P1.3~P1.0的任何一位輸出為1時,就會使相應的發光二極管發光。例2利用80C51將開關所設置的數據讀入后驅動發光二極管。二、80C51單片機的中斷系統應用舉例主程序:
ORG1100HGAFN:SETBEA
;允許中斷DEFG:AJMPDEFG
;等待中斷例2利用80C51將開關所設置的數據讀入后驅動發光二極管。二、80C51單片機的中斷系統應用舉例中斷服務程序:
ORG1200HPAUSEO:MOVA,#0FFH
;設P1為輸入狀態MOVP1,AMOVA,P1
;讀開關數據SWAPA
;(A)的高4位與低4位內容交換MOVP1,A
;驅動LED發光RETI例3二、80C51單片機的中斷系統應用舉例80C51利用查詢法擴展外部中斷源。如果80C51單片機應用系統需要的外部中斷源較多時,可以采用查詢法來擴展外部中斷源。下圖為支持電路。例3二、80C51單片機的中斷系統應用舉例利用查詢法擴展外部中斷源。解:XI1~XI4經由4個OC門電路組成“線或”電路,“線或”后接到INT1端。這就是說,如果在4個外中斷源XI1~XI4中有1個或幾個出現高電平,則“線或”輸出為低電平,從而引起INT1中斷。由于XI1~XI4還分別與P1.0~P1.3相連,因此通過查詢P1.0~P1.3便可識別中斷源。例3二、80C51單片機的中斷系統應用舉例利用查詢法擴展外部中斷源。EXINT:PUSHPSWPUSHACC下面給出INT1的中斷服務程序:JBP1.0,SAV1JBP1.1,SAV2JBP1.2,SAV3JBP1.3,SAV4DISUB:POPACCPOPPSWRETI例3二、80C51單片機的中斷系統應用舉例利用查詢法擴展外部中斷源。SAV1:…AJMPDISUBSAV2:…AJMPDISUBSAV3:…AJMPDISUBSAV4:…AJMPDISUB例4二、80C51單片
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論