当前位置:文档之家› 简易频率计数器设计

简易频率计数器设计

单片机课程设计报告简易频率计数器设计院系:信息工程学院班级:学号:姓名:指导老师:目录一、序言 (2)二、课程设计要求 (2)三、电路组成和工作原理 (2)四、程序设计 (4)五、Proteus仿真 (8)六、组装及调试部分 (9)七、心得体会 (11)八、元件清单 (12)九、参考文献 (12)一、序言单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。

通过在对单片机原理及应用的学习,以及查阅资料,培养自学与动手能力,把学到的知识应用到日常生活当中。

在设计的过程中,不断的补充不知道的内容、巩固所学,和队友的分工合作、相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。

单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。

单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。

二、课程设计要求自制一个单片机最小系统,包括串口下载、复位电路,采用外部计数器T0或T1作为外部频率输入,外部频率由信号源提供,计算出来的频率显示在四位一体的数码管上。

三、电路组成和工作原理设计是以MCS-51系列单片机为核心的最小系统,主要由复位电路、晶振电路、数码管显示电路组成。

1.单片机最小系统简介单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对MCS-51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。

结构图如图所示:各部分的功能介绍如下:复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位. 一般这个电阻和电容的典型值为10K和10uF。

按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。

使用6MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF 之间。

晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的us级时歇,方便定时操作)2、计数器工作原理利用单片机的计数器和定时器的功能对被测信号进行计数。

编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。

本频率计的设计以AT89C51单片机为核心,利用其内部的定时/计数器完成对待测信号的频率的测量。

AT89C51单片机内部有2个16位定时/计数器,定时/计数器的工作可以由编程实现定时、计数和产生计数溢出时中断要求的功能。

设计定时/计数器0设置工作在定时方式,定时/计数器1设置在计数方式。

在定时器工作方式下,在被测时间间隔内,每一个机器周期,计数器自动加1,这样以机器周期为基准可以进行对时间间隔的测量。

在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数器的控制下可以用来测量待测信号的频率。

外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个震荡周期),所以最大计数速率为时钟频率的1/24(使用12MHz时钟时,最大计数速率为500KHz)。

由于定时器T0工作在定时方式时最大的定时时间大约为50ms,若要定时1S,可以采用定时20ms,中断50次来完成1s的定时。

对于定时20ms来说,用定时器方式1可实现。

信号频率的计算:T1工作在计数方式时最大的计数值为216,若假设1S内溢出C1次,最后未溢出的计数值为C2,则F=C1*216+C2= TC1*65536+(TH1*256+TL1)。

四、程序设计根据设计项目所需功能,我们先进行初始化,在待机状态下,采集频率。

然后检测是否有按钮按下,若按钮按下,则数码管显示所采集的频率,再按下键0时则不显示。

系统实现所有功能,其程序框图如图所示:编写的源程序如下:#include<reg51.h>bit int_flag;unsigned char volatile TC1;unsigned char volatile TC2;unsigned char code table[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0~9编码unsigned char code temp[] = {0xfe,0xfd,0xfb,0xf7}; //四位数依次为0,从右至左依次点亮数码管unsigned long sum;unsigned char Led[4];void delay(unsigned char y) //延时{unsigned char i;while(y--)for(i=100;i>0;i--);}void init(void) // 中断初始化{TMOD=0x51; //T1计数,T0定时TH0=(65536-50000)/256; //定时50msTL0=(65536-50000)%256;TH1=0x00;TL1=0x00; //计时器清零}void display(void) //显示函数{unsigned char i;for(i=0;i<4;i++){P2=temp[i];//片选P0=table[Led[i]]; //取数据显示delay(1); //延时1毫秒(有差显示,依次显示四位,只是时间差很小,一般难以肉眼识别)}}void main(void){EA=1; //开中断init(); //函数初始化TR0=1;TR1=1;ET1=1;ET0=1; //启动定时、计数器while(1){if(int_flag==1){int_flag=0;sum=TL1+TH1*256+TC1*65536; //计算脉冲个数,TC1为计数器计数溢出次数,TL1,TH1为当前计数器值Led[3]=sum%10000/1000;//显示千位Led[2]=sum%1000/100;//显示百位Led[1]=sum%100/10;//显示十位Led[0]=sum%10;//显示个位TC1=0x00;TC2=0;TH1=0x00;TL1=0x00;TR1=1;}display(); //调用显示函数,1s更新一次}}void int_t0(void) interrupt 1 //执行开总中断时同时执行中断计时,定时器0中断{TH0=(65535-50000)/256;TL0=(65536-50000)%256; //定时器赋值TC1++;if(TC1==20) // 定时1s{TR1=0; //关定时器int_flag=1;TC1=0x00;}}void int_T1(void) interrupt 3 //计数器中断1{TC2++;}五、P roteus仿真Proteus仿真全图如下:(输入信号频率为800Hz,计数存在一些误差)六、组装及调试部分在软件仿真成功交老师检查后,就可以去领取器件开始做硬件设计了。

