第七章定時計數器與可編程計數器陣列本章學習目標掌握定_第1頁
第七章定時計數器與可編程計數器陣列本章學習目標掌握定_第2頁
第七章定時計數器與可編程計數器陣列本章學習目標掌握定_第3頁
第七章定時計數器與可編程計數器陣列本章學習目標掌握定_第4頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1/151 第七章第七章 定時計數器定時計數器 與可編程計數器陣列與可編程計數器陣列本章學習目標本章學習目標掌握定時計數器的應用掌握定時計數器的應用掌握可編程時鐘輸出模塊的應用掌握可編程時鐘輸出模塊的應用掌握可編程計數器陣列模塊的應用掌握可編程計數器陣列模塊的應用2/151 STC15F2K60S2單片機內部集成了以下與定時單片機內部集成了以下與定時功能有關的模塊:功能有關的模塊: 1)三個三個16位的定時位的定時/計數器計數器,不僅可以方便地用,不僅可以方便地用于定時控制,而且還可以用作分頻器和事件記錄;于定時控制,而且還可以用作分頻器和事件記錄; 2)可編程時鐘輸出功能可編程時鐘輸出功能,

2、可給外部器件提供時鐘;,可給外部器件提供時鐘; 3)三路可編程計數器陣列三路可編程計數器陣列(Programmable Counter Array,PCA)??捎糜谲浖〞r器、外)??捎糜谲浖〞r器、外部脈沖的捕捉、高速輸出以及脈寬調制(部脈沖的捕捉、高速輸出以及脈寬調制(Pulse Width Modulation ,PWM)輸出。)輸出。3/151一、定時一、定時/計數器的結構及工作原理計數器的結構及工作原理 定時定時/計數器的核心是一個計數器的核心是一個加加1計數器計數器,加,加1計計數器的脈沖有兩個來源,一個是外部脈沖源,另數器的脈沖有兩個來源,一個是外部脈沖源,另一個是系統(tǒng)的時鐘振蕩

3、器。一個是系統(tǒng)的時鐘振蕩器。7.17.1定時定時/ /計數器及其應用計數器及其應用OSC12分頻或不分頻TX端C/T=0C/T=1控制信號加1計數器TFX中斷圖圖7-1 定時定時/計數器的結構框圖(計數器的結構框圖(x=0、1)4/151當脈沖源為時鐘振蕩器當脈沖源為時鐘振蕩器(等間隔脈沖序列)時,(等間隔脈沖序列)時,在每個時鐘周期計數器加在每個時鐘周期計數器加1,由于計數脈沖為一時,由于計數脈沖為一時間基準,所以脈沖數乘以脈沖間隔時間就是定時間基準,所以脈沖數乘以脈沖間隔時間就是定時時間,因此為時間,因此為定時功能定時功能。當脈沖源為間隔不等的外部脈沖時當脈沖源為間隔不等的外部脈沖時,就是

4、外部事,就是外部事件的件的計數器計數器,計數器在其對應的外輸入端上有一,計數器在其對應的外輸入端上有一個個10的跳變時加的跳變時加1。外部輸入信號的速率是不受。外部輸入信號的速率是不受限制的,但必須保證給出的電平在變化前至少被限制的,但必須保證給出的電平在變化前至少被采樣一次。采樣一次。5/151圖中有兩個模擬的位開關,圖中有兩個模擬的位開關,C/T決定其工作方式:是定時決定其工作方式:是定時還是計數。后者受控制信號的控制,決定加還是計數。后者受控制信號的控制,決定加1計數器的開計數器的開啟與運行。啟與運行。起這兩個開關作用的是特殊功能寄存器起這兩個開關作用的是特殊功能寄存器TMOD和和TCO

5、N的的相應位,用戶可對其進行設置,從而選擇不同的工作方式相應位,用戶可對其進行設置,從而選擇不同的工作方式(計數或定時)或是否啟動計數器。另外,(計數或定時)或是否啟動計數器。另外,AUXR中的中的T0 x12位和位和T1x12位決定是否對振蕩時鐘進行位決定是否對振蕩時鐘進行12分頻。分頻。OSC12分頻或不分頻TX端C/T=0C/T=1控制信號加1計數器TFX中斷6/151工作原理工作原理計數器對這兩個脈沖源之一進行輸入計數,每計數器對這兩個脈沖源之一進行輸入計數,每輸入一個脈沖,計數值加輸入一個脈沖,計數值加1。當計數到計數器。當計數到計數器為全為全1時,再輸入一個脈沖就使計數值回零,時,

6、再輸入一個脈沖就使計數值回零,同時從最高位溢出一個脈沖使特殊功能寄存器同時從最高位溢出一個脈沖使特殊功能寄存器TCON的的TF0或或TF1置置1,作為計數器的溢出中,作為計數器的溢出中斷標志。斷標志。如果定時如果定時/計數器工作于定時狀態(tài),則表示定時計數器工作于定時狀態(tài),則表示定時時間到;若工作于計數狀態(tài),則表示計數回零。時間到;若工作于計數狀態(tài),則表示計數回零。7/151CPU與與TMOD、TCON、AUXR、T0、T1的關系圖的關系圖16位的加位的加1計數器由兩個計數器由兩個8位的特殊功能寄存器位的特殊功能寄存器THX(高(高8位)和位)和TLX(低(低8位)組成(位)組成(X=0,1,下

7、同)。,下同)。通過改變通過改變TMOD的相應位,它們可被設置為的相應位,它們可被設置為4種不同的工種不同的工作方式。作方式。 CPU內部總線TH1TL1TH0TL0TMODTCON07070707P3.4P3.5AUXR8/151STC15F2K60S2除了定時除了定時/計數器計數器T0和和T1外,外,還有一個還有一個16位定時器位定時器T2(簡稱(簡稱T2)。)。T2的工作模式固定為的工作模式固定為16位自動重裝載模式。位自動重裝載模式。T2可以當定時器使用,也可以用作串口的波可以當定時器使用,也可以用作串口的波特率發(fā)生器或可編程時鐘輸出源。特率發(fā)生器或可編程時鐘輸出源。圖圖7-3 定時器

8、定時器T2的原理框圖的原理框圖9/151二、定時二、定時/計數器的相關寄存器計數器的相關寄存器 TMOD、TCON和和AUXR用來確定定時用來確定定時/計數計數器的工作方式并控制其功能。其中,器的工作方式并控制其功能。其中,TMOD控控制定時制定時/計數器計數器0和和1的工作方式;的工作方式;TCON控制定控制定時器時器T0、T1的啟停及狀態(tài);的啟停及狀態(tài);AUXR設置定時設置定時器的速度和器的速度和T2的功能。的功能。 10/1511、TMOD:定時器工作方式控制寄存器:定時器工作方式控制寄存器TMOD(地址為(地址為89H,復位值為,復位值為00H)寄存器)寄存器的各位定義如下:的各位定義

9、如下:位號位號D7D6D5D4D3D2D1D0定時器名定時器名定時器定時器1定時器定時器0位名稱位名稱GATEC/M1M0GATEC/M1M0TT11/151 1)M1和和M0:方式選擇控制位:方式選擇控制位 M1 M0工作方式工作方式功能說明功能說明0 0016位自動裝載的定時器位自動裝載的定時器/計數器計數器0 1116位定時器位定時器/計數器計數器1 02可自動裝入的可自動裝入的8位計數器位計數器1 1留作備用留作備用位號位號D7D6D5D4D3D2D1D0定時器名定時器名定時器定時器1定時器定時器0位名稱位名稱GATEC/M1M0GATEC/M1M0TT表表7-1 定時定時/計數器的方

