中易网

单片机:uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--) 中的xms初值怎么知道,在循环时xms怎么变化?

答案:2  悬赏:10  
解决时间 2021-04-27 19:06
  • 提问者网友:久伴不朽
  • 2021-04-27 11:15
单片机:uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--) 中的xms初值怎么知道,在循环时xms怎么变化?
最佳答案
  • 二级知识专家网友:最后战士
  • 2021-04-27 12:39
xms就是形参,形式参数,你的完整子函数应该是这样的:
void(unsigned int xms){
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

xms的确定是根据你的单片机时间周期和你想延时多长时间来确定的,51单片机1个机器周期等于12个时钟周期,比如你的晶振是12M,那么1us=12*1/12,里面循环次数110*xms,就这么算的
全部回答
  • 1楼网友:而你却相形见绌
  • 2021-04-27 13:07
这是一个for的嵌套语句,你注意到没有,因为两个语句之间没有分号,所以编译器默认第二个for语句是第一个for语句的内部语句,怎么理解呢?就是说你第一个for中的 i 减1一次,那第二个for中的语句将会执行110次,那么这个110从哪里来呢?其实是根据你所用单片机的晶振频率来计算的,在这个程序当中,单片机的晶振频率应该是11.0592兆hz,所以第二个for语句执行110次的时间大概就是1ms,(这里涉及到晶振频率和机器周期之间的那几个公式你自己翻翻课本看)乘上第一个for中的 i 的初值就得到你要延时的时间了,如果你要延时1秒,那么你就重新定义 i 的数据类型为unsigned int i,然后j的数据类型不变,给 i 赋值1000即可。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息