请教关于单片机C语言中用while延时的问题我的单片机晶振频率是12M先创造延时子程序如下void delay(unsigned long time) //参数 time 大小{ while(time--);} 当我delay(x);的时候,x和实际的秒数存在着什么样

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 16:54:44

请教关于单片机C语言中用while延时的问题我的单片机晶振频率是12M先创造延时子程序如下void delay(unsigned long time) //参数 time 大小{ while(time--);} 当我delay(x);的时候,x和实际的秒数存在着什么样
请教关于单片机C语言中用while延时的问题
我的单片机晶振频率是12M
先创造延时子程序如下
void delay(unsigned long time) //参数 time 大小
{
while(time--);
}
当我
delay(x);
的时候,x和实际的秒数存在着什么样的关系?
比如,我
delay(500000);
会延时多长时间呢

请教关于单片机C语言中用while延时的问题我的单片机晶振频率是12M先创造延时子程序如下void delay(unsigned long time) //参数 time 大小{ while(time--);} 当我delay(x);的时候,x和实际的秒数存在着什么样
晶振频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;
若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;
但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个时间;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不过可以从 软件中 单步调试 中 得到.