10、式選擇計數器的方式選擇12/1512)C/ :功能選擇位。:功能選擇位。 1:計數器功能(對:計數器功能(對T0或或T1引腳的負跳變進行計引腳的負跳變進行計數)。數)。 0:定時器功能(對時鐘周期進行計數)。:定時器功能(對時鐘周期進行計數)。T位號位號D7D6D5D4D3D2D1D0定時器名定時器名定時器定時器1定時器定時器0位名稱位名稱GATEC/M1M0GATE C/M1M0TT13/1513)GATE:門控位。:門控位。GATE用于選通控制。用于選通控制。 1:INTX為高電平且為高電平且TRX置位時,啟動定時器工作。置位時,啟動定時器工作。 0:每當:每當TRX置位時,就啟動定時器工

11、作。置位時,就啟動定時器工作。 注意注意:TMOD寄存器不能進行位尋址,設置時只寄存器不能進行位尋址,設置時只能對整個寄存器賦值。能對整個寄存器賦值。位號位號D7D6D5D4D3D2D1D0定時器名定時器名定時器定時器1定時器定時器0位名稱位名稱GATEC/M1M0GATE C/M1M0TT14/1512、TCON:定時器控制寄存器:定時器控制寄存器TCON(地址為(地址為88H,復位值為,復位值為00H)寄存器)寄存器的格式如下:的格式如下:位號位號D7D6D5D4D3D2D1D0位名稱位名稱TF1TR1TF0TR0IE1IT1IE0IT015/151 1)TF1:T1溢出標志位。溢出標志位

12、。 T1啟動計數后,最高位產生溢出時,啟動計數后,最高位產生溢出時,TF1由硬件由硬件置置1,向,向CPU請求中斷,當請求中斷,當CPU響應中斷時,由響應中斷時,由硬件清硬件清0。TF1也可以由程序查詢或清也可以由程序查詢或清0。 2)TF0:定時器:定時器/計數器計數器0溢出標志位。溢出標志位。 含義和功能與含義和功能與TF1相似。相似。位號位號D7D6D5D4D3D2D1D0位名稱位名稱TF1TR1TF0TR0IE1IT1IE0IT016/151 3)TR1:T1的運行控制位。的運行控制位。可由軟件置位或清可由軟件置位或清0。 當當GATE(TMOD.7)=0,TR1=1啟動啟動T1開始計

13、數,開始計數,TR1=0時停止時停止T1計數。計數。 當當GATE(TMOD.7)=1,TR1=1且且INTX輸入高輸入高電平時,才允許電平時,才允許T1計數。計數。 4)TR0:定時器:定時器T0的運行控制位。的運行控制位。 含義和功能與含義和功能與TR1相似。相似。位號位號D7D6D5D4D3D2D1D0位名稱位名稱TF1TR1TF0TR0IE1IT1IE0IT017/151由于定時由于定時/計數器是可編程的,所以在任何一計數器是可編程的,所以在任何一個定時個定時/計數器開始工作之前,必須對其寫入計數器開始工作之前,必須對其寫入相應的控制字。相應的控制字。把方式控制字寫入把方式控制字寫入T

14、MOD選擇定時器的工作方選擇定時器的工作方式式把初值寫入把初值寫入THX、TLX控制計數長度控制計數長度將將TCON相應位(相應位(TRX)置)置1或清零實現啟動或清零實現啟動或停止計數。或停止計數。在運行過程中,還可讀出在運行過程中,還可讀出THX、TLX和和TCON的內容來隨時查詢的內容來隨時查詢T0、T1的狀態(tài)。的狀態(tài)。18/1513、AUXR:輔助寄存器:輔助寄存器輔助寄存器輔助寄存器AUXR主要用來設置定時器主要用來設置定時器0的速的速度和定時器度和定時器2的工能以及串口的工能以及串口UART的波特率的波特率控制。控制。STC15F2K60S2單片機是單片機是1T 的的8051單片機

15、,單片機,為了兼容傳統(tǒng)為了兼容傳統(tǒng)8051單片機,定時器單片機,定時器0和定時器和定時器1復位后是傳統(tǒng)復位后是傳統(tǒng)8051的速度,即的速度,即12分頻,但此時分頻,但此時指令執(zhí)行速度仍然是指令執(zhí)行速度仍然是1T的速度。的速度。 通過設置特通過設置特殊功能寄存器殊功能寄存器AUXR中相關的位,定時器也可中相關的位,定時器也可不進行不進行12分頻,實現真正的分頻,實現真正的1T速度。速度。19/151輔助寄存器輔助寄存器AUXR(地址為(地址為8EH,復位值為,復位值為01H)各位定義如下:)各位定義如下:位號位號D7D6D5D4D3D2D1D0位名稱位名稱T0 x12T1x12UART_M0 x

16、6UART_M0 x6T2RT2_C/T2x12EXTRAMS1S2T1)T0 x12:定時器:定時器0速度控制位。速度控制位。 0:定時器:定時器0的速度與傳統(tǒng)的速度與傳統(tǒng)8051單片機定時器速度單片機定時器速度相同,即相同,即12分頻。分頻。 1:定時器:定時器0的速度是傳統(tǒng)的速度是傳統(tǒng)8051單片機定時器速度單片機定時器速度的的12倍,即不分頻。倍,即不分頻。20/1512)T1x12:(:(D6)定時器)定時器1速度控制位。速度控制位。 0:即:即12分頻。分頻。 1:不分頻。:不分頻。 如果如果UART串口用串口用T1作為波特率發(fā)生器,作為波特率發(fā)生器,T1x12位決定位決定UART

17、串口是串口是12T 還是還是1T。3)T2R:(:(D4)定時器)定時器2運行控制位。運行控制位。 0:不允許定時器:不允許定時器2運行;運行; 1:允許定時器:允許定時器2運行。運行。21/1514)T2_C/ :(:(D3)定時器)定時器2工作方式選擇。工作方式選擇。 0:定時器(計數脈沖從內部系統(tǒng)時鐘輸入;:定時器(計數脈沖從內部系統(tǒng)時鐘輸入; 1:計數器(計數脈沖從:計數器(計數脈沖從P3.1/T2引腳輸入)。引腳輸入)。T5)T2x12:(D2)定時器定時器2速度控制位。速度控制位。 0: 12分頻,分頻,T2每每12個時鐘計數一次;個時鐘計數一次; 1:不分頻,:不分頻,T2每每1

18、個時鐘計數一次。個時鐘計數一次。22/151UART_M0 x6用于控制用于控制UART串口的速度。串口的速度。S1S2為串行口為串行口1波特率發(fā)生器選擇位。波特率發(fā)生器選擇位。 EXTRAM用于設置是否允許使用內部用于設置是否允許使用內部1024字字節(jié)的擴展節(jié)的擴展RAM。位號位號D7D6D5D4D3D2D1D0位名稱位名稱T0 x12T1x12T1x12UART_M0 x6UART_M0 x6T2RT2_C/T2x12EXTRAMS1S2T23/1514、T2H/RL_TH2:定時器:定時器2重裝值寄存器高字節(jié)重裝值寄存器高字節(jié) (地址為(地址為0D6H,復位值為,復位值為00H)位號D7

19、D6D5D4D3D2D1D0位名稱5、T2L/RL_TL2:定時器:定時器2重裝值寄存器低字節(jié)重裝值寄存器低字節(jié) (地址為(地址為0D7H,復位值為,復位值為00H)位號D7D6D5D4D3D2D1D0位名稱24/151三、定時三、定時/計數器的工作方式計數器的工作方式 通過對寄存器通過對寄存器TMOD中中M1、M0的設置,定時的設置,定時/計數器有計數器有4種不同的工作方式:種不同的工作方式: 方式方式0: 16位自動重裝方式位自動重裝方式 方式方式1: 16位定時位定時/計數器方式計數器方式 方式方式2: 8位自動重裝方式位自動重裝方式 方式方式3: 留作備用留作備用25/1511、定時定

20、時/計數器計數器0和和1的工作方式的工作方式0(16位自動重位自動重裝方式)裝方式)圖7-4 定時器0和1的工作方式0的原理框圖 26/151STC15F2K60S2的定時器有兩種計數速率:一的定時器有兩種計數速率:一種是種是12T模式,每模式,每12個時鐘加個時鐘加1;另一種是;另一種是1T模式,每個時鐘加模式,每個時鐘加1。T0和和T1的速率分別由特殊功能寄存器的速率分別由特殊功能寄存器AUXR中的中的T0 x12和和T1x12決定。決定。 T0 x12=0,T0工作在工作在12T模式;模式; T0 x12=1,T0工作在工作在1T模式。模式。 T1x12=0,T1工作在工作在12T模式;

21、模式; T1x12=1,T1則工作在則工作在1T模式。模式。27/151如何實現如何實現16位重裝載定時器。位重裝載定時器。定時器定時器0和定時器和定時器1分別有分別有2個隱藏的寄存器個隱藏的寄存器RL_THx和和RL_TLx。RL_THx與與THx共有同一個地址,共有同一個地址,RL_TLx與與TLx共有同一個地址。共有同一個地址。當當TRx=0即定時器即定時器/計數器被禁止工作時,對計數器被禁止工作時,對TLx、THx寫入的內容會同時寫入寫入的內容會同時寫入RL_TLx、RL_THx。當當TRx=1即定時器即定時器/計數器工作時,對計數器工作時,對TLx 、THx寫入的內容不會寫入寫入的內

22、容不會寫入RL_TLx 、RL_THx。28/151當定時器工作在模式當定時器工作在模式0時,時,TLx,THx的溢出的溢出不僅置位不僅置位TFx,而且會自動將,而且會自動將RL_TLx,RL_THx的內容重新裝入的內容重新裝入TLx,THx。當當T0CLKO=1時,時,T1/P3.5引腳配置為定時器引腳配置為定時器0的時鐘輸出的時鐘輸出CLKOUT0。當當T1CLKO=1時,時,T0/P3.4引腳配置為定時器引腳配置為定時器1的時鐘輸出的時鐘輸出CLKOUT1。29/1512、定時定時/計數器計數器0和和1的工作方式的工作方式1(16位定時位定時/計計數器方式)數器方式)圖圖7-5 定時器定

23、時器0和和1的方式的方式1的原理框圖的原理框圖30/151此模式下,定時器配置為此模式下,定時器配置為16位的計數器,由位的計數器,由TLx的的8位和位和THx的的8位構成。位構成。TLx的的8位溢出向位溢出向THx進位,進位,THx計數溢出置位計數溢出置位TCON中的溢出中的溢出標志位標志位TFx。 與方式與方式0的區(qū)別是,的區(qū)別是,THx計數溢出時,不會重計數溢出時,不會重新裝載時間常數。此外,本模式也不用于時鐘新裝載時間常數。此外,本模式也不用于時鐘輸出功能。輸出功能。31/1513、定時定時/計數器計數器0和和1的工作方式的工作方式2(8位自動重裝位自動重裝方式)方式)圖圖7-6 定時

