请教关于单片机C语言中用while延时的问题

我的单片机晶振频率是12M先创造延时子程序如下voiddelay(unsignedlongtime)//参数time大小{while(time--);}当我delay(x... 我的单片机晶振频率是12M

先创造延时子程序如下
void delay(unsigned long time) //参数 time 大小
{
while(time--);
}

当我
delay(x);
的时候,x和实际的秒数存在着什么样的关系?
比如,我
delay(500000);
会延时多长时间呢
展开
 我来答
烟火夜空
2012-02-24 · TA获得超过6623个赞
知道大有可为答主
回答量:1678
采纳率:93%
帮助的人:562万
展开全部
晶振频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;
若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;
但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个时间;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不过可以从 软件中 单步调试 中 得到。
百度网友2da9d3b
2012-02-24 · 超过23用户采纳过TA的回答
知道答主
回答量:67
采纳率:0%
帮助的人:64.8万
展开全部
首先延时函数一般采用for循环嵌套实现,而它们的转化关系。你必须51指令中的时钟周期、状态周期、机器周期概念。C中的循环减其实就是汇编中的DJNZ指令,你先了解此指令在51中的执行周期。在进行换算即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
racwin0
2012-02-24 · TA获得超过449个赞
知道答主
回答量:87
采纳率:0%
帮助的人:44.1万
展开全部
延时一次为一次机器周期,但是如果要准确的话,建议用keil去debug,将你需要的周期设定,1ms,1us等,以后只需要调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式