我要发布
仪器网/ 仪器社区/ 频率计/ 51单片机频率计,程序中时间按道理来说应该是只测了半个周期

51单片机频率计,程序中时间按道理来说应该是只测了半个周期

华为890    2015-05-25    频率计    浏览 552 次

应该乘以2才能得到一个周期,但是我乘以4后才能得到正确结果,为什么呢,程序如下: void main() { initlcd();//液晶显示初始化 CT_init();//定时计数器初始化 EA=1;//开总中断 EX0=1;//允许外部中断 IT0=1;//设置外部中断方式为下降沿触发 ... 应该乘以2才能得到一个周期,但是我乘以4后才能得到正确结果,为什么呢,程序如下:

void main()
{
initlcd();//液晶显示初始化
CT_init();//定时计数器初始化
EA=1;//开总中断
EX0=1;//允许外部中断
IT0=1;//设置外部中断方式为下降沿触发
P3=0xff;
while(1)
{
t0=u*65536+x;//计算脉冲时间宽度
f=1000000/(4*t0);//计算频率
c=f*100;//计算结果逐位保存
a[9]=c%10+48;
a[8]=(c/10)%10+48;
c=f;
a[6]=c%10+48;
a[5]=(c/10)%10+48;
a[4]=(c/100)%10+48;
a[3]=(c/1000)%10+48;
a[2]=(c/10000)%10+48;
write_com(0x80);
for(i=0;i<=11;i++)
{
write_data(a[i]);
delay(10);
}
}
}
void CT_init()//定时计数器初始化
{
TMOD=0x99;//GATE=1,T0工作在方式1,定时方式
TH0=0;//定时计数器初值清零
TL0=0;
TR0=1;//TR0置位,此时定时计数器的启动有INT0引脚电平决定
ET0=1;//开中断

}
void ITC0() interrupt 0//外部中断0服务程序
{
u=m;//读定时计数器0溢出次数
m=0;//溢出次数清零
x=TH0*256+TL0;//读定时计数器0当前值
TH0=0;//定时计数器0清零
TL0=0;
}
void TIME0() interrupt 1//定时计数器0溢出中断
{
m++;//溢出次数加1
}

精彩问答
奥运37 发布日期:2015-05-26
不知你测的是什么波形,为什么要除以2
若是方波,不用除以2
是交流电整流后半波变全波?是要除以2
若是STC的非1T 单片机,下载程序时 有6T和12T选项,若选6T,定时器定时时间就减小一半
实测频率就高了
STC有一个版本的下载软件有问题,6T应该是倍速,结果写成了12T是倍速
最新主题
相关版块
我要评论
X您尚未登录
账号登录
X您尚未登录
手机动态密码登录
X您尚未登录
扫码登录
官方微信

仪器网微信服务号

扫码获取最新信息


仪器网官方订阅号

扫码获取最新信息

在线客服

咨询客服

在线客服
工作日:  9:00-18:00
联系客服 企业专属客服
电话客服:  400-822-6768
工作日:  9:00-18:00
订阅商机

仪采招微信公众号

采购信息一键获取海量商机轻松掌控