24、定時/計數器的工作方式計數器的工作方式2原理框圖原理框圖32/151方式方式2是能自動重置初值的是能自動重置初值的8位定時位定時/計數器,計數器,計數溢出后具有自動恢復初值的功能。當計數溢出后具有自動恢復初值的功能。當TL0/TL1計數溢出時,不僅置位溢出標志計數溢出時,不僅置位溢出標志TF0/TF1,還自動將,還自動將TH0/TH1的內容送入的內容送入TL0/TL1,使,使TL0/TL1從初值開始重新計數。從初值開始重新計數。用 戶 可 以 通 過 程 序 把 時 間 常 數 預 置 在用 戶 可 以 通 過 程 序 把 時 間 常 數 預 置 在TH0/TH1中,再裝入后,中,再裝入后,T

25、H0/TH1的內容保的內容保持不變。持不變。當當T0CLKO=1時,時,T1/P3.5引腳配置為定時器引腳配置為定時器0的時鐘輸出的時鐘輸出CLKOUT0。當當T1CLKO=1時,時,T0/P3.4引腳配置為定時器引腳配置為定時器1的時鐘輸出的時鐘輸出CLKOUT1。33/151在自動裝載時間常數的工作方式中,用戶不需在自動裝載時間常數的工作方式中,用戶不需要在中斷服務程序中重載定時常數,可產生高要在中斷服務程序中重載定時常數,可產生高精度的定時時間,適合用作較精確的定時脈沖精度的定時時間,適合用作較精確的定時脈沖信號發(fā)生器,如波特率發(fā)生器等。特別是工作信號發(fā)生器,如波特率發(fā)生器等。特別是工作

26、方式方式0(16位自動重裝方式),實際工程中應位自動重裝方式),實際工程中應用更加方便,因此,建議讀者盡量使用方式用更加方便,因此,建議讀者盡量使用方式0進行定時器的應用設計。進行定時器的應用設計。定時器定時器2的工作方式與定時器的工作方式與定時器0或或1的工作方式的工作方式0類似,讀者可參照上述內容自行學習。類似,讀者可參照上述內容自行學習。34/151四、定時四、定時/計數器量程的擴展計數器量程的擴展 在實際應用中,需要的定時時常常超過定時在實際應用中,需要的定時時常常超過定時/計數器的定時能力,特別是當單片機的系統(tǒng)時計數器的定時能力,特別是當單片機的系統(tǒng)時鐘頻率較高時,定時時長就更為有限

27、。為了滿鐘頻率較高時,定時時長就更為有限。為了滿足需要,足需要,經常需要對單片機的定時計數能力進經常需要對單片機的定時計數能力進行擴展。行擴展。35/1511、定時器的最大定時能力、定時器的最大定時能力當工作于定時狀態(tài)時,定時當工作于定時狀態(tài)時,定時/計數器是對時鐘計數器是對時鐘周期進行計數,若對時鐘進行周期進行計數,若對時鐘進行12分頻,則對每分頻,則對每12個時鐘周期計數一次。個時鐘周期計數一次。當晶振頻率為當晶振頻率為6MHz,采用,采用12分頻時,計數的分頻時,計數的單位時間為:單位時間為: 單位時間為:單位時間為: Tu= = s=2s 定時時間為定時時間為:TC=XTu。其中,。其

28、中,Tu為單位時間,為單位時間,TC為定時時間,為定時時間,X為所需計數次數。為所需計數次數。晶振頻率1260000001236/151STC15F2K60S2單片機的定時單片機的定時/計數器是加計數器是加1計計數器。因此,不能直接將實際的計數值作為計數器。因此,不能直接將實際的計數值作為計數初值送入計數寄存器數初值送入計數寄存器THX、TLX中,而必中,而必須將實際計數值以須將實際計數值以28、216為模求補,以補碼作為模求補,以補碼作為計數初值設置為計數初值設置THX和和TLX。即應裝入計數即應裝入計數/定時器的初值為:定時器的初值為: 其中,其中,n=8或或16。TcN2Tun37/15

29、1例如:已知例如:已知Tu2s,要求定時,要求定時TC1ms,則則 對 方 式對 方 式 0 和 方 式和 方 式 1 , 時 間 常 數 為 :, 時 間 常 數 為 : 21 6500=65036=FE0CH (THX裝入裝入FEH,TLX裝入裝入0CH)。)。設系統(tǒng)時鐘頻率為設系統(tǒng)時鐘頻率為6MHz,12分頻時,分頻時,8位定時器的最大定時能力為:位定時器的最大定時能力為:T(28 0)2s512s16位定時器的最大定時能力為:位定時器的最大定時能力為:T(216 0)2s131072s131.072ms38/1512、定時量程的擴展、定時量程的擴展 定時量程的擴展分為軟件擴展和硬件擴展

30、兩種定時量程的擴展分為軟件擴展和硬件擴展兩種方法。方法。(1)軟件擴展方法)軟件擴展方法 軟件擴展方法是在定時器中斷服務程序中軟件擴展方法是在定時器中斷服務程序中對定對定時器中斷請求進行計數時器中斷請求進行計數,當中斷請求的次數達到,當中斷請求的次數達到要求的值時才進行相應的處理。要求的值時才進行相應的處理。39/151例如,某事件的處理周期為例如,某事件的處理周期為1s由于受到最大定時時間的限制,無法一次完成由于受到最大定時時間的限制,無法一次完成定時。定時。此時可以將定時器的定時時間設為以此時可以將定時器的定時時間設為以10ms為一為一個單位,啟動定時器后,每一次定時器溢出中個單位,啟動定

31、時器后,每一次定時器溢出中斷將產生斷將產生10ms的定時。的定時。進入中斷服務程序后,進入中斷服務程序后,對定時器的中斷次數進對定時器的中斷次數進行計數行計數,每計數,每計數100次進行一次事件的處理,次進行一次事件的處理,則可實現則可實現1s的定時效果。的定時效果。這是最常用的方法。這是最常用的方法。40/151(2)硬件擴展方法)硬件擴展方法硬件擴展方法可以使用外接通用定時器芯片對硬件擴展方法可以使用外接通用定時器芯片對單片機的定時能力進行擴展。單片機的定時能力進行擴展。也可以利用單片機自身的資源對定時能力進行也可以利用單片機自身的資源對定時能力進行擴展。擴展。例如,將兩個定時器串聯起來使

32、用(其中,一例如,將兩個定時器串聯起來使用(其中,一個工作于定時方式,另一個工作于計數方式,個工作于定時方式,另一個工作于計數方式,請讀者分析其最大定時時間)。請讀者分析其最大定時時間)。由于該擴展方法占用較多的資源,較少采用。由于該擴展方法占用較多的資源,較少采用。41/151五、定時五、定時/計數器編程舉例計數器編程舉例 一般定時一般定時/計數器的應用采用中斷方式,因此,計數器的應用采用中斷方式,因此,編程時主要考慮兩點:編程時主要考慮兩點:正確初始化,包括寫入控制字、時間常數的計正確初始化,包括寫入控制字、時間常數的計算并裝入;算并裝入;中斷服務程序的編寫,在中斷服務程序中編寫中斷服務程

33、序的編寫,在中斷服務程序中編寫實現需要定時完成的任務代碼。實現需要定時完成的任務代碼。42/151在定時在定時/計數器初始化部分的一般步驟大致如下:計數器初始化部分的一般步驟大致如下:設置工作方式,將控制字寫入設置工作方式,將控制字寫入TMOD寄存器。(對于寄存器。(對于T0和和T1)或)或AUXR(對于(對于T2)。(注意)。(注意TMOD不能進不能進行位尋址)。行位尋址)。設置分頻方式,將控制字寫入設置分頻方式,將控制字寫入AUXR寄存器。默認的寄存器。默認的情況是情況是12分頻(兼容傳統(tǒng)分頻(兼容傳統(tǒng)8051單片機),如使用傳統(tǒng)單片機),如使用傳統(tǒng)8051單片機模式,無需設置。單片機模式

34、,無需設置。計算定時計算定時/計數初值,并將其裝入計數初值,并將其裝入TLX、THX寄存器。寄存器。(對于(對于T0和和T1)或)或T2L、T2H寄存器(對于寄存器(對于T2)。)。置位置位ETX和和EA允許定時允許定時/計數器中斷(如果需要)。計數器中斷(如果需要)。置位置位TRX(對于(對于T0和和T1)或)或T2R(對于(對于T2)以啟動定)以啟動定時時/計數。計數。在中斷服務程序中,要注意計數初值的重新裝入問題。在中斷服務程序中,要注意計數初值的重新裝入問題。43/151【例【例7-1】 設系統(tǒng)時鐘頻率為設系統(tǒng)時鐘頻率為6MHz,利用,利用T0定定時,每隔時,每隔1s將將P2.0的狀態(tài)

35、取反。的狀態(tài)取反。 解解:所要求的定時時間所要求的定時時間1s超過了定時器的定時能力超過了定時器的定時能力(時鐘頻率為(時鐘頻率為6MHz,12分頻時,分頻時,16位定時器位定時器的最長定時時間為的最長定時時間為131.072ms),所以無法采),所以無法采用定時器直接實現用定時器直接實現1s的定時。的定時。將定時器的定時時間設為將定時器的定時時間設為50ms,在中斷服務程,在中斷服務程序中對定時器溢出中斷請求進行計數,當計夠序中對定時器溢出中斷請求進行計數,當計夠20次時,將次時,將P2.0的狀態(tài)取反,否則直接返回主的狀態(tài)取反,否則直接返回主程序,從而達到程序,從而達到1s的定時。的定時。4

36、4/151選擇選擇T0為為16位定時器方式,方式字為位定時器方式,方式字為01H。系。系統(tǒng)時鐘頻率為統(tǒng)時鐘頻率為6MHz,12分頻時,計數單位時分頻時,計數單位時間間隔為間間隔為2s。T0的計數初值為:的計數初值為:1636TcXM2(50 10 )/(2 10 )65536250009E58HTu45/151$INCLUDE (STC12.INC) ;包含包含STC12C5A60S2寄存器定義文件寄存器定義文件 ORG0000H LJMP MAIN ;轉主程序轉主程序 ORG 000BH;T0中斷服務程序入口地址中斷服務程序入口地址 LJMPT0_ISR ORG 0100HMAIN: MOV

37、 SP,#7FH ;設置堆棧指針設置堆棧指針 MOV TMOD,#01H ;T0初始化初始化 MOV TL0,#58H MOV TH0,#9EH MOV A,#20 ;累加器累加器A置置20 SETB ET0 ;允外允外T0中斷中斷 SETB EA;CPU開中斷開中斷 SETB TR0 ;啟動啟動T0計數計數 SJMP $ ;等待等待46/151T0_ISR:MOV TL0,#58H MOV TH0,#9EH;重新裝入時間常數重新裝入時間常數 DEC A ; 累加器累加器A內容減內容減1 JNZEXIT CPL P2.0 MOV A,#20 ;累加器累加器A重載重載20EXIT: RETI E

