📄 timer.#3
字号:
/****************************************************************************
**
** 文件名: timer.c
** 功能: C8051Fxxx定时器驱动和延时函数;
** 创建时间:2005.08.05
** 修改时间:2005.12.01
** 修改说明:
** 作者: 李立学
** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
**
****************************************************************************/
#include "LZK.H"
/***********************************************************************
* 名称:DuS()
* 功能:延时,10uS为1个单位.
* 入口参数:ucTime,延时单位个数时间.
* 出口参数:无
* 说明:
***********************************************************************/
void DuS(unsigned char ucTime) // Unit: 1uS,24MHz System clock
{
unsigned char i;
for(i=0;i<ucTime;i++);
for(i=0;i<ucTime;i++);
for(i=0;i<ucTime;i++);
}
/***********************************************************************
* 名称:DmS()
* 功能:延时,1mS为1个单位.
* 入口参数:ucTime,延时单位个数时间.
* 出口参数:无
* 说明:
***********************************************************************/
void DmS(unsigned char ucTime) // Unit: 1mS
{
unsigned char i;
for(i=0; i<ucTime; i++)
{
DuS(250);
DuS(250);
DuS(250);
DuS(250);
}
}
/***********************************************************************
* 名称:D1S()
* 功能:延时,1S为1个单位.
* 入口参数:ucTime,延时单位个数时间.
* 出口参数:无
* 说明:
***********************************************************************/
void D1S(unsigned char ucTime) // Unit: 1S
{
unsigned char i;
for(i=0;i<ucTime;i++)
{
DmS(250);
DmS(250);
DmS(250);
DmS(250);
}
}
/***********************************************************************
* 名称:T0T1_Init()
* 功能:T0、T1初始化.
T0:功率因数的相差测量;T1:UART1的波特率发生器,8位自装载模式;
Mode 1: 16-bit CNT; Mode 2: 8-bit CNT with Auto-Reload
* 入口参数:无.
* 出口参数:无
* 说明:
***********************************************************************/
void T0T1_Init(void)
{
SFRPAGE = TIMER01_PAGE; // T0: PhaseDiff MSR; T1: UART1;
TCON = 0x00; // 0000 0000
// TCON(00000000): Timer Control Register
// TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
// Bit7: TF1: Timer 1 Overflow Flag.
// Bit6: TR1: Timer 1 Run Control.
// Bit5: TF0: Timer 0 Overflow Flag.
// Bit4: TR0: Timer 0 Run Control.
// Bit3: IE1: External Interrupt 1 Flag.
// Bit2: IT1: External Interrupt 1 Type Select.
// 0/1: /INT1 is level triggered , active logic-low / edge triggered, falling-edge.
// Bit1: IE0: External Interrupt 0 Flag.
// Bit0: IT0: External Interrupt 0 Type Select.
// 0/1: /INT0 is level triggered , active logic-low / edge triggered, falling-edge.
TMOD = 0x29; // 0010 1001: T1 MODE 2; T0 MODE 1;
// TMOD(00000000): Timer Mode Register
// Bit7: GATE1: Timer 1 Gate Control.
// 0: Timer 1 enabled when TR1 = 1 irrespective of /INT0 logic level.
// 1: Timer 1 enabled only when TR1 = 1 AND /INT0 = logic 1.
// Bit6: C/T1: Counter/Timer 1 Select.
// 0: Timer : Timer 1 incremented by clock defined by T0M bit (CKCON.3).
// 1: Counter: Timer 1 incremented by high-to-low transitions on external input pin (T0).
// Bits5-4: T1M1-T1M0: Timer 1 Mode Select.
// 00 Mode 0: 13-bit counter/timer
// 01 Mode 1: 16-bit counter/timer
// 10 Mode 2: 8-bit counter/timer with auto-reload
// 11 Mode 3: Timer 1 inactive
// Bit3: GATE0: Timer 0 Gate Control.
// 0: Timer 0 enabled when TR0 = 1 irrespective of /INT0 logic level.
// 1: Timer 0 enabled only when TR0 = 1 AND /INT0 = logic 1.
// Bit2: C/T0: Counter/Timer Select.
// 0: Timer: Timer 0 incremented by clock defined by T0M bit (CKCON.3).
// 1: Counter: Timer 0 incremented by high-to-low transitions on external input pin (T0).
// Bits1-0: T0M1-T0M0: Timer 0 Mode Select. Same with T1M1-T1M0
// 00 Mode 0: 13-bit counter/timer
// 01 Mode 1: 16-bit counter/timer
// 10 Mode 2: 8-bit counter/timer with auto-reload
// 11 Mode 3: Timer 1 inactive
CKCON = 0x00; // 000 1 0 0 00: T1 Uses the SYSCLK; T0 USE SYSCLK/12;
// CKCON(00000000): Clock Control Register
// Bits7-5: UNUSED. Read = 000b, Write = don’t care.
// Bit4: T1M: Timer 1 Clock Select.
// 1, use SYSCLK.
// Bit3: T0M: Timer 0 Clock Select.
// 1, use SYSCLK.
// Bit2: UNUSED. Read = 0b, Write = don’t care.
// Bits1-0: SCA1-SCA0: Timer 0/1 Prescale Bits
// 00 System clock divided by 12
// 01 System clock divided by 4
// 10 System clock divided by 48
// 11 External clock divided by 8
TH0 = TH0_INIT; // TH0_INIT = 0x00;
TL0 = TL0_INIT; // TL0_INIT = 0x00;
TH1 = TH1_INIT; // UART1: 57600;
TL1 = TL1_INIT; // UART1: 57600;
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T2_Init()
* 功能:T2初始化.
125uS定时中断,高优先级.
* 入口参数:无.
* 出口参数:无
* 说明:
***********************************************************************/
void T2_Init(void)
{
SFRPAGE = TMR2_PAGE;
TMR2CN = 0x00; // 0000 0000
// TMR2CN(00000000): Timer n Control Registers
// Bit7: TFn: Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
// 0/1: Timer Disabled / Enabled and running/counting.
// Bit1: Tn/C: Timer Select/Counter.
// Bit0: CP/RLn: Capture/Reload Select.
// 0/1: Timer is in Auto-Reload Mode / Capture Mode.
TMR2CF = 0x00; // 000 00 000: T2 uses the sysclk devided by 12;
// TMR2CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00 01 10 11
// SYSCLK/12 SYSCLK EXTERNAL CLOCK/8 SYSCLK/2.
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
// 0/1: Count up Regardless of / Depending on the state of TnEX.
RCAP2H = TH2_INIT; // 250 x 0.5uS = 125uS.
RCAP2L = TL2_INIT; // 250 x 0.5uS = 125uS.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T3_Init()
* 功能:T3初始化.
10mS定时中断,优先级低于125uS中断.
* 入口参数:无.
* 出口参数:无
* 说明:
***********************************************************************/
void T3_Init(void)
{
SFRPAGE = TMR3_PAGE;
TMR3CN = 0x00; // 0000 0000
// Bit7: TFn: Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
// 0/1: Timer Disabled / Enabled and running/counting.
// Bit1: C/Tn: Counter/Timer Select.
// Bit0: CP/RLn: Capture/Reload Select.
// 0/1: Timer is in Auto-Reload Mode / Capture Mode.
TMR3CF = 0x00; // 000 00 000: T3 uses the sysclk devided by 12;
// TMR3CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00 01 10 11
// SYSCLK/12 SYSCLK EXTERNAL CLOCK/8 SYSCLK/2
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
// 0/1: Count up Regardless of / Depending on the state of TnEX.
RCAP3H = TH3_INIT; // 2000 x 0.5uS = 10mS.
RCAP3L = TL3_INIT; // 2000 x 0.5uS = 10mS.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T4_Init()
* 功能:T4初始化.
UART0波特率发生器.
* 入口参数:无.
* 出口参数:无
* 说明:
***********************************************************************/
void T4_Init(void)
{
SFRPAGE = TMR4_PAGE;
TMR4CN = 0x00; // 0000 0000
// TMR2CN(00000000): Timer n Control Registers
// Bit7: TFn: Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
// 0/1: Timer Disabled / Enabled and running/counting.
// Bit1: C/Tn: Counter/Timer Select.
// Bit0: CP/RLn: Capture/Reload Select.
// 0/1: Timer is in Auto-Reload Mode / Capture Mode.
TMR4CF = 0x18; // 000 11 000: T4 uses the sysclk devided by 2;
// TMR2CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00 01 10 11
// SYSCLK/12 SYSCLK EXTERNAL CLOCK/8 SYSCLK/2
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
// 0/1: Count up Regardless of / Depending on the state of TnEX.
RCAP4H = TH4_INIT;
RCAP4L = TL4_INIT;
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T0_RunCtrl()
* 功能:T0运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T0计数.
* 出口参数:无
* 说明:
***********************************************************************/
void T0_RunCtrl(bit RunCtrl)
{
SFRPAGE = TIMER01_PAGE; // Timer0 & Timer1 Page
TR0 = RunCtrl; // T0 Run / STOP.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T1_RunCtrl()
* 功能:T1运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T1计数.
* 出口参数:无
* 说明:
***********************************************************************/
void T1_RunCtrl(bit RunCtrl)
{
SFRPAGE = TIMER01_PAGE; // Timer0 & Timer1 Page
TR1 = RunCtrl; // T0 Run / STOP.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T2_RunCtrl()
* 功能:T2运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T2计数.
* 出口参数:无
* 说明:
***********************************************************************/
void T2_RunCtrl(bit RunCtrl)
{
SFRPAGE = TMR2_PAGE; // Timer2 Page
TR2 = RunCtrl; // T2 Run / STOP.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T3_RunCtrl()
* 功能:T3运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T3计数.
* 出口参数:无
* 说明:
***********************************************************************/
void T3_RunCtrl(bit RunCtrl)
{
SFRPAGE = TMR3_PAGE; // Timer3 Page
TR3 = RunCtrl; // T3 Run / STOP.
SFRPAGE = 0x00;
}
/***********************************************************************
* 名称:T4_RunCtrl()
* 功能:T4运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T4计数.
* 出口参数:无
* 说明:
***********************************************************************/
void T4_RunCtrl(bit RunCtrl)
{
SFRPAGE = TMR4_PAGE; // Timer4 Page
TR4 = RunCtrl; // T4 Run / STOP.
SFRPAGE = 0x00;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -