?? timer.c
字號(hào):
/************************************************************************************
* Copyright (c) 2004,西安銘朗電子科技有限責(zé)任公司
* All rights reserved.
*
* 文件名稱: timer.c
* 文件標(biāo)識(shí): none
* 適用器件: C8051F020/1/2/3
*
* 摘 要: 本文件是timer硬件驅(qū)動(dòng)程序文件
*
* 當(dāng)前版本: 1.1
* 作 者: 李林利
* 完成日期: 2006年9月24日
*
* 當(dāng)前版本: 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 參數(shù)及函數(shù)定義
//
/*************************************************************************************/
/***********************************************************************************
* 函數(shù)名稱: Timer0_Init;
*
* 函數(shù)功能描述: Timer0 初始化函數(shù);
*
* 輸入?yún)?shù): mode: Timer0工作模式定義,freq:定時(shí)或計(jì)數(shù)溢出頻率
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
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;
}
/***********************************************************************************
* 函數(shù)名稱: Timer0_Enable;
*
* 函數(shù)功能描述: Timer0使能函數(shù),Timer0開始工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer0_Enable(void)
{
TR0 = 1;
}
/***********************************************************************************
* 函數(shù)名稱: Timer0_Disable;
*
* 函數(shù)功能描述: Timer0關(guān)閉函數(shù),Timer0停止工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer0_Disable(void)
{
TR0 = 0;
}
/***********************************************************************************
* 函數(shù)名稱: Timer0_SetValue;
*
* 函數(shù)功能描述: 設(shè)置定時(shí)或計(jì)數(shù)寄存器值
*
* 輸入?yún)?shù): value:定時(shí)或計(jì)數(shù)寄存器值
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer0_SetValue(unsigned int value)
{
TL0 = value&0x00ff;
TH0 = (value>>8)&0x00ff;
}
/***********************************************************************************
* 函數(shù)名稱:Timer0_ISR;
*
* 函數(shù)功能描述:定時(shí)器0中斷響應(yīng);
*
* 輸入?yún)?shù):none;
*
* 返回?cái)?shù)據(jù):none;
*
* 注意: none;
************************************************************************************/
void Timer0_ISR (void) interrupt 1 using 3
{
if (TF0)
TF0 = 0; // 清除T0溢出標(biāo)志
}
/*************************************************************************************/
//
// Timer1 參數(shù)及函數(shù)定義
//
/*************************************************************************************/
/***********************************************************************************
* 函數(shù)名稱: Timer1_Init;
*
* 函數(shù)功能描述: Timer1 初始化函數(shù);
*
* 輸入?yún)?shù): mode: Timer1工作模式定義,freq:定時(shí)或計(jì)數(shù)溢出頻率
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
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; // 計(jì)算判斷變量
if (n < 1)
{
count = -(SYSCLK/freq/16); // 計(jì)算定時(shí)器計(jì)數(shù)值
CKCON |= 0x10; // T1M = 1,系統(tǒng)時(shí)鐘
}
else if (n < 12)
{
count = -(SYSCLK/freq/16/12); // 計(jì)算定時(shí)器計(jì)數(shù)值
CKCON &= ~0x10; // T1M = 1,系統(tǒng)時(shí)鐘/12
}
else
{
PCON &= ~0x10; // SMOD1 = 1, 允許Uart1的波特率/2功能
count = -(SYSCLK/freq/16/12); // 計(jì)算定時(shí)器計(jì)數(shù)值
CKCON &= ~0x10; // T1M = 1,系統(tǒng)時(shí)鐘/12
}
TL1 = count;
TH1 = count;
}
/***********************************************************************************
* 函數(shù)名稱: Timer1_Enable;
*
* 函數(shù)功能描述: Timer1使能函數(shù),Timer1開始工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer1_Enable(void)
{
//Interrupt_Enable(TIMER1_INT);
TR1 = 1;
}
/***********************************************************************************
* 函數(shù)名稱: Timer1_Disable;
*
* 函數(shù)功能描述: Timer1關(guān)閉函數(shù),Timer0停止工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer1_Disable(void)
{
TR1 = 0;
}
/***********************************************************************************
* 函數(shù)名稱: Timer1_SetValue;
*
* 函數(shù)功能描述: 設(shè)置定時(shí)或計(jì)數(shù)寄存器值
*
* 輸入?yún)?shù): value:定時(shí)或計(jì)數(shù)寄存器值
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer1_SetValue(unsigned int value)
{
TL1 = value&0x00ff;
TH1 = (value>>8)&0x00ff;
}
/***********************************************************************************
* 函數(shù)名稱:Timer1_ISR;
*
* 函數(shù)功能描述:定時(shí)器1中斷響應(yīng);
*
* 輸入?yún)?shù):none;
*
* 返回?cái)?shù)據(jù):none;
*
* 注意: none;
************************************************************************************/
void Timer1_ISR (void) interrupt 3 using 3
{
if (TF1)
TF1 = 0; // 清除T1溢出標(biāo)志
}
/*************************************************************************************/
//
// Timer2 參數(shù)及函數(shù)定義
//
/*************************************************************************************/
/***********************************************************************************
* 函數(shù)名稱: Timer2_Init;
*
* 函數(shù)功能描述: Timer2 初始化函數(shù);
*
* 輸入?yún)?shù): mode: Timer2工作模式定義,freq:定時(shí)或計(jì)數(shù)溢出頻率
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer2_Init(unsigned char mode,unsigned long freq)
{
unsigned char n;
unsigned int count;
T2CON = mode;
n = SYSCLK/freq/32/65536; // 計(jì)算判斷變量
if (n < 1)
CKCON |= 0x20; // T2M = 1,系統(tǒng)時(shí)鐘
else if (n < 12)
CKCON &= ~0x20; // T2M = 1,系統(tǒng)時(shí)鐘/12
count = -(SYSCLK/freq/32); // 計(jì)算定時(shí)器計(jì)數(shù)值
RCAP2L = count&0x00ff;
RCAP2H = (count>>8)&0x00ff;
TL2 = RCAP2L;
TH2 = RCAP2H;
}
/***********************************************************************************
* 函數(shù)名稱: Timer2_Enable;
*
* 函數(shù)功能描述: Timer2使能函數(shù),Timer0開始工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer2_Enable(void)
{
TR2 = 1;
}
/***********************************************************************************
* 函數(shù)名稱: Timer2_Disable;
*
* 函數(shù)功能描述: Timer2關(guān)閉函數(shù),Timer2停止工作;
*
* 輸入?yún)?shù): 無
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer2_Disable(void)
{
TR2 = 0;
}
/***********************************************************************************
* 函數(shù)名稱: Timer2_SetValue;
*
* 函數(shù)功能描述: 設(shè)置定時(shí)或計(jì)數(shù)寄存器值
*
* 輸入?yún)?shù): value:定時(shí)或計(jì)數(shù)寄存器值
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer2_SetValue(unsigned int value)
{
RCAP2L = value&0x00ff;
RCAP2H = (value>>8)&0x00ff;
TL2 = RCAP2L;
TH2 = RCAP2H;
}
/***********************************************************************************
* 函數(shù)名稱:Timer2_ISR;
*
* 函數(shù)功能描述:定時(shí)器2中斷響應(yīng);
*
* 輸入?yún)?shù):none;
*
* 返回?cái)?shù)據(jù):none;
*
* 注意: none;
************************************************************************************/
void Timer2_ISR (void) interrupt 5 using 3
{
if (TF2)
TF2 = 0; // 清除T2溢出標(biāo)志
if (EXF2)
EXF2 = 0;
}
/*************************************************************************************/
//
// Timer3 參數(shù)及函數(shù)定義
//
/*************************************************************************************/
/***********************************************************************************
* 函數(shù)名稱: Timer3_Init;
*
* 函數(shù)功能描述: Timer3 初始化函數(shù);
*
* 輸入?yún)?shù): mode: Timer3工作模式定義,freq:定時(shí)或計(jì)數(shù)溢出頻率
*
* 返回?cái)?shù)據(jù): 無
*
* 注意: 無
************************************************************************************/
void Timer3_Init(unsigned char mode,unsigned long freq)
{
unsigned long count;
TMR3CN = mode;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -