单片机C语言中的执行for语句需要几个机械周期?

如下一个延时程序:void delay (unsigned char i){ for ( ;i>0;i--;);}当i=100时,调用delay ()一共需要多少个机械周期?我最近在编写ds18b20的程序,用汇编程序可以,但换成C语言就不行,我想应该是时序的问题.想得到一个可以准确并容易看出延时时间的延时函数.

确切的本人目前也不知道,现分析如下,不知道有没有道理:1、for ( ;i>0;i--;)中执行的主要有三部分,i>0,i++以及一条空指令。2、执行一次for循环的时间为三条指令所消耗的总时间;3、在i=100的情况下,delay执行的指令数目约为300条。 另外能不能做一个测试,在执行delay之间,读取系统时间,执行delay后读取时间,两个时间差,以及i,就可以判断延时大小与i的关系。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-10
用keil的Debug单步执行,设定好晶振频率后,可以准确算出延时长度。本回答被网友采纳
第2个回答  推荐于2016-04-09

    这和编译器有关(如优化级别),还和CPU有关(如流水线不一样)。不同的情况应该分开讨论,不能一概而论。

    当在IAR中进行调试时,可以通过查看寄存器窗口来确定执行代码所消耗的机器周期。单击View-Resister可以打开寄存器窗口,选择CPU Resisters查看CYCLECOUT的值即可以知道程序执行所用的机器周期,通过它可以方便地知道执行代码的时间。

第3个回答  2013-08-14
用 Medwin 和 keil 编程软件都可以单步测出执行总时间!

C语言的for循环中执行一次需多少机器周期?
另一个判断语句(I <1) 4个机械循环,结束。

单片机中机器周期是?
大体来说,一条for循环大概8个机器周期,125*8*1us*12个时钟周期,等于(125*8)个机器周期(12MHZ)

单片机中 while 和for 个占用几个机器周期
结论:当执行N次循环,for 比 while 循环多N+1个CPU时间。

51单片机C语言for循环延时程序时间计算
不可能的,是不是你的编译有错的啊 我改的晶振12M,在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,不可能出现100ms那么大的差距,是你的软件的原因。不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序...

请教关于单片机C语言中用while延时的问题
晶振频率Fosc=12MHz,则机械周期 T=12\/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;但是,编译软件 要把 函数调用、for 语句转换成 机器指令,这是需要一定周期的,周期长短 视不同的编译软件...

单片机c语言程序中 一个语句占用多少机器周期?
要先转成汇编语言,之后才能讨论时钟周期的说法。那个声明,要看在什么地方,是全局声明,还是局部声明,是不一样的。如果是局部变量赋值语句,1个时钟周期就够了(偶数地址的,如果是奇数地址好像是3个的)。整数加减法占3个时钟周期,乘法有120多个时钟周期,除法一般是160多个时钟周期。(我说的不一定...

一个51单片机软件延时问题
程序延时本来就是一个大概的数。这个也不是很准的。中间的for循环120次大约是962周期,加上每次循环前后的“准备工作”,再加上函数调用\/返回的时间,接近1Ms.实没为993个周期。如果把for循环次数改为121,则参数1的延时为1001个机器周期。

这个单片机c编程有问题吗(流水灯)
假设 LZ 晶振是 12MHz的,那么机械周期(T)就为1us;由于不同编译器对 for 循环的汇编转换不尽相同,导致执行周期也不同,那么我们设想其中的一种,先进行一个初始化赋值,耗时 2T;再进行 n次判断(DJNZ),耗时2nT;n 次自增或自减,耗时nT;综上,一个 for 循环的执行周期为 3nT+2T=3n...

51系列单片机for语句怎么算机器周期的啊?
首先选择build taget,然后单击start\/stop debug session按钮进入程序调试窗口,最后打开Disassembly window,找出与这部分循环结构相对应的汇编代码,具体如下: 可以看出,0x0003~0x0012一共10条语句,分析语句可以发现核心循环只有0x0005~0x0012共8条语句,执行取反一次也就是8~10微秒!

在C\/C++中,一般for循环中执行一次需要多少时间?
你需要了解很多方面的只是,首先,你得知道目标平台处理器的确切主频,即多少MHZ。还要了解编译器会将这些代码编译成多少条机器指令,并了解这些机器指令的执行周期。例如

相似回答