部分程序,內(nèi)含原理,原理圖,接線圖,源程序,需要修改里面的斷碼。網(wǎng)上有。
單片機定時器的應用 1、單片機定時器的工原理 MCS-51 單片機內(nèi)部有兩個16 位可編程的定時器/計數(shù)器T0 和T1。它們即可用作定時器方式,又可用作計數(shù)器方式。其中T0 由TH0 和TL0 計數(shù)器構(gòu)成;T1 由TH1 和TL1 計數(shù)器構(gòu)成。 工作于定時器方式時,通過對機器周期(新型51單片機可以對振蕩周期計數(shù))的計數(shù),即每一個機器周期定時器加1,來實現(xiàn)定時。故系統(tǒng)晶振頻率直接影響定時時間。如果晶振頻率為12MHZ,則定時器每隔(1/12MHZ)×12=1us 加1。 工作于計數(shù)器方式時,對P3.4 或P3.5 管腳的負跳變(1→0)計數(shù)。它在每個機器周期的S5P2 時采樣外部輸入,當采樣值在這個機器周期為高,在下一個機器周期為低時,計數(shù)器加1。因此需要兩個機器周期來識別一個有效跳變,故最高計數(shù)頻率為晶振頻率的1/24。 特殊功能寄存器TMOD 用于定時器/計數(shù)器的方式控制。高4 位用于設(shè)置T1,低4 位用于設(shè)置T0。如圖1所示。 
圖1 定時器模式控制字格式
TCON 寄存器用于定時器的計數(shù)控制和中斷標志。如圖4-8所示。

圖2 定時控制寄存器數(shù)據(jù)格式 編寫程序控制這兩個寄存器就可以控制定時器的運行方式。 2、單片機內(nèi)部定時器/計數(shù)器的使用 (1)根據(jù)需要設(shè)置工作方式,即對TMOD設(shè)置; (2)定時/計數(shù)初值的設(shè)定; (3)然后啟動計數(shù),即對TR0或TR1置1。 (5)如需用中斷,則將EA和相關(guān)中斷控制位置1;則計數(shù)溢出后硬件會自動轉(zhuǎn)入中斷入口地址;如使用查詢,則必須對溢出中斷標志位TF0或TF1進行判斷。 1、實驗開發(fā)板連接圖 
2、實驗源程序 /******************************************************************************* * 標題:試驗數(shù)碼管上顯示定時器中斷計數(shù) * * 連接方法:參照接線圖 * ******************************************************************************/
- #include < reg51.h >
- #include <intrins.h>
- sbit LS138A=P2^2; //定義 138管腳
- sbit LS138B=P2^3;
- sbit LS138C=P2^4;
-
- unsigned int LedNumVal,LedOut[8];
-
- // 此表為 LED 的字模 //
- unsigned char code Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,
- 0xbf,0xc7,0x8c,0xc1,0xff,0xf7 };
-
- /***********************************************************
- purpose: 系統(tǒng)初始化
- /**********************************************************/
- void system_Ini()
- {
- TMOD = 0x00; //選擇模式0 13位計數(shù) 最大計數(shù)8192
- TH0 = (8192 - 1000)/32; // TH0=0x1C; 12.000M 預裝初值
- TL0 = (8192 - 1000)%32 ; //TL0=0x18;
- IE = 0x8A; //中斷
- TR0 = 1; //開啟T0定時器
- }
-
- void delay(unsigned int i)
- {
- char j;
- for(i; i > 0; i--)
- for(j = 200; j > 0; j--);
- }
-
- /********主函數(shù)****/
- main()
- {
- system_Ini() ;
- while(1)
- {
- unsigned char i;
- LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
- LedOut[1]=Disp_Tab[LedNumVal%1000/100];
- LedOut[2]=Disp_Tab[LedNumVal%100/10];
- LedOut[3]=Disp_Tab[LedNumVal%10];
- for( i=0; i<8; i++)
- { P0 = LedOut[i];
-
- switch(i)
- {
- case 0:LS138A=0; LS138B=0; LS138C=0; break;
- case 1:LS138A=1; LS138B=0; LS138C=0; break;
- case 2:LS138A=0; LS138B=1; LS138C=0; break;
- case 3:LS138A=1; LS138B=1; LS138C=0; break;
- case 4:LS138A=0; LS138B=0; LS138C=1; break;
- case 5:LS138A=1; LS138B=0; LS138C=1; break;
- case 6:LS138A=0; LS138B=1; LS138C=1; break;
- case 7:LS138A=1; LS138B=1; LS138C=1; break;
- }
- delay(150);
- }
-
- }
-
- }
-
- /*************************************
- [ T0 (1ms)中斷] 中斷
- *************************************/
- void T0zd(void) interrupt 1 //3定時器1的中斷號 ;1定時器0的中斷號,
- // 0外部中斷1; 2外部中斷2 ; 4串口中斷
- {
- TH0 = (8192 - 1000)/32 ; //TH0 = 0xFc,12.000
- TL0 = (8192 - 1000)%32; //TL0 = 0x18;
- LedNumVal++;
- }
復制代碼
思考題:
1、標注程序,畫出流程圖
2、給出定時器定時一秒的計算過程。
完整的Word格式文檔51黑下載地址:
3單片機定時器的應用.docx
(192.92 KB, 下載次數(shù): 14)
2018-5-28 19:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|