51单片机频率精确测量C程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

测定脉冲频率,附带部分PROTUES仿真结果和C语言程序,希望能给广大电子爱好者带来方便。仿真结果十分精确,实际应用中可能会存在少许误差,通过相应的电路处理,可以满足使用要求。很多场合需要用到对频率的精确测量,譬如你用霍尔传感器做测转速系统,就需要用到此模块,测量霍尔传感器输出的脉冲的频率,然后稍作运算,就可以实现转速的测量功能。本设计利用51单片机的外部中断(INT0)的捕捉功能,实现对脉冲的计数,同时配以T0的8位自动装入方式,实现准确计时1S,这1S内INTO捕捉到的脉冲数即为频率。通过PROUES仿真,证明这种方式误差极小(与网上流行的用定时器工作方式1定时1S的程序相比,误差大大缩小,尤其是对于频率在2K以上信号的测量)。实例1、频率设定为5K,显示在4999和5000两数之间跳动实例2、频率设定为4321HZ,显示结果#includereg52.h#defineucharunsignedchar#defineuintunsignedintuinttime_count,count,sum;sbitduan=P2^6;//74HC573的LE端U5LED的段选端sbitwei=P2^7;//74HC573的LE端U4LED的位选端ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码表unsignedintdis[6];ucharcon[]={0xfe,0xfd,0xfb,0xf7,0xef};//共阴型数码管控制端voidinitial(void);voiddelay(uintz);voiddisplay();main(){initial();while(1){display();}}voidinitial(){count=0;time_count=0;sum=0;TMOD=0x02;//定时器0工作方式2,8位自动装入计数TH0=0x06;TL0=0x06;//定时器赋初值计时0.25ms,1000次为0.25s,4000次为一秒IT0=1;//外部中断0工作方式(下降沿有效)EA=1;ET0=1;EX0=1;TR0=1;//开中断}voiddelay(uintz){uintx,y;for(x=z;x0;x--)for(y=20;y0;y--);}voidexter0()interrupt0{count++;}voidtimer0()interrupt1{time_count++;if(time_count==4000){sum=count;time_count=0;count=0;}}voiddisplay(){uchari;dis[0]=sum/10000;//获取计数值的万位dis[5]=sum%10000;dis[1]=dis[5]/1000;//获取计数值的千位dis[5]=dis[5]%1000;dis[2]=dis[5]/100;//获取计数值的百位dis[5]=dis[5]%100;dis[3]=dis[5]/10;//获取计数值的十位dis[4]=dis[5]%10;//获取计数值的个位for(i=0;i5;i++)//依次显示万、千、百、十、个位,动态显示{//P0=0xff;P0=con[i];wei=1;wei=0;P0=table[dis[i]];duan=1;duan=0;delay(1);P0=0;duan=1;duan=0;}}

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功