51测频率程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
51测频率程序

51测频率程序 /* 51测频率程序,数码管显示————jinsongliang 定时1s数脉冲个数, 频率值为1S内脉冲个数,无小数部分,有修正但小数部分不准。 1k~999.99k之间有万分之一以下精度 999~100HZ,整数位无误差,由于小数位无法测量, 误差小于百分之一,大于千分之一;脉冲间隔大于1MS 频率在1K以下时测量一个脉冲的时间,有万分之一以下精度 1.0054HZ测得1.0055HZ */ #includereg51.h #includelib51v3.c #includesegv3.c #includemix.c #define SET_16TIMER0() TMOD|=T0_M0 #define SET_16COUNTER1() TMOD|=(T1_M0|T1_CT) #define EN_TIMER0() TCON|=TR0_L #define DIS_TIMER0() TCON=~TR0_L #define EN_COUNTER1() TCON|=TR1_L #define DIS_COUNTER1() TCON=~TR1_L #define INTURP_ALL_YES() IE|=EA_L //#define INTURP_ALL_NO() IE=~EA_L #define INTURP_TIMER0_YES() IE|=ET0_L //#define INTURP_TIMER0_NO() IE=~ET0_L #define INTURP_COUNTER1_YES() IE|=ET1_L //#define INTURP_COUNTER1_NO() IE=~ET1_L volatile unsigned char v=0; volatile unsigned char t=0; volatile unsigned char err=0; void main (void) { float fcy=0; float f_temp; SET_16COUNTER1(); SET_16TIMER0(); INTURP_ALL_YES(); INTURP_TIMER0_YES(); INTURP_COUNTER1_YES(); while(1) { v=0; t=0; TL0=0xAF; //15,535=65,535-50,000=0x3caf TH0=0x3C; TL1=0x00; TH1=0x00; EN_TIMER0(); EN_COUNTER1(); while(TCONTR1_L); fcy=TH1*256+TL1+v*65536; fcy/=1.000099; if(fcy100.0fcy0) { err=1; v=0; t=0; TL0=0xAF; //15,535=65,535-50,000=0x3caf TH0=0x3C; TL1=0xFF; TH1=0xFF; EN_COUNTER1(); while(!(TCONTR0_L)); err=2; while(TCONTR1_L); f_temp=t*50000+TH0*256+TL0-0x3CAF; fcy=1000000.0/f_temp; } Seg_Sp_Display (fcy); } } void Counter1_Irupt (void) interrupt 3 { ++v; if(err==1) { EN_TIMER0(); TL1=0xFF; TH1=0xFF; } else if(err==2) { DIS_TIMER0(); DIS_COUNTER1(); } } void Timer0_Irupt (void) interrupt 1 { TL0=0xAF+0x02; //15,535=65,535-50,000=0x3caf 2us中断跳转补偿 TH0=0x3C; ++t; if(t==20) //50ms*20=1s { DIS_COUNTER1(); DIS_TIMER0(); } } lib51v3.c: //TMOD //GATE (启动方式) //C/~T (定时=0/计数=1) //M1 (四种模式)16位01 //M0 (四种模式) //GATE (定时计数器0) //C/~T //M1 //M0 #defin

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档