各种汇编延时程序大集合

发布者:温柔阳光最新更新时间:2015-11-09 来源: eefocus关键字:汇编  延时程序  大集合 手机看文章 扫描二维码
随时随地手机看文章
在论坛上看到不少不错的延时程序,整理如下共同分享:

 

 

精确延时计算公式:

延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5

 


 

;延时5秒左右
DELAY5S:PUSH   04H                
        PUSH   05H            
        PUSH   06H                
        MOV    R4,#50             
DELAY5S_0:MOV  R5,#200                              
DELAY5S_1:MOV  R6,#245                              
        DJNZ   R6,$                         
        DJNZ   R5,DELAY5S_1
        DJNZ   R4,DELAY5S_0                         
        POP    06H                  
        POP    05H                  
        POP    04H                  
        RET                                          

 



;513微秒延时程序
DELAY:  MOV     R2,#0FEH
DELAY1: DJNZ    R2,DELAY1
 RET

 

 


 

;10毫秒延时程序
DL10MS: MOV     R3,#14H
DL10MS1:LCALL   DELAY
        DJNZ    R3,DL10MS1
        RET

 


 

;0.1s延时程序12mhz
DELAY: MOV R6,#250
DL1: MOV R7,#200
DL2: DJNZ R6,DL2
 DJNZ R7,DL1
 RET

 


 

;延时1046549微秒(12mhz)
;具体的计算公式是:
;((((r7*2+1)+2)*r6+1)+2)*r5+1+4 = ((r7*2+3)*r6+3)

*r5+5
DEL : MOV  R5,#08H
DEL1: MOV  R6,#0FFH
DEL2: MOV  R7,#0FFH
        DJNZ  R7,$
        DJNZ  R6,DEL2
        DJNZ  R5,DEL1
        RET

 


 

;1秒延时子程序是以12MHz晶振
Delay1S:mov  r1,#50
del0:  mov r2,#91
del1:   mov r3,#100 
        djnz r3,$ 
        djnz r2,del1 
        djnz r1,del0
   Ret

 


 

;1秒延时子程序是以12MHz晶振为例算指令周期耗时
KK: MOV    R5,#10    ;1指令周期1
K1: MOV    R6,#0FFH    ;1指令周期10
K2: MOV    R7,#80H    ;1指令周期256*10=2560
K3: NOP         ;1指令周期

128*256*10=327680
 DJNZ    R7,K3    ;2指令周期

2*128*256*10=655360
 DJNZ    R6,K2    ;2指令周期

2*256*10=5120
 DJNZ    R5,K1    ;2指令周期2*10=20
 RET      
;2指令周期21+10+2560+327680+655360+5120+20+2=990753
;约等于1秒1秒=1000000微秒

 



;这个算下来也只有0.998抄
T_0:  MOV   R7,#10;
D1:  MOV   R6,#200;
D2:  MOV   R5,#248;
  DJNZ   R5,$
  DJNZ   R6,D2;
  DJNZ   R7,D1;
  RET

 

 


 

;这样算下来应该是1.000011秒
T_0:  MOV   R7,#10;
D1:  MOV   R6,#200;
D2:  NOP
  MOV   R5,#248;
  DJNZ   R5,$
  DJNZ   R6,D2;
  DJNZ   R7,D1;
  RET

 


 

DELAY_2S:   ;10MS(11.0592mhz)
 MOV R3,#200
 JMP DELAY10MS
DELAY_100MS:    ;100MS(11.0592mhz)
 MOV R3,#10
 JMP DELAY10MS
DELAY_10MS:
 MOV R3,#1
DELAY10MS:    ;去抖动10MS

 


 

(11.0592mhz)
 MOV R4,#20
DELAY10MSA:
 MOV R5,#247
 DJNZ R5,$
 DJNZ R4,DELAY10MSA
 DJNZ R3,DELAY10MS
 RET

 



 
DELAY_500MS:                    ;500500MS
 MOV R2,#208
 JMP DELAY_MS
DELAY_175MS:   ;175MS
 MOV R2,#73
 JMP DELAY_MS
delaY_120MS:   ;120MS
 MOV R2,#50
 JMP DELAY_MS
delay_60ms:   ;60ms
 MOV R2,#25
 JMP DELAY_MS
delay_30ms:   ;30ms
 MOV R2,#12
 JMP DELAY_MS
DELAY_5MS:   ;5MS
 MOV R2,#2
;===================================
DELAY_MS:
 CALL DELAY2400
 DJNZ R2,DELAY_MS
RET
;===================================
DELAY2400:   ;10x244+4=2447

 

/1.024=2390
 MOV  R0,#244  ;1
DELAY24001:
 MUL AB  ;4
 MUL AB  ;4
 DJNZ R0,DELAY24001 ;2
 RET

 


 

DELAY: ;延时子程序(1秒)
MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0B2H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET


MOV R2,#10 ;延时1秒
LCALL DELAY
MOV R2,#50 ;延时5秒
LCALL DELAY
DELAY: ;延时子程序
PUSH R2
PUSH R1
PUSH R0
DELAY1: MOV R1,#00H
DELAY2: MOV R0,#0B2H
DJNZ R0,$
DJNZ R1,DELAY2 ;延时 100 mS
DJNZ R2,DELAY1
POP R0
POP R1
POP R2
RET

 


 1:DEL:   MOV   R7,   #200

 

           DEL1:   MOV   R6,   #123

                        NOP

           DEL2:   DJNZ   R6,   DEL2

                        DJNZ   R7,   DEL1

                        RET

是50.001ms 算法是:
0.001ms+200*0.001ms+200*0.001ms+200*123*0.002ms+200*0.002ms

;(123*2+4)*200+1

 


 

2: DEL: MOV R7, #200

 DEL1: MOV R6, #123

 DEL2:NOP

      DJNZ R6,DEL2

      DJNZ R7,DEL1

RET

 


 

D500MS:
PUSH PSW
SETB RS0
MOV R7,#200
D51: MOV R6,#250
D52: NOP
NOP
NOP
NOP
DJNZ R6,D52
DJNZ R7,D51
POP PSW
RET

 



DELAY: ;延时1毫秒
PUSH PSW
SETB RS0
MOV R7,#50
D1: MOV R6,#10
D2: DJNZ R6,$
DJNZ R7,D1
POP PSW
RET

 

 


 

  ORG   0
        LJMP    MAIN
            ORG    000BH
        LJMP    CTC0
   MAIN:  MOV   SP, #50H
          CLR   EA
          MOV   TMOD, #01H
          MOV    TH0,#3CH
          MOV    TL0,#0B0H
          MOV    R4,  #10
           SETB   ET0
           SETB   EA
           SETB   TR0
            SJMP  ;
   CTC0:   MOV  TH0, #3CH
           MOV  TL0, #0B0H
           DJNZ  R4, LP
           CPL   P1.0
           MOV   R4,  #10
     LP:    RETI
          END

关键字:汇编  延时程序  大集合 引用地址:各种汇编延时程序大集合

上一篇:单片机的消抖
下一篇:单片机延时汇编语言计算方法

推荐阅读最新更新时间:2024-03-16 14:38

