单片机延时程序(共9页)_第1页
单片机延时程序(共9页)_第2页
单片机延时程序(共9页)_第3页
单片机延时程序(共9页)_第4页
单片机延时程序(共9页)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、 实验(shyn)一 单片机延时程序(chngx)实验 实验目的(md)与要求:在使用4MH在外部晶体振荡器的PIC16F877A上用软件设计一个20ms的软件延时子程序。另外,还要求用MPLAB的软件模拟器及其附带的软件工具窗口stopwatch观测延时程序执行的时间。实验内容:硬件电路设计:本实验中用的是软件延时,利用循环来实现延时功能。电路就用了单片机的原本电路。没有用到其他的功能模块,单片机与ICD3相连接。软件设计思路:单片机软件延时的前提和基础是每条指令的执行时间是固定的,且大部分指令的执行时间是相同的。这要求对每条指令所花费的指令周期(Tcy)做到心中有数。指令集中5条无条件跳转

2、指令GOTO,CALL.RETURN,RETLW和RETFIE,由于它们必然引起程序跳转,造成流水线中断,因此肯定将占用2个指令周期。而其他4条有可能引起程序跳转的条件跳转指令DECFSZ,INCFSZ,BTFSC和,BTFSS的执行时间,需要占用2个指令周期,当条件为假不发生跳转时,仅占用1个指令周期。其余所有指令都只用1个指令周期。每个指令周期Tcy的时间(shjin)长度,计算方法:如果采用4MHz的外部晶体(fosc=4 MHz),则PIC中档单片机的指令周期Tcy为1us,这是一个整数。而采用其他频率的外部晶体时,指令周期时间将反比于外部晶体频率。至于软件延时的结构和实现方法,其实可

3、以采用任何指令和结构,因为(yn wi)只是通过执行指令耗费时间。但通常情况下有两个选择延时程序结构的原则:执行指令周期数计算(j sun)方便。如果含有太多复杂的条件跳转循环等结构势必会造成指令周期的计算困难,甚至可能造成执行所造成的软件延时时间不等。不能占用太多的程序空间。试想用20000个NOP指令来实现20ms的延时,显然是可以的,但是这样做浪费了整整一个页的程序存储器,得不偿失,而通过适当的循环结构,重复执行某些相同的程序是比较合理的方法。因此,软件延时程序一般采用下列方法:如果延时时间短(微妙级别),可以连续插入几条NOP指令;如果延时时间长(几个毫秒级别),则可以使用双嵌套循环的

4、方法来实现。实验的流程图:实验(shyn)的源程序:#INCLUDE “P16F877A.INC”ORG 0000HNOPBSF STATUS,5CLRF TRISDBCF STATUS,5CLRF PORTDLOOP BCF PORTD,0 CALL DELAY BSF PORTD,0 CALL DELAY GOTO LOOPDELAY MOVLW D131 MOVWF iLOOP1 MOVLW D50 MOVWF jLOOP2 DECFSZ j,f GOTO LOOP2 DECFSZ i,f GOTO LOOP1 RETURN END执行上述(shngsh)延时子程序所需要的指令周期个数等

5、于(1+1)+(1+1)+(1+2)(j-1)+2+(1+2)(i-1)+2+2。当i等于131,j等于50是指令周期(zhuq)数约为20000个。在4HMz外部晶振条件下,这个(zh ge)延时程序将花费大约20ms。程序说明如下:上述等式中,第一个括号中的“1+1”对应两条向i中放入初值131的两条搬运指令。中括号中的“1+1”对应两条向j中放初值50的两条搬运指令。中括号中的第一个“1+2”对应DECFSZ和GOTO指令,当j没有被减到0时,这两条指令将被连续循环(j-1)次,因此每次将花费(1+2)(j-1)个指令周期。当j被减到0时,单片机将跳过6行的GOTO指令,这时DECFSZ

6、将花费2个指令周期的时间,也就是接在(1+2)(j-1)之后加上的那个“2”。上式中括号里最后的那个“1+2”对应接下来的DECFSZ和GOTO指令,和上面的一对DECFSZ和GOTO指令一样,在i被减到0之前,这两条指令将被连续循环(i-1)次。当在i被减到0时,单片机将跳过第8行的GOTO指令(zhlng),也就是式中的倒数第二个”2”。最后(zuhu)的“2”对应(duyng)RETURN指令。 在设计和编写延时子程序时,为了精确计算整个延时程序的延迟时间,常常需要逐条分析每一条指令被执行的所占用的指令周期数,这是一项既枯燥又费力的工作。可以利用MPLAB软件提供的stopwatch窗口

7、来直接得到延时程序运行的时钟周期数。这里的跑马表功能类似于田径场上赛跑计时用的跑表或者称为秒表,还有人叫它马表。打开跑表观察窗口的操作很简单,在MPLAB SIM软件模拟器模式下,选择Debugger 菜单中的stopwatch即可弹出观察窗。该窗口可以计算一段程序执行过程所需要的指令周期数和占用时间。在程序运行的过程中,软件模器会更新instruction Cycles 和Time域,包括时间单位。使用跑马表观察窗口的方法如下:单击Synch(同步),将Stopwatch的值与Total Simulated(模拟总数)的值同步。单击Zero(归零),可以随时将Instruction Cycl

