基于定时计数器的单片机实验与C语言开发_第1页
基于定时计数器的单片机实验与C语言开发_第2页
基于定时计数器的单片机实验与C语言开发_第3页
基于定时计数器的单片机实验与C语言开发_第4页
基于定时计数器的单片机实验与C语言开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、武汉理工大学单片机应用与实践课程设计任务书课程设计任务书学生姓名: 黄 蓉 专业班级:电信1204班 指导教师: 陈德军 工作单位:信息工程学院 题 目: 基于定时器/计数器的单片机实验和C语言开发 初始条件:具备单片机的理论知识;具备proteus仿真能力;了解定时器及计数器应用;提供仿真所需要的计算机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、用定时器中断方式或查询定时器溢出标志方式从P口输出给定周期的方波2、我们在此基础上扩展实现了矩阵键盘调节方波频率和占空比时间安排:一周,其中3天程序设计,2天程序调试指导教师签名: 年 月 日系主任(或责任

2、教师)签名: 年 月 日目 录摘 要I1. 概述12. 设计方案22.1 方案简介22.2 方波发生器原理与功能23. 系统硬件设计43.1 STC89C52RC简介43.2 时钟电路43.3 复位电路53.4 按键接口电路54. 系统软件设计74.1 系统初始化程序74.2 定时器中断子程序84.3 键盘扫描程序94.4 主函数125. 软件仿真135.1 keil编译器生成HEX文件135.2 proteus软件仿真136. 硬件调试166.1电路板焊制及测试166.2 电路板调试167. 心得体会17参考文献18附录:源程序代码19摘 要本次单片机课程设计是基于定时计数器的单片机实验与C

3、语言开发,要求用定时器中断方式或查询定时器溢出标志方式从P口输出给定周期的方波。以此为基础,我们进行了一些拓展,通过4乘2矩阵键盘,使其能实现输出方波的频率和占空比可调。通过两个按键调节频率,两个按键调节占空比,以此实现定时器中断方式从P口输出给定周期的方波。关键字:定时器 方波 中断 占空比武汉理工大学单片机应用与实践课程设计任务书1. 概述单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路

4、转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。单片机(Microcontrollers)诞生于1971年,经历了SCM、MCU、SoC三大阶段,早期的SCM单片机都是8位或4位的。其中最成功的是INTEL的8051,此后在8051上发展出了MCS51系列MCU系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大提高。

5、随着INTEL i960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。单片机(Microcontrollers)有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。 本课题讨论的方波发生器的核心是目前应用极为广泛的 51系列单片机。其内部包括:(1) 一个8位的CPU;(2) 4KB程序存储器ROM;(3) 128字节RAM数据

6、存储器;(4) 两个16位定时/计数器;(5) 可寻址64KB外部数据存储器和64KB外部存储空间的控制电路;(6) 32条可编程的I/O线(4个8位并行I/O端口);(7) 一个可编程全双工串行口;(8) 具有两个优先级嵌套接口的5个中断源2. 设计方案2.1 方案简介本方案中,微处理器模块使用STC89C52RC。通过键盘扫描,输入四输入与门,实现外部中断0的中断。本设计中用到两个定时器,定时器0和定时器1,其中定时器0工作在定时方式1下,通过扫描键盘S1,S2是否按下及按下次数调节方波频率;定时器1同样工作在定时方式1下,用于设定占空比。键盘的操作是通过外中断与单片机共同来控制的,键盘操

7、作来完成按要求对频率与占空比进行调节。P2.0为方波输出口,它连接一个示波器即可观察输出的方波了。2.2 方波发生器原理与功能方波发生器原理框图如图2.1所示:频率与占空比调节输出方波 示波器AT89C51 单片机 键盘图2.1 方波发生器原理框图由于系统的要求不高,比较单一的,再加上我们是通过定时器来调节频率的,而非电阻,因此实现起来就相对简化了。仅用键盘、AT89C51及示波器便可完成设计,达到所要求实现的功能。初始化后,主程序扫描键盘,将设置信息输入,处理后,输出到示波器显示。单片机的晶振为11.0592MHz,用到了两个定时器,即定时器0与定时器1,分别进行频率与占空比的定时,两个定时

8、器都是工作在方式1。根据计算定时器初值的公式: (式2-1)计算出定时器0与定时器1所要装入的初值,然后将工作方式控制字写入TMOD寄存器,再将和寄存器赋初值,最后启动定时器,即将置位。同时打开外部中断0。置位EA(中断总开关)及(允许定时/计数器中断),并编中断服务程序。键盘是由一个状态键,四个功能键(调节频率与占空比的增减)组成,其特殊之处在于利用外部中断实现键盘扫描。当按下S0时,输出频率为10HZ;按下S1时,频率加1HZ,当频率大于1000HZ时,恢复方波频率为10HZ;按下S2时,频率减1HZ,当频率小于10HZ时,恢复方波频率为1000HZ;按下S3时,占空比加1%,当占空比大于

