单片机延时子程序

单片机延时子程序,第1张

你可以粗略这样看,在上面的指令中,执行次数最多的是DJNZ rn,那么可以延时就是DJNZ指令执行时间。这里运用了嵌套,所以要×。

它的顺序是先执行DJNZ R5,L3 ;10次,执行DJNZ R6,L2 250次

但是当R6减1那么就赋予R5初值10,所以R5又得运行10次,而每减一次1都要重复10次。同理,执行R7减一要重复前面的DJNZ指令10×250次,所以就有了

10×250×200×2us=1s

delay子程序就是让单片机不做什么事情,在等待子程序完成条件

void delay(n) //延时子程序

{

while(n--) //这里把传入的参数当作次数来用

{

for(i=120;i>0;i--); // 等待i减完

}

}

D5MS:

MOV R7,#25

MOV R6,#100

DJNZ R6,$

DJNZ R7,$-4

RET

void delay_ms(unsigned int ms )

{

unsigned char i;

while(ms--)

for(i=0;i<123,i++); //这是1ms的子函数

}

delay_ms(5) ; // 就是5ms延时了

#include<AT89X51>

unsigned char sx[]={

oxfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

oxfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x01},

ml[]={0xff,0x00, 0xff,0x00, 0xff,0x00,

0xff,0x00, 0xff,0x00, 0x01};

unsigned int a=0,b=0;

del1ms(unsigned int k)

{

unsigned int i,j;

for(i=0;i<k;i++)

for(j=0;j<100;j++);

}

main()

{

while(1)

{

if(sx[]!=0x01)

{

P0=sx[a];

del1ms(20);

a++;

}

else

a=0;

if(lm[]!=0x01)

{

P0=lm[b];

del1ms(30);

b++;

}

else

b=0;

}

}

说明一下: 这样延时太短了,基本上看不出

对于定义来说:变量只是一个标识符而已,随便设,当变量多 的时候最好用带意思如:sec stu 等

通用办法,可以类推:

DELAY1s:

        MOV   R5,#08H           ; ∵ 1s=1000000us 

        MOV   R6,#0A2H          ; ∴ 1000000/2=500000

        MOV   R7,#20H           ; 500000用16进制表示为: 07A120

                                ; 所以 R5=07H+1=08H

                                ;     R6=0A1H+1=0A2H

                                ;     R7=20H

loop:   DJNZ  R7,$              ; 延时时间≈2×[(R5-1)×256+R6-1]×256+R7

        DJNZ  R6,loop           ; 当R5、R6等于0,相当于256参与运算

        DJNZ  R5,loop           ; 当R5、R6等于0,相当于256参与运算

        RET

以上就是关于单片机延时子程序全部的内容,包括:单片机延时子程序、新人单片机做时钟时候延时子程序延时方式没懂,求dalao解答,程序如下、若晶振为12MHZ,试编写一个延时5MS的子程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10642194.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存