定時/計數器的結構和工作原理 定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器組成。80C51單片機定時/計數器的工作是由兩個特殊功能寄存器控制的。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能,低四位用于T0,高四位用于T1。TCON是控制寄存器,控制T0和T1的啟動和停止及溢出標志,高四位與定時器有關,低四位與外部中斷有關。如果定時/計數器工作于定時模式,則表示定時時間已到;如果工作于計數模式,則表示計數值已滿。加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鐘振蕩脈沖經12分頻后送來;一個是T0或T1引腳輸入的外部脈沖源。 中斷允許控制。CPU對中斷系統所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器 IE控制的。 #include <reg52.h> unsigned int t; sbit p3_4 = P3^4; void init_timer(){ TH0 = (65535 - 50000) / 256; //求取高8位 TL0 = (65535 - 50000) % 256; //求取低8位 EA = 1; //CPU總中斷允許位 ET0 = 1; //定時/計數器中斷允許位 IT0 = 1; //下降沿有效 TR0 = 1; //定時器啟動 TMOD = 0x01; //使用定時器T0,16位計數器 p3_4 = 1; } void main(){ init_timer(); t = 0; while(1){ if(t == 20){ p3_4 = "p3_4; //響一秒,停一秒 t = 0; } } } void bell() interrupt 1{ TH0 = (65535 - 50000) / 256; //從15535開始計時,共50000us,50ms TL0 = (65535 - 50000) % 256; //20*50 = 1000ms = 1s 即1s響停一次 t++; } 李萬鵬 |