38、ND程序中的符號程序中的符號“$”表示表示“本條指令地址本條指令地址”,指令,指令“SJMP $”相當相當于:于:“HERE: LJMP HERE”。47/151#include “stc12.h”/包含包含STC12C5A60S2的寄存器定義文件的寄存器定義文件sbit P20=P20;/聲明聲明P2.0的引腳位變量的引腳位變量unsigned char i; /聲明計數變量。聲明計數變量。C語言程序中盡量不要使用語言程序中盡量不要使用ACCvoid main (void) /SP=0 x60; /使用使用C語言設計程序時,可以不設置堆棧指針語言設計程序時,可以不設置堆棧指針 TMOD=0

39、x01; TL0=0 x58; TH0=0 x9E; i=20;/計數變量賦初值計數變量賦初值ET0=1;/允許允許T0中斷中斷 EA = 1;/開放總的中斷開放總的中斷TR0=1;/啟動啟動T0計數計數 while(1); /等待中斷等待中斷48/151void T0_ISR (void) interrupt 1 /定時器定時器T0中斷函數中斷函數TL0=0 x58;/重新裝入時間常數重新裝入時間常數 TH0=0 x9E; i-;/計數變量減計數變量減1if(i=0) /若減到若減到0,則將,則將P2.0取反取反P20 = !P20; /將將P2.0取反取反i = 20;/重新給計數變量賦值

40、重新給計數變量賦值 49/151若使用工作方式若使用工作方式0,則上述程序中,除了將,則上述程序中,除了將TMOD的的值設置為值設置為0以外,在中斷服務程序中,不再需要重新以外,在中斷服務程序中,不再需要重新裝入時間常數,即:裝入時間常數,即:在匯編語言程序的中斷服務程序中可以省去下面的兩在匯編語言程序的中斷服務程序中可以省去下面的兩句:句: MOV TL0,#58H MOV TH0,#9EH;重新裝入時間常數重新裝入時間常數在在C語言程序的中斷服務程序中可以省去下面的兩句:語言程序的中斷服務程序中可以省去下面的兩句: TL0=0 x58; TH0=0 x9E; /重新裝入時間常數重新裝入時間

41、常數其他部分的程序不變。其他部分的程序不變。對于對于1T模式的使用,請讀者自行實驗學習。模式的使用,請讀者自行實驗學習。 思考:思考:若晶振頻率修改為若晶振頻率修改為11.0592MHz,時間常,時間常數應為多少?數應為多少?50/151【例【例7-2】設時鐘頻率為】設時鐘頻率為18.432MHz,使用定時,使用定時器器2定時,使定時,使P0.0口輸出口輸出38.4KHZ的方波。的方波。匯編代碼如下:匯編代碼如下: $INCLUDE (STC15.INC) ;包含寄存器定義文件包含寄存器定義文件 ;定義定義38.4KHz時的時間常數時的時間常數 (65536-18432000/12/38400

42、/2) T38_4KHz EQU 0FFECH TEST_PIN BIT P0.0 ;測試引腳定義測試引腳定義 ORG0000H LJMPMAIN ORG0063H ;定時器定時器2的中斷服務程序入口地址的中斷服務程序入口地址 LJMPT2_ISR51/151MAIN: MOV SP,#70H;設置堆棧指針設置堆棧指針 ORLAUXR,#04H;設置設置T2為為1T模式模式 MOV T2H,#HIGH T38_4KHz;設置定時器設置定時器2重裝載時間重裝載時間 常數的高字節(jié)常數的高字節(jié) MOV T2L,#LOW T38_4KHz;設置定時器設置定時器2重裝載時間重裝載時間 常數的低字節(jié)常數的

43、低字節(jié) ORL AUXR,#10 H;啟動定時器啟動定時器2 ORL IE2,#04H;允許定時器允許定時器2中斷中斷 SETBEA;開放開放CPU中斷中斷 SJMP$;定時器定時器2中斷服務程序中斷服務程序T2_ISR: CPL TEST_PIN RETI END52/151對應的對應的C語言代碼如下:語言代碼如下:#include “stc15.h”/包含包含STC15F2K60S2的寄存器定義文件的寄存器定義文件typedef unsigned char BYTE;typedef unsigned int WORD;#define FOSC 18432000L#define T38_4K

44、Hz (65536-18432000/12/38400/2) /38.4KHz sbit TEST_PIN = P00; /定義測試引腳定義測試引腳void main(void) AUXR|= 0 x04;/設置設置T2為為1T模式模式 T2H = T38_4KHz8; /設置設置T2重裝時間常數的高字節(jié)重裝時間常數的高字節(jié) T2L = T38_4KHz; /設置設置T2重裝時間常數的低字節(jié)重裝時間常數的低字節(jié) AUXR |= 0 x10; /啟動定時器啟動定時器2 IE2 |= 0 x04; /允許定時器允許定時器2中斷中斷 EA = 1; /開放開放CPU中斷中斷 while (1); /

45、循環(huán)等待中斷循環(huán)等待中斷/定時器定時器2中斷服務函數中斷服務函數void t2_isr(void) interrupt 12 TEST_PIN = TEST_PIN;53/151【例【例7-3】 利用定時器的門控方式實現正脈沖的利用定時器的門控方式實現正脈沖的脈寬測量。脈寬測量。當當GATE=1,TRX=1,只有引腳輸入高電平時,只有引腳輸入高電平時,TX才被允許計數,利用這一特點,就可以測量才被允許計數,利用這一特點,就可以測量引腳上正脈沖的寬度。引腳上正脈沖的寬度。以以T0為例的門控法測量示意圖如圖所示。為例的門控法測量示意圖如圖所示。對T0初始化編程,GATE=1T0從0開始計數T0停止

46、計數,讀T0值圖圖7-7 利用門控法測量脈沖寬度利用門控法測量脈沖寬度54/151解:以解:以T0為例,下面給出實現這一方法的關鍵代碼,完整的為例,下面給出實現這一方法的關鍵代碼,完整的匯編語言程序和對應的匯編語言程序和對應的C語言程序,請讀者自行編寫。語言程序,請讀者自行編寫。MOVTMOD,#09H ; T0工作于工作于16位定時方式、位定時方式、GATE置置1MOVTL0,#00HMOVTH0,#00HCLREX0 ;關外部中斷關外部中斷JNBP3.2,$ ;等待升高等待升高SETBTR0JBP3.2,$ ;等待下降等待下降CLRTR0 ;關關T0MOVA,TL0 ;T0內容高內容高8位

