导航:首页 > 操作系统 > 单片机while延时

单片机while延时

发布时间:2023-04-02 20:17:50

1. 单片机C语言中while的延时时间

用KEIL软件可以计算时间,将while的起始位置和终止位置加红点(双击即可);

然后左侧的SEC后面的就是执行的时间。

再给你几个延时程序做参考:

软件延时:(asm)

晶振12MHZ,延时1秒

程序如下:

DELAY:MOV72H,#100

LOOP3:MOV71H,#100

LOOP1:MOV70H,#47

LOOP0:DJNZ70H,LOOP0

NOP

DJNZ71H,LOOP1

MOV70H,#46

LOOP2:DJNZ70H,LOOP2

NOP

DJNZ72H,LOOP3

MOV70H,#48

LOOP4:DJNZ70H,LOOP4

定时器延时:

晶振12MHZ,延时1s,定时器0工作方式为方式1

DELAY1:MOVR7,#0AH;;晶振12MHZ,延时0.5秒

AJMPDELAY

DELAY2:MOVR7,#14H;;晶振12MHZ,延时1秒

DELAY:CLREX0

MOVTMOD,#01H;设置定时器的工作方式为方式1

MOVTL0,#0B0H;给定时器设置计数初始值

MOVTH0,#3CH

SETBTR0拍渣;开启定时器

HERE:JBCTF0,NEXT1

SJMPHERE

NEXT1:MOVTL0,#0B0H

MOVTH0,#3CH

DJNZR7,HERE

CLRTR0;定时器要软件清零

SETBEX0

RET

C语言延时程序:

10ms延时子程序(12MHZ)

voiddelay10ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

谈歼for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

1s延时子程序(12MHZ)

voiddelay1s(void)

{

unsignedcharh,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)

voiddelay200ms(void)

