void delay(uint x)
{
uchar j;
uint i;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}
我用的是12M的晶振,给x的值是500,理论上应该是延时500毫秒,为什么我实际观察的时候延时的时间200毫秒都不到?晶振误差不会这么大吧!!
C语言这样写的延时函数我不大懂,帮我分析一下,谢谢。
就是循环做减法,让N自减1 ,然后,再自减1,直到为0,才跳出循环。实际是就拖延时间。这个在不同机器上的延时是不同的。在快的机器上延时短,慢的机器上延时长。要准确延时,还得调用实时时钟才行。
...的C语言延时函数是如何计算延时时间的?for循环中的四个nop是否可以...
一个nop为1个指令周期,通过nop指令可以产生一定的延迟,但是对于快速的CPU来说效果不明显,因此可以多写几个,便可以多延迟几个时钟(具体应该说是一个指令占用了3个时钟脉冲);所以,一个for循环会执行4*250个指令周期,那么总共延时4*250*ms个指令周期~~...
帮忙啊 C语言的延时函数 不懂能讲解下么
首先delay函数用for循环控制空操作:for(j=0;j<255;j==);再加上外层循环for(k=0;k<=1;k++)来实现延时。其中void delay(unsignde shar i) i 为形参。而在主函数delay(10) 10为实参,遵循值的单向传递性。在调用delay函数时,i为10.。但是你这个延时函数写的有问题,应该做下修改: void ...
C语言for循环嵌套延时问题
这说明是你的延时时间不足,造成的错误。这个延时函数是个指令延时,指令多了,延时时间就长。for(x=0;x<120;x++) 这个循环里,每一次循环,都会有一个 加一 和 判断跳转指令。X为char 时是单字节,这些指令都是一条指令,当改为 int时 x就成了双字节了,这些操作就需要多几条指令来完成。...
单片机C语言中,怎么通过循环次数计算延迟函数的延迟时间?
首先你要知道一个指令周期是几秒 算法是1\/(晶振频率除以12)然后你要知道循环究竟执行了几个指令周期 你可以用keil里在线反汇编命令看看你的循环编译成机器语言后到底是几个指令周期 这样就知道了延迟时间 当然你取近似值也可以的 比如 for(i=0,i<255,i++){x=2} 这里x=2是一个指令周期 而...
c语言的延迟函数 编写
延迟函数里执行的都是空语句,也就是说循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而延迟.
用C语言编写1ms延迟子程序,不明白for (j=0;j<120;j++),求助大大们_百度...
void delay1ms(int x)\/\/延迟函数开始 { int i,j;for (i=0;i<x;i++) \/\/计数x次,延迟x 1ms for (j=0;j<120;j++); \/\/计数120次,延迟1ms } 这是一个for循环嵌套,每执行一次第一个for语句,那么第二个for语句要执行120次 for (j=0;j<120;j++); 就是没执行一次第一个...
关于C语言for循环延时函数
for循环实现C语言精确延时 (晶振12MHz,一个机器周期1us.)一. 500ms延时子程序 程序:void delay500ms(void){ unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);} 产生的汇编:C:0x0800 7F0F MOV R7,#0x0F C:0x0802 7ECA MOV ...
单片机c语言编程怎么去延时?
在单片机的C语言编程中,可以使用循环结构来实现延时操作。具体而言,可以使用一个for循环来实现一段时间的延时。以下是一个简单的延时函数的示例代码:void delay_ms(unsigned int ms){ unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<1000;j++);} 上述代码定义了一个名为delay_ms的函数,...
51单片机用c语言怎么写延时函数?
我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环 void delay(int i){ int x,y;for(x=i;x>0;x--){ for(y=120;y>0;y--)} } 参数 i 代表该函数延时多少ms ...