47、送位送B,低,低8位送位送AMOVB,TH0 ;計算脈寬或送顯示器顯示計算脈寬或送顯示器顯示55/151思考:思考:(1)當脈沖寬度超過定時器的最大定時時間應)當脈沖寬度超過定時器的最大定時時間應該如何處理?該如何處理?(2)在動態(tài)讀取運行中的定時)在動態(tài)讀取運行中的定時/計數器的計數值計數器的計數值時,如果不加注意,就可能出錯。這是因為不時,如果不加注意,就可能出錯。這是因為不可能在同一時刻同時讀取可能在同一時刻同時讀取TH0和和TL0中的計數中的計數值。比如,先讀值。比如,先讀TL0后讀后讀TH0,因為定時,因為定時/計數計數器處于運行狀態(tài),在讀器處于運行狀態(tài),在讀TL0時尚未產生向時尚未

48、產生向TH0進位,而在讀進位,而在讀TH0前已產生進位,這時讀得的前已產生進位,這時讀得的TH0就不對了;同樣,先讀就不對了;同樣,先讀TH0后讀后讀TL0也可也可能出錯。如何解決這個問題?能出錯。如何解決這個問題?56/1517.2可編程時鐘輸出模塊及其應用可編程時鐘輸出模塊及其應用 在控制系統(tǒng)中,有時需要為單片機外部的器在控制系統(tǒng)中,有時需要為單片機外部的器件提供時鐘控制,為此,件提供時鐘控制,為此,STC12C5A60S2單片單片機提供了機提供了4路路可編程時鐘輸出功能??删幊虝r鐘輸出功能。 MCLKO/P5.4, CLKOUT0/P3.5,CLKOUT1/P3.4, T2CLKO/P3

49、.0。 只有內部只有內部R/C時鐘頻率為時鐘頻率為12MHz以下時,以下時,MCLKO/P5.4才能正常輸出。才能正常輸出。57/151一、可編程時鐘輸出的相關寄存器一、可編程時鐘輸出的相關寄存器 1、主時鐘輸出、主時鐘輸出 主時鐘可以是內部高精度主時鐘可以是內部高精度R/C時鐘,也可以是時鐘,也可以是外部輸入的時鐘或外部晶體振蕩產生的時鐘。外部輸入的時鐘或外部晶體振蕩產生的時鐘。MCLKO/P5.4的時鐘輸出控制由的時鐘輸出控制由CLK_DIV寄寄存器的存器的MCKO_S1和和MCKO_S0位控制。通過位控制。通過 設置設置MCKO_S1和和MCKO_S0可將可將MCLKO/P5.4 管腳配

50、置為主時鐘輸出,同時,還可以設置輸管腳配置為主時鐘輸出,同時,還可以設置輸 出頻率。出頻率。58/151時鐘分頻寄存器時鐘分頻寄存器CLK_DIV(也稱為(也稱為PCON2,地址為,地址為97H,復位值為,復位值為0000 x000B)的各位定義如下:)的各位定義如下:位號位號D7D6D5D4D3D2D1D0位名稱位名稱MCKO_S1MCKO_S0 ADRJ TX_RX -CLKS2 CLKS1 CLKS059/151主時鐘的輸出頻率由主時鐘的輸出頻率由MCKO_S1和和MCKO_S0控制??刂?。MCKO_S1MCKO_S0內部內部R/C振蕩時鐘的輸出頻率振蕩時鐘的輸出頻率00 無主時鐘輸出無

51、主時鐘輸出01主時鐘輸出頻率主時鐘輸出頻率= MCLK/110主時鐘輸出頻率主時鐘輸出頻率= MCLK/211主時鐘輸出頻率主時鐘輸出頻率= MCLK/4表表7-2 主時鐘的輸出頻率設置主時鐘的輸出頻率設置其中,其中,MCLK指主時鐘頻率。指主時鐘頻率。IO口輸出的頻率最高可達口輸出的頻率最高可達13.5MHz。60/1512、T2CLKO/P3.0、T1CLKOU/P3.4和和T0CLKOU/P3.5的時鐘輸出的時鐘輸出T2CLKO/P3.0、T1CLKOU/P3.4和和T0CLKOU/P3.5的的時鐘輸出分別由外部中斷使能和時鐘輸出寄存器時鐘輸出分別由外部中斷使能和時鐘輸出寄存器INT_C

52、LKO (也稱為也稱為AUXR2)的的T2CLKO、T1CLKO和和T0CLKO位控制。位控制。CLKOUT0的輸出時鐘頻率由定時器的輸出時鐘頻率由定時器0控制,控制,CLKOUT1的輸出時鐘頻率由定時器的輸出時鐘頻率由定時器1控制,控制,T2CLKO的輸出時鐘頻率由定時器的輸出時鐘頻率由定時器2控制控制定時器需要工作在定時器方式定時器需要工作在定時器方式0(16位自動重裝模式)位自動重裝模式)或方式或方式2(8位自動重裝載模式),不允許定時器中斷,位自動重裝載模式),不允許定時器中斷,以免以免CPU反復進中斷。反復進中斷。61/151外部中斷使能和時鐘輸出寄存器外部中斷使能和時鐘輸出寄存器I

53、NT_CLKO(地址為(地址為8FH,復位值為,復位值為X0000000B)各位的)各位的定義如下:定義如下:位號位號D7D6D5D4D3D2D1D0位名稱位名稱-EX4EX3EX2-T2CLKOT1CLKOT0CLKO62/1511)T2CLKO:是否將:是否將P3.0腳設置為定時器腳設置為定時器2(T2)的時鐘輸)的時鐘輸出出T2CLKO。 T2CLKO=1 設設P3.0引腳為引腳為T2的時鐘輸出的時鐘輸出 輸出頻率輸出頻率=T2溢出率溢出率/2 如果如果T2_C/T=0,定時器,定時器/計數器計數器T2對內部系統(tǒng)時鐘計數,則:對內部系統(tǒng)時鐘計數,則:T2工作在工作在1T模式時的輸出頻率模

