Jump to Navigation

51单片机Timer0源代码

晶振频率为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;
}


Main menu 2

about seo