//已经仿真通过
//晶振: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;
}
计脉宽就行了,每次下降沿开始计数,下一个下降沿停止。算出一个周期计数的大小,就能得到周期,反算出频率。
脉冲周期在263~278us。
下降沿,从0开始定时,下一个下降沿停止定时。
定时的数值在约定的周期之间,即可让P1.0输出高平。
定时计数或者计数定时。