单片机延时1ms汇编_单片机1ms延时 - CSDN
  • 想要调用子程序,只要输入 LCALL XXXX,XXXX代表你子程序的名字 如一个延时子程序 LCALL DELY1MS 这是调用一个延时1毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样...

    想要调用子程序,只要输入 LCALL XXXX,XXXX代表你子程序的名字 如一个延时子程序 LCALL DELY1MS 这是调用一个延时1毫秒的延时子程序 当然,子程序的名字可以自己定 DELY1MS: 这个名字一定要与调用中出现的名字一样,否则的话,调用的就不是这个子程序了

    DELY1MS:

    MOV R7,#250

    DL1: NOP

             NOP

            DJNZ R7,DL1

    RETRET的作用是子程序返回。调用一个子程序,当单片机执行到RET语句的时候,单片机就会返回到调用的地方并继续向下执行。

    下面给你一个例程:

    闪烁灯

    ORG 00H

    AJMP START

    ORG 30H

    START:

                 MOV P0,#00H

    LCALL DELY;调用延时子程序

    MOV P0,#0FFH

    LCALL DELY;调用延时子程序

    AJMP START

    DELY:

    MOV R7,#250

    DL1:MOV R6,#250

    DJNZ R6,$

    DJNZ R7,DL1

    RET

     

    END

    展开全文
  • 51单片机1ms延时代码

    2020-07-30 23:32:33
    51单片机1ms延时的代码,适用于12M晶振的。
  • STC单片机不同晶振时1MS精确延时程序
  • 以下为使用汇编代码产生的0.2s延时。关于汇编与C语言的延时更详细的问题推荐彭老师的文章“51系列单片机延时程序运行时间的计算”。

    以下为使用汇编代码产生的0.2s延时。

    关于汇编与C语言的延时计算问题,推荐一篇好文章——彭老师的“51系列单片机延时程序运行时间的计算”。

     

    展开全文
  • 51单片机延时程序

    2013-03-28 19:31:13
    延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器 周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指 令周期的区别...

     

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

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

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

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

    在交通灯的控制程序中,需要控制红灯亮的时间持续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 ;结束程序

    51单片机延时程序 - 小勋 - Personal Space

    http://blog.163.com/jinshaoxun@126/blog/static/327753742012819112859510/

    展开全文
  • 单片机延时C语言程序

    2015-07-31 22:15:41
    (晶振12MHz,一个机器周期1us.) 一. 500ms延时子程序 程序:  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--); } 产生的汇编: C:0x0800 7...
    (晶振12MHz,一个机器周期1us.)
    一. 500ms延时子程序
    程序: 
    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--);
    }
    产生的汇编:
    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;i>0;i--)
         for(j=132;j>0;j--)
           for(k=150;k>0;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;i>0;i--)
         for(j=4;j>0;j--)
           for(k=248;k>0;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;h>0;h--)
         for(i=4;i>0;i--)
           for(j=116;j>0;j--)
             for(k=214;k>0;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



    时钟周期
    
        时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
    
       在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。
    
       在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
    
    机器周期
    
        在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
    
    指令周期
    
        指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
        通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
    
    <h1 class="mb-5" style="margin: 0px; padding: 0px;"><span class="ask-title">当80C51单片机晶振频率为12MHz时,时钟周期.机器周期各是多少?</span></h1><pre id="answer-content-375512566" class="answer-text mb-10" name="code" style="white-space: pre-wrap; word-wrap: break-word;">答:1.时钟周期为晶振频率的倒数:1/12微秒;
        2.机器周期为12个时钟周期:1微秒;
    
    

    展开全文
  • 目前在单片机中有不少延时的方法: ...void delay1ms(void) //误差 0us,延时1ms {  unsigned char a,b;  for(b=199;b>0;b--)  for(a=1;a>0;a--); } 可以用单片机精灵来获取更多延时,下载地址https://pan
  • 延时函数: DELAY: MOV R7, #250 ;(1)D1: MOV R6, #250 ;(2) D2: DJNZ R6, D2 ;(3) DJNZ R7, D1 ;(4) RET ;(5) 第一句是定义一个延时函数标号,并将250传到R7 第二句是放置一个标号,并把250放到R6 第三句是...
  • 51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)  一. 500ms延时子程序   void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=
  • 经常看些东西,有时在书上,有时在网上,还有的是突然醒悟,也该做一些总结,最近想总结一下单片机的定时以及延时问题。 单片机主要是两种延时方式: 1.硬件延时:要用到定时器/计数器,这种方法可以提高CPU的工作...
  • 延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器 周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指 令周期的区别和...
  • 延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F...1单片机延时程序的延时时间怎么算的? 答:如果用循环语句实现
  • 单片机 软件延时时间控制 一、简述 记--通过代码方式实现软件延时(不精确延时)。 二、指令周期 单片机需要一个时钟信号送给内部各个电路,才能使它们有节拍地协同工作。时钟信号的频率是由外部震荡电路的...
  • 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确...
  • 单片机延时问题20问

    2019-03-22 16:19:26
    简介:延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP...1单片机延时程序的延时时间怎么算的? 答:如果用循环语句实现的循环,没法计算,...
  • #include <reg51.H> #define STC_Y1 97560U // 89C/LEXX、90C/LEXX #define STC_Y3 14050U // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A版)、15F204E/L204EA(A版) #define STC_Y5 13043U // 15F/L/Wx...
  • 微机汇编一秒延时子程序,比较难得的资源 ,单片机延时一秒容易,微机上比较困难
  • 参考了51单片机 Keil C 延时程序的简单研究,自己也亲身测试和计算了一些已有的延时函数。这里假定单片机是时钟频率为12MHz,则一个机器周期为:1us.参考了51单片机 Keil C 延时程序的简单研究后,我们可知道, 在...
  • 但在部分算法讲解中发现有错误之处,而且延时的具体算法讲得并不清楚,相当一部分人对此仍很模糊,授人鱼,不如授之以渔,本文将以12MHZ晶振为例,详细讲解MCS-51单片机汇编程序延时的精确算法。  指令周期、...
  • 51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器...
1 2 3 4 5 ... 20
收藏数 1,040
精华内容 416
关键字:

单片机延时1ms汇编