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

📄 timer.c

📁 单片机实现消息队列的例子
💻 C
字号:
/*************************************************/

/****************定时器************************/

/*************2003年2月9日*********************/

/************WROTE BY WANGSW********************/
/*
寄存器说明:
1	TCON:中断标志寄存器
	TF1(8F)		T1中断标志位
	TR1(8E)		T1启停位	
	TF0(8D)		T0中断标志位
	TR0(8C)		T0启停位
2	TMOD:定时器方式寄存器
	GATE	|	C/~T	|	M1,M0	|GATE	|	C/~T	|	M1,M0	|
	\______________________________/	0 ~INT0	 0	定时器	  0 , 0	-----方式0
				T1					无关	 1	计数器	  0 ,  1	-----方式1
	对应							1 ~INT0	    模式	 	  1 ,  0	-----方式2
	INT1								有关					  1 ,  1	-----方式3


3	工作方式:
	方式0:13位计数器TL的搞三位不用
	方式1:16位计数器
	方式2:可循环8位计数器,适用于UART
	方式3:T0与T1不同
	定时器1 只能按不需要中断的方式2工作
	此模式下定时器0 的TL0 及TH0 作为两个独立的8 位计数器/定时器
	TL0 占用定时器0 的TF0 TH0 
	TL1 占用定时器1 的TR1和TF1
	
*/

#include "reg52x2.h"  

#include "define.h"

#include "timer.h"







/******************************************************************************************
*函数名:		timer0
*参数:			bStart			设置定时/计数器0是否开始工作
				bInt0Relation	定时/计数器0是否与INT0有关,此位设置即影响TMOD
								中关于定时/计数器0的GATE位
				bTimerMode		定时/计数器0是否是定时器模式,bTimerMode=1,即进入
								定时器模式;bTimerMode=0,即进入计数器模式
				bInterruptEnable  	定时/计数器0中断使能
				WorkMode		定时/计数器0工作模式设定
				TH0Data			定时/计数器0高8位定时计数器数据
				TL0Data			定时/计数器0低8位定时计数器数据	
*返回值:		无
*描述:			对定时/计数器0的工作模式以及一些设置进行设定,并可以
				启动定时/计数器0开始工作
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void timer0(bool bStart,
				  bool bInt0Relation,
				  bool bTimerMode,
				  bool bInterruptEnable,
				  byte WorkMode,
				  byte TH0Data,
				  byte TL0Data)
{	
	TF0 = 0;		/*定时器中断标志位*/

	if(bInt0Relation)	/*是否受INT0控制*/
	{
		SETBIT(TMOD, 3);
	}
	else
	{
		RESETBIT(TMOD, 3);
	}
	if(bTimerMode)		/*定时器计数器模式,TRUE为定时器,FALSE为计数器*/
	{
		RESETBIT(TMOD, 2);
	}
	else
	{
		SETBIT(TMOD, 2);
	}
	if(WorkMode & 0x02)		/*定时/计数器0工作方式设定*/
	{
		SETBIT(TMOD, 1);		
	}
	else
	{
		RESETBIT(TMOD, 1);
	}
	if(WorkMode & 0x01)
	{
		SETBIT(TMOD, 0);
	}
	else
	{
		RESETBIT(TMOD, 0);
	}
	TH0 = TH0Data;
	TL0 = TL0Data;

	ET0 = bInterruptEnable;
	TR0 = bStart;

}



/******************************************************************************************
*函数名:		timer2
*参数:		bStart			设置定时/计数器2是否开始工作
				TH2Data			定时器2初值设置
*返回值:		无
*描述:		定时器2设置程序,在这里定时/计数器2为可重复装载递增
				16位定时器,设置为每5ms产生一次溢出中断
*编写:			王绍伟
*版本信息:		V1.0			2003年8月15日
******************************************************************************************/
extern void timer2(bool bStart, byte TH2Data)
{

#ifdef SPEEDUP	
	TH2 = TH2Data;
	RCAP2H = TH2Data;
#else
/*
	当非加速模式时,让至溢出的定时计数次
	数为原来加速模式的一半
*/
	byte temp;
	temp = 0x100 - TH2Data;				
	temp = (temp >> 1) + TH2Data;			
	TH2 = temp;							
	RCAP2H = temp;
#endif
	ET2 = 1;
	TL2 = 0x00;
	RCAP2L = 0x00;
	T2MOD = 0x00;
	if(bStart)
	{
		T2CON = 0x04;
	}
	else
	{
		T2CON = 0x00;
	}
}


⌨️ 快捷键说明

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