简易频率计设计实验报告

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

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

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

资源描述

湖北民族学院理学院测试与传感技术课程设计设计题目:简易频率计设计姓名:胡嗣维学号:021240***专业:物理学指导老师:杨老师2015年7月5日简易数字频率计的设计实验目标:设计一个简易的数字频率计,能实时测量周期信号的频率,并将结果显示出来,频率测量范围为0~1MHz总体方案1.频率测量基本原理数字频率计的主要功能是测量周期信号的频率。频率是单位时间内(1s)信号发生周期变化的次数。如果能在给定的1s时间内对周期信号进行计数,并将计数结果显示出来,就实现了对被测信号的频率测量。2实现方法单片机AT89S51内部具有两个16位定时/计数器,如果用T0对外界周期信号进行计数,T1作为定时器产生1s的定时中断,在T1的定时中断服务程序中读取T0的计数值,即可实现频率的测量。由于测量的频率范围是0~1000000Hz(1MHz),根据单片机对外部信号的计数需要两个机器周期才能识别一个脉冲,所以外部计数脉冲的频率应该小于振荡频率的1/24.所以选择24MHz才能实现频率测量范围为0~1000000Hz(1MHz)。如果系统的频率测量范围更大,则可以在周期脉冲信号接入T0引脚前加分频电路即可。3系统硬件设计系统硬件连接电路图如图所示。系统比较简单,数据处理量不大,因此选用AT89S51作为控制系统的核心。其特点是低功耗、高性能的CMOS单片机。AT89S51单片机采用静态时钟方式,时钟频率为0~33MHz。本次我们采用的是24MHz的工作频率。频率测量没有大量的运算和暂存数据,现有的128B片内RAM已经满足要求,因此不必要外扩片外RAM。系统选用LCD1602显示频率,因为系统外扩的元件先对比较少,LCD1602采用I/O并行接口方式和单片机相连。图中Ui为输入的周期信号,经过比较和整形电路后将其变为周期脉冲信号送入T0引脚计数使用。上图为电路信号发生器部分以及LF393比较器调节信号整体参考图如下:实际仿真电路显示图如下:实际仿真电路显示图如下4、系统软件设计本系统的软件设计分为主程序、LCD显示驱动程序、T125ms定时中断服务程序和T0计数溢出中断服务程序4个部分。为了方便管理和调试,将整个程序分成两个模块程序文件,分别是主模块main.c和液晶显示模块LCD1602.c。液晶显示模块LCD1602可以单独调试,仿真成功后将这两个文件加入到同一个项目中,并建立液晶显示模块LCD1602.c文件的.h文件,主模块main.c包含这个头文件即可(或者在主模块main.c中将调用LCD1602.c文件的函数声明为外部函数即可)。在不同的应用系统中硬件上单片机和LCD1602的连接如果改变,只需要改变LCD1602.c文件中的引脚定义即可。(1)主程序主程序首先完成对T0、T1和中断的初始化,然后开放中断并启用T0、T1工作;接下来判断1s定时时间是否已到,1s定时时间到则将计数值处理后送到LCD显示器显示。主程序流程图如下:(2)、T125ms定时中断服务程序系统时钟为24MHz,机器周期为0.5us,最大定时时间为msus768.325.065536,我们选用的定时时间为25ms,定时中断40次即可实现1s定时,T1中断服务程序的流程图如下:(3)、T0计数溢出中断服务程序T0设置为计数器工作方式,初值为0,如果输入周期信号频率很高,在1s时间内T0计数到65536就会溢出,因此在T0计数溢出中断服务程序中要统计溢出的次数,在1s的计数值即为频率=T0的溢出次数×65536+当前读出的T0计数值。(4)、LCD显示程序LCD1602显示程序流程图如下:首先根据行号和列号发出写入地址命令,然后将指针变量指向的字符串发写入数据命令,将数据显示在LCD上。五、实验误差分析:本次试验要求频率稳定,因此测量频率的结果可能由于实验材料的精度不够而有所误差主程序:/*主函数main.c*/#includereg51.h#includestdio.h#includeLCD1602.hunsignedchartime1_H,time1_L;unsignedcharcont_25;unsignedchartime0_H,time0_L;unsignedcharT0_num=0;unsignedlongfdata;sbitbdataflag_1s;voiddelay_s(unsignedcharn){unsignedchari;for(i=0;in;i++);}/*定时器T125ms中断服务程序,40次中断为1s*/voidTime1_int(void)interrupt3{TH1=time1_H;TL1=time1_L;cont_25++;if(cont_2539){cont_25=0;TR0=0;time0_H=TH0;time0_L=TL0;TH0=0;TL0=0;TR0=1;fdata=(time0_H*256+time0_L)+T0_num*65536;T0_num=0;flag_1s=1;}}/*T0中断函数,当技术超出65536溢出时,中断*/voidTime0_int(void)interrupt1{T0_num++;}voidt0_t1_init(void){floatx;unsignedintidatay,z;TMOD=0x15;x=12/24.00;y=25000/x;z=65536-y;time1_H=z/256;time1_L=z%256;TH1=time1_H;TL1=time1_L;TR1=1;TH0=0;TL0=0;TRO=1;}voidmain(void){unsignedchari;unsignedcharstr[6]={0,0,0,0,0,0};init_lcd();t0_t1_init();ET1=1;ET0=1;EA=1;cont_25=0;T0_num=0;flag_1s=0;disp_str(0,5,Frequencyis:);while(1){if(flag_1s==1){for(i=6;i0;i--){str[i-1]=fdata%10+0x30;fdata=fdata/10;}disp_str(1,5,str);flag_1s=0;}delay_s(200);}}/*液晶显示驱动模块LCD1602.c程序*/#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^7;sbitRW=P1^6;sbitE=P1^5;sfrLCDDATA=0x80;sbitRDY=LCDDATA^7;voidlcd_cmd(ucharcmd){LCDDATA=cmd;RS=0;RW=0;E=1;_nop_();E=0;while(1){LCDDATA=0xff;RS=0;RW=1;E=0;_nop_();E=1;if(RDY==0)break;}}voidlcd_data(uchardat){LCDDATA=dat;RS=1;RW=0;E=1;_nop_();E=0;while(1){LCDDATA=0xff;RS=0;RW=1;E=0;_nop_();E=1;if(RDY==0)break;}}voidinit_lcd(void){lcd_cmd(0x01);lcd_cmd(0x3c);lcd_cmd(0x0C);}voiddisp_str(ucharx,uchary,uchar*p){if(x==0)lcd_cmd(0x80+y);elselcd_cmd(0xc0+y);while(*p)lcd_data(*p++);}/*液晶显示驱动模块LCD1602.h*/#defineucharunsignedcharvoidinit_lcd(void);voiddisp_str(ucharx,uchary,uchar*p);参考文献1.张顺兴.数字电路与系统设计.第1版.南京:东南大学出版社,20042.邹其洪.电工电子实验与计算机仿真.第1版.北京:电子工业出版社,2003.93.王玉秀.电工电子基础实验.第1版.南京:东南大学出版社,20064.孙肖子.模拟电子技术基础.第1版.西安:西安电子科技大学出版社,2001.15.谢自美.电子线路设计•实验•测试.第2版.武昌:华中科技大学出版社,2000.76.张豫滇.电子电路课程设计.第1版.南京:河海大学出版社,2005.87.高玉芹.单片机原理与应用及编程技术.北京.机械工业出版社2011.6

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

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

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

×
保存成功