項目4 簡易秒表的設計與制作_第1頁
項目4 簡易秒表的設計與制作_第2頁
項目4 簡易秒表的設計與制作_第3頁
項目4 簡易秒表的設計與制作_第4頁
項目4 簡易秒表的設計與制作_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機系統(tǒng)設計與制作項目4秒表的設計與制作目錄

知識鏈接任務實施一、任務分析二、安裝與調試一、定時器/計數(shù)器的基本概念及其應用目錄

知識鏈接任務實施一、任務分析二、安裝與調試一、定時器/計數(shù)器的基本概念及其應用1、作用和功能進行精確地定時和計數(shù)。定時器:單片機內部穩(wěn)定的信號源計數(shù)。計數(shù)器:用于記錄單片機外部發(fā)生的事件。作用廣泛應用于工業(yè)控制和檢測中,可實現(xiàn)定時、延時、頻率測量、信號檢測等功能。功能2、內部結構及工作原理MCS-51單片機內部有兩個16位的可編程定時器/計數(shù)器T0(定時器0)和T1(定時器1),分別由兩個8位的RAM單元組成,最大計數(shù)值為65536,超過65536時,定時器/計數(shù)器產(chǎn)生溢出。內部結構加法計數(shù)器TMODTCON定時器/計數(shù)器控制寄存器,控制T0、T1的啟動和停止及設置溢出標志。定時器/計數(shù)器工作方式寄存器,確定工作方式和功能。16位,高8位和低8位組成。2、內部結構及工作原理圖5.1

T0、T1內部結構示意圖TL02、內部結構及工作原理TH010000000000000001111111111111111TF0011設定初值2啟動計數(shù)送入計數(shù)脈沖3計數(shù)溢出產(chǎn)生中斷信號2、內部結構及工作原理定時工作方式時,計數(shù)脈沖來自系統(tǒng)時鐘振蕩器輸出十二分頻信號。計數(shù)周期即為單片機的一個機器周期。調整計數(shù)器初值,即調整了定時時間。定時工作方式2、內部結構及工作原理相關數(shù)值計算計數(shù)值N=溢出值(最大計數(shù)值)-計數(shù)初值X定時時間τ=機器周期T×計數(shù)值N計數(shù)頻率?c=時鐘頻率?osc/122n(溢出值)2n-1(全1)……計數(shù)初值X……0計數(shù)值N例?osc=12MHz時,T=1/[12×106×(1/12)]=1μs若計數(shù)值為N,則定時Nμs。(計數(shù)值N=定時時間τ/機器周期T)2、內部結構及工作原理計數(shù)工作方式時,計數(shù)脈沖來自輸入引腳T0(P3.4)和T1(P3.5)的外部信號,外部脈沖的下降沿觸發(fā)計數(shù),計數(shù)器加1。CPU能夠檢測到的外部脈沖的最高頻率為系統(tǒng)時鐘頻率的1/24。外部輸入信號的高電平與低電平的持續(xù)時間須在一個機器周期以上。計數(shù)工作方式3、定時器/計數(shù)器的控制寄存器位D7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M089H定時器T1方式字段定時器T0方式字段表5.2

TMOD位格式定義TMOD(Timer/CounterModeControlRegister)定時器工作方式寄存器。用于控制T0和T1的工作方式,低4位用于T0,高4位用于T1。TMOD其位格式定義如表5.2所示。(1)TMOD3、定時器/計數(shù)器的控制寄存器位D7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M089H定時器T1方式字段定時器T0方式字段GATE:選通控制位。GATE=0,軟件對TR0(或TR1)置1時可啟動定時器。GATE=1,在INT0(或INT1)引腳為1,且軟件對TR0(或TR1)置1時啟動定時器工作。C/T:定時器/計數(shù)器方式選擇位。C/T=0,定時工作方式;C/T=1,計數(shù)工作方式。M1、M0:工作方式控制位,可構成4種工作方式。注意:TMOD所有位復位后清零。TMOD不能位尋址,只能以字節(jié)方式工作。3、定時器/計數(shù)器的控制寄存器M1M0工作方式說明最大計數(shù)值00013位定時器/計數(shù)器213=819201116位定時器/計數(shù)器216=65536102自動重裝初值8位定時器/計數(shù)器28=256113T0:分成兩個8位計數(shù)器T1:停止計數(shù)28=256表5.3工作方式選擇3、定時器/計數(shù)器的控制寄存器與定時器計數(shù)器相關的是TCON的高四位,TF1、TF0為溢出中斷標志位,TR1、TR0為定時器/計數(shù)器運行控制位。請復習任務4相關內容(見教材P74)。(2)TMOD位D7D6D5D4D3D2D1D0TCONTF1TR1TF0TR0IE1IT1IE0IT088H8FH8EH8DH8CH8BH8AH89H88H表4.2TCON位格式定義4、定時器/計數(shù)器的工作方式用戶通過指令把工作方式寫入TMOD,選擇定時器/計數(shù)器的功能和工作方式,然后將計數(shù)初值寫入THx和TLx中控制定時或計數(shù)長度,再通過選通控制位的置1或清0來啟動或停止定時器/計數(shù)器工作。查詢TH、TL和TCON的內容,可以判斷定時器的狀態(tài)。4、定時器/計數(shù)器的工作方式

(1)工作方式0TLx———×××××THx××××××××13位計數(shù)器,由TLx的低5位(高3位未用)和THx的8位組成。213=8192最大計數(shù)值1~8192計數(shù)范圍1~8192μs(fosc=12MHz)定時范圍4、定時器/計數(shù)器的工作方式

(2)工作方式1TLx××××××××THx××××××××16位計數(shù)器,由TLx的8位和THx的8位組成。216=65536最大計數(shù)值1~65536計數(shù)范圍1~65536μs(fosc=12MHz)定時范圍4、定時器/計數(shù)器的工作方式

(3)工作方式2TLx××××××××THx××××××××可自動重裝初值的8位計數(shù)器,僅TLx用于計數(shù),THx用于保存計數(shù)初值。28=256最大計數(shù)值1~256計數(shù)范圍1~256μs(fosc=12MHz)定時范圍4、定時器/計數(shù)器的工作方式

(3)工作方式3TL0××××××××TH0××××××××定時器T0被分解成兩個獨立的8位計數(shù)器TL0和TH0,兩個定時器的最大計數(shù)值均為256。此時,定時器T1的中斷標志位TF1和運行控制位TR1被TH0占用,不能中斷,只能將溢出送給串行口。T1不能使用工作方式3。28=256最大計數(shù)值1~256計數(shù)范圍1~256μs(fosc=12MHz)定時范圍5、定時器/計數(shù)器的應用

(1)定時器/計數(shù)器的編程確定工作方式計算計數(shù)初值開放中斷根據(jù)功能,確定計數(shù)還是定時工作方式,將工作方式控制字寫入TMOD。根據(jù)定時時間或計數(shù)要求計算計數(shù)初值,并將其寫入TLx和THx。若需要使用中斷,ETx、EA置1,開放定時器/計數(shù)器中斷和CPU中斷。啟動計數(shù)GATE=0時,TRx置1啟動計數(shù);GATE=1時,除TRx置1外,還必須在外中斷引腳處加上相應的電平值才能啟動。5、定時器/計數(shù)器的應用利用中斷系統(tǒng),計數(shù)溢出后向CPU發(fā)出中斷請求,將溢出后需要執(zhí)行的操作放入定時器/計數(shù)器對應的中斷服務程序中執(zhí)行。采用中斷方式可以提高CPU的效率。在整個計數(shù)過程中,通過指令不斷查詢TF0或TF1的狀態(tài)來判斷計數(shù)是否溢出。這種方式編程較簡單,但是需要占用大量CPU時間,使得CPU效率降低。編程方式查詢中斷如果在某些應用中不需要進行定時或計數(shù),則T0和T1可作為外部中斷請求使用。此時將定時器/計數(shù)器設置成計數(shù)方式,計數(shù)初值設為最大值。5、定時器/計數(shù)器的應用查詢的編程方式小丁同學,你的作業(yè)還沒做完嗎?每隔10分鐘……5、定時器/計數(shù)器的應用中斷的編程方式報告老師,我作業(yè)做完了!5、定時器/計數(shù)器的應用

