基从于atme数返ga8的频率计原程序.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文档。上传文档
查看更多
基于Atmega8的频率计原程序+图 基于Atmega8单片机的频率计 基于Atmega8单片机的频率计 前言: Atmega8-是8位AVR单片机,(8-Kbyte self-programming Flash Program Memory, 1-Kbyte SRAM, 512 Byte EEPROM, 6 or 8 Channel 10-bit A/D-converter. Up to 16 MIPS throughput at 16 Mhz. 2.7 - 5.5 Volt operation.);Nokia 3310 LCD 实验目标 频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。 期望达到10Hz-1.1G范围的频率精确测量。 实验电路图(初步方案) 1) 计数及显示电路: ? 此主题相关图片如下: 2)前置放大及分频电路: 设计设计测量频率的思路 频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。 由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用单片机的计数器直接测量信号频率就受到了很大的限制。 本实验电路采用方式2,使用一片 74LS393四位双二进制计数器和Atmega8的T1计数器组成了24位计数器,最大计数值如果输入信号经过MB501分频器进行64分频后再进行测量,则固定1S时基下最高测量频率为1073.741760Mhz。 为了方便得到准确的1秒钟测量闸门信号,我们使用了Atmega8的异步实时时钟功能,采用32.768Khz的晶振由TC2产生1秒钟的定时信号。 测量频率原理: 单片机打开测量闸门,即PB1输出高电平,同时TC2定时器启动。74LS393开始对输入脉冲进行计数,74LS393每计数达256时,Atmega8的T1计数器也向上计数1次。当1S 定时到达时,单片机产生中断,PB1输出低电平关闭测量闸门,然后Atmega8读取74LS393和T1的计数值,然后送LCD显示。 实验进展 2004-09-27 根据设计思路编写程序初步获得了一些实验结果,如下图所示。下图是测量8M有源晶振的输出结果。 此主题相关图片如下: 由于1S的测量闸门时间在业余条件下不好测试,因此,实验程序中在LCD上同时显示实时时钟用于判断1S闸门时间的准确*。实验中,我使用CDMA手机上显示的GPS卫星精确时间进行比较。手机时间显示的最小单位是分钟,测量时一旦手机分钟值发生跳变,则立即记录下LCD显示的秒值,这样的话让频率计运行一段时间后,再多次记录下LCD显示的秒,就可以准确判断频率计的异步时钟是否准确。实验过程中,我让频率计走了10个小数左右,测量的1S时钟还是非常准确的。 实验源程序 频率测量源代码: #include iom8v.h #include macros.h #include lcd.h #include bmp.h unsigned long counter; unsigned char countlow; unsigned char fre[]=00.000000; unsigned char time[]=00:00:00; #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF void timer2_ovf_isr(void) { unsigned char i; //TCCR2=0; PORTB = ~0X02; //关闭闸门 //读取计数值 counter = TCNT1; //读取T/C1计数值(频率值的高16位) counter = counter*256; //计算频率值的高16位 countlow = (PIND 0|(PINC 0; //读取计数值的低8位 counter = counter + countlow; //计算频率值 PORTD |= 0X01; //74LS393清零 TCNT1 = 0; PORTD = ~0X01; //关闭清零 TCNT2 = 0X80; //定时时间1秒 PORTB |= 0X02; //打开闸门 //实时时钟显示 time[7]++; fre[0]=counter 0x30; counter=counte

文档评论(0)

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

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

1亿VIP精品文档

相关文档