9、50%时,将占空比置为1%;按下S4时,占空比减1%,占空比小于1%时,恢复占空比为50%。3. 系统硬件设计3.1 STC89C52RC简介图3.1 STC89C52RC管脚图单片机是在一块芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等计算机所需要的基本部件的大规模集成电路,又称MCU。其以体积小、功能全、性价比等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说C语言程序设计课程设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。其管脚图如图3.1所示。 3.2 时钟电路8XX

10、51单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。因为此次课设我们用到的是内部振荡方式,所以只对前者进行简单介绍。如图3.2所示,在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷振荡器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用6MHz、12MHz、24MHz。图中C2和C3起稳定振荡频率,快速起振的作用。电容值一般为530pF。图3.2 内部振荡电路3.3 复位电路图3.3 复位电路复位操作完成单片机内电路的初始化,使单片机从一确定的状态开始运行。当8XX51单片机的复位引脚RST出现5

11、ms以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序,因此要求单片机复位后能脱离复位状态。图3.3所示的为上电且开关复位电路,上电后电容充电,使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择。3.4 按键接口电路小键盘如图3.4所示。它包括8个键,系统中用到的键只有5个,分别为S0键,S1键,S2键,S3键,S4键。其中S0键是初始键,按下时初始频率为10HZ;另外4个键为功能键,是用来调节频率与占空比的。小键盘中引出的6根线依次分别接单片机的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口。其中P1.0P

12、1.3是为键盘列线,P1.4和P1.5是键盘行线。当某个键按下时,由行扫描值和列回馈信号共同形成键编码。图3.4 按键接口电路如上所介绍的,按键接口电路采用的是外部中断控制,如图3.5所示,P1.0P1.4为4输入与门输入端,输出端接外部中断0控制端,当有某一键按下时,由于输入端电平的变化会导致进入的电平也发生变化,由此将会产生外部0中断,达到按键控制的作用。图3.5 按键控制外部中断电路4. 系统软件设计方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、键盘扫描程序、定时器中断子程序。其中主程序用来控制整个程序的执行,它与各子程序紧密相联,共同实现方波发生器各种功能的执行。4.1

13、系统初始化程序void init( )KEY=0x0f;TIME0_L=176;TIME0_H=60;TL0=176;TH0=60;TMOD=0x11;/定时计数器0与定时计数器1均工作在方式1ET1=1;EX0=1;/外部中断0允许ET0=1;EA=1;TR0=1;TR1=1;在系统初始化程序中,给键盘扫描口赋初值、设定定时计数器0与定时器1的工作方式,写入计数初值,启动了定时器0与定时器1,打开了外部中断。4.2 定时器中断子程序void Timer0() interrupt 1/定时器0中断TL0=TIME0_L;TH0=TIME0_H;TR1=1;OutPut=1;void Timer

14、1() interrupt 3/定时器1中断TH1=TIME1_H;TL1=TIME1_L; TR1=0; OutPut=0;定时器中断子程序中有定时器0与定时器1中断,定时器0中与定时器1控制频率与占空比流程图分别如图4.1和图4.2所示。其过程为:(1)定时器0遇中断执行的操作有复位,启动自身进行频率定时,同时启动定时器1,进行占空比定时,输出高电平。(2)定时器1遇中断,停止自身的计时,输出低电平。如此循环进行从而达到输出方波的目的。定时器1中断入口TR1=0重装定时初值输出低电平结束图4.2 占空比定时器0中断流程定时器0中断入口TR1=1重装定时初值输出高电平结束图4.1 频率定时器

15、0中断流程 4.3 键盘扫描程序void KeyScan() interrupt 0/键盘扫描uchar scancode,keycode,i;float TC0,TC1,temp;EX0=0;/关外部中断0delayms(5);scancode=0xef;while(scancode!=0xff)KEY=scancode;keycode=KEY;if(keycode&0x0f)!=0x0f) break; /有键按下,breakscancode=(keycode1)|0x0f; /无键按下,扫描下一行keycode=keycode;/取反得键值for(i=0;i1000)/大于1000HZ时

16、恢复10HZfre=10;if(i=2)/按下S2,频率减1fre-;if(fre50) zkb=1;/占空比大于50%时,恢复占空比为1if(i=4)/按下S4时,占空比减1%zkb-;if(zkb1) zkb=50;/占空比小于1%时,恢复占空比为50%if(i=3|i=4)/当按下S3或S4时,计算定时器1计数初值,装入初值temp=length-fosc/24.0/fre;TC1=(1-zkb/100.0)*length+temp*zkb/100.0;TIME1_L=(uint)TC1/256;TIME1_H=(uint)TC1%256;KEY=0x0f;EX0=1;键盘扫描用外中断0

17、实现,采用的是线反法,键盘扫描采用逐行扫描的方法。当频率可调时,占空比保持原状不变,反之亦然,只能进行单一变量的调节,当按下S0,S1,S2可以进行初始化、加1Hz、减1Hz操作。如果按住某个键不放,便会执行连续加值或减值操作。这里的频率的最大值为1000Hz,当频率增至最大值时,还按增值键,此时频率会自动跳到10Hz开始继续增加。同理,频率的最小值为10Hz,当减频率减至最小值时,再按减频率键,则频率会跳到1000Hz。频率保持不变,进行占空比调节。只可进行加1与减1操作,分别由S3键、S4键控制。要注意的是占空比的初值是50,我们定义的zkb为50(百分比的分子部分,为一整数),故调节占空

