晶振频率为11.0592MHz,定时器0工作模式1,每25毫秒触发中断,中断过程中将调用用户定义的OnTimer()函数。此代码同时提供基于Timer0中断的Delay()函数,可以以25毫秒为单位精确延时,如Delay(50)将延时50毫秒。
Timer0.h代码
void Timer0_Init(void); void Delay(short nMS);
Timer0.c代码
#include "Hardware.h" unsigned char Timer0_Flag = 0; extern void OnTimer0(); void Timer0_Routine(void) interrupt 1 { // Stop Timer 0 TR0 = 0; // Configure Timer 0 TH0 = 0xA6; TL0 = 0x0; // Start Timer 0 TR0 = 1; Timer0_Flag ++; OnTimer0(); } void Delay(short nMS) { short n25MS; short nDelayCounter = 0; Timer0_Flag = 0; n25MS = nMS / 25; loop: if (Timer0_Flag > 0) { Timer0_Flag --; nDelayCounter ++; if (nDelayCounter == n25MS) return; } goto loop; } void Timer0_Init(void) { TMOD = TMOD & 0xF0 | 0x01; ET0 = 1; TR0 = 1; }