void delay(uint t) 在c语言中的作用,[voiddelay怎么用]延迟时间怎么计算

本文详细介绍了单片机中的各种延时函数实现方法,包括使用空指令、for循环和定时器等技术来实现精确延时。适用于不同频率晶振的51系列及AVR单片机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

j循环可以延时ms个i循环,也就是ms毫秒.for(i=0;i<120,i++)do-something;

voiddelay怎么用

void-delay(uint-t)//参数是无符号整形,时间不可能为负数{register-uint-bt;//定义无符号整形,放在寄存器里,存取速度较快,平时都是放在内存里for(;t;t

[voiddelay怎么用]高手帮忙解释一下这种单片机延时函数void

问题:void-delay(){;;}void-start(){sda=1;delay();scl=1;

delay();sda=0;delay();}写成下面好看点void-delay(){;;}两个“;”前什么也没写是空指令,空指令就是CPU什么也不做,但是要消耗一个指令的时间。

这个延时函数每调用一次就延时2个指令的时间。具体延时的时间要看你用的单片机的晶振时间。delay里面的内容用for循环即可,可以修改循环次数改变延时时间void-delay1(unsigned-int-j){unsigned-char-i;do{for(i=0;i<2;i++);j

;asm("nop");}while(j);}这是us延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。

void-delay1(unsigned-int-j){unsigned-int-i;do{for(i=0;i<2853;i++);j

;}while(j);}这是ms延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。

[voiddelay怎么用]高手帮忙解释一下这种单片机延时函数void

写成下面好看点void-delay(){;;}两个“;”前什么也没写是空指令,空指令就是CPU什么也不做,但是要消耗一个指令的时间。这个延时函数每调用一次就延时2个指令的时间。具体延时的时间要看你用的单片机的晶振时间。

[voiddelay怎么用]延迟时间怎么计算

你的晶振的倒数就是时钟周期用i乘以时钟周期就是延迟时间了谁知道你的i是多少呀?诶,这个没人知道。可以用keil仿真直接得到答案,也可以参考下面的自己改。

下面几个是单片机的延时程序(包括asm和c程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592mhz和12.0000mhz的晶振,而在avr单片机上常用的有8.000mhz和4.000mh的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振的频率是多大。

软件延时:(asm)晶振12mhz,延时1秒程序如下:delay:mov72h,#100loop3:mov

71h,#100loop1:mov70h,#47loop0:djnz70h,loop0nopdjnz

71h,loop1mov70h,#46loop2:djnz70h,loop2nopdjnz72h,loop3mov

70h,#48loop4:djnz70h,loop4定时器延时:晶振12mhz,延时1s,定时器0工作方式为方式1delay1:mov-r7,#0ah

;;晶振12mhz,延时0.5秒ajmp-delaydelay2:mov-r7,#14h;;晶振12mhz,延时1秒delay:clr-ex0mov-tmod,#01h

;设置定时器的工作方式为方式1mov-tl0,#0b0h;给定时器设置计数初始值mov-th0,#3chsetb-tr0

;开启定时器here:jbc-tf0,next1sjmp-herenext1:mov-tl0,#0b0hmov-th0,#3chdjnz-r7,hereclr-tr0

;定时器要软件清零setb-ex0ret-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);}下面是用了8.0000mhz的晶振的几个延时程序(用定时0的工作模式1):(1)延时0.9msvoid-delay_0_9ms(void){tmod=0x01;

/*定时器0工作在模式1下(16位计数器)*/th0=0xfd;tl0=0xa8;tr0=1;/*启动定时器*/while(tf0==0);tr0=0;}(2)延时1msvoid-delay_1ms(void){tmod=0x01;

/*定时器0工作在模式1下(16位计数器)*/th0=0xfd;tl0=0x65;tr0=1;/*启动定时器*/while(tf0==0);tr0=0;}(3)延时4.5msvoid-delay_4_5ms(void){tmod=0x01;

/*定时器0工作在模式1下(16位计数器)*/th0=0xf4;tl0=0x48;tr0=1;/*启动定时器*/while(tf0==0);tr0=0;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值