📄 timer.c
字号:
/************************************************************************************
* Copyright (c), 2004-2007,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* Http: www.mlarm.com
* Email: mlarm@mlarm.com
*
* File name: timer.c
* Project : ML-F020ICB
* Processor: C8051F020
* Compiler : Keil C51 Compiler
*
* Author: 李林利
* Version: 1.20
* Date: 2007.6.1
* Email: GavinLi@126.com
*
* Description: 本文件是timer硬件驱动程序文件;
*
* Others: TIMER0: 空闲未用;
* TIMER1: UART0,UART1;
* TIMER2: AD0;
* TIMER3: DAC0,DAC1;
* TIMER4: 空闲未用;
*
* Function List:
* 1. void Timer0_Init(unsigned char mode,unsigned long freq)
* 2. void Timer0_Enable(void)
* 3. void Timer0_Disable(void)
* 4. void Timer0_ISR (void)
* 5. void Timer1_Init(unsigned char mode,unsigned long freq)
* 6. void Timer1_Enable(void)
* 7. void Timer1_Disable(void)
* 8. void Timer1_ISR (void)
* 9. void Timer2_Init(unsigned char mode,unsigned long freq)
* 10. void Timer2_Enable(void)
* 11. void Timer2_Disable(void)
* 12. void Timer2_ISR (void)
* 13. void Timer3_Init(unsigned char mode,unsigned long freq)
* 14. void Timer3_Enable(void)
* 15. void Timer3_Disable(void)
* 16. void Timer3_ISR (void)
* 17. void Timer4_Init(unsigned char mode,unsigned long freq)
* 18. void Timer4_Enable(void)
* 19. void Timer4_Disable(void)
* 20. void Timer4_ISR (void)
*
* History:
* 1. Author: 李林利
* Version: 1.10
* Date: 2007.3.12
* Modification: none
*
* 2. Author: 李林利
* Version: 1.00
* Date: 2004.11.24
* Modification: 建立文件
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "..\config\C8051f020.h"
#include "..\config\Const.h"
#include "timer.h"
#include "..\driver\interrupt.h"
#include "..\driver\dac.h"
/************************************************************************************/
/*
typedef struct
{
unsigned int t;
unsigned char n;
unsigned char k;
}TIMER_KN;
TIMER_KN data timer4;
TIMER_KN data timer3;
*/
/************************************************************************************/
extern unsigned long code sysclk;
/*************************************************************************************/
//
// Timer0 参数及函数定义
//
// Note: Timer0未被占用,以下函数用户可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer0_Init;
*
* Description: Timer0 初始化函数;
*
* Input: mode, Timer0工作模式定义; freq,定时或计数溢出频率;
*
* Return: none;
*
* Note: 该定时器未被占用用户可自由使用;
************************************************************************************/
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;
}
/***********************************************************************************
* Function: Timer0_Enable;
*
* Description: Timer0使能函数, Timer0开始工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_Enable(void)
{
TR0 = 1;
}
/***********************************************************************************
* Function: Timer0_Disable;
*
* Description: Timer0关闭函数, Timer0停止工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_Disable(void)
{
TR0 = 0;
}
/***********************************************************************************
* Function: Timer0_SetValue;
*
* Description: 设置定时或计数寄存器值;
*
* Input: value,定时或计数寄存器值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_SetValue(unsigned int value)
{
TL0 = value&0x00ff;
TH0 = (value>>8)&0x00ff;
}
/***********************************************************************************
* Function: Timer0_ISR;
*
* Description: 定时器0中断响应;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_ISR (void) interrupt 1 using 3
{
if (TF0)
TF0 = 0; // 清除T0溢出标志
}
/*************************************************************************************/
//
// Timer1 参数及函数定义
//
// Note: Timer1已被UART0,UART1占用,在不应用UART0,UART1的情况下
// 以下函数用户可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer1_Init;
*
* Description: Timer1 初始化函数;
*
* Input: mode, Timer1工作模式定义; freq, 定时或计数溢出频率;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_Init(unsigned char mode,unsigned long freq)
{
unsigned char count,n;
TMOD&=0x0f;
TMOD|=mode;
//PCON |= 0x90; // 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;
}
/***********************************************************************************
* Function: Timer1_Enable;
*
* Description: Timer1使能函数,Timer1开始工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_Enable(void)
{
TR1 = 1;
}
/***********************************************************************************
* Function: Timer1_Disable;
*
* Description: Timer1关闭函数,Timer0停止工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_Disable(void)
{
TR1 = 0;
}
/***********************************************************************************
* Function: Timer1_SetValue;
*
* Description: 设置定时或计数寄存器值;
*
* Input: value,定时或计数寄存器值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_SetValue(unsigned int value)
{
TL1 = value&0x00ff;
TH1 = (value>>8)&0x00ff;
}
/***********************************************************************************
* Function: Timer1_ISR;
*
* Description: 定时器1中断响应;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_ISR (void) interrupt 3 using 3
{
if (TF1)
TF1 = 0; // 清除T1溢出标志
}
/*************************************************************************************/
//
// Timer2 参数及函数定义
//
// Note: Timer2已被AD0占用,在不应用AD0或不应用AD0定时转换的情况下
// 以下函数用户可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer2_Init;
*
* Description: Timer2初始化函数;
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -