资源描述
湖南工程学院课 程 设 计课程名称 单片机课程设计 课题名称 频率计数器 专 业 电子科学与技术 班 级 0981 学 号 姓 名 指导教师 2012年 5 月 25 日湖南工程学院课 程 设 计 任 务 书课程名称 单片机课程设计 课 题 频率计数器 专业班级 电子科学与技术0981 学生姓名 学 号 指导老师 审 批 任务书下达日期 2012 年 5 月 14 日任务完成日期 2012年 5 月 25 日设计内容与设计要求设计内容:本课题以单片机为核心,设计和制作一个频率计数器,来完成对输入的信号进行频率计数,计数的频率结果通过6位动态数码管显示出来。要求能够对0250KHZ的信号频率进行准确计数,计数误差不超过1HZ。设计要求:1. 设计方案要合理、正确;2. 系统硬件设计;3. 完成必要元器件选择;4. 系统软件设计及调试;5. 写出设计报告。主要设计条件1. MCS-51单片机实验操作台1台;2. PC机及单片机调试软件;3. 单片机应用系统板1套;4. 制作工具1套;5. 系统设计所需的元器件。说 明 书 格 式课程设计封面课程设计任务书目 录一、设计的内容、要求及目的二、系统总体方案选择与说明三、系统方框图与工作原理四、各部分方案选定、功能及计算五、器件说明六、应用系统的程序设计七、调试说明、使用说明八、设计总结九、参考文献 附录:程序清单,设计电路原理图进 度 安 排设计时间分为二周第一周星期一、上午:布置课题任务,课题介绍及讲课。 下午:借阅有关资料,总体方案讨论。星期二、确定总体方案,学习与设计相关内容。星期三、各部分方案设计。星期四、各部分设计。星期五、设计及上机调试。第二周星期一:设计及上机调试。星期二:调试,中期检查。星期三:调试、写说明书。星期四-星期五上午:写说明书、完成电子版并打印成稿。星期五下午:答辩。参 考 文 献参考文献1、 单片机原理与应用 王迎旭等编 机械工业出版社2、 51系列单片机设计实例 楼然苗等编 北京航空航天大学出版社3、 计算机硬件技术基础实验教程 黄勤等编 重庆大学出版社4、 微型计算机接口技术及应用 刘乐善主编 华中科技大学出版社5、单片微型计算机原理及接口技术陈光东等 华中科技大学出版社目录第一章.设计的内容、要求及目的11.1 设计任务11.2 电路原理图11.3 系统板上硬件连线21.4 程序设计内容2第二章.设计原理及总体方案32.1频率计数器的基本原理32.2 方案的确定4第三章.各部分方案选定、功能及计算53.1 主要控制模块53.2时钟模块93.3 复位模块93.4显示模块10第四章.程序设计及调试11设计总结14参考文献15附录一:电路仿真图16附录二:仿真结果图17附录三:源程序18第一章.设计的内容、要求及目的1.1 设计任务 利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。要求能够对0250KHZ的信号频率进行准确计数,计数误差不超过1HZ。 1.2 电路原理图 1.3 系统板上硬件连线 1.3.1 把“单片机系统”区域中的P0.0P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 1.3.2 把“单片机系统”区域中的P2.0P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 1.3.3 把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。 1.4 程序设计内容 1.4.1 定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC12MHz,因此:T0的最大计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。 1.4.2 T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。 第二章.设计原理及总体方案2.1频率计数器的基本原理频率源频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。测量一个信号的频率有两种方法:第一种是计时法,用基准信号去测量被测信号的高电平持续的时间,然后转换成被测信号的频率。第二种是计数法,计算在基准信号高电平期间通过的被测信号个数。根据设计要求测量0HZ250KHZ的正弦信号,首先要将正弦信号通过过零比较转换成方波信号,然后变成测量方波信号。如果用第一种方法,当信号频率超过1KHZ的时候测量精度将超出测量精度要求,所以当被测信号的频率高于1KHZ的时候需要将被测信号进行分频处理。如果被测信号频率很高需要将被测信号进行多次分频直到达到设计的精度要求。本课程设计采用AT89C51单片机为控制器件来制作一个0HZ250KHZ的频率计数器,并将所得到的频率通过数码管显示出来。根据设计要求用单片机的内部T0产生基准信号,由INTO输入被测信号,通过定时方式计算被测信号的持续时间。通过单片机计算得出结果,最后通过数码管显示测量结果。系统的原理框图如下图所示:数显码示管AT89C51单片机 2.2 方案的确定系统采用AT89C51单片机作为控制核心,门控信号由AT89S51内部的计数定时器产生,单位为1s。由于单片机的计数频率上限较低(12MHZ晶振时约500KHZ),所以需对高频被测信号进行硬件分频处理,AT89S51则完成运算、控制及显示功能。由于使用了单片机,使整个系统具有极为灵活的可编程性,能方便地对系统进行功能扩展与改进。原理图如下图:信号输 入数码管显示 单片机处理在本设计方案中,我通过程序设定T0工作在计数状态下,T1工作在计时状态下。T0计数器对输入的信号经行计数,其最大计数值为fOSC/24,当fOSC=12MHz时,T0的最大计数频率为500kHz。由于信号的频率就是每秒钟信号脉冲的个数,于是我让T1工作在定时状态下,定时时间为1秒。每定时1秒钟到,就停止T0的计数,然后从T0的计数单元中读取计数的数值,即完成了信号频率的测量,最后通过六位数码管显示出频率值。第三章.各部分方案选定、功能及计算3.1 主要控制模块主控模块主要是AT89C51单片机系统,采用12MHZ的晶振频率。单片机的P3.2口接被处理后的被测信号,P0口接LED显示器的数据输入端,ALE,RD,WR,P0.0,P0.1通过外接控制电路接数码管显示器的控制端。单片机系统的电路如下图所示:AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 管脚说明: VCC:供电电压。 GND:接地。 P0:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。I/O口作为输入口时有两种工作方式即所谓的读端口与读引脚读端口时实际上并不从外部读入数据而是把端口锁存器的内容读入到内部总线经过某种运算或变换后再写回到端口锁存器只有读端口时才真正地把外部的数据读入到内部总线上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作这是由硬件自动完成的不需要我们操心1然后再实行读引脚操作否则就可能读入出错为什么看上面的图如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q为1加到场效应管栅极的信号为1该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1若先执行置1操作则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入由于在输入操作时还必须附加一个准备动作所以这类I/O口被称为准双向口89C51的P0/P1/P2/P3口作为输入时都是准双向口接下来让我们再看另一个问题从图中可以看出这四个端口还有一个差别除了P1口外P0P2P3口都还有其他的功能 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的3.2时钟模块 如图所示是采用内部振荡方式使8051单片机产生时钟信号,在单片 机芯片的X1和X2引脚两端跨接石英晶体振荡器和两个电容构成稳定的自激振荡电路,其中电容对振荡频率起微调作用,晶振频率为12MHZ。3.3 复位模块 复位是单片机的初始化操作,其功能是CPU从000H单元开始执行程序,除了使系统正常初始化,当程序运行出错或操作错误使系统处于锁死状态时,为摆脱困境,也需要按复位键重新启动。如图为按键手动复位方式,通过复位端经电阻和电源+5V接通实现复位功能。3.4显示模块本次设计中采用了LED显示器,即数码管。数码管的每一个数码段是一只发光二极管。当发光二极管导通时,相应的一个点或者一个笔画发光,控制发光二极管发光组合,可以显示出所需字符。本电路采用的是共阴的数码管,其编码如下:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40 0 1 2 3 4 5 6 7 8 9 熄灭C语言程序为:unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;第四章.程序设计及调试 根据课程设计所要求的功能,在KEIL51开发环境下编译程序,首先要定义相关参量,然后初始化中断,打开外中断,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大的计数值为fOSC/24,由于fOSC12MHz, 因此: T0的最大计数频率为 250KHz。对于频率的概念就是在一秒计数脉冲的个数,即为频率值。所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。送到数码管显示出来。T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。参考相关资料编译实现相关功能程序,实现课程设计所要求的功能,程序流程图如下:T1定时器结束计数显示是否达到1S从P3*2接受外部中断请求初始化T0/T1初始化(设置T0为外部脉冲计数,T1为1S定时)按照程序流程图把编写好的程序用KEIL-51单片机编译系统编译,编译成功后,再把程序转换为可执行文件。在程序编写过程中首先要考虑数码管是共阴还是共阳的,不同的数码管的结构不一样,所采用的编码也不一样,本电路采用的是共阴的数码管,所以其编码如下:0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40 0 1 2 3 4 5 6 7 8 9 熄灭所用C语言程序为:unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;接下来要考虑哪个口做定时器哪个口做计数器接口,该电路的设计思路是用T1做定时器接口,而T0做计数器接口,并且还要考虑定时器/计数器的工作模式,根据设计思路来设计程序,故编写出了如下的C语言程序:TMOD为8位寄存器,用于控制T0和T1的工作方式和工作模式。低4位用于T0,高4位用于T1。我们要将T0口作为定时器那么低四位中的C/位的编码应该为1,而将T1口作为计数器接口那么高四位中的C/位的编码应该为0,并且要使T0和T1都工作在模式1方式,那么其编码都应该为01,所以就有编码为00010101,转化为十六进制编码就是0x15。所以有TMOD=0x15TH0=0; /初始化计时器1的高位TL0=0; /初始化计时器1的低位TH1=(65536-4000)/256;/初始化计时器1的高位TL1=(65536-4000)%256;/初始化计时器1的低位TR1=1; /开计时器1TR0=1; /开计时器0ET0=1; /开外部计时中断0ET1=1; /开外部计时中断1EA=1; /开总中断定义完了定时器和计数器以及中断的内容之后进入主程序的编写(附录三),编写完所有程序之后进行编译并将生成的可执行文件后写入AT89C51单片机。此时单片机上显示6位全零(见附录一),加入信号源时数码管能显示输入信号的频率(见附录二)说明程序基本上没有问题了。 设计总结经过本次课程设计使我受益匪浅,旧知识得到加强,程序的编写调试,单片机的应用,LED显示管等,增加了新知识,开阔了视野。从中我学到了相当多的知识,从程序的编译到电路图的设计仿真,到调试出结果,整个过程虽然遇到了许多困难,但经过本人的不懈努力和老师的辛勤指导,以及在同学的热心帮助下,不断查找相关资料解决问题,以至最终实现了本次课程设计。并且通过这次课程设计的实践,培养了自己对本专业学习的更为浓厚的兴趣与爱好,提高了自己的动手能力,以及与同学团结协作的能力。更重要的是自身的自学能力和动手能力得到了很大的提高,做课程设计的过程就是一个不断的学习和探索的过程,当出现困难的时候能够沉着、冷静、正确的面对和处理困难。我相信有了这次课程设计的整个经历,为将来进行更高新知识的学习带来了很大的益处,也为走上社会奠定了坚实的基础。最后,感谢我的指导老师寻大勇老师,在本次课程设计中老师的指导给予了我很大的帮助,不但教会了我理论知识,还教会了我解决问题的能力,老师渊博的知识、精益求精的工作态度给我留下了深刻的印象,将使我终身受益。同时也感谢我的同学、室友对我的帮助与支持,没有他们的帮助我是无法在短时间内圆满完成本次课程设计的,与他们一起学习生活,带给我很多的欢笑与快乐。由于本人所掌握的知识和能力水平的限制,在本次设计中一定存在一些错误,恳请老师予以批评指正。再次对帮助我的老师和同学表示衷心的感谢。 参考文献1.单片机原理与应用 王迎旭等编 机械工业出版社2.51系列单片机设计实例 楼然苗等编 北京航空航天大学出版社3.计算机硬件技术基础实验教程 黄勤等编 重庆大学出版社4.微型计算机接口技术及应用 刘乐善主编 华中科技大学出版社5.单片微型计算机原理及接口技术陈光东等 华中科技大学出版社附录一:电路仿真图 附录二:仿真结果图附录三:源程序#include unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/共阴数码管选通数组unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;/数码管显示的数字数组unsigned char dispbuf8=0,0,0,0,0,0,10,10;/数码管显示内容数组unsigned char temp8;/数码管显示内容缓冲数组unsigned char dispcount;/显示计数unsigned char T0count; /计时器0的计数 unsigned char timecount;bit flag; /频率计开始工作标志位 unsigned long x; /八个数码管显示的数 void main(void) unsigned char i; TMOD=0x15;/设置两个计时器模式 TH0=0; /初始化计时器1的高位 TL0=0; /初始化计时器1的低位 TH1=(65536-5000)/256;/初始化计时器1的高位 TL1=(65536-5000)%256;/初始化计时器1的低位 TR1=1; /开计时器1 TR0=1; /开计时器0 ET0=1; /开外部计时中断0 ET1=1; /开外部计时中断1 EA=1; /开总中断 while(1) if(flag=1) flag=0; x=T0count*65536+TH0*256+TL0; for(i=0;i8;i+) / tempi=0; /清缓冲数组内容 i=0; while(x/10) tempi=x%10; /把个位数给缓冲区 x=x/10; i+; tempi=x; / 把十位数给缓冲 for(i=0;i6;i+) dispbufi=tempi;/把高六位的数给显示缓冲区 timecount=0;/清0 T0count=0; TH0=0; TL0=0; TR0=1; void t0(void) interrupt 1 using 0 /中断计时器0实行的函数 T0count+;void t1(void) interrupt 3 using 0 /中断计时器1的函数 TH1=(65536-5000)/256; TL1=(65536-5000)%256; timecount+; if(timecount=250) TR0=0; timecount=0; flag=1; P0=dispcodedispbufdispcount; /数码管显示内容 P2=dispbitdispcount; /数码管选通 dispcount+; if(dispcount=8) dispcount=0; 电气信息学院课程设计评分表项 目评 价优良中及格差设计方案合理性与创造性(10%)开发板焊接及其调试完成情况*(10%)硬件设计或软件编程完成情况(20%)硬件测试或软件调试结果*(10%)设计说明书质量(20%)答辩情况(10%)完成任务情况(10%)独立工作能力(10%)出勤情况(10%)综 合 评 分 指导教师签名:_ 日 期:_ 注:表中标*号项目是硬件制作或软件编程类课题必填内容; 此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。 23
展开阅读全文