要啟用一個定時器,先要開啟定時器,然后產生中斷
系統中斷:

初始化程序應完成如下工作:
對TMOD賦值,以確定T0和T1的工作方式。
計算初值,並將其寫入TH0、TL0或TH1、TL1。
中斷方式時,則對EA賦值,開放定時器中斷。
使TR0或TR1置位,啟動定時/計數器定時或計數。
#include <reg52.h> /************ 定時器+中斷控制led翻轉 ***********/ sbit LED = P0^0; typedef unsigned int u16; typedef unsigned char u8; void timer_init(){ TMOD |= 0x01; //定時器工作方式1,啟用T0定時器, GATE位為0,用TCON的TR0控制T0定時器的啟動 //設置定時器的初始計數值 //計算方法 //假設定時器為1ms,一個機器周期為 1/單片機的晶振頻率 即: 1/12M = 1us //而1個機器周期 = 12個時鍾周期 所以: n x 機器周期 = 1ms ===> n x 1us = 1ms //所以n = 1000,也就是經過1000個機器周期,定時器要溢出(從0開始計數) //所以定時器的初始值為65535 - 1000 + 1 = 64536 ===> 0xFC18 TH0 = 0xFC; TL0 = 0x18; EA = 1; //總中斷開關 ET0 = 1; //T0中斷 TR0 = 1;//啟動T0定時器 } void trigger_timer0() interrupt 1{ static u16 i = 0; TH0 = 0xFC; TL0 = 0x18; i++; if( i == 1000 ) { //1秒 i = 0; LED = ~LED; } } void main(){ timer_init(); while( 1 ); }
