仪器社区

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

华为890 2015-05-25
应该乘以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
不知你测的是什么波形,为什么要除以2
若是方波,不用除以2
是交流电整流后半波变全波?是要除以2
若是STC的非1T 单片机,下载程序时 有6T和12T选项,若选6T,定时器定时时间就减小一半
实测频率就高了
STC有一个版本的下载软件有问题,6T应该是倍速,结果写成了12T是倍速
10 0 2015-05-26 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论