单片机延时子程序

作者&投稿:居春 (若有异议请与网页底部的电邮联系)
单片机中延时子程序的作用是什么~

就是为了延时啊,譬如说你让数码管从1变到10,一秒跳一下这就需要用到延时啊当然你可能会说用定时器就行了,但是定时器有限,而且他是通过中断来控制,但我不需要延时时间那么精准的时候用起中断就不够直接用延时程序方便了

通用办法,可以类推:
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=20Hloop: 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

延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器

周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指

令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者

   我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。例如

在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。延时程序是如何

实现的呢?下面让我们先来了解一些相关的概念。

一、机器周期和指令周期

1.机器周期是指单片机完成一个基本操作所花费的时间,一般使用微秒来计量单片机的运行速度,

51 单片机的一个机器周期包括12 个时钟振荡周期,也就是说如果51 单片机采用12MHz 晶振,那么执行

一个机器周期就只需要1μs;如果采用的是6MHz 的晶振,那么执行一个机器周期就需要2 μs。

   2 .指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。

在51 单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个

机器周期),四周期指令(执行这条指令需要四个机器周期)。除了乘、除两条指令是四周期指令,其余均

为单周期或双周期指令。也就是说,如果51 单片机采用的是12MHz 晶振,那么它执行一条指令一般只需

1~2 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需2~4 微秒的时间。

   现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明执行各种指令所需的机

器周期,了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成

需要精确延时时间的延时程序。

二、延时指令

   在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一

定的时间,所以要达到延时的效果,只须让单片机不断地执行没有具体实际意义的指令,从而达到了延时

的效果。

1.数据传送指令 MOV

   数据传送指令功能是将数据从一个地方复制、拷贝到另一个地方。

   如:MOV R7,#80H   ;将数据80H 送到寄存器R7,这时寄存器R7 里面存放着80H,就单这条

指令而言并没有任何实际意义,而执行该指令则需要一个机器周期。

2.空操作指令 NOP

   空操作指令功能只是让单片机执行没有意义的操作,消耗一个机器周期。

3.循环转移指令 DJNZ

   循环转移指令功能是将第一个数进行减1 并判断是否为0,不为0 则转移到指定地点;为0 则往下执行。

   如:DJNZ R7,KK ;将寄存器R7 的内容减1 并判断寄存器R7 里的内容减完1 后是否为0,如果

   不为0 则转移到地址标号为KK 的地方;如果为0 则执行下一条指令。这条指令需要2 个机器周期。

   利用以上三条指令的组合就可以比较精确地编写出所需要的延时程序。

三、1 秒延时子程序、流程图及时间计算 (以单片机晶振为12MHz 为例,1 个机器周期需要1μs)

了解了以上的内容,现在让我们来看看

程序总共所需时间:1+10+2560+330240+660480+5120+20+2=998433 μs≈1S

   在这里运行这段程序共需998433 μs,还差1567μs 才达到1S 的,所以想要达到完美的1S 延时,需

要在返回指令RET 前再添加一些指令让它把1567μs 的延时完成。有兴趣的读者可以自己试着添加完成。

最后补充一点,编写程序时一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能

的小模块。这样在主程序中就可以方便地反复调用编写好的延时子程序。

   小提示:循环转移指令(DJNZ )除了可以给定地址标号让其跳转外,还可以将地址标号改成$,这样

程序就跳回本指令执行。例如:

   DJNZ R7,$ ;R7 内容减1 不为0,则再次执行本指令;为0 则往下执行,当R7 的值改为10

时,则执行完该条程序所需的时间为2*10=20 μs。

51单片机汇编延时程序算法详解

将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。   

指令周期、机器周期与时钟周期

  指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。

  时钟周期:也称为振荡周期,一个时钟周期 =晶振的倒数。

  MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。

  MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/12000000)=1μs。

  程序分析

  例1 50ms 延时子程序:

  DEL:MOV R7,#200 ①

  DEL1:MOV R6,#125 ②

  DEL2:DJNZ R6,DEL2 ③

  DJNZ R7,DEL1 ④

  RET ⑤

  精确延时时间为:1+(1*200)+(2*125*200)+(2*200)+2

  =(2*125+3)*200+3 ⑥

  =50603μs

  ≈50ms

  由⑥整理出公式(只限上述写法)延时时间=(2*内循环+3)*外循环+3 ⑦

