单片机0~20MHz频率计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机0~20MHz频率计

任务分析: 要测量信号的频率,即把外部TTL 信号输入单片机,在一定的时间 进行计数,然后进行频率计算.最简单的办法就是使用2个定时器,一个 定时1s ,同时另一个计数,1s 内的计数值就是信号的频率。 我们先设计一个测量范围为(0-255),精度稍低的频率计,再进 行功能拓展.设置T0对外部信号输入计数,信号源送入P3.4;设置T1定 时,由于需要定时1s ,所以采用每次定时1ms,定时1000次为1s ,每1s 到就取出T0计数的值作为频率值进行显示.每定时1ms产生一个中断, 中断子程序可以进行数码管动态扫描显示,故频率的显示是实时进行 的,信号的频率变换,显示的频率值也马上变化,每1s 测量一次。 相关知识介绍 a.单片机的定时器工作在计数状态时,外部信号输入一个下降沿,定 时器就计数一次,而单片机要判断出一个下降沿,需要2个机器周期,所 以定时器在进行计数的时候,输入信号的频率最大不超过fosc/2 4,对于 11.0592MHz的晶振来说,其计数的最高频率为460.8KHz。实际在测量 的时候,应该还要稍小一些。 b.单片机在测量频率时,主要的误差来自晶振频率,我们一般通过修 改定时器初值或者定时中断的次数来进行修正,以提高精度。 硬件流程图 计数器、定时器的应用 1、定时器的计数器方式(使用TMOD 进行设置) 元器件清单:74LS161、CD4051 实物图 实物图 5.4.2 同步四位二进制计数器74LS161 1. 74LS161的逻辑功能 图3-35 74LS161的外引线图 状态输出 图3-36 74LS161的逻辑符号 并行输入 CP输入   表5-14 74LS161的功能表 CP上升沿有效 异步清0功能最优先 同步并行置数 CO= Q3 Q2 Q1 Q0 CTT 用两片CT74LS161级联成16×8进制同步加法计数器 低位片 高位片 在计到1111以前,CO1=0,高位片保持原状态不变 在计到1111时,CO1=1,高位片在下一个CP加一 ② 再用脉冲反馈法 CD4051相当于一个单刀八掷开关,开关接通哪一通道,由输入的3位地址码ABC来决定。INH”是禁止端,当 “INH”=1时,各通道均不接通。此外,CD4051还设有另外一个电源端VEE,以作为电平位移时使用,从而使得通常在单组电源供电条件下工作的 CMOS电路所提供的数字信号能直接控制这种多路开关,并使这种多路开关可传输峰-峰值达15V的交流信号。例如,若模拟开关的供电电源VDD=+5V,VSS=0V,当VEE=-5V时,只要对此模拟开关施加0~5V的数字控制信号,就可控制幅度范围为-5V~+5V的模拟信号。 . 使用十六进制代码就可以对CD4051进行操作了。比如说P1=0X07,这样CD4051就选择的是7号(二进制111)通道了。 如果在八个通道输入一模拟量,在输出端将输出什么,输入什么是自己设定 例如,若模拟开关的供电电源VDD=+5V,VSS=0V,只要对此模拟开关施加0~5V的数字控制信号,... 这里,ABC数字控制信号就可以使用5V信号了,因为VDD是5v,里面控制部分就都是5V逻辑. 当VEE=-5V时,就可控制幅度范围为-5V~+5V的模拟信号。 当Vee=-8V时,就可以可控制幅度范围为-8V~+5V的模拟信号. Vee就是电子开关的8个输入端可以允许的信号范围下限. 注意不要超过它的极限参数.峰-峰值达15V CD4051的引脚作用及真值表 分频电路硬件原理图 程序流程图 开始 初始化 设置定时器方式,初值,开中断 中断:T0预制时间 中断:T1脉冲计数 按键控制选择通道 读取频率值 数码管显示 判断频率值 #include reg51.h sbit w=P1^0; sbit s1=P3^0; //按键对应端口为P3.0; unsigned char code dist[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code bitt[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned int num=0; unsigned long freq=0; unsigned int count=0; unsigned char n=0; /****************************** 函数的申明 ******************************/ void disp(); voi

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档