下载此文档

弱智PIC教程13-延时子程序.doc


文档分类:通信/电子 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
弱智的PIC教程13-延时子程序弱智的PIC教程之13延时子程序?【弱智的PIC教程之13】第4行:跳转到LOOP延时子程序?两层嵌套【问题】我们需要一个延时1s的子程序,但上一讲编辑的延时子程序只延时了770us。【寄存器递增/递减与溢出】,以十进制为例为了达到增加延时长度的目的,我们使用两层DECFSZ来延时。看源程序一个3位数:999,加1后等于:1000,产生了进位,变成4位数。如果存放它的寄存器只允许存放3位,而且是低3位,那么这个寄存器的值是多少,当然是“1000”的低3位,是:“000”。这就是溢出。同样,一个数是“000”,用它减去1,是多少,首先它得向高位借位(产生一个借位,这里我们不管高位是否存在),减去1后,低3位就变成了“999”,我们说这步操作发生溢出,产生一个借位。,以二进制为例有一个寄存器Tmp0=B’11111111’,加1后,产生进位,寄存器溢出。结果是:Tmp0=B’00000000’同样,当Tmp0=B’00000000’,减“1”后,产生借位,寄存器溢出。【分析】结果是:Tmp0=B’11111111’在刚开始,程序定义了两个寄存器Tmp0和Tmp1将上的数用十进制写,就是我们看第7、8、行,似曾相似,计算运行完需要多少指令周期:Tmp0=D’255’;?Tmp0+1?Tmp0=D’0’第7行,1条(无跳转时1条指令周期;有跳转时需要2条指令周期)Tmp0=D’0’;?Tmp0-1?Tmp0=D’255’第8行,GOTO,需要两条指令周期,两行共运行256次(注意不是255次,0-1=255;255=1=254…;1-1=0,共256次)。用十六进制写呢,则第7、8行运行完一轮需要的时间是:256*(1+3)=768指令周期。Tmp0=0XFF;?Tmp0+1?Tmp0=0X00但最后一次当Tmp1=0时,DECFSZ跳转到第9行,需要2条指令(原来1条,比原Tmp0=0X00;?Tmp0-1?Tmp0=D0XFF来多1条指令周期),而第8行跳过不需运行,节省2条,故总共比上面计算的少1条指令,即767指令周期。分析下面几行代码:见下图:第2行:赋值,Tmp0=0第3行:Tmp0-1?Tmp0=D’255’,结果不为0,不跳转,顺序运行第4行编者:重机枪手~Email:~QQ:798183213弱智的老师写给聪明的学生弱智的PIC教程之13延时子程序?第5行:占用1条指令周期第11行:占用2条指令周期调用子程序时的CALL指令:占用2条指令周期总延时:=197375+1+2+2=197380指令周期;总延时:=197308*1us=?【作业1】参照上面的范例,,验证延时周期是否与分析的相吻合。【作业2】分析下面的延时子程序,在MPLABIDE中验证。内层分析完成,接着分析外层。我们重新画一个图,将第7、8行替代下来,如下:提示,循环中用了一条NOP指令,【作业3】分析下面的延时子程序,在MPLABIDE中验证。第6行:占用1指令周期时间第7、8行:占用512指令周期第9行:不跳转时占用1条指令周期第10行:跳转时占用2条指令周期最后,同样需要减去1,前面分析过。因为最后一次循环会少用1条指令周期。蓝色框中运行的时间是:256*(1+767

弱智PIC教程13-延时子程序 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人czhenrgjiangh
  • 文件大小160 KB
  • 时间2020-08-03
最近更新