gcc代码反汇编查看内存分布[1]: gcc
# gcc -v gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 重点: 代码中的内存分配, 地址从低到高: 代码段(RO, 保存函数代码) -- 只读数据段(RO, 保存常量) -- 数据段(RW, 已初始化并且初始值不为0的全局变量和静态变量) -- bss段(RW, 未初始化或者初始化为0的全局变量和静态变量). 程序运行起来之后, 堆区和栈区的变量地址是动态分配的. #include stdio.h #include stdlib.h int global_ni; // .bss int global_iz = 0 ; // .bss in
[单片机]
51单片机超声波测距程序C调汇编
#include reg51.h #include absacc.h //绝对地址存取 #include math.h #pragma NOREGPARMS //固定单元参数传递,以减少C与汇编在寄存器Rn参数传 #define f DBYTE //cm #define g DBYTE //dm #define h DBYTE //m #define i DBYTE unsigned data a _at_ 0x32; // #define a DWORD(双字节) / DBYTE(1个字节),这两种做法都不行?定义错
[单片机]
MCS-51单片机汇编中的“寻址范围”
指令的占用的字节数可以不放在心上,因为现在的单片机的ROM容量都挺大的。 但如果寻址范围不注意的话,一旦汇编源程序长了就很容易出现错误。 特别是跳转指令等。 DPTR是16位寄存器。 LJMP addr16-------------0000H TO FFFFH AJMP addr11-------------0000H TO 07FFH SJMP rel-------------------负80H TO 7FH JMP @A+DPTR----------0000H TO FFFFH JZ rel-----------------------负80H TO 7FH ;累加器为0跳转 JNZ rel----------
[单片机]
PIC中档单片机汇编指令详解(7)
GOTO 程序无条件跳转到指定的地址 语法形式:GOTO m 操作数:m为11位立即数指定的目标地址 执行时间:2个指令周期 执行过程: m PC【10:0】 PCLATH【4:3】 PC【12:11】 状态标志影响:无 说明:程序无条件立即强行跳转到目的地址处继续执行。目的地址由本指令内含的11位地址码和特殊寄存器PCLATH中的【4:3】一起构成完整的13位地址。 指令范例: ORG 0x000 ;伪指令指定程序的起始地址 GOTO Main ;程序跳转到标号指定的位置处继续执行 MOVLW W寄存器赋立即数 语法形式:MOVLW k 操作数:k为8位立即数 执行时间:一个指令周期 执行过程:k W
[单片机]
花样流水灯的设计3(单片机-汇编
;This program will show you cycle glitter between 8 led lamps ; maker:Chen Weiwu ; date:2012-11-08 ; version:1.0.0 ;------------------------------------------------------------- ;Define Ledprt equ p0 SegDisplay equ p2 Button equ p1 ;---------------------- ;Set the initiation address which the pro
[单片机]
C51和汇编混合编程函数声明
最近看了一些C51的书,遇到了困难,查阅后终于理解了,望对大家有帮助! 先看个例子: ?PR?CLRME SEGMENT CODE; //在程序存储区中定义段 PUBLIC CLRME; //声明函数 RSEG ?PR?CLRME; //函数可被连接器放置在任何地方 CLRME: MOV R0,#7FH CLR A LOOP: MOV @R0,A DJNZ R0,LOOP RET END 只需给存放功能函数的段指定一个段名; ?PR? CLRME SEGMENT CODE;作用是在程序存储区中定义段,CLRME为段名,?PR?表示段位于程序存储区内 PUBLIC CLRME;作用是声明函数为公共函数 RSEG ?PR?CLRME
[单片机]
边显示滚动汉字边播放音乐的汇编程序
//------------------------------------------ //51hei-5开发板测试程序.ASM // 音乐播放器 //硬件说明:12M晶振/MCU:89C51 //编写人:李春起 //编定日期:2009.11.24 //修改日志:2010.01.05 // 2010.01.11 加暂停功能 // 2010.01.16 加第三首歌曲 // 2010.01.17 加第四首歌曲 // 2010.01.18 加第五首歌曲 // 2010.02.19 去除休止时杂声 // 2010.03.02 定时器T1中断显示 //------------
[单片机]
AT93C46汇编读写示例程序
AT93C46汇编读写示例程序; 说明: 软件包仅适用于93C46 8位存储器结构状态,软件包可嵌入到80C51 ROM中任一空间。 ; fosc = 12MHz ;---------------------------------------------------------- R31 EQU 1FH CS EQU P1.0 ;片选端 SK EQU P1.1 ;模拟时钟信号输出端 DI EQU P1.2 ;串行数据输出端 DO EQU P1.3 ;串行数据输入端 ;---------------------------------------------------------
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved