大神帮小弟看下这个延时程序的时间计算哪里错了,谢谢
本帖最后由 赤火隐士 于 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。帮忙看下哪里计算错了,谢谢 代码有问题,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
延时需要重新计算下,但误差不会太大 汇编看不懂,打个广告我司单片机https://xinning1350.b2b.hc360.com/ ayb_ice 发表于 2019-8-15 15:04
代码有问题,TEMP2第一个循环为16,后面的循环不是16,需要修改
DELAY_10MS:
LDWI 80
谢谢回复,程序没问题哦,第二个循环是80(TEMP1) 实际测试出来也是10mS 明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。
赤火隐士 发表于 2019-8-16 12:13
谢谢回复,程序没问题哦,第二个循环是80(TEMP1)
仔细看看吧, 本帖最后由 赤火隐士 于 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,这样计算对吗 gx_huang 发表于 2019-8-16 12:41
明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。
谢谢大神,这么简单的问题都没有看出来{:shy:} 赤火隐士 发表于 2019-8-16 13:10
对对,谢谢大神,晕了,谢谢((1+1+2)*16+(4*256+3)*79+4=81201,这样计算对吗 ...
{:victory:}
固定的延时程序用软件仿真可以很好解决,看执行了多少周期就可以了,根据结果调整参数,搞几次就可以了 ayb_ice 发表于 2019-8-16 13:40
固定的延时程序用软件仿真可以很好解决,看执行了多少周期就可以了,根据结果调整参数,搞 ...
好的,谢谢大神 赤火隐士 发表于 2019-8-16 13:10
对对,谢谢大神,晕了,谢谢((1+1+2)*16+(4*256+3)*79+4=81201,这样计算对吗 ...
咋算的啊,没想明白。为啥*256? gx_huang 发表于 2019-8-16 12:41
明显的程序错误,第二次延时,TEMP2要循环256次了,这么简单的错误。
求告知,这个为啥是循环256次
页:
[1]