{

unsignedchari,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

500ms延时子程序程序:(12MHZ)

voiddelay500ms(void)

{

unsignedchari,j,k;

for(i=15;i>0;i--)

for(j=202;j>0;j--)

for(k=81;k>0;k--);

}

不袭侍悄过实际得到的延时会存在差异,所以最好用实验的方法调整延时参数。

2. 请教关于单片机C语言中用while延时的问题

晶振频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;程序中 的 自加(++)、自减(--) 的执行周期为1个机械周期,即1us;
若为 理想状态,则delay(500000)的时间应该是:500000×1us=500ms;
但芹猛中是,编译软件 要把 函数调用、for 语句转换知旅成 机器指令,这是需要一定周嫌山期的,周期长短 视不同的编译软件 而有所不同,目前也没人对这个 转换差别 做过 专业的考量,故LZ 的问题,没有确切 的答案,只能 是告诉 你,大于某个时间;如例子 的答案是 大于 500ms,但大到什么程度,不知道,不过可以从 软件中 单步调试 中 得到。

3. 单片机while延时时间是多少,如下代码!

延时时间是多少,仅仅靠这条语句是无法确定的,与很多因素有关,比派知如晶振歼悉的大小,指令周期时间等等,比如尘改消同样是12M晶振,8051是指令周期是1us,而STC89C51是0.5us;STC12C5A60S2是1/12us。

4. 单片机while语句延时

#include<reg52.h>
#define uint unsigned int
sbit L1=P1^0;
uint a=10,b=5;
void main()
{
while(1)
{

while(a--);
L1=0;

while(b--);
L1=1;
a=10;
b=5;
}

}改成这样就可以了,就是把裂码卖a.b的肆逗值重新赋值一下就可以模配了。

5. 单片机while循环不加延时函数怎么设置

1、定义while循环语句:在和侍蔽程序中定义while循环语句,以实现程序的重复执行。
2、定义计数变量:在while循环语句中,定义一个计数变量,以记录循环的次数。
3、添加循环体:在while循环语句中,添加循环体,即需要重复执行的程序代码。
4、设置条件语句:在while循环语句中,设置条件语句,以判断循环是否结束。如果条件成立,继续执行循环体;如果条件不成立,跳出循环。
5、添加延时函谈唯数:在while循环语句中,添加延时函数,唤州以控制程序的执行速度和占用率。常用的延时函数有延时循环和定时器延时等,具体的实现方法可以根据单片机的型号和开发环境进行选择和调整。
6、调试程序:在程序编写完成后,需要进行调试和测试,以确保程序的稳定性和可靠性。可以通过单步调试、串口调试等方式,逐步排查程序中的错误和问题。

6. 51单片机1us延时c语言程序 while语句 晶振12MHZ

51单片机12M晶振延时1us,只需要执行一个NOP就是了。C语言中也是如此。
#include<reg51.h>
#include<intrins.h>
main()
{
_nop_(); //延时1us
while(1);
}

7. 单片机中用软件实现延时有哪两种方法有何特点

1、循环延时:采用循环语句,如for,while等,进行长时间的空操作,或者空语句。
优点:程序理解简易,入手快,新手必备武器!
缺点:时间精度不高,且占用单片机大量时间资源,引发其它子函数的不流畅(卡滞、迟钝),导致系统实时反应能力下降。
2、定时延时:采用定时器定时,如T0,T1;
优点:时间精度高,提高系统程序执行的高效性,不影响子函数的正常运行。
缺点:需占用1个定时器资源(可以复用),需良好程序构架支持,入手难。
个人建议:一旦学会定时器,就不应该再使用“循环延时”函数,采用定时器才是正道。如果对延时精度要求不高,建议使用结构体组成多个延时体。

8. 单片机LED延时原理问题

这个是延时程序,你通过keil编译调试中,会看到其汇编代码;

当带入的参数=1时,你单步执行汇编代码,直至 ret,然后你看看都执行了哪些指令,并把所消耗的指令周期累加起来,大致就10个机器周期,而当单片机晶振为12MHz时,则一个机器周期约为 1uS,那么就是从进入这个延时程序到返回,所经历的时间正好是10uS;

9. 请教关于单片机C语言中用while延时的问题

void Delay(INT us )
{
while ( us -- );
}
当晶振扮山余频率Fosc=12MHz,则机械周期 T=12/Fosc=1us;
则理想化delay(1)的时间应该是1us,但是,由于厅滚要编译转换等,实际时间大于唯穗参数时间

10. 51单片机中怎么得到精确延时

51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 x0dx0ax0dx0a1 使用定时器/计数器实现精确延时 x0dx0ax0dx0a 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 x0dx0ax0dx0a 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 x0dx0ax0dx0a2 软件延时与时间计算 x0dx0ax0dx0a 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。 x0dx0ax0dx0a2.1 短暂延时 x0dx0ax0dx0a 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: x0dx0ax0dx0a void Delay10us( ) { x0dx0a _NOP_( ); x0dx0a _NOP_( ); x0dx0a _NOP_( ); x0dx0a _NOP_( ); x0dx0a _NOP_( ); x0dx0a _NOP_( ); x0dx0a } x0dx0ax0dx0a Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。 可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\[4\],以实现较长时间的延时;但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 μs。这是因为执行Delay40us( )时,先执行了一次LCALL指令(2 μs),然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us( ),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84 μs),所以,实际延时时间为86 μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 μs。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。 x0dx0ax0dx0a2.2 在C51中嵌套汇编程序段实现延时 x0dx0ax0dx0a 在C51中通过预处理指令#pragma asm和#pragma endasm可以嵌套汇编语言语句。用户编写的汇编语言紧跟在#pragma asm之后,在#pragma endasm之前结束。 x0dx0ax0dx0a 如:#pragma asm x0dx0a ? x0dx0a 汇编语言程序段 x0dx0a ? x0dx0a #pragma endasm x0dx0ax0dx0a 延时函数可设置入口参数,可将参数定义为unsigned char、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。在应用时应注意以下几点: x0dx0ax0dx0a ◆ #pragma asm、#pragma endasm不允许嵌套使用; x0dx0a ◆ 在程序的开头应加上预处理指令#pragma asm,在该指令之前只能有注释或其他预处理指令; x0dx0a ◆ 当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件; x0dx0a ◆ asm只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量; x0dx0a ◆ #pragma asm、#pragma endasm和 asm只能在函数内使用。 x0dx0ax0dx0a 将汇编语言与C51结合起来,充分发挥各自的优势,无疑是单片机开发人员的最佳选择。 x0dx0ax0dx0a2.3 使用示波器确定延时时间 x0dx0ax0dx0a 利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间。方法如下: x0dx0ax0dx0a sbit T_point = P1^0; x0dx0a void Dly1ms(void) { x0dx0a unsigned int i,j; x0dx0a while (1) { x0dx0a T_point = 1; x0dx0a for(i=0;i<2;i++){ x0dx0a for(j=0;j<124;j++){;} x0dx0a } x0dx0a T_point = 0; x0dx0a for(i=0;i<1;i++){ x0dx0a for(j=0;j<124;j++){;} x0dx0a } x0dx0a } x0dx0a } x0dx0a void main (void) { x0dx0a Dly1ms(); x0dx0a } x0dx0ax0dx0a 把P1.0接入示波器,运行上面的程序,可以看到P1.0输出的波形为周期是3 ms的方波。其中,高电平为2 ms,低电平为1 ms,即for循环结构“for(j=0;j<124;j++) {;}”的执行时间为1 ms。通过改变循环次数,可得到不同时间的延时。当然,也可以不用for循环而用别的语句实现延时。这里讨论的只是确定延时的方法。 x0dx0ax0dx0a2.4 使用反汇编工具计算延时时间 x0dx0ax0dx0a 用Keil C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种方法,还使用“for (i=0;i

阅读全文

与单片机while延时相关的资料

热点内容
安卓手机微信发不出视频怎么弄 浏览:229
压缩机专用工具 浏览:575
qtcreator可以编译cp吗 浏览:405
小项目是云服务器还是本地好 浏览:14
墨痕斋是什么游戏的服务器 浏览:942
word文件如何压缩大小 浏览:279
遵义联通服务器地址是什么 浏览:29
ansys约束命令流 浏览:814
解压软件电脑版如何下载 浏览:791
闪电匕首算法球 浏览:692
linuxredis停止命令 浏览:670
大麦账号怎么加密 浏览:113
穿越火线怎么找服务器 浏览:526
秘密加密社交软件app 浏览:256
c语言编译器怎么找文件 浏览:836
数学不好能编程吗 浏览:254
微云里的视频加密 浏览:41
3大加密货币交易平台 浏览:647
钣金激光切割机编程 浏览:496
vivo手机手电筒app在哪里 浏览:787