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

📄 timer.c

📁 C0851F020单品机DA转换源码
💻 C
📖 第 1 页 / 共 2 页
字号:

	count = SYSCLK/freq/12;

	timer3.t = -(count%65536); 
	timer3.n = count/65536; 
	timer3.k = timer3.n; 
	
	if (timer3.k==0)
	{
		TMR3RLL = timer3.t&0x00ff;
		TMR3RLH = (timer3.t>>8)&0x00ff;

		TMR3L = TMR3RLL;
		TMR3H = TMR3RLH;
	}
	else if(timer3.k==1) 
	{
		TMR3RLL = timer3.t&0x00ff;
		TMR3RLH = (timer3.t>>8)&0x00ff;

		TMR3L = 0;
		TMR3H = 0;
	}
	else
	{
		TMR3RLL = 0;
		TMR3RLH = 0;

		TMR3L = 0;
		TMR3H = 0;
	}
	
}

/***********************************************************************************
* 函数名称: Timer3_Enable;
*
* 函数功能描述: Timer3使能函数,Timer3开始工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer3_Enable(void)
{
	TMR3CN |= TR3;
}

/***********************************************************************************
* 函数名称: Timer3_Disable;
*
* 函数功能描述: Timer3关闭函数,Timer3停止工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer3_Disable(void)
{
	TMR3CN &= ~TR3;
}

/***********************************************************************************
* 函数名称: Timer3_SetValue;
*
* 函数功能描述: 设置定时或计数寄存器值
*              
* 输入参数: value:定时或计数寄存器值
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer3_SetValue(unsigned int value)
{
	TMR3RLL = value&0x00ff;
	TMR3RLH = (value>>8)&0x00ff;

	TMR3L = TMR3RLL;
	TMR3H = TMR3RLH;
}

/***********************************************************************************
* 函数名称:Timer3_ISR;
*
* 函数功能描述:定时器3中断响应;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Timer3_ISR (void) interrupt 14 using 3
{    
	if (TMR3CN&TF3)
		TMR3CN &= ~TF3;

	if (timer3.k>0)
		timer3.k--; 
	
	if (timer3.k==0)
	{
		 

		DAC0_OutUpdate();
		DAC1_OutUpdate();
	  
       timer3.k = timer3.n;
      if(timer3.k==1) 
   	{
	     	TMR3RLL = timer3.t&0x00ff;
	     	TMR3RLH = (timer3.t>>8)&0x00ff;

   		TMR3L = 0;
	     	TMR3H = 0;
	   }
      else
	   {
		    TMR3RLL = 0;
		    TMR3RLH = 0;

		    TMR3L = 0;
		    TMR3H = 0;
	   }
	}
	else if(timer3.k==1)
	{
		TMR3RLL = timer3.t&0x00ff;
		TMR3RLH = (timer3.t>>8)&0x00ff;
	}	
}

/*************************************************************************************/
//
// 							Timer4 参数及函数定义
//
/*************************************************************************************/

/***********************************************************************************
* 函数名称: Timer4_Init;
*
* 函数功能描述: Timer4 初始化函数;
*              
* 输入参数: mode: Timer4工作模式定义,freq:定时或计数溢出频率
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer4_Init(unsigned char mode,unsigned long freq)
{
	unsigned char n;
	unsigned int count;
	unsigned long m;

#if (T4_MODE==T_UART1)

		T4CON = mode;
		n = SYSCLK/freq/32/65536;			// 计算判断变量
		if (n < 1) 
			CKCON |=  0x40;						// T4M = 1,系统时钟
		else if (n < 12) 
			CKCON &= ~0x40;               		// T4M = 1,系统时钟/12
	
		count = -(SYSCLK/freq/32);			// 计算定时器计数值

		RCAP4L = count&0X00ff;
		RCAP4H = (count>>8)&0X00ff;
	
		TL4 = RCAP4L;
		TH4 = RCAP4H;
#elif (T4_MODE==T_TIMER)
	m = SYSCLK/freq/12;

	timer4.t = -(m%65536); 
	timer4.n = m/65536; 
	timer4.k = timer4.n; 
	
	if (timer4.k==0)
	{
		RCAP4L = timer4.t&0x00ff;
		RCAP4H = (timer4.t>>8)&0x00ff;

		TL4 = RCAP4L;
		TH4 = RCAP4H;
	}
	else if(timer4.k==1)
	{
		RCAP4L = timer4.t&0x00ff;
		RCAP4H = (timer4.t>>8)&0x00ff;

		TL4 = 0;
		TH4 = 0;
	}
	else
	{
		RCAP4L = 0;
		RCAP4H = 0;

		TL4 = 0;
		TH4 = 0;
	}
#else
	T4CON = mode;
#endif
}

/***********************************************************************************
* 函数名称: Timer4_Enable;
*
* 函数功能描述: Timer4使能函数,Timer4开始工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer4_Enable(void)
{
	T4CON |= TR4;
}

/***********************************************************************************
* 函数名称: Timer4_Disable;
*
* 函数功能描述: Timer4关闭函数,Timer4停止工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer4_Disable(void)
{
	T4CON &= ~TR4;
}

/***********************************************************************************
* 函数名称: Timer4_SetValue;
*
* 函数功能描述: 设置定时或计数寄存器值
*              
* 输入参数: value:定时或计数寄存器值
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer4_SetValue(unsigned int value)
{
	RCAP4L = value&0X00ff;
	RCAP4H = (value>>8)&0X00ff;
	
	TL4 = RCAP4L;
	TH4 = RCAP4H;
}

/***********************************************************************************
* 函数名称:Timer4_ISR;
*
* 函数功能描述:定时器4中断响应;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Timer4_ISR (void) interrupt 16 using 3
{    
   unsigned int m;

	if (T4CON&TF4)
		T4CON &= ~TF4;
	if (T4CON&EXF4)
		T4CON &= ~EXF4;

	if (timer4.k>0)
		timer4.k--; 
	
	if (timer4.k==0)
	{
		timer4.k = timer4.n; 


		DAC0_OutUpdate();
		DAC1_OutUpdate();
	    Uart1_SendChar('S');
	}
	else if(timer3.k==1)
	{
		TMR3RLL = timer3.t&0x00ff;
		TMR3RLH = (timer3.t>>8)&0x00ff;
	}	




#if (T4_MODE==T_TIMER)
	//m = SYSCLK/freq/12;

	timer4.t = -(m%65536); 
	timer4.n = m/65536; 
	timer4.k = timer4.n; 
	
	if (timer4.k==0)
	{
		RCAP4L = timer4.t&0x00ff;
		RCAP4H = (timer4.t>>8)&0x00ff;

		TL4 = RCAP4L;
		TH4 = RCAP4H;
	}
	else if(timer4.k==1)
	{
		RCAP4L = timer4.t&0x00ff;
		RCAP4H = (timer4.t>>8)&0x00ff;

		TL4 = 0;
		TH4 = 0;
	}
	else
	{
		RCAP4L = 0;
		RCAP4H = 0;

		TL4 = 0;
		TH4 = 0;
	}
#else
	//T4CON = mode;
#endif
}

/***********************************************************************************/
// 文件结束
/***********************************************************************************/


/***********************************************************************************
* 函数名称:Timer0_Delay;
*
* 函数功能描述:定时器延时子函数;
*              
* 输入参数:延时时间(单位毫秒);
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
/*
void Timer0_Init(int count)
{
	TCON  &= ~0x30;                     // 停止Timer0
	TMOD  &= ~0x00;                     // 配置定时器Timer0工作在16位模式
	TMOD  |=  0x01;
	CKCON |=  0x00;                     // 定时器Timer0时钟选择

	TR0 = 0;                         	// 停止定时器Timer0
	TH0 = -count >> 8;       		    // 设置定时器Timer0溢出时间
	TL0 = -count;
}
*/







/***********************************************************************************/
// 文件结束
/***********************************************************************************/

⌨️ 快捷键说明

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