福建師范大學MCU作業(yè)內部定時器01應用_第1頁
福建師范大學MCU作業(yè)內部定時器01應用_第2頁
福建師范大學MCU作業(yè)內部定時器01應用_第3頁
福建師范大學MCU作業(yè)內部定時器01應用_第4頁
福建師范大學MCU作業(yè)內部定時器01應用_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗報告5內部定時器0/1應用實驗目的1、 理解單片機內部定時器的工作原理及使用方法2、 了解單片機定時中斷程序的編寫和調試方法3、 掌握定時器的基本使用方法實驗環(huán)境pc機一臺 和keil c51軟件內容與步驟用定時器編寫一個秒計時器過程分析 通過編程前畫出流程圖,使整個程序框架清晰了,編寫起來更簡單。結果總結通過本次實驗,讓我加深了對定時器的理解及其能夠更好的利用它。在實驗中,因為沒有重賦初值而出現了奇怪的問題,通過不斷的思考和嘗試終于得以解決。思考題: 1、 在實驗程序基礎上編寫一個24小時計時時鐘。 見附錄2、 說說把顯示程序放在主程序和定時中斷程序的優(yōu)缺點。 答:顯示程序放在主程序時會

2、一直占用空間執(zhí)行,但執(zhí)行速度比較快顯示程序放在中斷程序是通過中斷服務程序中被調用而執(zhí)行的,每中斷一次調用一次,故執(zhí)行耗時間。附錄 1.用定時器編寫一個秒計時器運行32秒后(左秒數位,右毫秒位):#includereg52.h#define disp_null 10#define led_num 8char dispbuf8;unsigned int msec=0,sec=0;unsigned char disppot=0;unsigned char code ledcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;void

3、dispflash(void)p3=0xff; /將所有數碼管都置為不亮p2=ledcodedispbufdisppot; /送該數碼管的數據p3=(1=led_num)disppot=0; /指針輪換void sysinit(void)tmod=0x01; /設置定時器0為方式1tr0=1; /啟動定時器0進行計數et0=1; /開啟定時器0中斷功能ea=1; /開啟總中斷void printf_num(void)dispbuf7=msec%10;dispbuf6=(msec/10)%10;dispbuf5=msec/100;dispbuf4=disp_null;dispbuf3=disp_

4、null;dispbuf2=sec%10;dispbuf1=(sec/10)%10;dispbuf0=sec/100;/主函數void main() sysinit(); /初始化while(1) printf_num(); / 將這個數的每一位分解到顯示緩沖區(qū)#define fre 12000000.0 /系統(tǒng)時鐘頻率#define inc_time (1000000/(fre/12) /每個計時時鐘的周期時間,采用12分頻,單位微妙#define need_time(time) (65535-(unsigned int)(time/inc_time) /計時time時間需要多少個計數個數#

5、define count_t(time) tl0=need_time(time);th0=need_time(time)8 /定時時間預置給高,低位8位的tho tlovoid time0int(void) interrupt 1count_t(1000);/給定時器賦需要定時的時間初值 單位微妙dispflash(); /進行數碼管顯示刷新msec+ ;if( msec= 1000 ) /毫秒與秒的進制 msec= 0, sec+ ; 2. 在實驗程序基礎上編寫一個24小時計時時鐘運行狀態(tài):#include reg52.h#define disp_null 10/ 顯示為空#define d

6、isp_equ 11/ 顯示等號#define led_num 8/ 共有8個數碼管char dispbuf8;/ 顯示緩沖區(qū)unsigned int msec= 0;/ 毫秒unsigned char sec= 52, min= 59, hour= 12;/ 秒,分,時/*函數:flashdisp,該函數實現動態(tài)顯示的一次刷新-入口:無出口:無*/unsigned char disppot=0 ;/ 數碼管動態(tài)掃描指針unsigned char code ledcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x48 ;

7、void dispflash( void ) p3= 0xff ;/ 將所有數碼管都置為不亮p2= ledcodedispbufdisppot; / 送該數碼管的數據p3= (1= led_num ) disppot= 0 ;/ 指針輪換/*函數:pntnum,將一個數轉成顯示的格式-入口:無出口:無*/void pntnum( void )dispbuf7= sec%10; dispbuf6= sec/10;dispbuf5= disp_equ;dispbuf4= min%10;dispbuf3= min/10;dispbuf2= disp_equ;dispbuf1= hour%10;dis

8、pbuf0= hour/10;/* 函數:定時器0初始配置 功能:1000us中斷一回,對毫秒變量和秒變量進行進位操作*/void sysinit( void )tmod= 0x01 ; / 設置定時器0為方式1tr0= 1 ;/ 啟動定時器0進行記數et0= 1 ;/ 開啟定時器0中斷功能ea= 1 ;/ 開啟總中斷/*函數:main,系統(tǒng)主函數-入口:無出口:無*/void main( )sysinit( );while( 1 )pntnum( ); / 將這個數的每一位分解到顯示緩沖區(qū)/#define fre 11059200.0/ 系統(tǒng)時鐘頻率#define fre 12000000.

9、0/ 系統(tǒng)時鐘頻率#define inc_time (1000000/(fre/12)/ 每個計時時鐘的周期時間,采用12分頻,單位微秒#define need_time(time) (65536-(unsigned int)(time/inc_time)/ 計時time時間需要多少個 計數個數#define count_t(time) tl0= need_time(time); th0= need_time(time)8/ 定時時間預置值給高、低位8位的 th0 tl0/* 函數:定時器0中斷程序 功能:2000us中斷一回,對毫秒變量和秒變量進行進位操作*/void time0int( void ) interrupt 1 count_t(2000) ;/ 給定時器賦需要定時的時間初值(單位微秒)dispflash( ) ;/ 進行數碼管顯示刷新/ 以下進行時間調整msec+ ;if( m

溫馨提示

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

最新文檔

評論

0/150

提交評論