⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 ZIGBEE 2006协议栈 BAT测试代码 RADIO PULSE MG2455
💻 C
字号:


/*******************************************************************************
	- Chip		: MG24500/55
	- Author		: RadioPulse Inc, 2007.
	- Date		: 2007-07-02
	- Version		: VER 1.0	
*******************************************************************************/

#include "INCLUDE_TOP.h"

//	UINT8	Timer0_Reload_TH0;
//	UINT8	Timer0_Reload_TL0;
//-------------------------------------------
// MODE0/1/2/3 Enabled
// MAX = 98ms, MIN = 1ms
//-------------------------------------------
extern UINT8 Timer0_Reload_TL0;
extern UINT8 Timer0_Reload_TH0;
void ZHAL_TIMER0_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT8 ms) 
{
	UINT32	Reload32;
	UINT8	_EA;
	UINT8	_MS;

	_EA = EA;
	EA = 0;

	if(ms > 49)		_MS = 49;
	else				_MS = ms << 1;

	Reload32 = 2000;
	Reload32 = Reload32 * _MS;		
	Reload32 = (Reload32 / 3) & 0x0000FFFF;
	Reload32 = 0xFFFF - Reload32 + 1;

	Timer0_Reload_TH0 = Reload32 >> 8;
	Timer0_Reload_TL0 = Reload32;

	TH0 = Timer0_Reload_TH0;
	TL0 = Timer0_Reload_TL0;	

	TMOD &= 0xF0;
	TMOD |= 0x01;
	
	PT0 = Priority;

	if(Run)		TR0 = 1;
	else			TR0 = 0;

	if(IntEna)	ET0 = 1;
	else			ET0 = 0;

	EA = _EA;
	

}


// Counter Input : P0.6
void ZHAL_COUNTER0_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT16 CountNum)
{
	UINT16	Reload16;
	UINT8	_EA;

	_EA = EA;
	EA = 0;

	Reload16 = 0xFFFF - CountNum + 1;
	Timer0_Reload_TH0 = Reload16 >> 8;
	Timer0_Reload_TL0 = Reload16;

	TH0 = Timer0_Reload_TH0;
	TL0 = Timer0_Reload_TL0;

	TMOD &= 0xF0;		// Clear bit[3:0], 12 bit counter
	TMOD |= 0x04;		// C/T0# = 1 : Counter Mode Operation

	PT0 = Priority;

	if(Run)		TR0 = 1;
	else			TR0 = 0;

	if(IntEna)	ET0 = 1;
	else			ET0 = 0;

	EA = _EA;	

}

//-------------------------------------------
// MODE0/1/2/3 Enabled
// MAX = 98ms, MIN = 1ms
//-------------------------------------------
extern UINT8 Timer1_Reload_TL1;
extern UINT8 Timer1_Reload_TH1;
void ZHAL_TIMER1_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT8 ms) 
{

	UINT32	Reload32;
	UINT8	_EA;
	UINT8	_MS;

	_EA = EA;
	EA = 0;	

	if(ms > 49)		_MS = 49;
	else				_MS = ms << 1;	
	
	Reload32 = 2000;
	Reload32 = Reload32 * _MS;		
	Reload32 = (Reload32 / 3) & 0x0000FFFF;
	Reload32 = 0xFFFF - Reload32 + 1;

	Timer1_Reload_TH1 = Reload32 >> 8;
	Timer1_Reload_TL1 = Reload32;

	TH1 = Timer1_Reload_TH1;
	TL1 = Timer1_Reload_TL1;
	
	TMOD &= 0x0F;		// clear bit[7:4]
	TMOD |= 0x10;		// Mode=1(16 bit timer)	
	
	PT1 = Priority;

	if(Run)		TR1 = 1;
	else			TR1 = 0;

	if(IntEna)		ET1 = 1;
	else			ET1 = 0;

	EA = _EA;

}


// Counter1 Input : P0.7
void ZHAL_COUNTER1_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT16 CountNum)
{
	UINT16	Reload16;
	UINT8	_EA;

	_EA = EA;
	EA = 0;

	Reload16 = 0xFFFF - CountNum + 1;
	Timer1_Reload_TH1 = Reload16 >> 8;
	Timer1_Reload_TL1 = Reload16;

	TH1 = Timer1_Reload_TH1;
	TL1 = Timer1_Reload_TL1;

	TMOD &= 0x0F;		// Clear bit[7:4]
	TMOD |= 0x50;		// 16bit Counter Mode and C/T1# = 1 : Counter Mode Operation

	PT1 = Priority;

	if(Run)		TR1 = 1;
	else			TR1 = 0;

	if(IntEna)	ET1 = 1;
	else			ET1 = 0;

	EA = _EA;	

}

extern UINT8 Timer2_Reload_TL2;
extern UINT8 Timer2_Reload_TH2;	
void ZHAL_TIMER2_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT16 us) 
{
	UINT16	Reload16;
	UINT8	_EA;

	_EA = EA;
	EA = 0;

	if(us == 0)	Reload16 = 0;
	else			Reload16 = 2*us - 1;
	
	Timer2_Reload_TH2 = Reload16 >> 8;
	Timer2_Reload_TL2 = Reload16;
	TH2 = Timer2_Reload_TH2;
	TL2 = Timer2_Reload_TL2;

	T2IP = Priority;

	if(Run)	{	T23CON |= 0x02;	}
	else		{	T23CON &= 0xFD;	}

	if(IntEna)	T2IE = 1;
	else			T2IE = 0;

	EA = _EA;
}

//-------------------------------------------------
// MIN = 1, MAX = 0x5FFF
//-------------------------------------------------	
extern UINT8 Timer3_Reload_TL3;
extern UINT8 Timer3_Reload_TH3;
void ZHAL_TIMER3_SET(UINT8 IntEna, UINT8 Priority, UINT8 Run, UINT16 us)
{
	UINT32	Reload32;
	UINT8	_EA;

	_EA = EA;
	EA = 0;

	if(us > 0x2FFF)	Reload32 = 0x2FFF;
	else				Reload32 = us << 1;
	
	Reload32 = Reload32 << 3;
	Reload32 = Reload32 / 3;
	if(Reload32 == 0)		Reload32 = 0;
	else					Reload32 = Reload32 - 1;

	Timer3_Reload_TH3 = Reload32 >> 8;		// bit[15:8]
	Timer3_Reload_TL3 = Reload32;			// bit[7:0]	
	TH3 = Timer3_Reload_TH3;
	TL3 = Timer3_Reload_TL3;
	
	T3IP = Priority;

//	if(Run)	{	T23CON |=  (0x80); }
//	else		{	T23CON &= ~(0x80); }

	if(Run)	{	T23CON |=  0x08; }
	else		{	T23CON &= 0xF7; }

	if(IntEna)	T3IE = 1;
	else			T3IE = 0;

	EA = _EA;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -