在单片机的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的函数,该函数的参数为一个无符号整数ms,表示需要延时的时间(单位为毫秒)。在函数内部,使用了两个嵌套的for循环来实现延时 *** 作。外层循环控制需要延时的毫秒数,内层循环则执行1000次,以模拟一个较为精确的延时。在实际使用时,可以根据需要调整内层循环的执行次数,以达到较为精确的延时效果。
需要注意的是,延时函数的实现可能会受到单片机的工作频率、编译器优化等因素的影响,因此在实际使用时,需要进行一定的测试和调整,以确保延时效果符合要求。
delay(1000)是调用函数, for(i = 0; i < 600; i++)是一条C语言语句。为了编写方便和代码容易理解,通常把for语句放到delay里面。例如:delay的函数如下:
delay(int n)
{
int i;
for (i = 0; i < n; i++);
}
那么delay(600)的效果就和你的for(i = 0; i < 600; i++)的效果差不多。
不可能的,是不是你的编译有错的啊
我改的晶振12M,在KEIL 40 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,
不可能出现100ms那么大的差距,是你的软件的原因。
不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序是正确的
/-----------------------------------------------
注:1硬件应使用12MHz晶振;
2程序使用定时器0,溢出周期50ms,计90次溢出为
4分半,其它以此类推,15分到时IC4脚(P13)输
出低电平,然后关闭定时器,停止计数。
-------------------------------------------------/
#include<reg52h>
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
unsigned char Count=0;
unsigned char Half_Min=0;
void main()
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
ET0=1;
EA=1;
TR0=1;
while(1);
}
void timer_0() interrupt 1
{
TH0=0x3C;
TL0=0xB0;
Count++;
if(Count>10) //大于10则为500ms
{Half_Min++;
Count=0;
switch(Half_Min)
{
case 9:P10=0;break; //4分半
case 10:P11=0;break; //5分
case 20:P12=0;break; //10分
case 30:P13=0;TR0=0;break; //15分
default:break;
}
}
}
/ 刚写好的,绝非复制,有问题加QQ447212829 /
你调用此程序的时候会给他传递X的值,就是while(x--)里面的X,当while检测到x--不等于0的时候,就执行for(j=0;j<125;j++);也就是在for(j=0;j<125;j++);这执行125次判断不做别的,就是耗时间而已,当执行完for(j=0;j<125;j++);以后又回到while(x--)上检测,当while检测到x--不等于0的时候,又一次执行,知道检测到x--等于0。函数就返回到你调用他的地方。
第一个for完成对delay_time参数的控制,即共循环多少次内部循环
第二个for(内部循环),完成对j从0到199的控制,共循环200次。
翻译成汇编就是:
(R0为传递参数)
DELAY:
MOV R1,#200
DJNZ R1,$
DJNZ R0,DELAY
RET
以上就是关于单片机c语言编程怎么去延时全部的内容,包括:单片机c语言编程怎么去延时、在单片机里C程序延时for(i=0;i<600;i++)延时和delay(1000)有什么区别、51单片机C语言for循环延时程序时间计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)