网站大量收购闲置独家精品文档,联系QQ:2885784924

基于51系列单片机的频率计.doc

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

中北大学 课 程 设 计 说 明 书 ? ? ? 学生姓名: ?金博楠 学 号: ? 学 院: ?电子与计算机科学技术学院 专 业: ??微电子学 题 目: 基于51系列单片机的频率计 ? 指导教师: 苏淑靖 职称: 副教授 ? ? ? ? 2012 年 1 月 4 日 目录 1.课程设计目的………………………………………………………3 2. 课程设计内容要求……………………………………………1、………………………………………………………… 3 2.2、………………………………………………………… 3 3、?设计方案…………………………………………………………、设计思路…………………………………………………………2、工作原理及硬件图………………………………………………3.3、硬件电路图……………………………………………………4、……………………………………………………… 9 4、………………………………………………………10 5、参考文献……………………………………………………………、设计内容要求: 1、2.2、 (2)电路原理图和印刷板图; (3)仿真图形和仿真结果。 3、?设计方案、设计思路2、工作原理及硬件图 图1 硬件框图 前级放大整形电路 考虑到被测信号通常为低压小信号,需要进行放大整形成单片机可以识别的0-5V的脉冲信号。放大部分运用三极管的共射电路将信号由mV电压变为V级电压,放大倍数A=βRc/[r+(1+β)Re]≈Rc/Re=15K/10=1500。整个系统均采用5V供电,放大电路在5V下发生饱和失真,截止失真,刚好使输出波形为近矩形波。为使脉冲波形更好,在接入单片机前再加一个施密特触发器,使脉冲边沿更加陡峭。 图3 波形从上到下依次为:被测波,放大后,施密特触发器整形后 单片机定时,计数 在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一个机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器,所以检测一个1到0的跳变需要两个机器周期,外部脉冲频率不超过振荡频率的1/24。 本次单片机采用12MHz的石英晶振提供单片机的时钟信号,所以被测信号频率上限为500KHz,刚好满足题意。若要求测量更高频率的信号脉冲,则需要外加计数器分频后给单片机计数。 单片机初始化后启动两计数/定时器T1,T0。T1工作在定时模式,T0工作在计数模式。T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。计数器T0每测到一个下降沿计一个数,当定时器计满1s后中断,读取计数值N,则所测频率为N Hz。 程序如下: #include reg51.H #define uchar unsigned char #define uint unsigned int unsigned char code displaybit[]={0,1,2,3};//四位选择 unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x00}; //0,1,2,3,4,5,6,7,8,9,0.,无 unsigned char temp[4]; //显示速度分成显示字符的缓冲区 unsigned char dispcount; //显示位数的定位 unsigned char T0count; //to计数器的溢出次数 unsigned char timecount; //定时的次数 bit flag; unsigned long x; uint m; void Delay(unsigned int i) { unsigned char x,j; for(j=0;ji;j++); for(x=0;x=148;x++); } void main(void) { TMOD=0x15; //设置定时器启动模式 TH0=0; TL0=0; TH1=(65536-5000)/256; TL1=(65536-5000)%256; TR1=1; TR0=1; // 启动定时器 ET0=1; ET1=1; //启动两个中断 EA=1; //开中断 while(1) { if(flag==1) //如果一次检测完成才赋值 { flag=0; x=T0count*65536+TH0*256+TL0;//显示初始化 0 if(x1000)//判断所测频率大于1000还是小于1000 { m = x; temp[3] =

文档评论(0)

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

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

1亿VIP精品文档

相关文档