|
樓主,STC官方例子就有定時器0~4的用法。舉個例子:
#define MAIN_Fosc 24000000UL //定義主時鐘
//========================================================================
// 函數(shù): u8 Timer0_Config(u32 time)
// 描述: timer0初始化函數(shù).
// 參數(shù): time: 時間us.
// 返回: 0: 初始化正確, 1: 重裝值過大, 初始化錯誤.
// 版本: V1.0, 2018-3-5
//========================================================================
u8 Timer0_Config(u32 time) //time值是時間(單位us)
{
TR0 = 0; //停止計數(shù)
TMOD &= 0xf0;
time = (u32)(((float)MAIN_Fosc * (float)time)/1000000UL); //重裝的是時間(us), 計算所需要的系統(tǒng)時鐘數(shù).
if(time >= (65536UL * 12)) return 1; //值過大, 返回錯誤
if(time < 65536UL) AUXR |= 0x80; //1T mode
else
{
AUXR &= ~0x80; //12T mode
time = time / 12;
}
time = 65536UL - time;
TH0 = (u8)(time >> 8);
TL0 = (u8)(time);
ET0 = 1; //允許中斷
// PT0 = 1; //高優(yōu)先級中斷
TMOD = (TMOD & ~0x03) | 0; //工作模式, 0: 16位自動重裝, 1: 16位定時/計數(shù), 2: 8位自動重裝, 3: 16位自動重裝, 不可屏蔽中斷
TR0 = 1; //開始運行
return 0;
}
初始化調(diào)用:
Timer0_Config(10000); //定時時間 us
//========================================================================
// 函數(shù): void timer0_ISR (void) interrupt TIMER0_VECTOR
// 描述: timer0中斷函數(shù).
// 參數(shù): none.
// 返回: none.
// 版本: V1.0, 2016-5-12
//========================================================================
void timer0_ISR (void) interrupt TIMER0_VECTOR
{
P32 = ~P32;
}
|
|