?? timer.c
字號:
/************************************************************************************
* Copyright (c), 2004-2007,西安銘朗電子科技有限責(zé)任公司
* 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硬件驅(qū)動程序文件;
*
* 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 參數(shù)及函數(shù)定義
//
// Note: Timer0未被占用,以下函數(shù)用戶可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer0_Init;
*
* Description: Timer0 初始化函數(shù);
*
* Input: mode, Timer0工作模式定義; freq,定時或計數(shù)溢出頻率;
*
* 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使能函數(shù), Timer0開始工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_Enable(void)
{
TR0 = 1;
}
/***********************************************************************************
* Function: Timer0_Disable;
*
* Description: Timer0關(guān)閉函數(shù), Timer0停止工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_Disable(void)
{
TR0 = 0;
}
/***********************************************************************************
* Function: Timer0_SetValue;
*
* Description: 設(shè)置定時或計數(shù)寄存器值;
*
* Input: value,定時或計數(shù)寄存器值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_SetValue(unsigned int value)
{
TL0 = value&0x00ff;
TH0 = (value>>8)&0x00ff;
}
/***********************************************************************************
* Function: Timer0_ISR;
*
* Description: 定時器0中斷響應(yīng);
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer0_ISR (void) interrupt 1 using 3
{
if (TF0)
TF0 = 0; // 清除T0溢出標(biāo)志
}
/*************************************************************************************/
//
// Timer1 參數(shù)及函數(shù)定義
//
// Note: Timer1已被UART0,UART1占用,在不應(yīng)用UART0,UART1的情況下
// 以下函數(shù)用戶可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer1_Init;
*
* Description: Timer1 初始化函數(shù);
*
* Input: mode, Timer1工作模式定義; freq, 定時或計數(shù)溢出頻率;
*
* 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); // 計算定時器計數(shù)值
CKCON |= 0x10; // T1M = 1,系統(tǒng)時鐘
}
else if (n < 12)
{
count = -(sysclk/freq/16/12); // 計算定時器計數(shù)值
CKCON &= ~0x10; // T1M = 1,系統(tǒng)時鐘/12
}
else
{
PCON &= ~0x10; // SMOD1 = 1, 允許Uart1的波特率/2功能
count = -(sysclk/freq/16/12); // 計算定時器計數(shù)值
CKCON &= ~0x10; // T1M = 1,系統(tǒng)時鐘/12
}
TL1 = count;
TH1 = count;
}
/***********************************************************************************
* Function: Timer1_Enable;
*
* Description: Timer1使能函數(shù),Timer1開始工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_Enable(void)
{
TR1 = 1;
}
/***********************************************************************************
* Function: Timer1_Disable;
*
* Description: Timer1關(guān)閉函數(shù),Timer0停止工作;
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_Disable(void)
{
TR1 = 0;
}
/***********************************************************************************
* Function: Timer1_SetValue;
*
* Description: 設(shè)置定時或計數(shù)寄存器值;
*
* Input: value,定時或計數(shù)寄存器值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_SetValue(unsigned int value)
{
TL1 = value&0x00ff;
TH1 = (value>>8)&0x00ff;
}
/***********************************************************************************
* Function: Timer1_ISR;
*
* Description: 定時器1中斷響應(yīng);
*
* Input: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void Timer1_ISR (void) interrupt 3 using 3
{
if (TF1)
TF1 = 0; // 清除T1溢出標(biāo)志
}
/*************************************************************************************/
//
// Timer2 參數(shù)及函數(shù)定義
//
// Note: Timer2已被AD0占用,在不應(yīng)用AD0或不應(yīng)用AD0定時轉(zhuǎn)換的情況下
// 以下函數(shù)用戶可自由修改使用
//
/*************************************************************************************/
/***********************************************************************************
* Function: Timer2_Init;
*
* Description: Timer2初始化函數(shù);
*
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -