📄 timer.c
字号:
/************************************************************************************
* 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 + -