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

📄 timer.c

📁 C0851F020单品机DA转换源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: timer.c
* 文件标识: none
* 适用器件: C8051F020/1/2/3
* 
* 摘 要: 本文件是timer硬件驱动程序文件
* 
* 当前版本: 1.1
* 作 者: 李林利
* 完成日期: 2006年9月24日
* 
* 当前版本: 1.0
* 作 者: 李林利
* 完成日期: 2004年11月14日
*
* 历史版本: 0.9 
* 原作者 : 李林利
* 完成日期: 2004年1月1日
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include  "C8051f020.h"
#include  "Const.h"
#include  "timer.h"
#include  "interrupt.h"
/************************************************************************************/
typedef struct 
   {
        unsigned int t;
        unsigned char n;
		unsigned char k;
   }TIMER_KN;

TIMER_KN	timer3; 
TIMER_KN	timer4; 
/************************************************************************************/

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

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

	TMOD&=0xf0;
	TMOD|=mode;

	count = -(SYSCLK/freq);

	TL0 = count&0x00ff;
	TH0 = (count>>8)&0x00ff;
}

/***********************************************************************************
* 函数名称: Timer0_Enable;
*
* 函数功能描述: Timer0使能函数,Timer0开始工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer0_Enable(void)
{
	TR0 = 1;
}

/***********************************************************************************
* 函数名称: Timer0_Disable;
*
* 函数功能描述: Timer0关闭函数,Timer0停止工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer0_Disable(void)
{
	TR0 = 0;
}

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

/***********************************************************************************
* 函数名称:Timer0_ISR;
*
* 函数功能描述:定时器0中断响应;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Timer0_ISR (void) interrupt 1 using 3
{    
	if (TF0)		
		TF0 = 0;		// 清除T0溢出标志
}

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

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

	TMOD&=0x0f;
	TMOD|=mode;

	PCON |= 0x10;							// SMOD1 = 1, 禁止Uart1的波特率/2功能
	n = SYSCLK/freq/16/256;					// 计算判断变量
	if (n < 1) 
	{
		count = -(SYSCLK/freq/16);		// 计算定时器计数值
		CKCON |=  0x10;						// T1M = 1,系统时钟
	} 
	else if (n < 12) 
	{
		count = -(SYSCLK/freq/16/12);	 // 计算定时器计数值
		CKCON &= ~0x10;                  // T1M = 1,系统时钟/12
	} 
	else
	{
		PCON &= ~0x10;					 // SMOD1 = 1, 允许Uart1的波特率/2功能
		count = -(SYSCLK/freq/16/12);	 // 计算定时器计数值
		CKCON &= ~0x10;                  // T1M = 1,系统时钟/12
	}	

	TL1 = count;
	TH1 = count;
}

/***********************************************************************************
* 函数名称: Timer1_Enable;
*
* 函数功能描述: Timer1使能函数,Timer1开始工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer1_Enable(void)
{
	//Interrupt_Enable(TIMER1_INT);
	TR1 = 1;
}

/***********************************************************************************
* 函数名称: Timer1_Disable;
*
* 函数功能描述: Timer1关闭函数,Timer0停止工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer1_Disable(void)
{
	TR1 = 0;
}

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

/***********************************************************************************
* 函数名称:Timer1_ISR;
*
* 函数功能描述:定时器1中断响应;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Timer1_ISR (void) interrupt 3 using 3
{    
	if (TF1)		
		TF1 = 0;		// 清除T1溢出标志
}

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

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

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

	RCAP2L = count&0x00ff;
	RCAP2H = (count>>8)&0x00ff;
	TL2 = RCAP2L;
	TH2 = RCAP2H;
}

/***********************************************************************************
* 函数名称: Timer2_Enable;
*
* 函数功能描述: Timer2使能函数,Timer0开始工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer2_Enable(void)
{
	TR2 = 1;
}

/***********************************************************************************
* 函数名称: Timer2_Disable;
*
* 函数功能描述: Timer2关闭函数,Timer2停止工作;
*              
* 输入参数: 无
*
* 返回数据: 无
*
* 注意: 无
************************************************************************************/
void Timer2_Disable(void)
{
	TR2 = 0;
}

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

/***********************************************************************************
* 函数名称:Timer2_ISR;
*
* 函数功能描述:定时器2中断响应;
*              
* 输入参数:none;
*
* 返回数据:none;
*
* 注意:    none;
************************************************************************************/
void Timer2_ISR (void) interrupt 5 using 3
{    
	if (TF2)		
		TF2 = 0;		// 清除T2溢出标志
	if (EXF2)
		EXF2 = 0;
}

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

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

	TMR3CN = mode;

⌨️ 快捷键说明

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