📄 main.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 + -