⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 c8051F020 ADC0 用PCA完成16位的PWM 29F040 定时器的设置 外部静态存储器
💻 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 + -