下载此文档

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


文档分类:通信/电子 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
弱智的PIC教程12-延时子程序弱智的PIC教程之12延时子程序【弱智的PIC教程之12】子程序。后面详细讲述。?返回指令。延时子程序问:子程序运行完后,如何返回调用的地方,继续向下运行,【问题引入】答:在程序的末尾,加上一条返回指令:RETURN(RETIEW)上一讲中,我们就提出过这个问题,就是两个LED亮/灭之间需要增加一个延时。我讲【注】RETURN、RETIEW都是返回指令,本讲使用RETURN,至于与RETIEW有何不同,了一个“用笤帚蘸墨写‘万’”字的故事。问题没有得到解决,这一讲我们来解决它。我们后续的课程会讲到。【子程序】子程序也是一段代码,要说好,下面来写延时子程序,这里需要使用一条新的指令:DECFSZ,先介绍。有什么不同,那就这段代码会重【DECFSZ】指令复利用。官方对这条指令的解释是:递减跳转指令,F寄存器内容减1,结果存入F(d=1)或W(d=0),也就是说,我们将“重复利如果结果为0则跳过下一条指令,否则顺序执行。用的代码段”分离出来,做成一个子程序。我们还用前面的LED例子来看看子程序如何应用。在前面的LED例子中,我们需要将每个LDE依次点亮间隔,进行一个延时。我们将程序思路调整如右图:红色字体部分是我们需要插入的一段延时,用子程序的方式。下面是一个实际的延时子程序:???箭头线是子程序运行是的线路。好,接下来我们逐步实现。?调用指令。问:用什么指令来实现右图中的第?步,答:用CALL指令。?子程序体编写。不同分析:首先命名地址为0X20的通用寄存器为Tmp0;接作赋值Tmp0=255。后面就是的子程序因功能不同,有不同的将Tmp0减去1,结果回存到Tmp0;再下来就是判断刚才的结果是否为0,如果结果等于0,代码体现。这次每位要编写延时程序跳一步,运行RETURN,返回调用;如果结果不为0,执行GOTOdelayLoop,继续将编者:重机枪手~Email:~QQ:798183213弱智的老师写给聪明的学生弱智的PIC教程之12延时子程序Tmp0减1,再做判断。一直到Tmp0的值为0才,程序才会运行到RETURN而结束调用。下面我们来计算,这个延时子程序,到底延时了多少时间。请跟随我一同计算。看下图,红色部分被重复执行了255次,即Tmp0从255?0,这部分有两条指令:?DECFSZTmp0,F;在结果不为0是,这条指令需要1个指令周期?GOTOdelayLoop;这条指令需要2个指令周期运行上面两条指令需要3个指令周期,但最后一次跳出少时不再执行第8行(,运行指令周期),红色框内延时=255次*3-1=,查看PROTEUS下部的时间:记录这个时间:,程序运行到第二个断点停止,同样记录PROTEUS下部的时间:上图中,第5、6行运行需要2条指令周期,最后一次允许DECFSZTmp,0由于产生跳转需要2个指令周期,最后的RETURN需要2条指令周期,则整个延时为:764+1+1+2+2=770指令周期我们用4MHz晶振,指令周期为1us,故延时为770*1us=770us本讲的完整程序在“”文件之“770us”页面。读者可将源代码两个时间相减得到延时子程序所用的时间:777-7=770us。拷贝到MPLABID

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

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人czhenrgjiangh
  • 文件大小217 KB
  • 时间2020-08-03