您的位置:首页单片机义隆单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

EM78系列单片机--延迟子程序的编写

[日期:2008-07-01 ] [来源:东哥单片机学习网 www.picavr.com 整理 作者:佚名] [字体: (投递新闻)
在許多程序设计的場合,我們時常会利用到时间延迟子程序,接下来就介紹一个可以控制延迟时间的延迟子程序。
开下面是利用发工具E8-ICE来演示的一个精确的控制延迟时间的程序,选择使用石英振荡器,可以精确的算准延迟时间,时间可以到nanosecond(十亿分之一秒),很神奇。
 
LP_CNT0 == 0X20     ;定义。
LP_CNT1 == 0X21
MOV A, @2           ;A = 2。
MOV LP_CNT0, A      ;设定延迟寄存器0(LP_CNT0)=2
CALL        P0_DLY      ;呼叫时间延迟子程序。
P0_DLY:
NOP                 ;调节延迟时间。
MOV A, @200         ;设定 A = 200。
MOV LP_CNT1, A      ;设定寄存器LP_CNT1 = 200。
P0_LP:
NOP                 ;调节延迟时间。
NOP                 ;调节延迟时间。
NOP                 ;调节延迟时间。
DJZ LP_CNT1         ;递減LP_CNT1,为0就跳过下一行
JMP P0_LP           ;循环。
DJZ LP_CNT0         ;递減LP_CNT0,为0就跳过下一行
JMP P0_DLY          ;循环。
RET                 ;返回主程序。
 
 
假设用户所使用的开发工具是E8-ICE,而且所采用的振荡器为石英振荡(4M Hz),並选择指令执行周期为1 Cycle, 2 Clock。这時每执行一个指令的时间为0.5 uS.
用户可以看出在程序中用了两个寄存器来计数(LP_CNT0、LPCNT1),另外也使用了两个循环(P0_DLY、P0_LP),其中在P0_LP中有5个指令,所以在P0_LP这个循环中,执行了有1000个指令。
 
5X 200= 1000                 P0_LP循环总共执行指令数目。
5  +  1000 = 1005               P0_DLY循环总共执行指令数目。
1005 X 2 = 2010
2010 + 1 + 1 = 2012   延迟程序总共执行指令数目
 
在整个P0_DLY循环中就有2012个指令,每个指令的执行时间为0.5 us。
2012 (instructions) x 0.5 (us/instruction) = 1.006 ms
所以用户可以精确的计算出延迟的时间,用户可以在LP_CNT0设定不同的值,如此可以有各种不同的延迟时间。
l         例:设计一个延迟时间为2ms的程序。
 
只要在上述程序中在呼叫P0_DEL延迟子程序之前,將LP_CNT0设成4就可以了。
MOV  A, @4
MOV  LP_CNT0, A
CALL P0_DLY
其余不变。
1005 X 4 = 4020。
4020 + 1 + 1 = 4022。
4022 (instructions) X 0.5 (us)  = 2.011 ms
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
站长推荐