📄 timer.c
字号:
#include "c8051F020.h"
void Timer0_Init0 (int count0_70H , int count0_40L);
void Timer0_Init1 (int count0RL_H,int count0RL_L);
void Timer0_Init2 (int count0RL);
void Timer1_Init0 (int count1_70H,int count1_40L);
void Timer1_Init1 (int count1RL_H,int count1RL_L);
void Timer1_Init2 (int count1RL);
void Timer2_Init (int count2RL_H,int count2RL_L);
void Timer2_UART0 (int count2_H,int count2_L);
void Timer3_Init (int count3RL);
void Timer4_Init (int count4RL_H, int conunt4RL_L);
void Timer_Init (int timex,int modex,int count_H,int count_L)
{
if (timex == 0)
{
if (modex == 0){Timer0_Init0 (count_H, count_L);}
else if (modex == 1) {Timer0_Init1 (count_H, count_L);}
else {Timer0_Init2 (count_H);}
}
else if (timex == 1)
{
if (modex == 0) {Timer1_Init0 (count_H, count_L);}
else if (modex == 1) { Timer1_Init1 (count_H, count_L);}
else { Timer1_Init2 (count_H);}
}
else if (modex == 2)
{
if (modex == 1) { Timer2_Init (count_H, count_L);}
else { Timer2_UART0 (count_H, count_L);}
}
else if (modex == 3) {Timer3_Init (count_H);}
else { Timer4_Init (count_H, count_L); }
}
//-----------------------------------------------------------------------------
// 定时器初始化 均不产生中断
//-----------------------------------------------------------------------------
//
// 配置定时器0 方式0 13位计数器 (不产生中断) 使用系统时钟为时基
//
void Timer0_Init0 (int count0_70H , int count0_40L)
{
TR0 = 0;
TF0 = 0;
CKCON |= 0X40;
TMOD &= 0xFC;
TL0 = count0_40L;
TH0 = count0_70H;
ET0 = 0;
TR0 = 1;
}
// 配置定时器0 方式1 16位计数器 (不产生中断) 使用系统时钟为时基
//
void Timer0_Init1 (int count0RL_H,int count0RL_L)
{
TR0 = 0; //T0禁止
TF0 = 0; //溢出标志清0
CKCON |=0x04; //使用系统时钟作时基
TMOD |=0x01;
TMOD &=0xFC;
TL0 = count0RL_L;
TH0 = count0RL_H; //初始化重装值
ET0 = 0; //禁止T0中断
TR0 = 1; //使能T0
}
// 配置定时器0 方式2 8位自动重装计数器 (不产生中断) 使用系统时钟为时基
//
void Timer0_Init2 (int count0RL)
{
TR0 = 0; //T0禁止
TF0 = 0; //溢出标志清0
CKCON |=0x04; //使用系统时钟作时基
TMOD |=0x02;
TMOD &=0xFD;
TH0 = count0RL; //初始化重装值
ET0 = 0; //禁止T0中断
TR0 = 1; //使能T0
}// 配置定时器1 方式0 13位计数器 (不产生中断) 使用系统时钟为时基
//
void Timer1_Init0 (int count1_70H,int count1_40L)
{
TR1 = 0;
TF1 = 0;
CKCON |= 0X10;
TMOD &= 0xCF;
TL1 = count1_40L;
TH1 = count1_70H;
ET1 = 0;
TR1 = 1;
}
// 配置定时器1 方式1 16位计数器 (不产生中断) 使用系统时钟为时基
//
void Timer1_Init1 (int count1RL_H,int count1RL_L)
{
TR1 = 0; //T1禁止
TF1 = 0; //溢出标志清0
CKCON |=0x10; //使用系统时钟作时基
TMOD |=0x10;
TMOD &=0xCF;
TL1 = count1RL_L;
TH1 = count1RL_H; //初始化重装值
ET1 = 0; //禁止T1中断
TR1 = 1; //使能T1
}
// 配置定时器1 方式2 8位自动重装计数器(不产生中断) 使用系统时钟为时基
//
void Timer1_Init2 (int count1RL)
{
TR1 = 0; //T1禁止
TF1 = 0; //溢出标志清0
CKCON |=0x10; //使用系统时钟作时基
TMOD |=0x20;
TMOD &=0xDF;
TH1 = count1RL; //初始化重装值
ET1 = 0; //禁止T1中断
TR1 = 1; //使能T1
}
// 配置定时器2 方式1 16位自动重装计数 (不产生中断) 使用系统时钟为时基
//
void Timer2_Init (int count2RL_H,int count2RL_L)
{
TR2 = 0;
TF2 = 0;
EXF2 = 0;
CKCON |= 0x20;
CT2 = 0;
CPRL2 = 0;
RCAP2L = count2RL_L;
RCAP2H = count2RL_H;
ET2 = 0;
TR2 = 1;
}
// 配置定时器2 方式2 波特率发生器 (不产生中断) 使用(系统时钟/2)为时基
//
void Timer2_UART0 (int count2_H,int count2_L)
{
T2CON = 0x00;
CKCON |= 0x20;
T2CON |= 0x30;
RCAP2L = count2_L;
RCAP2H = count2_H;
}
// 配置定时器3 自动重装 间隔由 <count3RL> 决定(不产生中断) 使用系统时钟为时基
//
void Timer3_Init (int count3RL)
{
TMR3CN = 0x02; // 停止定时器3; 清除TF3;
// 使用系统时钟作为时基
TMR3RLH = -count3RL; // 初始化重装值
TMR3L = 0xffff; // 立即开始重装
EIE2 &= ~0x01; // 禁止定时器3中断
TMR3CN |= 0x04; // 启动定时器3
}
// 配置定时器4 自动重装载的 16位计数器 (不产生中断) 使用系统时钟为时基
//
void Timer4_Init (int count4RL_H, int count4RL_L)
{
T4CON &= 0x30;
CKCON |= 0x40;
RCAP4L = count4RL_L;
RCAP4H = count4RL_H;
EIE2 &= ~0x20;
T4CON = 0x04;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -