我有个频率信号,它经过P3.2输入单片机最小系统板AT89S52中,然后要写程序识别这个频率

2024-12-22 12:45:35
推荐回答(4个)
回答1:

//已经仿真通过
//晶振:12MHz
#include
sbit SDOUT=P1^0;
//sbit SDTTT=P1^1; //测试用的
unsigned int f=0;
void main(void)
{
void Del50ms(void);
unsigned char i;
//初始化
EX0=1; //外部中断0
IT0=1; //边沿触发有效
EA=1; //开总中断
while(1)
{
for(i=0;i<20;i++) //计时1s
Del50ms();
EX0=0; //处理计数结果时关中断(外部中断)
if(f>3600&&f<3800)
SDOUT=1;
else SDOUT=0;
f=0;
EX0=1;;
}
}

void Del50ms(void) //产生50ms的延时
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
TR0=1;
TF0=0;
while(!TF0);
}

void Int0(void) interrupt 0
{
f++;
// SDTTT=~SDTTT;
}

回答2:

计脉宽就行了,每次下降沿开始计数,下一个下降沿停止。算出一个周期计数的大小,就能得到周期,反算出频率。

回答3:

脉冲周期在263~278us。
下降沿,从0开始定时,下一个下降沿停止定时。
定时的数值在约定的周期之间,即可让P1.0输出高平。

回答4:

定时计数或者计数定时。