




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
微機原理及應用
PrincipleandApplicationsofMicro-Computers
第11講MCS-51單片機定時/計數(shù)器(教材5.3節(jié))教學目的:了解MCS-51單片機的定時/計數(shù)器的結構,掌握其工作方式和模式及它們的編程控制要求:掌握MCS-51單片機定時/計數(shù)器的4種工作方式的編程控制方法難點:定時/計數(shù)器的編程控制(初始化程序和初始值計算)本講的主要內容MCS-51單片機的定時/計數(shù)器的內部結構定時/計數(shù)器編程控制的幾個寄存器TCON,TMOD,THi,TLi四種工作方式下定時/計數(shù)器的工作原理構成,編程控制方法(初始化和初始值計算方法)定時/計數(shù)器的應用方波發(fā)生器,脈沖寬度測量,周期性任務調度器實現(xiàn)定時的方法軟件定時軟件延時不占用硬件資源,但占用了CPU時間,降低了CPU的利用率。例如延時程序。采用時基電路定時例如采用555電路,外接必要的元器件(電阻和電容),即可構成硬件定時電路。但在硬件連接好以后,定時值與定時范圍不能由軟件進行控制和修改,即不可編程,且定時時間容易漂移??删幊潭〞r器定時最方便的辦法是利用單片機內部的定時器/計數(shù)器。結合了軟件定時精確和硬件定時電路獨立的特點。2023/2/4MCS-51單片機的定時/計數(shù)器基于8051內核的MCS-51單片機具有2個定時/計數(shù)器16位定時/計數(shù)器,可編程作為8位,13位和16位的定時/計數(shù)器每個定時/計數(shù)器包含2個獨立的8位寄存器,儲存定時/計數(shù)器的值作定時器時,時鐘源來自系統(tǒng)的晶體振蕩器,頻率為系統(tǒng)頻率的1/12倍作計數(shù)器時,時鐘源來自連接在2個引腳(Ti)的外部脈沖信號,最大計數(shù)頻率為系統(tǒng)頻率的1/24倍定時/計數(shù)器以遞加方式累計計數(shù)基于8052內核的增強型MCS-51單片機至少具有3個定時/計數(shù)器,為了滿足某些特殊應用,許多增強型MCS-51單片機還具有可編程計數(shù)器陣列(PCA)如SiliconLab.的C8051F系列MCS-51單片機的定時/計數(shù)器結構外部計數(shù)脈沖輸入引腳方式和模式控制寄存器啟/??刂萍拇嫫饕绯鲋袛嘈盘柖〞r/計數(shù)器的實質是加一計數(shù)器(16位),由高8位和低8位兩個寄存器組成。定時/計數(shù)器值的寄存器定時/計數(shù)器值的寄存器定時/計數(shù)器控制寄存器TCONINT0/1的觸發(fā)方式控制(1:下降沿;0:低電平)INT0/1的中斷請求標志(1:有效;0:無效)T0/1的中斷請求標志(1:有效;0:無效)T0/1的啟動/停止控制位(1:啟動;0:停止)T0工作方式選擇控制00B:方式0;01B:方式110B:方式2;11B:方式3定時器/計數(shù)器選擇控制(1:計數(shù)器;0:定時器)定時/計數(shù)器啟/停方式控制選擇位(簡稱門控位)1:INTi引腳為高電平,且TRi=1,則啟動,否則停止;0:啟/停與INTi引腳電平無關,TRi=1啟動,TRi=0停止定時/計數(shù)器控制寄存器TMODD7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M0T1工作模式和方式控制位T0工作模式和方式控制位T1工作方式選擇控制00B:方式0;01B:方式110B:方式2;11B:方式3本講的主要內容MCS-51單片機的定時/計數(shù)器的內部結構定時/計數(shù)器編程控制的幾個寄存器TCON,TMOD,THi,TLi四種工作方式下定時/計數(shù)器的工作原理構成,編程控制方法(初始化和初始值計算方法)定時/計數(shù)器的應用方波發(fā)生器,脈沖寬度測量,周期性任務調度器存儲定時/計數(shù)器值的寄存器定時/計數(shù)器0(T0)TH0(高8位),TL0(低8位)定時/計數(shù)器1(T1)TH1(高8位),TL1(低8位)THi和TLi組成一個16位的寄存器,范圍:0~65535方式0(13位定時/計數(shù)器):THi(高8位)+TLi(低5位)(0~8191)方式1(16位定時/計數(shù)器):THi(高8位)+TLi(低8位)(0~65535)方式2(8位自動重裝定時/計數(shù)器):TLi(0~255)(THi(重裝值))方式3(僅對T0):TL0(第1個8位定時/計數(shù)器),TH0(第2個定時器)定時/計數(shù)器的工作原理方式0?1.什么情況時為定時/計數(shù)器溢出?2.作為遞加的計數(shù)器,計劃10個脈沖后溢出,應從何時(初始值)開始計數(shù)?定時/計數(shù)器的編程控制方式0編程控制包括如下操作設置工作方式,選擇定時器或計數(shù)器模式(TMOD)作為定時器,需根據待定時時間和系統(tǒng)晶體頻率(或機器周期)來確定初始值(THi和TLi)啟動和停止控制(單獨設置TRi位或直接寫TCON)若使用中斷,需設置相應的中斷和優(yōu)先級控制寄存器(IE,IP)13位定時/計數(shù)器的初始值計算方法?這里的InitialVal_13B的有效數(shù)據位為13位,自然保存在一個16位變量中,那么如何給THi和TLi賦值?定時/計數(shù)器的工作原理方式116位定時/計數(shù)器的初始值計算方法16位定時/計數(shù)器的構成[見教材p.155圖5-7]定時/計數(shù)器的工作原理方式28位自動重裝定時/計數(shù)器的構成[見教材p.156圖5-8]8位自動重裝定時/計數(shù)器的初始值計算方法8位自動重裝定時/計數(shù)器一般應用于UART的波特率發(fā)生器(教材p.157圖5-11)(下一講說UART)方式0示例某系統(tǒng)使用6MHz晶體振蕩器,其機器周期為
μs?設計一個方波發(fā)生器,在P1.0引腳輸出周期為1ms的方波,現(xiàn)要求用T1作為定時器,且工作在方式0.(用定時中斷方式來實現(xiàn))P1ORG0000HRESERT:AJMPMAINORG001BHAJMPIT1PORG0100HMAIN:MOVSP,#60HACALLPT1M0HERE:AJMPHERE
Step1:計算初始值Step2:1)TMOD2)TCON3)Thx,Tlx4)開中斷
5)啟動C/TPT1M0:MOVTMOD,#00HMOVTL1,#0CHMOVTH1,#0F0HSETBET1SETBEASETBTR1RETIT1P:MOVTL1,#0CHMOVTH1,#0F0HCPLP1.0RETI定時/計數(shù)器的編程控制方式0示例某系統(tǒng)使用12MHz晶體振蕩器,其機器周期為
μs?設計一個方波發(fā)生器,在P1.0引腳輸出周期為1ms的方波,現(xiàn)要求用T1作為定時器,且工作在方式0.(分別用查詢溢出標志位TF1和定時中斷兩種方式來實現(xiàn))P2#include<io51.h>voidmain(void){TMOD=
;TH1=
;TL1=
;IE=0x88;IP=0x08;TR1=1;P1.0=1;
while(1);//主程序}
interrupt[0x1B]voidT1_ISR(void){TR1=0;
if(P1.0==1)P1.0=0;
elseP1.0=1;TH1=
;TL1=
;TR1=1;}P1#include<io51.h>voidmain(void){TMOD=
;TH1=
;TL1=
;IE=0x0;TR1=1;
while(1)//主程序{
while(TF1!=1);TF1=0;TR1=0;TH1=
;TL1=
;
TR1=1;
if(P1.0==1)P1.0=0;
elseP1.0=1;}}定時/計數(shù)器的編程控制方式1示例某系統(tǒng)使用12MHz晶體振蕩器,如果用T0作為定時器,且工作在方式1,現(xiàn)要求P1.0產生周期為20ms的方波,如何實現(xiàn)?#include<io51.h>voidmain(void){TMOD=0x01
;TH0=0xD8;TL0=0xF0;IE=0x82;IP=0x02;TR0=1;P1.0=1;
while(1);//主程序}
interrupt[0x0B]voidT0_ISR(void){TR0=0;
if(P1.0==1)P1.0=0;
elseP1.0=1;TH0=0xD8;TL0=0xF0;TR0=1;}?如果希望在該系統(tǒng)實現(xiàn)1s的定時周期,應該怎么實現(xiàn)?能實現(xiàn)10s或更長的定時周期嗎?方式2的應用假設系統(tǒng)的單片機使用6MHz的晶體振蕩器。T0
工作在方式2計數(shù)器模式,并作為一個特殊外部中斷請求輸入線,要求T0引腳發(fā)生負跳變時向CPU申請中斷。每發(fā)生一次T0中斷后,P1.0腳的LED亮50ms然后關閉,直到再次出現(xiàn)T0中斷LED再亮50ms,如此重復。以T0工作在方式2計數(shù)器模式,計數(shù)器的初始值為FFH,一旦T0引腳出現(xiàn)負跳變時,計數(shù)器的計數(shù)值加1,立即產生T0計數(shù)器溢出中斷標志TF0=1,向CPU申請中斷。T1工作在方式1定時器模式,TM=2μs,定時器初始值為40536=9E58HTMOD=16H主程序堆棧設置初始化程序死循環(huán)初始化T0/T1TMODTCON—TR0?、TR1?IE/IPT0亮燈啟動T1T1滅燈初始化T1關閉T1方式2的應用程序代碼
ORG0000HAJMPMAINORG000BH
AJMPIT0PORG001BHAJMPIT1PORG0100HMAIN:MOVSP,#60HACALLPT0M2HERE:AJMPHEREIT0P:CLRP1.0SETBTR1RETIPT0M2:MOVTMOD,#16HMOVTH0,#0FFHMOVTL0,#0FFHMOVTL1,#58HMOVTH1,#9EHSERBTR0SETBET0SETBEASETBP1.0
RETIT1P:MOVTH1,#58HMOVTH1,#9EHSETBP1.0CLRTR1RETI方式3的應用
ORG0000HAJMPMAINORG000B
AJMPITOPORG001BAJMPIT1PORG0100HMAIN:MOVSP,#60HACALLPT0M3HERE:AJMPHEREIT0P:MOVTL0,#9CHCPLP1.0RETIIT1P:MOVTH0,#38HCPLP1.1RETI假設單片機使用6MHz的晶振,T0工作在方式3,TL0和TH0分別產生200us和400us定時中斷,并且在P1.0和P1.1腳位分別產生400us和800us,占空比為1/2的方波.PT0M3:MOVTMOD,#03HMOVTL0,#9CHMOVTH0,#38HSETBP1.0SETBP1.1SERBTR0SETBET0
SERBTR1SETBET1SETBEARET本講的主要內容MCS-51單片機的定時/計數(shù)器的內部結構定時/計數(shù)器編程控制的幾個寄存器TCON,TMOD,THi,TLi四種工作方式下定時/計數(shù)器的工作原理構成,編程控制方法(初始化和初始值計算方法)定時/計數(shù)器的應用方波發(fā)生器,脈沖寬度測量,周期性任務調度器定時/計數(shù)器的應用測量脈沖寬度[見p.166]假設某系統(tǒng)的晶體振蕩器頻率fOSC=12MHz,假設電路連接如下圖,設計程序能夠測量外部脈沖高電平的寬度(利用TMOD的GATE位)定時/計數(shù)器T1的啟動條件:GATEandINT1andTR1,否則停止信號調理電路INT1......TMnTMTMkTMINT1中斷T1初始化INT1引腳T1計時脈沖寬度測量程序代碼
(將結果以機器周期形式存放30H和31H單元)MAIN:MOVTMOD,#90HMOVTH1,#00HMOVTL1,#00HMOVR0,#30HL1:JBp3.3,L1;等待INT1變低SETBTR1;變低時,啟動INT1,TR1=1L2:JNBP3.3,L2;等待INT1變高,啟動定時L3:JBP3.3,L3;等待INT1變低CLRTR1MOV@R0,TL1INCR0MOV@R0,TH1END
脈沖寬度測量程序代碼#include
<io51.h>#include
<stdio.h>constunsignedcharTmachine=1;//機器周期voidmain(void){TH1=0;TL1=0;TMOD=0x90;TCON=0x04;TR1=1;IE=0x8C;Refresh_ok=0;HaveError=0;
while
(1){//主程序
if
(Refresh_ok==1){ Refresh_ok=0;
if
(HaveError==0) { wide=PulseCounter*Tmachine;
printf("Result:%d\n",wide); }
else
printf("HaveaError!\n"); HaveError=0;}}
//主程序}interrupt
[0x1B]void
T1_ISR(void){TH1=0;TL1=0;HaveError=1;}interrupt[0x13]voidINT1_ISR(void){unsignedchartl,th;TR1=0;th=TH1;tl=TL0;PulseCounter=(unsignedint)th;PulseCounter<<=8;PulseCounter+=(unsignedint)tl;TH1=0;TL1=0;TR1=1;Refresh_ok=1;}?為了不出現(xiàn)HaveError=1,允許外部脈沖高電平的最大寬度是多少?MAIN:MOVTMOD,#90HMOVTH1,#00HMOVTL1,#00HMOVR0,#30HL1:JBp3.3,L1;等待INT1變低SETBTR1;變低時,啟動INT1,TR1=1L2:JNBP3.3,L2;等待INT1變高,啟動定時L3:JBP3.3,L3;等待INT1變低CLRTR1MOV@R0,TL1INCR0MOV@R0,TH1END
LED燈閃爍控制
ORG0000HAJMPMAINORG000B
AJMPITOPORG001BAJMPIT1PORG0100HMAIN:MOVSP,#60HACALLPT0M2HERE:AJMPHERE
IT0P:CLRTR0SETBP1.0MOVTL0,#58HMOVTH0,#9EHMOVA,#0AHSETBTR1RETI
IT1P:DECAJNZLOOPCLRP1.0CLRTR1SETBTR0LOOP:MOVTL1,#0B0HMOVTH1,#3CHRETIPT0M2:MOVTMOD,#11HMOVTL0,#58HMOVTH0,#9EHMOVTL1,#0B0HMOVTH1,#3CHSETBET0SETBET1CLRP1.0SETBTR0SETBEARET單片機晶振6MHz,P1.0控制一個LED,亮50ms滅1s循環(huán)。T0、T1工作在方式1TM=2μsT0執(zhí)行50ms,初始值為216-(50ms/2μs)=40536=9E58HT1執(zhí)行1s,但是16位計數(shù)器最大計時216*2μs=0.131072s需擴展成24位,初始值為多少?以10*100mx為例:循環(huán)次數(shù)0AH初始值為216-(100ms/2μs)=15536=3CB0HTMOD=11H練習:利用定時計數(shù)器從P1.0輸出周期為1s,脈寬為20ms的正脈沖信號,晶振頻率為12MHz。
(程序代碼)
ORG 0000HAJMP MAINORG 000B
AJMP ITOPORG 001BAJMP IT1PORG 0100HMAIN:MOV SP,#60HACALL PT0M1HERE:AJMP HEREPT0M2:MOV TMOD,#11HMOV TL0,#0E0HMOV TH0,#0B1HMOV TL1,#88HMOV TH0,#19HSETB ET0SETB ET1SETB EASETB P1.0SERB TR0RET
IT0P:CLR TR0CLR P1.0MOV TL0,#0E0HMOV TH0,#0B1HMOV A,#20SETB TR1RETI
IT1P:DEC AJNZ LOOPSETB P1.0CLR TR1SETB TR0LOOP:MOV TL1,#88HMOV TH0,#19HRETILED燈閃爍控制
ORG0000HAJMPMAINORG000B
AJMPITOPORG0100HMAIN:MOVSP,#60HACALLPT0M2HERE:AJMPHERE
IT0P:CLRTR0JNZBP1.0LIGHTSETBP1.0MOVTL0,#58HMOVTH0,#9EHMOVA,#14HJUMPSSSLIGHT:DECAJNZLOOPCLRP1.0LOOP:MOVTL0,#58HMOVTH0,#9EHSSSSETBTR0RETIPT0M2:MOVTMOD,#11HMOVTL0,#58HMOVTH0,#9EHSETBET0CLRP1.0SETBTR0SETBEARET單片機晶振6MHz,P1.0控制一個LED,亮50ms滅1s循環(huán)。T0工作在方式1TM=2μsT0執(zhí)行50ms,初始值為216-(50ms/2μs)=40536=9E58H1s=20*50ms循環(huán)次數(shù)14HTMOD=01H定時/計數(shù)器的應用周期性任務調度器如果讓你來控制一個LED指示燈按一定頻率閃爍,或許你打算這樣:置Px.y為低電平,然后delay,再置Px.y為高電平,然后再執(zhí)行另外一個delay,然后重復這個過程.(丑陋的delay占用了CPU的全部時間!)為避免丑陋的delay,可能你想用Ti的中斷來實現(xiàn),最大程度地把CPU時間都釋放了,這是個很好的思路,然而當你要控制5個甚至更多個LED按各自不同的頻率閃爍,又該怎么做?參考現(xiàn)代操作系統(tǒng)中進程調度方法之一,
“時間片輪轉調度(roundrobin)”[參考A.S.Tanenbaum著,陳向群等譯,現(xiàn)代操作系統(tǒng),機械工業(yè)出版社,1999,p.45],我們設計一個周期性任務調度器(PeriodicTaskScheduler),用它來產生多種不同周期的消息,最后根據這些消息來啟動或停止各種周期性任務(進程),避免delay的缺點我們教材中的許多例子都采用這種思路周期性任務調度器程序代碼(1)#include<io51.h>//globalvariablesunsignedcharT0IniVal_Hi,T0IniVal_Lo;unsignedcharT0Overflow,FivePeriod_cnt;unsignedcharTenPeriod_cnt,FiftyPeriod_cnt;unsignedcharOnePeriod_ok,FivePeriod_ok,unsignedcharTenPeriod_ok,FiftyPeriors_ok;void
StartPTS(unsignedintmicroSec){
unsignedchartl,th;unsignedint
t;
TR0=0;
TMOD=0x01;t=0xFFFF-microSec;th=(unsignedchar)t;tl=(unsignedchar)(t>>8);T0IniVal_Hi=th;T0IniVal_Lo=tl;TH0=th;TL0=tl;T0Overflow=0;FivePeriod_cnt=0TenPeriod_cnt=0;FiftyPeriod_cnt=0;OnePeriod_ok=0;FivePeriod_ok=0;TenPeriod_ok=0;FiftyPeriod_ok=0;IE|=0x82;IP|=0x02;TR0=1;}interrupt
[0x0B]void
T0_ISR(void){TR0=0;TH1=T0IniVal_Hi;TL1=T0IniVal_Lo;TR0=1;T0Overflow=1;}voidPeriodicMsgGenerator(void){
if
(T0Overflow==1){T0Overflow=0;OnePeriod_ok=1;FivePeriod_cnt++;
if
(FivePeriod_cnt>=5){FivePeriod_cnt=0;FivePeriod_ok=1;}TenPeriod_cnt++;
if
(TenPeriod_cnt>=10){Ten
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 外墻粉刷防滲漏施工方案
- 135平米設計施工方案
- 2025年國際金融理財師考試中的金融倫理挑戰(zhàn)試題及答案
- 項目管理監(jiān)控技術的考試重點試題及答案
- 2024年項目管理核心能力提升策略試題及答案
- 揭示2024農業(yè)職業(yè)經理人考試中知識點的聯(lián)系試題及答案
- 2023年“才聚齊魯成就未來”水發(fā)集團有限公司社會招聘筆試參考題庫附帶答案詳解
- 結構化2025年證券從業(yè)資格證試題及答案
- 簡易潔凈棚施工方案
- 2024微生物檢驗技師實務試題及答案
- GB/T 320-2025工業(yè)用合成鹽酸
- 安裝工程類別劃分標準及有關規(guī)定31183
- 【道法】做核心思想理念的傳承者(教案)-2024-2025學七年級道德與法治下冊(統(tǒng)編版)
- 2025-2030中國復合材料行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展趨勢與投資風險研究報告
- 2025年濮陽職業(yè)技術學院單招職業(yè)適應性考試題庫及答案1套
- 血站新進員工培訓
- 牧原股份養(yǎng)殖場臭氣治理技術的創(chuàng)新應用
- 2025年社工招聘考試試題及答案
- 考編醫(yī)療面試題及答案
- 2025春夏童裝童鞋行業(yè)趨勢白皮書
- 天鵝藝術漆施工方案
評論
0/150
提交評論