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

圖2 定時(shí)控制寄存器數(shù)據(jù)格式 編寫程序控制這兩個(gè)寄存器就可以控制定時(shí)器的運(yùn)行方式。 2、單片機(jī)內(nèi)部定時(shí)器/計(jì)數(shù)器的使用 (1)根據(jù)需要設(shè)置工作方式,即對(duì)TMOD設(shè)置; (2)定時(shí)/計(jì)數(shù)初值的設(shè)定; (3)然后啟動(dòng)計(jì)數(shù),即對(duì)TR0或TR1置1。 (5)如需用中斷,則將EA和相關(guān)中斷控制位置1;則計(jì)數(shù)溢出后硬件會(huì)自動(dòng)轉(zhuǎn)入中斷入口地址;如使用查詢,則必須對(duì)溢出中斷標(biāo)志位TF0或TF1進(jìn)行判斷。 1、實(shí)驗(yàn)開發(fā)板連接圖 
2、實(shí)驗(yàn)源程序 /******************************************************************************* * 標(biāo)題:試驗(yàn)數(shù)碼管上顯示定時(shí)器中斷計(jì)數(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位計(jì)數(shù) 最大計(jì)數(shù)8192
- TH0 = (8192 - 1000)/32; // TH0=0x1C; 12.000M 預(yù)裝初值
- TL0 = (8192 - 1000)%32 ; //TL0=0x18;
- IE = 0x8A; //中斷
- TR0 = 1; //開啟T0定時(shí)器
- }
-
- 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定時(shí)器1的中斷號(hào) ;1定時(shí)器0的中斷號(hào),
- // 0外部中斷1; 2外部中斷2 ; 4串口中斷
- {
- TH0 = (8192 - 1000)/32 ; //TH0 = 0xFc,12.000
- TL0 = (8192 - 1000)%32; //TL0 = 0x18;
- LedNumVal++;
- }
復(fù)制代碼
思考題:
1、標(biāo)注程序,畫出流程圖
2、給出定時(shí)器定時(shí)一秒的計(jì)算過(guò)程。
完整的Word格式文檔51黑下載地址:
3單片機(jī)定時(shí)器的應(yīng)用.docx
(192.92 KB, 下載次數(shù): 14)
2018-5-28 19:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|