单片机延时程序.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一 单片机延时程序实验 实验目的与要求: 在使用4MH在外部晶体振荡器的PIC16F877A上用软件设计一个20ms的软件延时子程序。另外,还要求用MPLAB的软件模拟器及其附带的软件工具窗口stopwatch观测延时程序执行的时间。 实验内容: 硬件电路设计: 本实验中用的是软件延时,利用循环来实现延时功能。电路就用了单片机的原本电路。没有用到其他的功能模块,单片机与ICD3相连接。 软件设计思路: 单片机软件延时的前提和基础是每条指令的执行时间是固定的,且大部分指令的执行时间是相同的。这要求对每条指令所花费的指令周期(Tcy)做到心中有数。指令集中5条无条件跳转指令GOTO,CALL.RETURN,RETLW和RETFIE,由于它们必然引起程序跳转,造成流水线中断,因此肯定将占用2个指令周期。而其他4条有可能引起程序跳转的条件跳转指令DECFSZ,INCFSZ,BTFSC和,BTFSS的执行时间,需要占用2个指令周期,当条件为假不发生跳转时,仅占用1个指令周期。其余所有指令都只用1个指令周期。 每个指令周期Tcy的时间长度,计算方法:如果采用4MHz的外部晶体(fosc=4 MHz),则PIC中档单片机的指令周期Tcy为1us,这是一个整数。而采用其他频率的外部晶体时,指令周期时间将反比于外部晶体频率。 至于软件延时的结构和实现方法,其实可以采用任何指令和结构,因为只是通过执行指令耗费时间。但通常情况下有两个选择延时程序结构的原则: 执行指令周期数计算方便。如果含有太多复杂的条件跳转循环等结构势必会造成指令周期的计算困难,甚至可能造成执行所造成的软件延时时间不等。 不能占用太多的程序空间。试想用20000个NOP指令来实现20ms的延时,显然是可以的,但是这样做浪费了整整一个页的程序存储器,得不偿失,而通过适当的循环结构,重复执行某些相同的程序是比较合理的方法。 因此,软件延时程序一般采用下列方法:如果延时时间短(微妙级别),可以连续插入几条NOP指令;如果延时时间长(几个毫秒级别),则可以使用双嵌套循环的方法来实现。 实验的流程图: 实验的源程序: #INCLUDE “P16F877A.INC” ORG 0000H NOP BSF STATUS,5 CLRF TRISD BCF STATUS,5 CLRF PORTD LOOP BCF PORTD,0 CALL DELAY BSF PORTD,0 CALL DELAY GOTO LOOP DELAY MOVLW D’131’ MOVWF i LOOP1 MOVLW D’50’ MOVWF j LOOP2 DECFSZ j,f GOTO LOOP2 DECFSZ i,f GOTO LOOP1 RETURN END 执行上述延时子程序所需要的指令周期个数等于(1+1)+[(1+1)+(1+2)×(j-1)+2+(1+2)]×(i-1)+2+2。当i等于131,j等于50是指令周期数约为20000个。在4HMz外部晶振条件下,这个延时程序将花费大约20ms。 程序说明如下: 上述等式中,第一个括号中的“1+1”对应两条向i中放入初值131的两条搬运指令。 中括号中的“1+1”对应两条向j中放初值50的两条搬运指令。 中括号中的第一个“1+2”对应DECFSZ和GOTO指令,当j没有被减到0时,这两条指令将被连续循环(j-1))))”2”。 最后的“2”对应RETURN指令。 在设计和编写延时子程序时,为了精确计算整个延时程序的延迟时间,常常需要逐条分析每一条指令被执行的所占用的指令周期数,这是一项既枯燥又费力的工作。可以利用MPLAB软件提供的stopwatch窗口来直接得到延时程序运行的时钟周期数。 这里的跑马表功能类似于田径场上赛跑计时用的跑表或者称为秒表,还有人叫它马表。打开跑表观察窗口的操作很简单,在MPLAB SIM软件模拟器模式下,选择Debugger 菜单中的stopwatch即可弹出观察窗。该窗口可以计算一段程序执行过程所需要的指令周期数和占用时间。在程序运行的过程中,软件模器会更新instruction Cycles 和Time域,包括时间单位。

文档评论(0)

118118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档