(2)應用實例如所示,P1口接有8個發(fā)光二極管,編程使8個發(fā)光二極管輪流點亮。每個發(fā)光二極管亮100ms,設晶振頻率fosc=6MHz。例5.1①確定工作方式

用T1完成100ms定時時間,使P1初始狀態(tài)為01H,每隔100ms左移一次。

當晶振頻率fosc=6MHz時,機器周期Tcy=2μs,則:

計數(shù)值N=T/Tcy=100ms/2μs=50000

因此采用工作方式1,工作方式字TMOD=10H,即: TMOD.0~TMOD.3:因T0不用,可取任意值,此處取0值; TMOD.4、TMOD.5:M1M0=01,T1工作在方式1; TMOD.6:C/T=0,T1為定時方式; TMOD.7:GATE=0,計數(shù)不受INT1腳控制。5、定時器/計數(shù)器的應用②計算計數(shù)初值

X=216-N=65536-50000=15536=3CB0H

則: TH1=3CH,TL1=0B0H。③C源程序(查詢方法)#include"reg51.h"voidmain(){ P1=0x01;

//點亮第一個LED TMOD=0x10;

//T1工作于方式1 TR1=1;

//啟動T1計數(shù)

while(1) { TH1=0x3c; //裝載計數(shù)初值

TL1=0xb0;

//TH1=(65536-50000)/256; //TL1=(65536-50000)%256;

while(!TF1); //等待定時器溢出

P1<<=1; //點亮下一LED if(P1==0) P1=0x01;

TF1=0;

//軟件清除TF1 }}④C源程序(中斷方法)#include"reg51.h"voidtimer1()interrupt3using1 //T1中斷服務程序{ TH1=0x3c; //重裝計數(shù)初值

TL1=0xb0;

P1<<=1; //點亮下一LED

if(P1==0) P1=0x01;}voidmain(){ P1=0x01; //點亮第一個LED TMOD=0x10; //T1工作于方式1 TH1=0x3c; //裝載計數(shù)初值

TL1=0xb0;

IE=0x88; //開放T1中斷

TR1=1; //啟動T1計數(shù)

while(1); //等待中斷}T1中斷初始化5、定時器/計數(shù)器的應用在單片機P1.0口接一個發(fā)光二極管,要求利用定時控制使LED亮1s滅1s周而復始,設晶振頻率fosc=6MHz。例5.2當fosc=6MHz時,機器周期Tcy=2μs,工作方式0最大定時時間為16.384ms,工作方式1最大定時時間為131.072ms,工作方式2最大定時時間為512μs。顯然無法滿足定時1s的要求。5、定時器/計數(shù)器的應用確定工作方式

可以采用方式0,使T0每隔10ms中斷一次,利用軟件對中斷次數(shù)進行計數(shù),中斷100次即實現(xiàn)1s定時。也可以采用方式1,使T0每隔100ms中斷一次,中斷10次實現(xiàn)1s定時。

這里采用T0工作方式0,則TMOD=00H。計算計數(shù)初值X=213-N=8192-(10ms/2μs)=3192=0C78H=0000110001111000B則TH0=01100011B=63H,TL0=00011000B=18H。C源程序#include"reg51.h"sbitLED=P1^0;unsignedcharnum=0;voidtimer0()interrupt1

//T0中斷服務程序{ TH0=0x63;

//重裝計數(shù)初值

TL0=0x18;

num++;

if(num==100) //1s時間到LED狀態(tài)取反

{ LED=~LED;

num=0;

}}voidmain(){ TMOD=0x00; //T0工作于方式0

TH0=0x63;

//定時10ms

TL0=0x18;

ET0=1; //開放T0中斷

EA=1;

TR0=1; //啟動T0計數(shù)

while(1); //等待中斷}T0中斷初始化C源程序#include"reg51.h"sbitLED=P1^0;unsignedcharnum=0;voidtimer0()interrupt1

//T0中斷服務程序{ TH0=(8192-5000)/32;

//重裝計數(shù)初值

TL0=(8192-5000)%32;

num++;

if(num==100) //1s時間到LED狀態(tài)取反

{ LED=~LED;

num=0;

}}voidmain(){ TMOD=0x00; //T0工作于方式0

TH0=(8192-5000)/32;

//定時10ms

TL0=(8192-5000)%32;

ET0=1; //開放T0中斷

EA=1;

TR0=1; //啟動T0計數(shù)

while(1); //等待中斷}T0中斷初始化5、定時器/計數(shù)器的應用當GATE=1、TR0=1時,只有INT0(P3.2)引腳上出現(xiàn)高電平時,T0才被允許計數(shù),試利用這一功能測試INT0(P3.2)引腳上正脈沖的寬度(以機器周期表示)。例5.3設外部待測脈沖由INT0腳輸入,T0工作在方式1,設置為定時狀態(tài),GATE置1。測試時,在INT0端為0時TR0置1,當INT0腳變?yōu)?時啟動計數(shù);再次變?yōu)?時停止計數(shù)。此時的計數(shù)值即為被測正脈沖寬度。TR=1TR=0計數(shù)C源程序#include"reg51.h"sbitsignal=P3^2;voidmain(){ unsignedintwidth=0;

TMOD=0x09; //T0工作于方式1定時,GATE=1 TH0=0x00;

TL0=0x00;

while(signal); //等待P3.2變低

TR0=1; //啟動T0計數(shù)

while(!signal); //等待P3.2變高

while(signal); //等待P3.2再次變低

TR0=0; //停止計數(shù)

width=(TH0<<8)|TL0;}T0中斷初始化目錄

