算时间问题

zhpuffin   2007-4-17 12:50 楼主
一个延时函数:
void delay_8us(unsigned int us)
{
while(--us);  

}
生成汇编
C:0x0023    7FF4     MOV      R7,#0xF4
C:0x0025    7E01     MOV      R6,#0x01
C:0x0027    12003F   LCALL    delay_8us(C:003F)
C:0x003F    EF       MOV      A,R7
C:0x0040    1F       DEC      R7
C:0x0041    7001     JNZ      C:0044
C:0x0043    1E       DEC      R6
C:0x0044    14       DEC      A
C:0x0045    4E       ORL      A,R6
C:0x0046    70F7     JNZ      delay_8us(C:003F)

我算的是 9us*R6*R7+R6+6us     但如果我要延时1ms 我该怎么赋值给us啊

回复评论 (3)

不用算    用大概就可以了  开始 赋值us=500      算出时间/500  大概就是us=1时的延时时间! 可以吧

对于汇编计算周期我还很不会

C:0x003D    DFFE     DJNZ     R7,delay_8us(C:003D)     
如果R7=100      那么延时周期是不是 2*R7us即是200us 啊(12MHZ晶振)
点赞  2007-4-17 13:19
应该没贴全反汇编,再找找...
点赞  2007-4-17 13:20
找到一个小工具 它的延时算法是这样的
WAIT:    MOV     BYT_DLY,#X
        LCALL   DELAY1
        ...

DELAY1:  DJNZ    BYT_DLY,DELAY1
         RET

T=[2X + 4] * (12 / Fosc)

那么我这个"
C:0x003D    DFFE     DJNZ     R7,delay_8us(C:003D)     
如果R7=100      那么延时周期是不是 2*R7us即是200us 啊(12MHZ晶振)
"就对了  解决了
点赞  2007-4-17 15:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复