详解:DEL这个子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。

  第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs

  第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200μs

  第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7μs。

  例2 1秒延时子程序:

  DEL:MOV R7,#10 ①

  DEL1:MOV R6,#200 ②

  DEL2:MOV R5,#248 ③

  DJNZ R5,$ ④

  DJNZ R6,DEL2 ⑤

  DJNZ R7,DEL1 ⑥

  RET ⑦

  对每条指令进行计算得出精确延时时间为:

   1+(1*10)+(1*200*10)+(2*248*200*10)+(2*200*10)+(2*10)+2

  =[(2*248+3)*200+3]*10+3 ⑧

  =998033μs≈1s

  由⑧整理得:延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑨

  此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立。

  注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式⑨不再适用,下面举例分析。

  例3仍以1秒延时为例

  DEL:MOV R7,#10 1指令周期1

  DEL1:MOV R6,#0FFH 1指令周期10

  DEL2:MOV R5,#80H 1指令周期255*10=2550

  KONG:NOP 1指令周期128*255*10=326400

  DJNZ R5,$ 2指令周期2*128*255*10=652800

  DJNZ R6,DEL2 2指令周期2*255*10=5110

  DJNZ R7,DEL1 2指令周期2*10=20

  RET 2

  延时时间=1+10+2550+326400+652800+5110+20+2 =986893μs约为1s

  整理得:延时时间=[(3*第一层循环+3)*第二层循环+3]*第三层循环+3 ⑩

  结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。

单片机延时子程序

1)延时为:20ms 晶振12M

1+(1+2*248+2)*4+1+1+1=20000US=20MS

用汇编..优点就是精确...

缺点就是算有点复杂.

DELAY20MS:

MOV R7,#4

D1:

MOV R6,#248

DJNZ R6,$

DJNZ R7,D1

NOP

NOP

RET

2)一些通过计算51汇编指令得出的软延时子程序

;*****************************************************************   

;延时10uS   

;*****************************************************************   

  

time10us:               mov     r5,#05h                 ;11us   

                        djnz    r5,$   

                        ret  

  

;*****************************************************************   

;延时50uS   

;*****************************************************************   

  

time50us:               mov     r5,#19h                 ;51us   

                        djnz    r5,$   

                        ret  

  

;*****************************************************************   

;延时100uS   

;*****************************************************************   

  

time100us:              mov     r5,#31h                 ;99.6us   

                        djnz    r5,$   

                        ret  

  

;*****************************************************************   

;延时200uS   

;*****************************************************************   

  

time200us:              mov     r5,#64h                 ;201us   

                        djnz    r5,$   

                        ret  

  

;*****************************************************************   

;延时250uS   

;*****************************************************************   

  

time250us:              mov     r5,#7ch                 ;249.6us   

                        djnz    r5,$   

                        ret  

  

;*****************************************************************   

;延时350uS   

;*****************************************************************   

  

time350us:              mov     r5,#0afh                 ;351us   

time350us_1:            djnz    r5,time350us_1   

                        ret  

  

;*****************************************************************   

;延时500uS   

;*****************************************************************   

  

time500us:              mov     r5,#0fah                 ;501us   

time500us_1:            djnz    r5,time500us_1   

                        ret  

  

;*****************************************************************   

;延时1mS   

;*****************************************************************   

  

time1ms:                mov     r5,#0fah                ;1001us   

time1ms_1:              nop  

                        nop  

                        djnz    r5,time1ms_1   

                        ret  

  

;*****************************************************************   

;延时2.5mS   

;*****************************************************************   

  

time2_5ms:              mov     r5,#05h          ;2.496ms   

time2_5ms_1:            mov     r6,#0f8h         ;497us   

                        djnz    r6,$   

                        djnz    r5,time2_5ms_1   

                        ret  

  

;*****************************************************************   

;延时10mS   

;*****************************************************************   

  

time10ms:               mov    r5,#14h         ;10.262ms   

time10ms_1:             mov    r6,#0ffh        ;511us   

                        djnz   r6,$   

                        djnz   r5,time10ms_1   

                        ret  

  

;*****************************************************************   

;延时50mS   

;*****************************************************************   

  

time50ms:               mov    r5,#63h         ;49.996ms   

time50ms_1:             mov    r6,#0fbh        ;503us   

                        djnz   r6,$   

                        djnz   r5,time50ms_1   

                        ret  

  

;*****************************************************************   

;延时100mS   

;*****************************************************************   

  

time100ms:              mov     r5,#0c3h        ;100.036ms   

time100ms_1:            mov     r6,#0ffh        ;511us   

                        djnz    r6,$   

                        djnz    r5,time100ms_1   

                        ret  

  

;*****************************************************************   

;延时200mS   

;*****************************************************************   

  

time200ms:              mov     r5,#02h         ;250.351ms   

time200ms_1:            mov     r6,#0f4h        ;125.173ms   

time200ms_2:            mov     r7,#0ffh        ;511us   

                        djnz    r7,$   

                        djnz    r6,time200ms_2   

                        djnz    r5,time200ms_1   

                        ret  

  

;*****************************************************************   

;延时500mS   

;*****************************************************************   

  

time500ms:              mov    r5,#04h         ;500.701ms   

time500ms_1:            mov    r6,#0f4h        ;125.173ms   

time500ms_2:            mov    r7,#0ffh        ;511us   

                        djnz   r7,$   

                        djnz   r6,time500ms_2   

                        djnz   r5,time500ms_1   

                        ret  

  

;*****************************************************************   

;延时1S   

;*****************************************************************   

  

time1s:                 mov    r5,#08h         ;1001.401ms   

time1s_1:               mov    r6,#0f4h        ;125.173ms   

time1s_2:               mov    r7,#0ffh        ;511us   

                        djnz   r7,$   

                        djnz   r6,time1s_2   

                        djnz   r5,time1s_1   

                        ret

12M晶振 机器周期为1US  NOP为单周期指令 DJNZ为双周期指令.

3)

;;晶振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

4);延时1分钟子程序,F=6MHz

;程序已测过,延时时间60,000,000.0uS

delay60s:mov r3,#228

         mov r2,#253

         mov r1,#219

loop1:   djnz r1,$

         djnz r2,loop1

         djnz r3,loop1

         nop

         ret

5)计算机反复执行一段程序以达到延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一部分人对延时程序很模糊,对延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。

何为时钟周期、机器周期、和指令周期?

时钟周期:也就是振荡周期,以12MHz的时钟脉冲为例,那时钟周期就为(1/12000000)s=(1/12)us;

机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;

指令周期:CPU执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需的机器周期不一定相同,可参考51单片机指令速查表。

        由上可得:CPU执行一条单周期指令,需要1us;执行一条双周期指令需要2us。

        下面是具体的延时子程序分析:

0.1s延时子程序(12MHz晶振):

           MOV R7,#200   ;单周期指令(1us)

D1:     MOV R6,#250   ;单周期指令(1us)

           DJNZ R6,$      ;双周期指令(2us)//该指令自身执行R6次

           DJNZ R7,D1     ;双周期指令(2us)//D1执行R7次

           RET            ;双周期指令(2us)

T=1+(1+2*R6+2)*R7+2

   =100603us

   ≈0.1s

0.5s延时子程序(12MHz晶振):

           MOV R7,#5     ;单周期指令(1us)

D1:     MOV R6,#200   ;单周期指令(1us)

D2:     MOV R5,#250   ;单周期指令(1us

           DJNZ R5,$      ;双周期指令(2us)//该指令自身执行R5次

           DJNZ R6,D2     ;双周期指令(2us)//D2执行R6次

           DJNZ R7,D1     ;双周期指令(2us)//D1执行R7次

           RET            ;双周期指令(2us)

T=1+[1+(1+2*R5+2)*R6+2]*R7+2

   =503018us

   ≈0.5s

6) 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。

                    ORG        0                   ;程序从0地址开始

START:      MOV      A,#0FEH     ;让ACC的内容为11111110

LOOP:         MOV      P2,A            ;让P2口输出ACC的内容

                     RR          A                  ;让ACC的内容左移

                     CALL     DELAY       ;调用延时子程序

                     LJMP     LOOP          ;跳到LOOP处执行

;0.1秒延时子程序(12MHz晶振)===================

DELAY:      MOV      R7,#200      ;R7寄存器加载200次数

D1:               MOV      R6,#250      ;R6寄存器加载250次数

                     DJNZ     R6,$             ;本行执行R6次

                     DJNZ     R7,D1          ;D1循环执行R7次

                     RET                            ;返回主程序

                     END                           ;结束程序



类似的题目,回答过多次,可见:

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/37d8c6fb9b91e1849f51462f.html 

========

这个5EH 和5FH的机器周期都是2微秒,谁能给我解释一下 那个算式怎么列出来的 这里面没有机器周期是1微秒的吧 怎么会+1 还*1 ....

怎么各个答案还不一样啊? 我这个就是8051单片机密码锁的一个程序 上面那答案是老师给的..

----------

楼主的疑问是正确的,确实没有机器周期是1微秒的,计算公式是错误的。

呵呵,我的答案是正确的,有调试过程的画面为证。

----------

针对楼主的 DELAY500,计算和调试的结果如下图:



ELAY: MOV 5FH,#06 ; 执行这条指令需1us(晶振12MHZ,机器周期1us)
DEL1: MOV 5EH,#248 ; 执行这条指令一次需1us所以总共需要(6*1)
DJNZ 5EH,$ ; 执行这条指令一次需2us所以总共需要(6*248*2us)
DJNZ 5FH,DEL1 ; 执行这条指令一次需2us所以总共需要(6*2us)
RET
所以 算式为 1+(1+248*2+2)*6=2995us
你那个算法 我认为是不对的

下面两个的算是结果:
1:(242*2+1+1+2)*200+1;

2:((242*2+1+1+2)*200+2)*5+1
若算上返回指令 每个结果后面都 +2,这个答案一定是对的,你们老师给你的
那个算式 是错误的。

你可以粗略这样看,在上面的指令中,执行次数最多的是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
请参考

周期分为机器周期、指令周期、振荡周期和状态周期。
在你的程序里起作用的只有指令周期和机器周期。
指令周期长度为机器周期的周期长度
mov指令周期为1,nop指令周期为1
djnz指令周期为2,ret指令周期为2
根据上述说明我列的计算式为(248*2+2+1)*6+1+2=2997
你的式子((2+((2+2*248)+2)*6)+1)*1=3003
可能不同芯片对指令周期长度有影响,我的式子适用于51系列芯片


74LS240是什么?
是芯片的名称 向EPROM2764写入程序机器码 通过程序固化器将下列程序中对应的机器码,依次写入到EPROM2764的0000H~0015H地址单元中。机器码 地址 程序 ORG 0000H ;表示程序从地址0000H存放 75 90 00 0000H START: MOV P1,#00H 11 17 0003H ACALL DELAY ;延时一段时间,便于观察 74ls240引脚功能...

环境经济学中的非使用价值是什么意思?
非使用价值通常也叫做存在价值(有时也称为保存价值或被动使用价值)。它是指人们在知道某种资源的存在(即使他们永远不会使用那种资源)后,对其存在赋予的价值。使用价值,是一切商品都具有的共同属性之一。任何物品要想成为商品都必须具有可供人类使用的价值;反之,毫无使用价值的物品是不会成为商品的。...

TLC1543的TLC1543简介及其应用
TLC1543为20脚DIP封装的CMOS 10位开关电容逐次A\/D逼近模数转换器,引脚排列如图1所示。其中A0~A10(1~9、11、12脚)为11个模拟输入端,REF+(14脚,通常为VCC)和REF-(13脚,通常为地)为基准电压正负端,CS(15脚)为片选端,在CS端的一个下降沿变化将复位内部计数器并控制和使能ADDRESS、I\/...

单片机19秒倒数计时器,不要按键的,汇编语言,程序语言简单些
MOV R3,#20 ;1s到了,重新赋值 DEC R4 ;1S到了R4减1CJNE R4,#0,EXT1 ;19s到了吗,没有到则转去EXT1MOV R4,#19 ;19S到了重新赋值EXT1:RETI ;中断返回;---10ms延时子程序---;DLL:MOV R2,#200 D11:MOV R1,#1 DJNZ R1,DJNZ R2,D11 RET ;---编码表---;TAB:DB...

用单片机对步进电机进行控制
片机一切工作停止,直到下一个中断或硬件复位为止。2 步进电机驱动实现2.1简介 步进电机在单单仅给予电压时,电机是不会动作的,必须由脉冲产生器提供位置(脉波数)、速度的脉冲信号指令,以及驱动器驱动电流流过电机内部线圈、依顺序切换激磁相序的方式才能够让电机运 转。所以欲使步进电机动作的必要系统组成有: (1)脉...

我自己做了一块板子 用51单 片机12864可以显示,但我用12系列单片机就不...
12没分频,速度比51快,需要在12864的写数据、命令子程序里加延时

