您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > 基于定时器计数器的单片机仿真和C语言开发
I摘要本次能力拓展的要求是要求实现利用定时器中断方式或查询定时器溢出标志方式从P口输出给定周期的方波。在此基础上,我决定进行一些拓展,使其能实现输出方波的频率和占空比可调。如果以调节变阻器的阻值来实现频率的调节相对来说要麻烦些,所以我们决定用按键来调节频率和占空比,而以键盘扫描来实现各键的不同功能。关键字:定时器;中断;方波11.概述单片机集成度高、功能强、可靠性高、体积小、功耗地、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,称为普林斯顿结构。另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前的单片机以采用程序存储器和数据存储器截然分开的结构为多。本课题讨论的方波发生器的核心是目前应用极为广泛的51系列单片机。其内部包括:(1)一个8位的CPU;(2)4KB程序存储器ROM;(3)128字节RAM数据存储器;(4)两个16位定时/计数器;(5)可寻址64KB外部数据存储器和64KB外部存储空间的控制电路;(6)32条可编程的I/O线(4个8位并行I/O端口);(7)一个可编程全双工串行口;(8)具有两个优先级嵌套接口的5个中断源;22.总体设计方案2.1方案介绍在电子技术领域中,实现方波发生器的方法有很多种,可以采用不同的原理及器件构成不同的电路,但可以实现相同的功能。在此次课设中,微处理器模块使用AT89C51。本设计中用到两个定时器,定时器0和定时器1,其中定时器0工作在定时方式下,决定方波的频率;定时器1同样工作在定时方式下,用于设定占空比。键盘的操作是通过外中断与单片机共同来控制的,键盘操作来完成按要求对频率与占空比进行调节。P0.7为方波输出口,它连接一个示波器即可观察输出的方波了。2.2方波发生器原理与功能方波发生器原理框图如图2.1所示:图2.1方波发生器原理框图由于系统的要求不高,比较单一的,再加上我们是通过定时器来调节频率的,而非电阻,因此实现起来就相对简化了。仅用键盘、AT89C51及示波器便可完成设计,达到所要求实现的功能。方波发生器工作原理与功能:简单的流程为:主程序扫描键盘,将设置信息输入,处理后,输出到示波器显示。单片机的晶振为11.0592MHz,用到了两个定时器,即定时器0与定时器1,分别进行频率与占空比的定时,两个定时器都是工作在方式1。根据计算定时器初值的公式:122tfTCoscL(式2-1)计算出定时器0与定时器1所要装入的初值,然后将工作方式控制字写入TMOD寄键盘AT89C51单片机频率与占空比调节示波器输出方波3存器,再将XTH和XTL寄存器,最后启动定时器,即将XTR置位。如果工作于中断方式,需置位EA(中断总开关)及XET(允许定时/计数器中断),并编中断服务程序。此电路的键盘是由一个状态键,四个功能键(调节频率与占空比的增减)组成,其特殊之处在于利用外部中断实现键盘扫描。状态键有三种状态,当其处于状态0时,则其它的键会处于无用状态;当其处于状态1时,可通过按四个调节键来调节频率;当处于状态2时,按四个调节键中的前两个便可对占空比进行调节了;当处于状态3时,又会回到状态0,此时正常显示方波。43.系统硬件设计3.1AT89C51简介单片机是在一块芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等计算机所需要的基本部件的大规模集成电路,又称MCU。其以体积小、功能全、性价比等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说C语言程序设计课程设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。其管脚图如右图所示。图3.1AT89C51管脚图3.2内部振荡电路图3.2内部振荡电路8XX51单片机的时钟信号通常分为内部振荡方式和外部振荡方式。因为此次课设我们用到的是内部振荡方式,所以只对前者进行简单介绍。如图3.2所示,在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷振荡器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶体后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用6MHz、12MHz、24MHz。图中C2和C3起稳5定振荡频率,快速起振的作用。电容值一般为5~30pF。3.3复位电路图3.3复位电路复位操作完成单片机内电路的初始化,使单片机从一确定的状态开始运行。当8XX51单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序,因此要求单片机复位后能脱离复位状态。图3.3所示的为上电且开关复位电路,上电后电容充电,使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择kRFC,30~10。3.4按键接口电路小键盘如图3.4所示。它包括8个键,系统中用到的键只有5个,分别为S1键,S2键,S3键,S4键,S5键。其中S1键是状态键,采用外部中断控制,用它来确定其它几个键的按键功能,具体作用在前述的系统功能中已做介绍了;另外4个键为功能键,是用来调节频率与占空比的。小键盘中引出的6根线依次分别接单片机的P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口。其中P1.0~P1.3是为键盘列线,P1.4和P1.5是键盘行线。当某个键按下时,由行扫描值和列回馈信号共同形成键编码。6图3.4按键接口电路如上所介绍的,按键接口电路采用的是外部中断控制,如图3.5所示,P1.0~P.14为4输入与门输入端,输出端接外部中断0控制端0INT,当有某一键按下时,由于输入端电平的变化会导致进入0INT的电平也发生变化,由此将会产生外部0中断,达到按键控制的作用。图3.5按键控制外部中断电路74.系统软件设计方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、键盘扫描程序、定时器中断子程序。其中主程序用来控制整个程序的执行,它与各子程序紧密相联,共同实现方波发生器各种功能的执行。4.1系统初始化程序在此程序中,给所有变量赋初值,有键盘扫描口、选择串行口工作方式SCON、状态标志位flag、初始频率与占空比及其定时、定时器0与定时器1的工作方式等。初始化时启动了定时器0与定时器1。4.2定时器中断子程序voidTimer0_PL()interrupt1//频率定时器0中断{TR1=1;//启动定时器1,占空比定时TL0=TIMER0_L;TH0=TIMER0_H;OutPut=1;//输出高电平}voidTimer1_PL()interrupt3//占空比定时器1中断{TR1=0;//定时器1停止TL1=TIMER1_L;TH1=TIMER1_H;OutPut=0;//输出低电平}定时器中断子程序中有定时器0与定时器1中断,频率定时器0中断流程图与占空比定时器1流程图分别如图4.1和图4.2所示。其过程为:(1)定时器0遇中断执行的操作有复位,启动自身进行频率定时,同时启动定时器1,进行占空比定时,输出高电平。(2)定时器1遇中断,停止自身的计时,输出低电平。如此循环进行从而达到输出方波的目的。84.3键盘扫描程序键盘扫描用外中断0实现,采用的是线反法,键盘扫描采用逐行扫描的方法。当频率可调时,占空比保持原状不变,反之亦然,只能进行单一变量的调节,状态标志flag的初始值为0。(1)频率调节:i==0时,按键为状态键,此时flag加1,即flag==1,此时进行频率的调节。可以进行加1Hz、减1Hz、加100Hz、减100Hz操作,分别由S2键、S3键、S4键、S5键控制。如果按住某个键不放,便会执行连续加值或减值操作。这里的频率的最大值为15000Hz,当频率增至最大值时,还按增值键,此时频率会自动跳到1Hz开始继续增加。同理,频率的最小值为1Hz,当减频率减至最小值时,再按减频率键,则频率会跳到15000Hz。(2)占空比调节:当状态值flag==2时,此时频率保持不变,进行占空比调节。只可进行加1与减1操作,分别由S2键、S3键控制。要注意的是占空比的初值是50%,我们定义的ZKB为50(百分比的分子部分,为一整数),故调节占空比时,ZKB会进行加1,减1操作。ZKB定时器0中断入口TR1=1重装定时初值输出高电平结束图4.1频率定时器0中断流程定时器1中断入口TR1=0重装定时初值输出低电平结束图4.2占空比定时器0中断流程9的最大值为99,当增到最大值时,便会返回到值1,如此循环。(3)为了减轻单片机的工作量,在软件设计中采取了这样的措施,在修改参数确定后才进行定时器初值TC0、TC1的计算。键盘中断处理子程序流程图与键处理流程图分别如图4.3、图4.4所示:图4.3键盘中断处理子程序流程图YNEA=0软件延时消抖外部中断0入口键盘扫描,得到键码查表取键值i实时显示键盘口初始化EA=1结束键处理是否为抖动NYi==1ZKB++i==2ZKB--边界处理Flag=2?NYi==0?Flag+=1键处理YYi==3PL+=100i==4PL-=100i==2PL--i==1PL++边界处理NFlag=1?YNFlag=3?Flag=0,计算定时器0和1的初值键处理结束图4.4键处理流程图105.软件仿真5.1keil编译器生成HEX文件由于这次能力拓展使用的C语言编程,所以不能用WAVE软件进行仿真,于是我们选用keil编译器进行仿真。主要介绍C程序生成hex文件的方法:(1)双击打开KeiluVision3,选择project新建工程并保存,在出现的CPU对话框中选择ATMEL中的AT89C51芯片。(2)点击确定生成工程,在file菜单中选择新建,新建一个文件,在里面输入自己写的程序代码,并保存。(3)在左面的工程上右击选择addfilestogroup,将刚开的文件添加的工程,然后同样右键target选择optionsfortarget,打开设置,在output选项中选择createhexfil这一项。(4)点击编译,以及它后面的生成选项,便可在工程目录下生成hex文件。5.2proteus软件仿真在生成*.HEX文件后,进入Protues软件,此时软件已自动打开一新建项目。我们可直接在其中构建电路图,点击板面左侧按键P,在弹出的Pickdevices对话框中进行元器件的选择,文件要求必须是HEX文件。然后可以点击运行观察现象,看与自己设置的符合否,如果不相符在查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分。在元器件都找到后,我们可以先进行排版再按照电路图连接,如连接好后如下图所示:11图5.1仿真电路图在电路连接好后,双击AT89C51在弹出对话框中选择单片机中要输入的程序,见下图:图5.2向AT89C51中加入程序12当完成以上步骤后,就可以点击开始按钮进行仿真了,原始方波输出如图5.3所示:图5.3输出原始波形图当仿真开始后,按一次S1,则此时Flag状态为1,可以进行平率的调整,频率调整后波形输出如下图所示:图5.3频率调整后的波形输出13再按S1将Flag状态调整为状态2,此时可以对波形的占空比进行调整,调整占空比后的波形如下图所示:图5.5占空比调整后的输出波形146.心得体会单片机设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有
本文标题:基于定时器计数器的单片机仿真和C语言开发
链接地址:https://www.777doc.com/doc-4380179 .html