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

📄 freqtest.txt

📁 测试频率 基于C8051F330单片机的频率测试 频率测试精度:0.1Hz
💻 TXT
字号:
// 频率因数监测与补偿实验系统
// 电源频率的测定
#include <c8051f330.h>                   
#include <stdio.h>
//-----------------------------------------------------------------------------
// 定义16位寄存器
//-----------------------------------------------------------------------------
sfr16   TMR2RL   = 0xca;                 //  定时器2数据寄存器地址
sfr16   TMR2     = 0xCC;                 //  定时器2计数寄存器
//-----------------------------------------------------------------------------
//常量赋值
//-----------------------------------------------------------------------------
#define  SYSCLK         24500000                    
//------------------------------------------------------------------------------------
// 定义函数
//------------------------------------------------------------------------------------
void   SYSCLK_Init (void);
void   PORT_Init (void);
void   Timer0_Init ();
void   Timer2_Init ();
void   Timer0_ISR (void);
void   Timer2_ISR (void);

//-----------------------------------------------------------------------------
// 定义全局变量
//-----------------------------------------------------------------------------
int    k=0;                        
float  fre=0;
//------------------------------------------------------------------------------------
// 主函数
//------------------------------------------------------------------------------------
void main (void)
 {
     PCA0MD &= ~0x40;                              // 关闭看门狗   
     SYSCLK_Init ();                               // 系统时钟初始化
     PORT_Init ();                                 // I/O口初始化    
 
     Timer0_Init ();                          // 定时器0对计数脉冲进行计数
     Timer2_Init ();                          // 定时器2计时1s
	 TR0 = 1;                           
     EA=1;
     while(1)
       {  
		   if(k==600)
	         {
	            TR0 = 0;                        // 计时达1s,计数器停止计时
		        fre = TH0*256+TL0;              // 计数值即为频率
	          }
        }
 }
//------------------------------------------------------------------------------------
// 端口初始化
//------------------------------------------------------------------------------------
//P0.1 为电源电压输入
void PORT_Init (void)
{
    P0MDIN  = 0xff;                  // P0 为数字输入 
	P0MDOUT = 0x00; 				 // P0 漏极开路
    P0SKIP  = 0x02;                  // P0.1 需要被交叉开关跳过             
    XBR1    = 0x50;                  // T0接到端口引脚 P0.1 
	
}
//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------

void SYSCLK_Init (void)
{
    OSCICN |= 0x83;                // SYSCLK为24.5MHz                    
    RSTSRC  = 0x04;                  
}
//-----------------------------------------------------------------------------
// 定时器0初始化
//-----------------------------------------------------------------------------

void Timer0_Init ()
{
    TMOD = 0x05;                    // 对 计数脉冲0 计数                  
	TH0 = 0x00; 
	TL0 = 0x00;       
    ET0= 1;                     
    //TR0=1;                     

}
//-----------------------------------------------------------------------------
//  定时器2初始化
//-----------------------------------------------------------------------------
void Timer2_Init ()
{
	unsigned int counts;
    TMR2CN  = 0x00;               // TR2 关闭   定时器2外部时钟为系统时钟/12                                                                           
    CKCON  |= 0x10;               // 高字节使用系统时钟/12 , 低字节使用系统时钟
	counts  = 40833;               // 每次计时 20 ms	 
    TMR2RL  = -counts;                  
    TMR2    = TMR2RL;                  
    ET2= 1;                       // 中断允许                        
    TR2=1;                     

}
//-----------------------------------------------------------------------------
//  定时器2中断
//-----------------------------------------------------------------------------

void Timer2_ISR (void) interrupt 5
{
   
   TMR2CN &= ~0x80;                      // 定时器2高字节溢出位置 0    
   k = k+1;
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -