?? 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 + -