这是我写的频率计代码,我用LCD屏幕显示就只显示了一个1就没有了,下图是我的光敏二极管模块
#include "speed.h"
uint dat=0,r=0,time,pulse;
bit flag=0;
void INT0_ISR() interrupt 2 //检测到一个低电平,一个低电平代表闪烁一次
{
dat++;//测得的脉冲数
if(flag)//定时到了一秒
{
pulse=dat;
dat=0;
}
EX1=1; //允许外部中断1
}
void timer1_ISR() interrupt 3
{
TR1=0;
TH1=0x3C;
TL1=0xAF;
time++;
if(time>=19)//定时到了1秒
{
flag=1;
time=0;
}
TR1=1;
}
int countspeed()
{
r=pulse;
return pulse;
}
void speedinit()
{
EA=0;
TMOD=0x10;//T1做定时器 16位
TH1=0X3C;
TL1=0XAF; //初值15535 定时50 000us
TR1=1;//启动T1计数
IT1=0;//外部中断电平触发
EX1=1;//允许外部中断
ET1=1;//开放T1中断请求
EA=1;//开总中断
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那该怎么测试灯的闪烁频率
你这个问题的思路,应该用一个单独的光敏二极管,把接收到的信号放大输入到TIM引脚,用TIM来按照PWM输入测量的思路来搞。
一周热门 更多>