知識鏈接任務實施一、任務分析二、安裝與調試一、定時器/計數(shù)器的基本概念及其應用1、任務要求本任務要求設計一個計時時間為0~59s的秒表。利用定時器實現(xiàn)1s定時。P3.7口接一個按鍵,該按鍵有三個功能,分別為開始計時、停止計時和清零。每次按下按鍵后,按鍵標識會在三個功能之間循環(huán)。P0、P2口接共陽極數(shù)碼管,靜態(tài)顯示秒表計時。用KeilC、Proteus等作開發(fā)工具,進行仿真,并完成實物電路制作并測試,最后需完成項目報告。秒表任務要求2、總體設計方案AT89C51單片機按鍵控制復位電路時鐘電路LED數(shù)碼管顯示3、硬件電路設計4、軟件設計

程序流程圖C源程序(1)#include"reg51.h"unsignedcharsegtab[10]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; //0~9共陽極段碼表unsignedcharcount; //秒計數(shù)unsignedcharkey_flag; //按鍵功能:0啟動,1停止,2清零unsignedcharnum; //定時次數(shù)計數(shù)sbitkey=P1^0; //按鍵bitkey_state; //按鍵狀態(tài)voidDelay(unsignedcharn) //延時程序{ unsignedchari,j; for(i=0;i<n;i++) for(j=0;j<200;j++);}C程序(2)voidTimer0()interrupt1 //T0中斷服務程序{ TH0=(65536-50000)/256; //重裝初值,50ms TL0=(65536-50000)%256; num++; if(num==20) //每50ms*20=1s刷新一次

{ num=0; count++; P0=segtab[count%10]; //顯示個位

if(count/10==0) //顯示十位,十位為0則不顯示

P2=0xff; else P2=segtab[count/10]; if(count==60) //計滿59秒后回0 count=0; }}C程序(3)voidKey_Event() //按鍵處理子程序{ if(key_state==0) key_flag=(key_flag+1)%3; switch(key_flag) { case1: //啟動計時

TR0=1;break; case2: //停止計時

TR0=0;break; case0: //清零

P0=0xc0;P2=0xff;count=0;num=0;break; }}C程序(4)voidmain() //主程序{ P0=0xc0; //顯示0s P2=0xff;num=0;count=0;

key_flag=2;

//按鍵標志初值為0 key_state=1; TMOD=0x01; //T

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論