18、比时,zkb会进行加1,减1操作。zkb的最大值为50,当增到最大值时,便会返回到值1,如此循环。为了减轻单片机的工作量,在软件设计中采取了这样的措施,在修改参数确定后才进行定时器初值TC0、TC1的计算。键盘中断处理子程序流程图与键处理流程图分别如图4.3、图4.4所示:图4.3 键盘中断处理子程序流程图YNEA=0软件延时消抖外部中断0入口键盘扫描,得到键码查表取键值i实时显示键盘口初始化EA=1结束键处理是否为抖动NYi=1 ZKB+i=2 ZKB-边界处理Flag=2?NYi=0?Flag+=1键处理Y Yi=3 PL+=100i=4 PL-=100i=2 PL-i=1 PL+边界处理

19、NFlag=1?YNFlag=3?Flag=0,计算定时器0和1的初值键处理结束 图4.4 键处理流程图4.4 主函数void main()init();/初始化while(1);/等待按键,外部中断5. 软件仿真5.1 keil编译器生成HEX文件由于这次能力拓展使用的C语言编程,所以不能用WAVE软件进行仿真,于是我们选用keil编译器进行仿真。主要介绍C程序生成hex文件的方法:(1) 双击打开Keil uVision3,选择project新建工程并保存,在出现的CPU对话框中选择ATMEL中的AT89C51芯片。(2) 点击确定生成工程,在file菜单中选择新建,新建一个文件,在里面输

20、入自己写的程序代码,并保存。(3) 在左面的工程上右击选择add files to group,将刚开的文件添加的工程,然后同样右键target选择options for target,打开设置,在output选项中选择create hex fil这一项。(4) 点击编译,以及它后面的生成选项,便可在工程目录下生成hex文件。5.2 proteus软件仿真在生成*.HEX文件后,进入Protues软件,此时软件已自动打开一新建项目。我们可直接在其中构建电路图,点击板面左侧按键P,在弹出的Pick devices对话框中进行元器件的选择,文件要求必须是HEX文件。然后可以点击运行观察现象,看与自

21、己设置的符合否,如果不相符在查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分。在元器件都找到后,我们可以先进行排版再按照电路图连接,如连接好后如下图所示:图5.1 仿真电路图当完成以上步骤后,就可以点击开始按钮进行仿真了,原始方波输出如图5.3所示:图5.3 输出原始波形图当仿真开始后,按一次S1,可以进行频率的调整,频率调整后波形输出如下图所示:图5.3 频率调整后的波形输出再按S1将Flag状态调整为状态2,此时可以对波形的占空比进行调整,调整占空比后的波形如下图所示:图5.5 占空比调整后的输出波形6.硬件调试6.1 电路板焊制及测试元器件焊接顺序依次为:电阻器

22、,电容器,二极管,三极管,集成电路,大功率管,其他元器件为先小后大。焊接时,要使焊点周围都有锡,将其牢牢焊住,防止虚焊。焊接完成后,检查是否所有线已连接,并用万用表检查。6.2 电路板调试 将程序烧写入STC89C52RC芯片,接入+5V电源,将示波器探头接到P2.0口,按键盘,观察输入波形,分别如下: 图6.1 原始波形 图6.2 频率增加波形 图6.3 频率减小波形 图6.4 占空比改变后波形7.心得体会完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。可是当我动

23、手开始做的时候,才发现其中的算法,设计是那么繁琐。经过一天的努力,毫无结果。失落的心情油然而生。于是,再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有点眉目了。埋头苦干的过程是痛苦的,尤其是在思考算法和程序框架时,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。在痛苦中挣扎,建立,推翻,参考别人的思路,建立,再次在推翻,在这不断循环中,终于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与

24、快乐的交换中,我学到了知识, 学到了做人的道理。单片机设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。参考文献1 何立民.MCS51单片机应用系统设计M.北京:北京航空航天大学出版社,2003.2 徐君毅.单片微型机原理与应用M.上海:上海科技出版社,19953 公茂法.单片机人机接口实例集M.北京:航空航天大学出版社,1998.4 沈红卫.基于单片机的智能系统设计与实现M.北京:电子工业出版社, 2005.5 李广弟,朱月秀等.单片机基础M.北京:北京航空航

25、天大学出版社, 2003.附录:源程序代码#include#define uchar unsigned char#define uint unsigned int#define KEY P1 sbit OutPut=P20;float fosc=12000000;float length=65536;long int fre=10,zkb=50;uchar TIME0_L,TIME0_H,TIME1_L,TIME1_H;uchar code tabl218=0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28;void delayms(uint n) uint i,j;for(i=n;i-;i0)for(j=110;j-;j0);void init( )KEY=0x0f;TIME0_L=176;TIME0_H=60;TL0=176;TH0=60;TMOD=0x11;/定时计数器0与定时计数器1均工作在方式1ET1=1;EX0=1;/外部中断0允许ET0=1;EA=1;T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论