...一个4位的共阴数码管通电的状态下显示时间的程序
void delay(x)\/\/延时函数。{ uint i,j;for(i=x;i>0;i--)for(j=120;j>0;j--);} void xian()\/\/把时分秒送到数码管显示。{ uint i;miaog=miao%10;miaos=miao\/10;feng=fen%10;fens=fen\/10;shig=shi%10;shis=shi\/10;for(i=0;i<8;i++){ switch(i){ case 0:P3=b[7]...

80c51编程,用mcs-51指令实现
RET ; 子程序返回指令。此时(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) RETI ; 中断返回指令,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代替 [4]. 空操作指令(1条) 这条指令将累加器中的内容清0。 NOP ; 这条指令除了使PC加1,消耗...

高分求课程设计:利用D\/A芯片实现电机转速控制
电机变速一般都是直流电机,所以电压是改变电机速度的办法,只能一步一步的实验才行,仅仅靠理论是不行的

单片微机的程序设计中子程序是什么
子程序是在主程序之外的一些独立的程序模块,在主程序中通过 call 指令调用 ,在子程序中通过 ret 指令 返回。

东乡县18359444390: 单片机延时子程序 -
敛古藏青: DELAY20MS: MOV R7,#4 D1: MOV R6,#248 DJNZ R6,$ DJNZ R7,D1 NOP NOP RET 延时为:1+(1+2*248+2)*4+1+1+1=20000US=20MS 用汇编..优点就是精确...缺点就是算有点复杂.

东乡县18359444390: 89C51单片机1S的延时程序? -
敛古藏青: void delayms() // 延时子程序 对应12M晶振 {unsigned int ms=1000;while(ms--) //每一次循环1ms{for(i = 0; i < 120; i++);} }

东乡县18359444390: 单片机延时时间程序怎么编程 -
敛古藏青: 举一个例子来说明吧.比如你要编一个延时50毫秒的子程序,那么步骤如下:1、查看一下你的硬件环境,比如晶振大小,CPU型号,不用CPU指令的机器周期是不一样的.2、计算延时需要的机器周期.比如采用12M晶振,CPU采用通用8051,...

东乡县18359444390: 单片机如何编写延时2min的延时子程序??帮帮忙吧!我是初学者,急需此答案.谢谢了 -
敛古藏青: 2min?为什么这几天这么多都在问这么久的延时,不知道你为什么要这么长延时,如果只是单纯的2min延时别的什么都不做的话那一般的延时函数是这样的(单片机晶振12M情况下,12T周期): void Delay_100MS(unsigned int x) {unsigned int a,b;for(a = x; a > 0; a--)for(b = 11000; b > 0;b--); } 你只需要用Delay_MS(1200);就可以,但是这么久的延时是很不科学的,这个思路也很不可取.要2min的时间可以用定时器,这样既准确又不会影响主程序的运行.祝成功~

东乡县18359444390: 找一个单片机汇编语言编写的延时1ms的子程序 -
敛古藏青: 多简单的小程序呀:TIME1MS: MOV R6, #2 TIME1: ;延时498uS MOV R7, #248 DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减 ; DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS ;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1.002MS RET此程序实现的是1.002MS的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

东乡县18359444390: 新人单片机做时钟时候延时子程序延时方式没懂,求dalao解答,程序如下 -
敛古藏青: delay子程序就是让单片机不做什么事情,在等待子程序完成条件.void delay(n) //延时子程序 {while(n--) //这里把传入的参数当作次数来用 { for(i=120;i>0;i--); // 等待i减完 } }

东乡县18359444390: 单片机原理与应用 编写延时2min的延时子程序 -
敛古藏青: 编个子程序(函数)延时1秒,然后调用它120次.1秒的延时,看你使用的晶振,计算每条指令的时间,反复执行空操作.

东乡县18359444390: 单片机200延时子程序 -
敛古藏青: DELAY200ms:MOV R7,#4 D1: MOV R6,#116 D0: MOV R5,#214DJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1NOPRETDELAY=((内层循环X2+3)X(中层物环+3)*外层循环+3)

东乡县18359444390: 单片机延时程序的延时时间怎么算的? -
敛古藏青: 单片机的延时程序通过执行指令来达到延时效果,这个时间等于执行的指令需要的时间,而一个指令需要的时间叫做指令周期,这个时间等于若干个机器周期. 扩展资料: 1丶指令周期,是每种运算需要的时间,如加法、逻辑等,是每一步进行这种指令运算需要的时间,是机器周期的整数倍,这种周期不定. 2丶51单片机12M晶振,晶振周期1/12微妙,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微妙=1微妙. 3丶1个毫秒延时子程序如下: void delay1ms(uint ms) { uint i,j; for(i=0;i<ms;i++) { for(j=0;j<110;j++); } }

东乡县18359444390: 单片机延时程序
敛古藏青: 用12MHz的晶振(机器周期12x1/12微秒=1微秒) DELAY:MOV R0,#4 ;机器周=1微秒NOP ;空操作=1微秒DJNZ R0,$ ;原地跳转,运行减一机器周=2微秒x4=8微秒RET ;机器周=2微秒 ;说有时间加起来就=12微秒了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网