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

📄 main.c

📁 周期测量
💻 C
字号:
/*********************************************************************/
//频率周期测量模块		 <=4500HZ
/*********************************************************************/
#include<C8051F000.h>
#include<define.h>
unsigned int	Pulse_Counts=0;			//脉冲数
unsigned int	Flow_Counts=0;			//定时器溢出数
double			T,F;					//被测信号周期
unsigned int	Cat_F;					//第一个沿时的定时器值
unsigned int	Cat_L;					//最后一个沿时的定时器值
void main()
{  
	WDTCN=0xde;							//关看门狗
	WDTCN=0xad;
	SYSCLK_Init();						//时钟初始化
	PORT_Init();						//端口初始化
	PCA_Init();							//PCA初始化
	EIE1|=0x08;							//允许PCA0中断
	EA=1;								//开总中断
	while(1);							//等待中断到
}

void PCA0_ISR(void) interrupt 9
{
	EA=0;								//中断禁止
	if(CCF0==1)
	{
		CCF0=0;							//清中断标志
		Pulse_Counts++;					//脉冲数加一
		if(Pulse_Counts==1)				//捕捉第一个上升沿到时定时器值
		{
			Cat_F=PCA0CPH0*256+PCA0CPL0;
		}
		if(Pulse_Counts==2&&Flow_Counts>0)				//捕捉第一个上升沿到时定时器值
		{
			Cat_L=PCA0CPH0*256+PCA0CPL0;	 			//低频计算
			T=65535*(Flow_Counts-1);
			T+=(65536-Cat_F)+Cat_L;
			T=T*4/SYSCLK;						
			F=1/T;
			 
		}

		else if(Flow_Counts==1&&Pulse_Counts>2)	  		//高频计算
		{
			Cat_L=PCA0CPH0*256+PCA0CPL0;
			T=65535-Cat_F+Cat_L;
			T=T*4/(SYSCLK*(Pulse_Counts-1));
			F=1/T;						
		}
	}
	
	if(CF==1)
	{	
		CF=0;							//溢出中断标志清零
		Flow_Counts++;					//溢出数加一
	}

	EA=1;								//开总中断
}

⌨️ 快捷键说明

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