lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.forumotion.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    一个关于延时的问题

    分享
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    一个关于延时的问题

    帖子 由 Admin 于 2013-09-21, 11:52 pm

    LED灯亮;
    DelayMs(500);
    LED灯灭;
    DelayMs(500);
    然后循环.....
    上面提到的延时函数如下:
    第一种:
    void DelayMs(unsigned int xms)
    {
        unsigned int  y;
        for(; xms ; xms--)
              for(y = 120; y ; y--);
    }
    第二种:
    void DelayMs(unsigned int xms)
    {
        unsigned char  y;
        for(; xms ; xms--)
              for(y = 120; y ; y--);
    }
     
     
    结果是:
    利用这两个延时的时候效果是不同的。用第一种时闪烁的慢一些,第二种闪烁比较快
    有谁能帮我解释一下!!!
    avatar
    taokan1991
    论坛版主
    论坛版主

    帖子数 : 24
    威望 : 0
    注册日期 : 12-11-23

    回复: 一个关于延时的问题

    帖子 由 taokan1991 于 2013-09-21, 11:56 pm

    liklon 写道::LED灯亮;
    DelayMs(500);
    LED灯灭;
    DelayMs(500);
    然后循环.....
    上面提到的延时函数如下:
    第一种:
    void DelayMs(unsigned int xms)
    {
        unsigned int  y;
        for(; xms ; xms--)
              for(y = 120; y ; y--);
    }
    第二种:
    void DelayMs(unsigned int xms)
    {
        unsigned char  y;
        for(; xms ; xms--)
              for(y = 120; y ; y--);
    }
     
     
    结果是:
    利用这两个延时的时候效果是不同的。用第一种时闪烁的慢一些,第二种闪烁比较快
    有谁能帮我解释一下!!!
    char 的y 在单片机里运算的快些
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    回复: 一个关于延时的问题

    帖子 由 Admin 于 2013-09-22, 12:07 am

    第一种的汇编:
    _Delay_Ms:
    USING 0

     C0001:
    MOV   A,R7
    ORL   A,R6
    JZ   C0007

    MOV   R5,#078H
    MOV   R4,#00H
    C0004:
    MOV   A,R5
    DEC   R5
    JNZ   C0011
    DEC   R4
    C0011:
    MOV   A,R5
    ORL   A,R4
    JNZ   C0004
    C0003:
    MOV   A,R7
    DEC   R7
    JNZ   C0001
    DEC   R6
    C0012:
    SJMP C0001
    C0007:
    RET
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    回复: 一个关于延时的问题

    帖子 由 Admin 于 2013-09-22, 12:08 am

    第二种的汇编:
    _Delay_Ms:
    USING 0

     C0001:
    MOV   A,R7
    ORL   A,R6
    JZ   C0007

    MOV   R5,#078H
     C0004:
    DJNZ R5, C0004
     C0003:
    MOV   A,R7
    DEC   R7
    JNZ   C0001
    DEC   R6
     C0011:
    SJMP C0001

     C0007:
    RET
    avatar
    taokan1991
    论坛版主
    论坛版主

    帖子数 : 24
    威望 : 0
    注册日期 : 12-11-23

    回复: 一个关于延时的问题

    帖子 由 taokan1991 于 2013-09-22, 12:11 am

    liklon 写道::第一种的汇编:
    _Delay_Ms:
    USING 0

     C0001:
    MOV   A,R7
    ORL   A,R6
    JZ   C0007

    MOV   R5,#078H
    MOV   R4,#00H
    C0004:
    MOV   A,R5
    DEC   R5
    JNZ   C0011
    DEC   R4
    C0011:
    MOV   A,R5
    ORL   A,R4
    JNZ   C0004
    C0003:
    MOV   A,R7
    DEC   R7
    JNZ   C0001
    DEC   R6
    C0012:
    SJMP C0001
    C0007:
    RET
    看的不是很懂  为啥慢些啊 好像char 是8为运算的快些吧
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    回复: 一个关于延时的问题

    帖子 由 Admin 于 2013-09-22, 12:18 am

    taokan1991 写道::
    liklon 写道::第一种的汇编:

    C0007:
    RET
    看的不是很懂  为啥慢些啊 好像char 是8为运算的快些吧
    两个汇编相差那么多个指令,,肯定消耗的时间不同
    avatar
    xufenglei
    中级会员
    中级会员

    帖子数 : 34
    威望 : 2
    注册日期 : 13-09-15

    回复: 一个关于延时的问题

    帖子 由 xufenglei 于 2013-09-22, 12:50 pm

    细节里面有好多的知识,细节很重要
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 26

    回复: 一个关于延时的问题

    帖子 由 Admin 于 2013-09-22, 2:23 pm

    xufenglei 写道::细节里面有好多的知识,细节很重要
    这正是小问题背后经常有大问题,,以后有啥问题都提出来大家讨论,呵呵说不定又发现没想过的问题Embarassed

      目前的日期/时间是2018-11-20, 1:31 am