54、式時的輸出頻率=(SYSclk) / (65536-RL_TH2, RL_TL2)/2T2工作在工作在12T模式時的輸出頻率模式時的輸出頻率= (SYSclk) /12/ (65536-RL_TH2, RL_TL2)/2 如果如果T2_C/T=1,定時器,定時器/計數器計數器T2對外部脈沖輸入對外部脈沖輸入(P3.1/T2)計數,計數,則輸出時鐘頻率則輸出時鐘頻率= (T2_Pin_CLK) / (65536-RL_TH2, RL_TL2)/2T2CLKO=0 不允許不允許P3.0引腳為引腳為T2的時鐘輸出的時鐘輸出63/151當當T1CLKO=1時,將時,將P3.4/T0腳配置為定時器腳配置

55、為定時器1的時鐘輸出的時鐘輸出T1CLKO。 輸出時鐘頻率輸出時鐘頻率= T1溢出率溢出率/2。 定時器定時器/計數器計數器T1工作在定時器模式工作在定時器模式0(16位自動重裝模式)時,如果位自動重裝模式)時,如果C/T=0,定時器定時器/計數器計數器T1對內部系統(tǒng)時鐘計數,則:對內部系統(tǒng)時鐘計數,則:T1工作在工作在1T模式時的輸出頻率模式時的輸出頻率=(SYSclk) / (65536-RL_TH1, RL_TL1)/2T1工作在工作在12T模式時的輸出頻率模式時的輸出頻率= (SYSclk) /12/ (65536-RL_TH1, RL_TL1)/2如果如果C/T =1,定時器,定時器

56、/計數器計數器T1對外部脈沖輸入對外部脈沖輸入(P3.5/T1)計數,計數, 則輸出時鐘頻率則輸出時鐘頻率= (T1_Pin_CLK) / (65536-RL_TH1, RL_TL1)/2 定時器定時器/計數器計數器T1工作在模式工作在模式2(8位自動重裝模式)時,位自動重裝模式)時, 如果如果C/T=0,定時器,定時器/計數器計數器T1對內部系統(tǒng)時鐘計數,則:對內部系統(tǒng)時鐘計數,則: T1工作在工作在1T模式時的輸出頻率模式時的輸出頻率 = (SYSclk) / (256-TH1)/2 T1工作在工作在12T模式時的輸出頻率模式時的輸出頻率= (SYSclk)/12/(256-TH1)/2如

57、果如果C/T=1,定時器,定時器/計數器計數器T1是對外部脈沖輸入是對外部脈沖輸入(P3.5/T1)計數,則:計數,則: 輸出時鐘頻率輸出時鐘頻率= (T1_Pin_CLK) / (256-TH1) / 2當當T1CLKO=0時,不允許時,不允許P3.4/T0管腳被配置為定時器管腳被配置為定時器1的時鐘輸出。的時鐘輸出。 2)T1CLKO:是否允許將:是否允許將P3.4腳配置為定時器腳配置為定時器1(T1)的時鐘)的時鐘輸出輸出T1CLKO。設置方法與。設置方法與T2相同。相同。64/1513)T0CLKO:是否允許將:是否允許將P3.5腳配置為定時器腳配置為定時器0(T0)的時鐘)的時鐘輸出

58、輸出T0CLKO。 當當T0CLKO=1時,將時,將P3.5/T1管腳配置為定時器管腳配置為定時器0的時鐘輸出的時鐘輸出T0CLKO,輸,輸出時鐘頻率出時鐘頻率=T0溢出率溢出率/2。 定時器定時器/計數器計數器T0工作在定時器模式工作在定時器模式0(16位自動重裝模式)時,如果位自動重裝模式)時,如果C/T =0,定時器,定時器/計數器計數器T0對內部系統(tǒng)時鐘計數,則:對內部系統(tǒng)時鐘計數,則:T0工作在工作在1T模式時的輸出頻率模式時的輸出頻率= (SYSclk)/(65536-RL_TH0, RL_TL0)/2T0工作在工作在12T模式時的輸出頻率模式時的輸出頻率= (SYSclk) /1

59、2/ (65536-RL_TH0, RL_TL0)/2 如果如果C/T=1,定時器,定時器/計數器計數器T0對外部脈沖輸入對外部脈沖輸入(P3.4/T0)計數,則:計數,則: 輸出時鐘頻率輸出時鐘頻率= (T0_Pin_CLK) / (65536-RL_TH0, RL_TL0)/2 定時器定時器/計數器計數器T0工作在定時器模式工作在定時器模式2(8位自動重裝模式)時,如果位自動重裝模式)時,如果C/T=0,則:則: T0工作在工作在1T模式時的輸出頻率模式時的輸出頻率= (SYSclk) / (256-TH0) / 2 T0工作在工作在12T模式時的輸出頻率模式時的輸出頻率= (SYSclk

60、) / 12 / (256-TH0) / 2如果如果C/T=1,定時器,定時器/計數器計數器T0對外部脈沖輸入(對外部脈沖輸入(P3.4/T0)計數,則:)計數,則: 輸出時鐘頻率輸出時鐘頻率= (T0_Pin_CLK) / (256-TH0) / 2當當T0CLKO=0時,不允許時,不允許P3.5/T1管腳被配置為定時器管腳被配置為定時器0的時鐘輸出。的時鐘輸出。65/151二、可編程時鐘輸出的編程實例二、可編程時鐘輸出的編程實例1、如果要使用主時鐘輸出,例如,從、如果要使用主時鐘輸出,例如,從P5.4輸出時鐘輸出時鐘信號,頻率是信號,頻率是SYSclk,只需加入下面的語句即可:,只需加入下

溫馨提示

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

評論

0/150

提交評論