‘壹’ 51单片机中,写个延时函数,延时1ms,该怎么写,为什么
用汇编语言写可以精确计算,但有时想拼出整数的ms或10ms也不容易,计算方法如下图说明:
而C语言靠经验和实验得来的,如下面程序
如果不准(与晶振频率有关),调K的值,,软件仿真查看,直到大致准确,想更精确用定时器
void delay(unsigned char i)//延时程序
{
unsigned chari,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
‘贰’ 51单片机延时一秒函数,晶振12MHZ
我这有个函数自己实验出来的,在KEIL里看差不多就是延时1毫秒
void delay1ms(unsigned int t)
{
unsigned x,y;
for(x=t;x>0;x--)
for(y=124;y>0;y--);
}
把t 改为你要延时的数就可以了,1毫秒就把t改为1 500毫秒就把t改为500
‘叁’ 单片机延时1s怎么实现
单片机常用的编程语言有汇编语言、C语言等。以下是使用汇编语言实现延时1s的程序:
以上程序中,使用了一个8位计数器来实现延时功能。由于单片机晶振频率为12MHz,每个指令需要执行12/4=3个机器周期(其中4代表指令周期),因此可以通过调整计数器初值来实现不同的延时时间。
具体计算过程如下:
每个指令需要执行3个机器周期;
延时1s需要多少个指令周期?答案是12,000,000(晶振频率)/3(每个指令周期需要的机器周期)=4,000,000(每秒钟可以执行的指令周期数),因此需要执行4,000,000条指令才能完成1秒的延时;
因为每个指令需要执行3个机器周期,所以需要执行4,000,000/3=1,333,333条指令才能完成1秒的延时;
计数器初值可以通过以下公式计算:计数器初值 = 256 - 延时所需指令数 + 2。因此,计数器初 1,333,333 + 2 = 0x0F。
以上程序中使用了一个8位计数器,所以最大可以延时255个机器周期(即85ms左右)。如果需要更长的延时时间,可以使用16位计数器或者多次调用延时函数来实现。
‘肆’ 51单片机求10微秒的延时函数 C语言(晶振11.0592MHz)
1、下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大。
2、软件延时:(asm)
晶振12MHZ,延时1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定时器延时:
晶振12MHZ,延时1s,定时器0工作方式为方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延时0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ,延时1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;设置定时器的工作方式为方式1
MOV
TL0,#0B0H
;给定时器设置计数初始值
MOV
TH0,#3CH
SETB
TR0
;开启定时器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定时器要软件清零
SETB
EX0
RET
3、C语言延时程序:
10ms延时子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延时子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延时子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延时子程序程序:
(12MHZ)
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--);
}
‘伍’ 52单片机C语言中“Delay”是什么意思,怎么用
一般延时1ms的程序是:
void Delay(uint x)
{
uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}
那么当你在别的函数中用到Delay(10000);就是延时10000ms,也就是10S
‘陆’ 求51单片机 延时1秒钟的子程序(没什么要求)
如果使用的是11.0592MHz的晶振,那么编写延时子程序的方式可以如下所示:
void delay(uint xms) { int i,j; for(int i=xms;i>0;i--) for(j=148;j>0;j--); }
在上述代码中,delay(1)代表延时1毫秒(ms),因此要实现1秒的延时,只需调用delay(1000)。这种方法基于内部循环和固定值148的外部循环来实现延时。
值得注意的是,这个延时函数的具体实现可能需要根据实际情况进行调整,以确保准确的延时时间。例如,148这个数值是基于特定晶振频率计算得出的,如果晶振频率不同,这个值也需要相应调整。
此外,如果你对延时子程序的编写有更多疑问或需要进一步的帮助,可以随时提问。
在实际应用中,这种简单的延时方法可能不够精确,特别是在需要高精度延时的情况下。为了提高延时的准确性,可以考虑使用更复杂的方法,如使用定时器中断等。
如果你在编写延时子程序时遇到困难或想要了解更多信息,不妨详细描述你的问题,以便得到更具体的帮助。
‘柒’ 51单片机C语言中delay函数是怎么定义和使用的
在51单片机的C语言编程中,我们经常需要使用延时函数来控制程序的执行速度。延迟函数通常由程序员自己编写,其核心思想是通过执行无意义的指令来实现时间上的延迟。这是一种简单且常见的方法,特别是在硬件资源有限的环境下。
下面,我们来探讨一个经典的延时函数的实现方式。这个函数的目的是根据给定的毫秒数来产生相应的延迟。具体实现如下:
// 定义一个延时xms毫秒的延时函数
void delay(unsigned int xms) // xms代表需要延时的毫秒数
{
unsigned int x, y;
for(x = xms; x > 0; x--)
for(y = 110; y > 0; y--);
}
在这个函数中,主要包含了两个嵌套的for循环。外部的循环变量x用于控制总的延迟时间,内部的循环变量y则用于细化每个时间单位内的延迟。通过这种方式,我们可以根据不同的需求调整延时的具体时长。
需要注意的是,这个延时函数的具体延迟时间依赖于单片机的时钟频率和编译器的优化设置。在实际应用中,为了获得更准确的延时,可能需要对循环次数进行适当的调整。
此外,这个延时函数适用于那些对延迟时间要求不是特别严格的应用场景。对于需要极高精度延时的应用,可能需要采用更复杂的方法,例如使用定时器中断等。
综上所述,通过简单的循环结构,我们可以实现一个基本的延时功能,这对于许多小型嵌入式项目来说已经足够。
‘捌’ 51单片机c语言延时函数 Void delay 1ms(unsigned int ms){un
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
‘玖’ (51单片机)那个大佬给讲解一下这个延时函数
在C51程序中,我们常会使用宏定义来简化代码,比如将定义为unsigned int。这里有一个16位整型的形参变量,它实际上是一个宏定义的结果,而非C51固有的变量类型。
延时函数的基本原理是利用循环体来实现的,具体来说,就是使用while循环,通过变量自减,直到其值变为0,循环结束。这样的操作会消耗一定的时间,从而达到延时的效果。
延时函数通常的实现方式是这样的:
c
while(i--);
这里的`i--`表示将变量`i`减1,然后判断`i`是否等于0,如果不等于0,则继续循环。这个过程会重复执行直到`i`减至0,循环结束,整个过程就是一次延时。
需要注意的是,延时的时间长短取决于循环体内代码的执行速度,如果循环体内的操作越多,延时时间就越长。因此,我们可以通过调整循环体内的操作来控制延时的长短。
总结来说,通过利用循环来实现延时,是C51编程中常见的技术手段之一。