硬件设计采用自制PCB印刷板。

自制PCB板使用的软件工具为:Altium Designer 08 summer,设计制作过程如下:1、使用Altium Designer软件的原理图设计工具,根据Proteus设计原理图,并检查电气连接;2、给原理图中的各个元件添加PCB封装,若没有的需要自己画封装图;3、导入PCB设计界面,对元器件布局及连线,由于实验室条件不宜作双面板,皆地面布线,且存在四根飞线;4、改变元件封装的图中元器件的焊孔、焊盘的大小及线的宽度以适宜实验室条件,制造输出,再打印。

5、转印将设计的PCB图印制到PCB板上;6、腐蚀PCB板,约耗时15min左右;7、钻孔,需要根据元器件的引脚大小选择合适的针头。

8、找齐器件并焊接;焊接时注意引脚的焊锡一定要充足,避免接触不良,注意晶振电路应尽量靠近单片机芯片;9、检查电路的连接是否正确及各个电路是否连通的;10、使用单片机开发板把设计的程序烧写到单片机里面;11、给电路上电进行检测测试,查看结果;12、根据上电后的情况进行电路检测及修改使达到设计效果。

调试步骤及技巧:第一:用万用表检测电源是否接通,主要是看看40脚和20脚之间是否有5V电压。

第二步:检测第31引脚,是否有5V电源,目的是确保使用了片内存储器。

第三步:检测P3口或P2口的空闲电压是否有5V电压,如果没有,说明单片机系统没有工作。

第四步:用万用表检测复位电路,通过复位按键,检测第9脚的电压是会变化。

如果按键没有按下,电压为0V,按键按下后,电压立刻变为5V,之后很快的降为0V,则表示复位电路正常。

第五步:用示波器检测振荡电路,主要是检测第18、19脚。

检测是否有振荡波产生。

如果有,表示振荡电路正常。

最后,检测每条PCB板上的焊接走线是否有短路、断路、虚焊等焊接故障。

调试问题分析:1、电路焊接完毕后,上电电源显示灯亮,并且40脚和20脚之间是否有5V电压。

2、检测第18、19脚引脚时发现,两个电容错接为电源端,并且由于PCB走线不够漂亮,有点影响电路的导通性,修改后问题得以解决,有振荡波产生。

3、复位电路经检测正常。

4、检查显示电路,上电后数码管不能显示,但是若加高电平到数码管的位选端(6、8、9、12端),数码管能够逐位显示,即数码管电路无问题。

5、最后的问题就是单片机的外围电路均无问题,且程序均无问题,但是不能驱动数码管使其显示,由于时间比较的紧迫,没有再进行仔细的研究。

后面仔细思考觉得应该是以下原因:单片机存在问题,其系统没有正常工作,以至于端口没有输出信号。

由于要上交材料及实验检查没有进行进一步的测试。

PCB原理图:B图七、心得体会课程设计的目的在于能够使我们同实验增强自己的实际操作动手能力,而两周的时间下来我们也确实是受益匪浅。

首先,此次课程设计需要使用到Proteus仿真、Keil软件进行程序编写及编译,另外使用Altium Designer软件画PCB,都使自己对于这些软件更加的熟悉。

相关主题