重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

关于c语言延时函数同时发送的信息

c语言 延时函数

你是用pc还是用单片机啊?

主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、成都响应式网站建设公司、程序开发、微网站、重庆小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站制作、做网站、外贸营销网站建设、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体,具备承接不同规模与类型的建设项目的能力。

pc的当然速度快了。

那要看pc的时钟才能做1ms的延时:

void delay(unsinged long n){....}

中间要加空语句的,但是pc实际上没哟这么用的。

要是单片机。

12M的晶振就是(非1T的)

void delay(unsinged int)

{

inti,j;

for(j=0;jn;j++)

for{i=0;i125;i++}{;}

}

C语言延时函数

学过汇编你就会知道,每条指令都占一定的时间(或者机器周期)的,如果你让机器什么都不做,即空指令的话,机器就会延时,然后你在计算好每次延时到底有多长,外面套一个循环(或者多重循环),根据你想要的延时时间即可计算出来循环的次数 ,延时函数基本上都是这种原理,它的参数就是用来控制循环次数的。

51单片机用c语言怎么写延时函数?

延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M *100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50*120=6000次。那么在程序上如何表达呢?我们可以用两套for循环

void delay(int i){

int x,y;

for(x=i;x0;x--){

for(y=120;y0;y--)

}

}

参数 i 代表该函数延时多少ms

关于C语言for循环延时函数

for循环实现C语言精确延时

(晶振12MHz,一个机器周期1us.)

一. 500ms延时子程序

程序:

void delay500ms(void){

unsigned char i,j,k;

for(i=15;i0;i--)

for(j=202;j0;j--)

for(k=81;k0;k--);

}

产生的汇编:

C:0x0800 7F0F MOV R7,#0x0F

C:0x0802 7ECA MOV R6,#0xCA

C:0x0804 7D51 MOV R5,#0x51

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

计算分析:

程序共有三层循环

一层循环n:R5*2 = 81*2 = 162us DJNZ 2us

二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us

三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us

循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5

二. 200ms延时子程序

程序:

void delay200ms(void){

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=132;j0;j--)

for(k=150;k0;k--);

}

产生的汇编

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E84 MOV R6,#0x84

C:0x0804 7D96 MOV R5,#0x96

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

三. 10ms延时子程序

程序:

void delay10ms(void){

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=4;j0;j--)

for(k=248;k0;k--);

}

产生的汇编

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E04 MOV R6,#0x04

C:0x0804 7DF8 MOV R5,#0xF8

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

四. 1s延时子程序

程序:

void delay1s(void){

unsigned char h,i,j,k;

for(h=5;h0;h--)

for(i=4;i0;i--)

for(j=116;j0;j--)

for(k=214;k0;k--);

}

产生的汇编

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E04 MOV R6,#0x04

C:0x0804 7D74 MOV R5,#0x74

C:0x0806 7CD6 MOV R4,#0xD6

C:0x0808 DCFE DJNZ R4,C:0808

C:0x080A DDFA DJNZ R5,C:0806

C:0x080C DEF6 DJNZ R6,C:0804

C:0x080E DFF2 DJNZ R7,C:0802

C:0x0810 22 RET

在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.

如何用c语言控制台程序进行延时等待,同时还可以执行其他函数?

所谓的延时程序,就是让程序进入一段无效循环,达到延时目的

有一个延时参数表的。

下面是一个10ms延时子程序(12MHZ)

void delay10ms(void)

{

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=4;j0;j--)

for(k=248;k0;k--);

}

单片机C语言中多个延时程序同时使用怎样编写?

int

x;

bit

led1,led2;

void

intter_0()

intterupt

{

led1

=

1;

}

void

timer0()

intterupt

1

{++x}

void

intter_2()

intterupt

2

{

led2

=

1;

}

void

main()

{

x

=

0;

TH0

=

xxxx;

TL0

=

xxxx;

TR0

=

1;

while(1)

{

if(led1

==

1)

{

if(x%十秒

==0)

{

p10

=

1;

led1

=

0;

}

}

if(led2

==

1)

{

if(x%十秒

==0)

{

p11

=

1;

led2

=0;

}

}

}

}

类似这样

主要用定时器取时间

用两个位来判断是否按下

单片中断什么的没初始化

自己设置


当前文章:关于c语言延时函数同时发送的信息
本文URL:http://cqcxhl.com/article/dodcois.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP