赤火隐士 发表于 2019-8-15 14:10

大神帮小弟看下这个延时程序的时间计算哪里错了,谢谢

本帖最后由 赤火隐士 于 2019-8-16 12:26 编辑

延时程序如下:
DELAY_10MS:
    LDWI            80
    STR                TEMP1
    LDWI               16
    STR               TEMP2
DELAY_10MSLOOP3:
    CLRWDT
    DECRSZ                   TEMP2,F
    LJUMP                     DELAY_10MSLOOP3
    DECRSZ                   TEMP1,F
    LJUMP                      DELAY_10MSLOOP3
    RET
我的计算是:((1+1+2)*16+1+2)*80+4=5364
由于一个采用16M内部时钟,一个指令周期2个时钟周期,所以延时时间是5364*0.125=670us,实际是10mS。帮忙看下哪里计算错了,谢谢

ayb_ice 发表于 2019-8-15 15:04

代码有问题,TEMP2第一个循环为16,后面的循环不是16,需要修改
DELAY_10MS:
    LDWI            80
    STR               TEMP1
loop:
    LDWI            16
    STR               TEMP2
DELAY_10MSLOOP3:
    CLRWDT
    DECRSZ            TEMP2,F
    LJUMP             DELAY_10MSLOOP3
    DECRSZ            TEMP1,F
    LJUMP             loop
    RET
延时需要重新计算下,但误差不会太大

cabot168 发表于 2019-8-15 16:08

汇编看不懂,打个广告我司单片机https://xinning1350.b2b.hc360.com/

赤火隐士 发表于 2019-8-16 12:13

ayb_ice 发表于 2019-8-15 15:04
代码有问题,TEMP2第一个循环为16,后面的循环不是16,需要修改
DELAY_10MS:
    LDWI            80


谢谢回复,程序没问题哦,第二个循环是80(TEMP1)

赤火隐士 发表于 2019-8-16 12:16

实际测试出来也是10mS

gx_huang 发表于 2019-8-16 12:41

明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。

ayb_ice 发表于 2019-8-16 13:09

赤火隐士 发表于 2019-8-16 12:13
谢谢回复,程序没问题哦,第二个循环是80(TEMP1)

仔细看看吧,

赤火隐士 发表于 2019-8-16 13:10

本帖最后由 赤火隐士 于 2019-8-16 13:13 编辑

ayb_ice 发表于 2019-8-15 15:04
代码有问题,TEMP2第一个循环为16,后面的循环不是16,需要修改
DELAY_10MS:
    LDWI            80

对对,谢谢大神,晕了,谢谢((1+1+2)*16+(4*256+3)*79+4=81201,这样计算对吗

赤火隐士 发表于 2019-8-16 13:12

gx_huang 发表于 2019-8-16 12:41
明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。

谢谢大神,这么简单的问题都没有看出来{:shy:}

ayb_ice 发表于 2019-8-16 13:40

赤火隐士 发表于 2019-8-16 13:10
对对,谢谢大神,晕了,谢谢((1+1+2)*16+(4*256+3)*79+4=81201,这样计算对吗 ...

{:victory:}

固定的延时程序用软件仿真可以很好解决,看执行了多少周期就可以了,根据结果调整参数,搞几次就可以了

赤火隐士 发表于 2019-8-16 14:00

ayb_ice 发表于 2019-8-16 13:40
固定的延时程序用软件仿真可以很好解决,看执行了多少周期就可以了,根据结果调整参数,搞 ...

好的,谢谢大神

西陆 发表于 2020-3-26 11:37

赤火隐士 发表于 2019-8-16 13:10
对对,谢谢大神,晕了,谢谢((1+1+2)*16+(4*256+3)*79+4=81201,这样计算对吗 ...

咋算的啊,没想明白。为啥*256?

西陆 发表于 2020-3-26 11:38

gx_huang 发表于 2019-8-16 12:41
明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。

求告知,这个为啥是循环256次
页: [1]
查看完整版本: 大神帮小弟看下这个延时程序的时间计算哪里错了,谢谢