8、es和Time的值设置为0.选择Clear Simulation Time On Reset(在复位时清零模拟时间),可以在程序复位时将Instruction Cycles(指令周期)和Time的值设置为0.其实(qsh)MPLAB可以通过Debugger菜单(ci dn)下Setting菜单项配置Processor Frequency值。单击Debugger下的Settings,在弹出的Simulator Settings对话框中的osc/trace(振荡器,跟踪)选项卡中设置(shzh)。实验步骤及结果:从开始菜单运行MPLAB,打开MPLAB后,在PROJECT菜单中选择project

9、wizard。单机弹出的工程向导窗口中的“下一步”按钮;在工程向导第一步的窗口中选择本工程要使用的单片机型号PIC16F877A;在工程向导第二部的窗口上部选择合适的编译工具包microchip MPASM toolsuite,窗口中部显示了这个编译工具包内的工具,单击任何一个工具就会在窗口的下部显示这个工具所在的路径,如果MPLAB安装在省缺路径则无需修改这些工具的路径;在工程向导第三部的窗口中给新创建工程命名并选择新创建的工程所在的路径;在工程向导第四部的窗口中,可以将能重复使用的程序文件拷贝到本工程中。完成以上四步吼就输入了创建新工程所需要的所有参数,工程向导将在最后的总结窗口中显示这些

10、参数,合适无误后单机“完成”即可完成新工程的创建工作。配置单片机的基本工作方式。单击MPLAB开发环境中单击configure菜单(ci dn)下的configuration bits,在弹出的配置位置窗口中首先去掉configuration bits set in code复选框前面的小勾。接着逐一设置窗口中提供的单片机配置(pizh)位:将振荡器类型设置为“TX”;“看门狗”应该关闭(gunb),将其设置为“OFF”;将上电复位定时器关闭;将电压检测电路关闭;低电压编程设置为“disabled”;将数据EEPROM读保护关闭;将用户程序Flash写保护设置为“write protectio

11、n off”;将代码保护关闭。完成以上设置后关闭配置位窗口。 使用软件模拟器测试代码。在MPLAB开发环境的Debugger菜单中选择MPLAB SIM,此时MPLAB环境的外观和菜单项都会发生变化。选择file菜单下的new命令新建一个汇编语言文件,输入按本实验要求所编写的代码,保存时注意选择文件的类型为汇编语言源文件。用右键单击MPLAB的工程管理窗口,从弹出的快捷菜单中选择 add file,将第四步编写好的汇编文件加入工程中。编译工程。在project菜单中选择 build all。如果有错误,则根据输出窗口的提示改正之,直到完全正确。运行程序。编译完成后,从如图所示的方针环境设置窗口

12、将processor frequency设置为4MHz。选择debugger菜单(ci dn)中的stopwatch,打开跑表观察窗,并将接着在源程序编辑窗口选中“call delay”语句,然后鼠标右击,在弹出的快捷(kui ji)菜单中选择run to cursor指令项,程序开始执行。这是跑表观察窗口中有了时间和指令周期显示,表示此前被执行过的指令所占用的时间和指令表周期数。这个显示值不是我们所关心的,单击“zero”按钮将其清零(qn ln),再单击debugger菜单中的step ove 指令想,“跑表”便开始累计记录延时子程序运行的时间和指令周期数,当程序停止运行时,跑表观察窗中s

13、topwatch所显示出的信息就是执行延时子程序所花费的时间和指令周期数。如果该时间值不符合设计者的要求,可以修改延时子程序中的内循环参数j和外循环参数i,然后重复步骤6和7,按照同样的方法运行程序,并观察延时子程序消耗的时间。反复这一过程,直到延迟时间满意为止。四、实验心得:(主要是实验中遇到的问题,以及解决方案!) 在进行编写源程序的时候出现了很多问题,虽然老师说这个实验是比较简单的实验,但在第一次运用所学的知识来进行简单的编写还是遇到了很多问题,在自己的感觉下写出来的程序有很多问题,怎么改都有错误,但在我们细心的一步一步的慢慢调试修改后终于编译成功了,我们在写源代码的时候犯了很基本的错误,在照着书打的时候打错了几个单词导致一直错误。还有就是编写的延时子程序应该要在END之前,我们写在了END之后,一直运行错误。在编译成功后,我们就迫不急待的连接上ICD3进行模拟,一直没有得到结果,感觉都有点失望的时候,积极的询问老师,老师的一句话点醒了我们,我们太急躁忘记修改配置,又认认真真的看了几遍书,照着书上的要求一步一步的进行设置,最终得到了正确的结果。也让我们知道了以后在做任何实验的时候一定要认真仔细,提前要先预习好,

温馨提示

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

评论

0/150

提交评论