void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } 晶体振动器是12M的,和t是什么关系呐
4个回答
展开全部
追问
那这个 12M 和 t 的上限120有什么关系么 ???
追答
这个120应该改成12000,他是由12M晶振推算出来的,如果你理解12M晶振什么意思就会明白为什么t的上限为12000(上限为12000并不能得到准确的延时效果,需要你实际的调试程序改变上限)
来自:求助得到的回答
展开全部
for(i=0;i<120;i++);需要循环执行120次才结束本次循环,每次循环需要执行“MOV传送指令(1-2个机器周期)”、“比较判断CJNE(2个机器周期)”、“JNC判零转移(2机器周期)”、等大约8-9个机器周期。执行for循环一次大约需要1000个机器周期,以晶振位12M的单片机系统(一个机器周期消耗时间大约是1us),执行120次需要1MS的时间。 总的来说相当于标一个1MS的刻度吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
t越大,延时就越长,但它们之间的关系比较难以用数学形式表达,除非你把程序转为汇编,计算程序每个循环用到的周期数,然后再跟时钟周期相乘,太麻烦。对这个函数,通常我们使用一个IO口来测试这个延时是否准确,不准确就调整t的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
120是对的,这是很多参考书上的延时函数,12M晶振的话,反汇编后计算出延时时间为 x×1ms
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询