c语言延时函数200us C语言延时函数代码

关于C语言for循环延时函数for循环实现C语言精确延时
(晶振12MHz,一个机器周期1us.)
一. 500ms延时子程序
程序:
void delay500ms(void){
unsigned char i,j,k;
for(i=15;i0;i--)
for(j=202;j0;j--)
【c语言延时函数200us C语言延时函数代码】for(k=81;k0;k--);
}
产生的汇编:
C:0x08007F0FMOVR7,#0x0F
C:0x08027ECAMOVR6,#0xCA
C:0x08047D51MOVR5,#0x51
C:0x0806DDFEDJNZR5,C:0806
C:0x0808DEFADJNZR6,C:0804
C:0x080ADFF6DJNZR7,C:0802
C:0x080C22RET
计算分析:
程序共有三层循环
一层循环n:R5*2 = 81*2 = 162usDJNZ2us
二层循环m:R6*(n 3) = 202*165 = 33330usDJNZ2usR5赋值 1us = 3us
三层循环: R7*(m 3) = 15*33333 = 499995usDJNZ2usR6赋值 1us = 3us
循环外:5us子程序调用 2us子程序返回 2usR7赋值 1us = 5us
延时总时间 = 三层循环循环外 = 499995 5 = 500000us =500ms
计算公式:延时时间=[(2*R5 3)*R6 3]*R7 5
二. 200ms延时子程序
程序:
void delay200ms(void){
unsigned char i,j,k;
for(i=5;i0;i--)
for(j=132;j0;j--)
for(k=150;k0;k--);
}
产生的汇编
C:0x08007F05MOVR7,#0x05
C:0x08027E84MOVR6,#0x84
C:0x08047D96MOVR5,#0x96
C:0x0806DDFEDJNZR5,C:0806
C:0x0808DEFADJNZR6,C:0804
C:0x080ADFF6DJNZR7,C:0802
C:0x080C22RET
三. 10ms延时子程序
程序:
void delay10ms(void){
unsigned char i,j,k;
for(i=5;i0;i--)
for(j=4;j0;j--)
for(k=248;k0;k--);
}
产生的汇编
C:0x08007F05MOVR7,#0x05
C:0x08027E04MOVR6,#0x04
C:0x08047DF8MOVR5,#0xF8
C:0x0806DDFEDJNZR5,C:0806
C:0x0808DEFADJNZR6,C:0804
C:0x080ADFF6DJNZR7,C:0802
C:0x080C22RET
四. 1s延时子程序
程序:
void delay1s(void){
unsigned char h,i,j,k;
for(h=5;h0;h--)
for(i=4;i0;i--)
for(j=116;j0;j--)
for(k=214;k0;k--);
}
产生的汇编
C:0x08007F05MOVR7,#0x05
C:0x08027E04MOVR6,#0x04
C:0x08047D74MOVR5,#0x74
C:0x08067CD6MOVR4,#0xD6
C:0x0808DCFEDJNZR4,C:0808
C:0x080ADDFADJNZR5,C:0806
C:0x080CDEF6DJNZR6,C:0804
C:0x080EDFF2DJNZR7,C:0802
C:0x081022RET
在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.
C语言延时函数C语言的延迟函数一般是利用无意义程序运行来控制时间从而达到延时的目的
举个例子:
for(i=0;ix;i)
for(j=0;j120;j);
这是延时x毫秒的for循环语句 。
值得注意的是记得最后的;一定得记得写 。
在C语言程序中,延时函数的时间是怎么算的?这个是和你机器的运算速度有关的
你要计算出这个函数用了多少时间就要用时间函数,我很久没用了 。
#include "stdlib.h"
void delay()
{
time_t start,end;
start=time(null);
unchar i;
while(z--)
{
for(i=0;i121;i);
}
end=time(null);
printf("%f",difftime(end,start));
}
//time_t是在头文件中定义的,可能是个结构体类型里面的成员定义了一些时间的单位,如年、月、日 。在这里调用这个结构体定义2个变量;
//start=time(null);
将其中一个变量赋值 。它的值等于当前的系统时间
//end=time(null);
在程序结束的时候再给另一个变量赋值,值等于当前的系统时间 。
//difftime(end,start)
函数difftime();是double类型 , 用来计算运行的时间,用第一个参数的时间减去第二个参数的时间,得到的值就是运行用了多少时间 。单位为秒
C语言 delay延时函数 的问题?for(y=200;y0;y--)
{
}这个循环的值是固定的,12M晶振 单片机一般指令周期1us,这个循环约200us
外层的t就是相当于延迟t个200us,需要多少时间的延迟自己算,t的值是调用函数给的参数 , 值不固定
上面的计算不十分精确,没有考虑栈操作和跳转指令需要的时间 。
关于c语言延时函数200us和C语言延时函数代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读