打印

这样计算使用 for 循环产生预设延时是不是已经很准确了。

[复制链接]
1862|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
-兔子-|  楼主 | 2010-6-14 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
简单延时程序,通过计算反汇编后得出延时时间:

/************************************************************************************************************
程序循环延时指令(0-65535)
void delay_NOP( uint n )
代入变量:
   n  循环次数(0-65535)
注:
【1】对W77E58系列, 当晶振频率=33.1776MHz, 选择4时钟周期模式时:
时钟周期 = 1/(33.1772*10^6) = 0.000,000,030,141(S) = 30ns
机器周期 = 4*30 = 120ns.

本程序汇编码:
; FUNCTION _delay_NOP (BEGIN)
                                 
;---- Variable 'n' assigned to Register 'R6/R7' ----
                                          
0000 E4                   CLR      A
0001 F500        R      MOV     i,A
0003 F500        R      MOV     i+01H,A
0005       ---- ?C0053:                         机器周期(时间ns)
0005 D3     |            SETB     C                  1      120      
0006 E500  |     R     MOV      A,i+01H         2      240      
0008 9F      |            SUBB    A,R7              1      120      
0009 E500  |     R     MOV      A,i                 2      240        
000B 9E     |            SUBB    A,R6               1      120      
000C 500E  |            JNC      ?C0056           3     360      
                  |
000E C294  |           CLR      CPU_SCS          2      240            
0010 D294  |           SETB    CPU_SCS          2      240      
                  |                                    
0012 0500  |     R     INC      i+01H               2      240      
0014 E500  |     R     MOV     A,i+01H            2      240      
0016 70ED  |           JNZ      ?C0053             3      360      
0018 0500  |     R     INC      i                       2      240                 
001A          |    ?C0837:           
001A 80E9  ----------  SJMP    ?C0053           3      360                       
                                          
001C               ?C0056:
001C 22                RET                                 2      240                     
; FUNCTION _delay_NOP (END)

结果:
单循环(n = 1 )时,执行时间约为:3000ns = 3us。
n = 333时 延时时间约为1ms.
n = 3333时 延时时间约为10ms.
n = 33333时 延时时约为0.1S.  
*************************************************************************************************************/
void delay_NOP( uint n )
{
uint data  i;
   for ( i=0; i<=n; i++ )
   {
     CPU_SCS = 0; CPU_SCS = 1;  // 访问看门狗
    }
}

相关帖子

沙发
ayb_ice| | 2010-6-14 10:46 | 只看该作者
固定延时可以很准
参数延时不会太准

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:good good study, day day up!

15

主题

316

帖子

2

粉丝