
需要延时的时候,在程序中带参数调用DelayMs,参数传递给DelayMs的形式参数“unsigned char t”,t就有了数值。
“while(t--);”执行t个循环后退出,t个循环用了若干时间。
连续执行两条“DelayUs2x(245);”,原理同第1,2步,也用了若干时间。
以上执行用的时间就是你延时的时间。
问题点:程序有失误,DelayMs里的while(t--)后边不能有分号,这样t个循环才能作用到下边的两条“DelayUs2x(245);”
如要算的话:
比如51,mdelay函数想延时1ms,而执行for(i=0;i<124;i++),假设4个机器周期,每个机器周期时长为[12(1/晶振频率)秒],若晶振为6MHz时,每个机器周期为2us,这样12442是992us,加上for(;Delay>0;Delay--)需要的8us,正好延时1ms计算延时时间应注意以下几点:1、晶振跑多少的,象这里的6M的话,那么它执行的机器周期就是2us,2、看指令执行要多少个机器周期,向DJNZ、RET都要两个机器周期,3、那么,这里总共时间是26(1A)255(0FF)255(0FF)2(机器周期)2us(1个机器周期的时间)=6762600us 若要精确计算的话要加上上面赋值的时间和子程序返回的时间。不过一般只要计算到上面就行了,因为赋值和返回指令的时间很短(相对于整个延时程序来说)希望对你有所帮助
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)