单片机延时程序

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

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

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

资源描述

实验一单片机延时程序实验一、实验目的与要求:在使用4MH在外部晶体振荡器的PIC16F877A上用软件设计一个20ms的软件延时子程序。另外,还要求用MPLAB的软件模拟器及其附带的软件工具窗口stopwatch观测延时程序执行的时间。二、实验内容:1.硬件电路设计:本实验中用的是软件延时,利用循环来实现延时功能。电路就用了单片机的原本电路。没有用到其他的功能模块,单片机与ICD3相连接。2.软件设计思路:单片机软件延时的前提和基础是每条指令的执行时间是固定的,且大部分指令的执行时间是相同的。这要求对每条指令所花费的指令周期(Tcy)做到心中有数。指令集中5条无条件跳转指令GOTO,CALL.RETURN,RETLW和RETFIE,由于它们必然引起程序跳转,造成流水线中断,因此肯定将占用2个指令周期。而其他4条有可能引起程序跳转的条件跳转指令DECFSZ,INCFSZ,BTFSC和,BTFSS的执行时间,需要占用2个指令周期,当条件为假不发生跳转时,仅占用1个指令周期。其余所有指令都只用1个指令周期。每个指令周期Tcy的时间长度,计算方法:如果采用4MHz的外部晶体(fosc=4MHz),则PIC中档单片机的指令周期Tcy为1us,这是一个整数。而采用其他频率的外部晶体时,指令周期时间将反比于外部晶体频率。至于软件延时的结构和实现方法,其实可以采用任何指令和结构,因为只是通过执行指令耗费时间。但通常情况下有两个选择延时程序结构的原则:(1)执行指令周期数计算方便。如果含有太多复杂的条件跳转循环等结构势必会造成指令周期的计算困难,甚至可能造成执行所造成的软件延时时间不等。(2)不能占用太多的程序空间。试想用20000个NOP指令来实现20ms的延时,显然是可以的,但是这样做浪费了整整一个页的程序存储器,得不偿失,而通过适当的循环结构,重复执行某些相同的程序是比较合理的方法。因此,软件延时程序一般采用下列方法:如果延时时间短(微妙级别),可以连续插入几条NOP指令;如果延时时间长(几个毫秒级别),则可以使用双嵌套循环的方法来实现。实验的流程图:实验的源程序:#INCLUDE“P16F877A.INC”ORG0000HNOPBSFSTATUS,5CLRFTRISDBCFSTATUS,5CLRFPORTDLOOPBCFPORTD,0CALLDELAYBSFPORTD,0CALLDELAYGOTOLOOPDELAYMOVLWD’131’MOVWFiLOOP1MOVLWD’50’MOVWFjLOOP2DECFSZj,fGOTOLOOP2DECFSZi,fGOTOLOOP1RETURNEND执行上述延时子程序所需要的指令周期个数等于(1+1)+[(1+1)+(1+2)×(j-1)+2+(1+2)]×(i-1)+2+2。当i等于131,j等于50是指令周期数约为20000个。在4HMz外部晶振条件下,这个延时程序将花费大约20ms。程序说明如下:(1)上述等式中,第一个括号中的“1+1”对应两条向i中放入初值131的两条搬运指令。(2)中括号中的“1+1”对应两条向j中放初值50的两条搬运指令。(3)中括号中的第一个“1+2”对应DECFSZ和GOTO指令,当j没有被减到0时,这两条指令将被连续循环(j-1)次,因此每次将花费(1+2)×(j-1)个指令周期。(4)当j被减到0时,单片机将跳过6行的GOTO指令,这时DECFSZ将花费2个指令周期的时间,也就是接在(1+2)×(j-1)之后加上的那个“2”。(5)上式中括号里最后的那个“1+2”对应接下来的DECFSZ和GOTO指令,和上面的一对DECFSZ和GOTO指令一样,在i被减到0之前,这两条指令将被连续循环(i-1)次。(6)当在i被减到0时,单片机将跳过第8行的GOTO指令,,也就是式中的倒数第二个”2”。(7)最后的“2”对应RETURN指令。在设计和编写延时子程序时,为了精确计算整个延时程序的延迟时间,常常需要逐条分析每一条指令被执行的所占用的指令周期数,这是一项既枯燥又费力的工作。可以利用MPLAB软件提供的stopwatch窗口来直接得到延时程序运行的时钟周期数。这里的跑马表功能类似于田径场上赛跑计时用的跑表或者称为秒表,还有人叫它马表。打开跑表观察窗口的操作很简单,在MPLABSIM软件模拟器模式下,选择Debugger菜单中的stopwatch即可弹出观察窗。该窗口可以计算一段程序执行过程所需要的指令周期数和占用时间。在程序运行的过程中,软件模器会更新instructionCycles和Time域,包括时间单位。使用跑马表观察窗口的方法如下:(1)单击Synch(同步),将Stopwatch的值与TotalSimulated(模拟总数)的值同步。(2)单击Zero(归零),可以随时将InstructionCycles和Time的值设置为0.(3)选择ClearSimulationTimeOnReset(在复位时清零模拟时间),可以在程序复位时将InstructionCycles(指令周期)和Time的值设置为0.(4)其实MPLAB可以通过Debugger菜单下Setting菜单项配置ProcessorFrequency值。单击Debugger下的Settings,在弹出的SimulatorSettings对话框中的osc/trace(振荡器,跟踪)选项卡中设置。三、实验步骤及结果:1.从开始菜单运行MPLAB,打开MPLAB后,在PROJECT菜单中选择projectwizard。单机弹出的工程向导窗口中的“下一步”按钮;在工程向导第一步的窗口中选择本工程要使用的单片机型号PIC16F877A;在工程向导第二部的窗口上部选择合适的编译工具包—microchipMPASMtoolsuite,窗口中部显示了这个编译工具包内的工具,单击任何一个工具就会在窗口的下部显示这个工具所在的路径,如果MPLAB安装在省缺路径则无需修改这些工具的路径;在工程向导第三部的窗口中给新创建工程命名并选择新创建的工程所在的路径;在工程向导第四部的窗口中,可以将能重复使用的程序文件拷贝到本工程中。完成以上四步吼就输入了创建新工程所需要的所有参数,工程向导将在最后的总结窗口中显示这些参数,合适无误后单机“完成”即可完成新工程的创建工作。2.配置单片机的基本工作方式。单击MPLAB开发环境中单击configure菜单下的configurationbits,在弹出的配置位置窗口中首先去掉configurationbitssetincode复选框前面的小勾。接着逐一设置窗口中提供的单片机配置位:将振荡器类型设置为“TX”;“看门狗”应该关闭,将其设置为“OFF”;将上电复位定时器关闭;将电压检测电路关闭;低电压编程设置为“disabled”;将数据EEPROM读保护关闭;将用户程序Flash写保护设置为“writeprotectionoff”;将代码保护关闭。完成以上设置后关闭配置位窗口。3.使用软件模拟器测试代码。在MPLAB开发环境的Debugger菜单中选择MPLABSIM,此时MPLAB环境的外观和菜单项都会发生变化。4.选择file菜单下的new命令新建一个汇编语言文件,输入按本实验要求所编写的代码,保存时注意选择文件的类型为汇编语言源文件。5.用右键单击MPLAB的工程管理窗口,从弹出的快捷菜单中选择addfile……,将第四步编写好的汇编文件加入工程中。6.编译工程。在project菜单中选择buildall。如果有错误,则根据输出窗口的提示改正之,直到完全正确。7.运行程序。编译完成后,从如图所示的方针环境设置窗口将processorfrequency设置为4MHz。选择debugger菜单中的stopwatch,打开跑表观察窗,并将接着在源程序编辑窗口选中“calldelay”语句,然后鼠标右击,在弹出的快捷菜单中选择runtocursor指令项,程序开始执行。这是跑表观察窗口中有了时间和指令周期显示,表示此前被执行过的指令所占用的时间和指令表周期数。这个显示值不是我们所关心的,单击“zero”按钮将其清零,再单击debugger菜单中的stepove指令想,“跑表”便开始累计记录延时子程序运行的时间和指令周期数,当程序停止运行时,跑表观察窗中stopwatch所显示出的信息就是执行延时子程序所花费的时间和指令周期数。8.如果该时间值不符合设计者的要求,可以修改延时子程序中的内循环参数j和外循环参数i,然后重复步骤6和7,按照同样的方法运行程序,并观察延时子程序消耗的时间。反复这一过程,直到延迟时间满意为止。四、实验心得:(主要是实验中遇到的问题,以及解决方案!)在进行编写源程序的时候出现了很多问题,虽然老师说这个实验是比较简单的实验,但在第一次运用所学的知识来进行简单的编写还是遇到了很多问题,在自己的感觉下写出来的程序有很多问题,怎么改都有错误,但在我们细心的一步一步的慢慢调试修改后终于编译成功了,我们在写源代码的时候犯了很基本的错误,在照着书打的时候打错了几个单词导致一直错误。还有就是编写的延时子程序应该要在END之前,我们写在了END之后,一直运行错误。在编译成功后,我们就迫不急待的连接上ICD3进行模拟,一直没有得到结果,感觉都有点失望的时候,积极的询问老师,老师的一句话点醒了我们,我们太急躁忘记修改配置,又认认真真的看了几遍书,照着书上的要求一步一步的进行设置,最终得到了正确的结果。也让我们知道了以后在做任何实验的时候一定要认真仔细,提前要先预习好,按照步骤一步一步的进行,心急吃不了热豆腐。沉着冷静,仔细认真才能走向成功!

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

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

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

×
保存成功