




已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本章介紹的主要內容 定時計數(shù)器結構和工作原理 定時計數(shù)器的控制寄存器 定時計數(shù)器的應用編程 片內有2個16位定時 計數(shù)器 定時器0 T0 和定時器1 T1 定時或計數(shù)功能 應用 控制 延時 計數(shù)和檢測 定時 計數(shù)器實際上是16位加1計數(shù)器 T0由2個8位持殊功能寄存器TH0和TL0構成 T1由2個8位持殊功能寄存TH1和TL1構成 可由軟件設置為定時方式或計數(shù)方式 T0和T1受特殊功能寄存器TMOD和TCON控制 7 18XX51定時 計數(shù)器結構和工作原理 1 定時工作方式 設置為定時工作方式時 定時器計數(shù)的脈沖是由51單片機片內振蕩器經(jīng)12分頻后產生的 每經(jīng)過一個機器周期定時器 T0或T1 的數(shù)值加1直至計數(shù)滿產生溢出 如 當8051采用12MHz晶體時 每個機器周期為1 s 計5個機器周期即為5 s 即定時5 s 2 計數(shù)工作方式 設置為計數(shù)工作方式時 通過引腳T0 P3 4 和T1 P3 5 對外部脈沖信號計數(shù) 當輸入信號由1至0的下降沿時 定時器的值加1 每個機器周期CPU采樣T0和T1的輸入電平 若前一周期為高 下一周期為低 則計數(shù)器加1 由于檢測一個1至0的跳變需要二個機器周期 故最高計數(shù)頻率為振蕩頻率的二十四分之一 雖然對輸入信號的占空比無特殊要求 但為了確保某個電平在變化之前至少被采樣一次 要求電平保持時間至少是一個完整的機器周期 7 2定時計數(shù)器的控制寄存器兩個 定時器控制寄存器TCON 88H 定時器工作模式寄存器TMOD 89H 1 工作模式寄存器TMOD 89H TMOD用于控制T0和T1的操作模式 定時器T0 定時器T1 GATE 門控信號GATE 0 TRx 1時即可啟動定時器工作 GATE 1 TRx 1時INTx 1才可啟動定時器工作 C T 定時器 計數(shù)器選擇位C T 1 為計數(shù)器方式 C T 0 為定時器方式 M1M0工作模式選擇位M1M0 00工作方式0 13位方式 M1M0 01工作方式1 16位方式 M1M0 10工作方式2 8位自動再裝入方式 M1M0 11工作方式3 T0為2個8位方式 2 控制寄存器TCON 88H 定時器控制用高4位 低4位用于外部中斷 TF1 T1溢出中斷請求標志 TF0 T0TF1 1 T1有溢出中斷請求 TF1 0 T1無溢出中斷請求 TR1 T1運行控制位 TR0 T0TR1 1 啟動T1工作 TR1 0 停止T1工作 C T C T 7 3定時器的四種工作方式 THX TLX X 1或0 表示TH1TL1和TH0TL0 1 方式0 13位定時 計數(shù)方式 用于計數(shù)方式時最大計數(shù)值為213 8192個脈沖用于定時工作時 定時時間為 t 213一T0初值 時鐘周期 12 16寄存器 THx和TLx 只用13位 THx占高8位 TLx占低5位 TLx的高3位末用 當TLx的低5位溢出時向THx進位 而THx溢出時硬件置位TF0 并申請中斷 定時 計數(shù)溢出否可查詢TF0是否置位 如果開中斷則產生溢出中斷 2 方式1當TMOD中M1M0 01時 定時計數(shù)器工作在方式1 該模式是一個16位定時計數(shù)方式 寄存器TH0和TL0是以全16位參與操作 計數(shù)方式時最大計數(shù)216 65536 個外部脈沖 用于定時工作方式時 定時時間為 t 216一T0初值 時鐘周期 12 16寄存器 THx和TLx 中THx提供高8位 TLx提供低8位計數(shù)初值 3 方式2當TMOD中M1M0 10時 定時器工作在方式2 方式2是8位的可自動重裝載的定時計數(shù)方式 16位的計數(shù)器被拆成兩個8位 其中TL0用作8位計數(shù)器 TH0用以保持計數(shù)初值 當TL0計數(shù)溢出 置TF0 TH0中的初值自動裝入TL0 繼續(xù)計數(shù) 循環(huán)重復計數(shù) 用于計數(shù)工作方式時 最大計數(shù)值為 28 256 個外部脈沖 用于定時工作方式時 其定時時間為 t 28 TH0初值 振蕩周期 12 這種工作方式可省去用戶重裝常數(shù)的程序 并可產生精確的定時時間 特別適用作串行口波待率發(fā)生器 4 方式3當TMOD中M1M0 11時 定時器工作在方式3 若將T0設置為模式3 TL0和TH0被分成為兩個互相獨立的8位計數(shù)器TH0和TL0 TL0可工作為定時或計數(shù)方式 占用原T0的各控制位 引腳和中斷源 即C T GATE TR0 TF0和T0 P3 4 引腳 INT0 P3 2 引腳 TH0只可用作定時功能 占用定時器T1的控制位TR1和T1的中斷標志位TF1 其啟動和關閉僅受TRl的控制 定時器T1無模式3 可工作于方式0 1 2 但當T0工作于方式3時T1不能使用中斷方式 只有將T1用做串行口的波特率發(fā)生器時 T0才工作在方式3 以便增加一個定時器 7 4定時計數(shù)器的應用程序設計 7 4 1定時器的計數(shù)初值C的計算和裝入由于采用加1計數(shù) 因此計數(shù)初值應為負值 計數(shù)初值 C 的求法如下 計數(shù)方式 計數(shù)初值C 模 X 其中X為要計的脈沖個數(shù) 定時方式 計數(shù)初值C t MC 補 模 t MC其中t為欲定時時間 MC為機器周期MC 12 fosc當采用12MHZ晶振時 MC 1us 當采用6MHZ晶振時 MC 2us 方式0 13位方式 C 64H 補 2000H 64H 1F9CH1F9CH 0001111110011100B13位中的高八位11111100B裝入TH0 13位中的低五位xxx11100B裝入TL0 MOVTH0 0FCH MOVTL0 1CH xxx用 0 填入 方式1 16位方式 C 64H 補 10000H 64H FF9CHMOVTH0 0FFHMOVTL0 9CH 例要計100個脈沖的計數(shù)初值 方式2 8位自動再裝入方式 C 64H 補 100H 64H 9CH初值既要裝入TH0 也要裝入TL0 MOVTH0 9CHMOVTL0 9CH 7 4 2定時計數(shù)器的初始化編程定時計數(shù)器的初始化編程步驟 1 根據(jù)定時時間要求或計數(shù)要求計算計數(shù)器初值 2 工作方式控制字送TMOD寄存器 3 送計數(shù)初值的高八位和低八位到THX和TLX寄存器中 4 啟動定時 或計數(shù) 即將TRX置位 如果工作于中斷方式 需要置位EA 中斷總開關 及ETX 允許定時 計數(shù)器中斷 并編中斷服務程序 例7 1如圖7 2所示 P1中接有八個發(fā)光二極管 編程使八個管輪流點亮 每個管亮100ms 設晶振為6MHz 7 4 3應用編程舉例 分析利用T1完成100ms的定時 當P1口線輸出 1 時 發(fā)光二極管亮 每隔100ms 1 左移一次 采用定時方式1 先計算計數(shù)初值 MC 2 s100ms 2 s 50000 C350H C350H 補 10000H C350H 3CB0H 用匯編語言編程 查詢方式如下 ORG0030HMOVA 01H 置第一個LED亮NEXT MOVP1 AMOVTMOD 10H T1工作于定時方式1MOVTH1 3CHMOVTL1 0B0H 定時100msSETBTR1AGAI JBCTF1 SHI 100ms到轉SHI 并清TF1SJMPAGAISHI RLASJMPNEXT 中斷方式ORG0000HAJMPMAIN 復位后從0000H開始執(zhí)行ORG001BHAJMPIV1 轉移到IV1ORG0030H 主程序MAIN MOVA 01HMOVP1 A 置第一個LED亮MOVTMOD 10H T1工作于定時方式1MOVTH1 3CHMOVTL1 0B0H 定時100msSETBTR1 啟動T1工作 SETBEASETBET1 允許T1中斷WAIT SJMPWAIT 等待中斷IV1 RLA 中斷服務程序 左移一位MOVP1 A 下一個發(fā)光二極管亮MOVTH1 3CHMOVTL1 0B0H 重裝計數(shù)初值RETI 中斷返回中斷子程序直接用A操作 不好 用C語言編程 For TH1 0 x3c TL1 0 xb0 裝載計數(shù)初值 do while TF1 查詢等待TF1置位 P1 1 定時時間到 下一只LED亮 TF1 0 軟件清TF1 查詢方式 includevoidmain void P1 0 x01 第一只LED亮 TMOD 0 x10 定時器1方式1 TR1 1 啟動T C0 voidmain void TMOD 0 x10 T1工作在定時方式1 P1 0 x01 第一只LED亮 TH1 0 x3c TL1 0 xb0 預置計數(shù)初值 EA 1 ET1 1 CPU開中斷 允許T1中 TR1 1 啟動T1開始定時 do while 1 等待中斷 中斷方式 includeTimer1 interrupt3using1 T1中斷服務程序 P1 1 下一只LED亮 TH1 0 x3c TL1 0 xb0 計數(shù)初值重載 T0采用方式1 X 216 100 103 2 3CB0H T1采用方式2 計數(shù)初值X 28 5 FBH均采用查詢方式 流程圖和程序如下 例7 2在P1 7端接一個發(fā)光二極管LED 要求利用定時控制使LED亮一秒滅一秒周而復始 設fosc 6MHZ 解 16位定時最大為216 2us 131 072ms 不夠 方法1 T0定時100ms P1 0每次取反 周期200ms 輸入T1作計數(shù)脈沖 T1計5個脈沖正好1s 硬件擴展 ORG0000HMAIN CLRP1 7SETBP1 0MOVTMOD 61HMOVTH1 0FBHMOVTL1 0FBHSETBTR1LOOP1 CPLP1 7 LOOP2 MOVTH0 3CHMOVTL0 0B0HSETBTR0 放循環(huán)外LOOP3 JBCTF0 LOOP4SJMPLOOP3LOOP4 CPLP1 0JBCTF1 LOOP1AJMPLOOP2END 程序中用JBC指令對定時 計數(shù)溢出標志位進行檢測 當標志位為1時跳轉并清標志 方法2 T0每隔100ms中斷一次 利用軟件對T0的中斷次數(shù)進行計數(shù) 中斷10次即實現(xiàn)了1秒的定時 ORG000BH T0中斷服務程序入口AJMPIP0ORG0030H 主程序開始MAIN CLRP1 7 T0定時100msMOVTMOD 01HMOVTH0 3CHMOVTL0 0B0HSETBET0SETBEA MOVR4 0AH 中斷10次計數(shù)SETBTR0SJMP 等待中斷IP0 DJNZR4 RET0 用R4計數(shù)不好 MOVR4 0AHCPLP1 7RET0 MOVTH0 3CHMOVTL0 0B0HSETBTR0 可去掉RETI C語言實現(xiàn)方法1 用中斷方式 并用程序計算計數(shù)初值 T0定時100ms初值 100 1000 2 50000 即 50000 T1計數(shù)5個脈沖工作于方式2 計數(shù)初值為 5 includesbitP1 0 P1 0 sbitP1 7 P1 7 timer0 interrupt1using1 T0中斷服務程序 P1 0 P1 0 100ms到P1 0取反 TH0 50000 256 重載計數(shù)初值 TL0 50000 256 timer interrupt3using2 T1中斷服務 P1 P1 7 1s到 燈變狀態(tài) main P1 7 0 置燈初始滅 P1 0 保證第一次反向便開始計數(shù)TMOD 0 x61 T0方式 定時 T1方式 計數(shù) TH0 50000 256 TL0 50000 256 TH1 5 TL1 5 預置計數(shù)初值 IP 0 x08 置優(yōu)先級寄存器 EA 1 ET0 1 ET1 1 開中斷 TR0 1 TR1 1 啟動定時計數(shù)器 for 等待中斷 例 有P3 4引腳 T0 輸入一低頻信號 其小于0 5kHZ 要求P3 4每發(fā)生一次負跳變時 P1 0輸出一個500us同步負脈沖 同時P1 1輸出一個1ms的同步正脈沖 已知晶振頻率為6MHZ 圖7 5 解按提意 設計方法如圖7 5所示 初態(tài)P1 1輸出高電平 系統(tǒng)復位時實現(xiàn) P1 1輸出低電平 T0選方式 計數(shù)方式 計一個脈沖 初值為FFH 當加在P3 4上的外部脈沖負跳變時 T0加1 計數(shù)器溢出 程序查詢到TF0為1 改變T0為500 s定時工作方式 并使P1 0輸出 P1 1輸出 T0第一次定時500 s溢出后 P1 0恢復 T0第二次定時500 s溢出后 P1 1恢復 T0恢復外部脈沖計數(shù) 設定時500 s的初始值為X 則 256 X 2 10 6 500 10 6解得X 6 源程序如下 BEGIN MOVTMOD 6H 設T0為方式 外部計數(shù)MOVTH0 0FFH 計數(shù)一個脈沖MOVTL0 0FFHCLRP1 1 P1 1初值為0SETBTR0 啟動計數(shù)器DELL JBCTF0 RESP1 檢測外跳變信號AJMPDELLRESP1 CLRTR0MOVTMOD 02H 重置T0為500 s定時 MOVTH0 06H 重置定時初值MOVTL0 06HSETBP1 1 P1 1置1CLRP1 0 P1 0清0SETBTR0 啟動定時計數(shù)器DEL2 JBCTF0 RESP2 檢測第一次500us到否AJMPDEL2RESP SETBP1 0 P1 0恢復1DEL3 JBCTF0 RESP3 檢測第二次500us到否AJMPDEL3RESP3 CLRP1 1 P1 1復0CLRTR0AJMPBEGIN 思考 如何改為中斷方式 7 4 4門控位的應用GATEx 1時 TRx 1且INTx 1才啟動定時器 利用這個特性可以測量外部輸入脈沖寬度 例7 4利用T0門控位測試INT0引腳上出現(xiàn)的正脈沖寬度 設晶振12MHz 將所測得值最高位存入片內71H單元 低位存入70H單元 解 設外部脈沖由 P3 2 輸入 T0工作于定時方式1 16位計數(shù) GATE設為1 測試時 應在INT0低電平時 設置TR0為1 當INT0變?yōu)楦唠娖綍r 就啟動計數(shù) 再次變低時 停止計數(shù) 此計數(shù)值與機器周期的乘積即為被測正脈沖的寬度 因fosc 12MHZ 機器周期為1us 測試過程如下 源程序如下 MOVTMOD 09H 設T0為方式1MOVTL0 00H 設計初值取最大值MOVTH0 00HMOVR0 70HJBP3 2 等P3 2 INT0 變低SETBTR0 啟動T0準備工作JNBP3 2 等待P3 2 INT0 變高JBP3 2 等待P3 2 INT0 變低CLRTR0 停止計數(shù) MOV R0 TL0 存放結
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小公司半年度策劃方案
- 實體輪胎活動方案
- 室內裝修活動策劃方案
- 室內門五一活動策劃方案
- 壽險公司獲客活動方案
- 寒假促銷活動方案
- 小學弓箭活動方案
- 小區(qū)策劃活動方案
- 寵物醫(yī)院驅蟲藥活動方案
- 小學教研活動方案
- 出租車 專業(yè)部分考核試題 城市客運企業(yè)主要負責人和安全生產管理人員安全考核基礎題庫
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門窗
- 人教版七年級下冊數(shù)學《期末檢測試卷》
- 防腐除銹檢驗記錄
- 公司金融課件(完整版)
- 三維激光掃描技術與應用實例-PPT課件
- 鐵路貨物裝載常用計算公式
- 14S501-1 球墨鑄鐵單層井蓋及踏步施工
- (新知杯)2017-2011上海市初中數(shù)學競賽試卷
- 職業(yè)緊張壓力量表OSI
評論
0/150
提交評論