打印
[51单片机]

一个简单的关于延迟函数的问题

[复制链接]
2401|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z351621961|  楼主 | 2013-9-23 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }
           
        }
        
}
为什么这种for循环定义的10ms延迟函数是零误差(晶振视为12MHZ)

另外附上汇编代码:
DELAY:       
        MOV         R5,#04H          
F3:       
        MOV         R6,#0FFH
F2:       
        MOV         R7,#0FFH
F1:       
        DJNZ         R7,F1             
        DJNZ         R6,F2
        DJNZ         R5,F3
        RET

        END

相关帖子

沙发
ayb_ice| | 2013-9-23 11:25 | 只看该作者
0误差又有啥意义呢,一样受中断影响

使用特权

评论回复
板凳
z351621961|  楼主 | 2013-9-23 12:24 | 只看该作者
ayb_ice 发表于 2013-9-23 11:25
0误差又有啥意义呢,一样受中断影响

倒不是0误差,我只是想知道为什么这么循环的结果是10ms左右(如何计算的)

使用特权

评论回复
地板
z351621961|  楼主 | 2013-9-23 12:25 | 只看该作者
ayb_ice 发表于 2013-9-23 11:25
0误差又有啥意义呢,一样受中断影响

倒不是0误差,我只是想知道为什么这么循环的结果是10ms左右(如何计算的)

使用特权

评论回复
5
gx_huang| | 2013-9-23 12:45 | 只看该作者
上面的是零误差?这么巧?
自己根据汇编代码的执行时间计算一下就可以了。
对于不同的51内核芯片,时间不一样的。

使用特权

评论回复
6
z351621961|  楼主 | 2013-9-23 16:40 | 只看该作者
gx_huang 发表于 2013-9-23 12:45
上面的是零误差?这么巧?
自己根据汇编代码的执行时间计算一下就可以了。
对于不同的51内核芯片,时间不一 ...

是不是0误差倒无关紧要,我想知道怎么根据for循环估算时间,能说下吗?

使用特权

评论回复
7
ayb_ice| | 2013-9-23 17:13 | 只看该作者
z351621961 发表于 2013-9-23 16:40
是不是0误差倒无关紧要,我想知道怎么根据for循环估算时间,能说下吗?

根据指令运行时间算出来的呗

使用特权

评论回复
8
gx_huang| | 2013-9-23 17:20 | 只看该作者
DELAY:        
        MOV         R5,#04H    =1t           
F3:
        MOV         R6,#0FFH   =1t
F2:        
        MOV         R7,#0FFH   =1t
F1:        
        DJNZ         R7,F1   =2t*R7=510t         
        DJNZ         R6,F2   =(1t+510t+2t)*R6=130815t
        DJNZ         R5,F3   =(1t+130815t+2t)*R5
        RET        =2t
其实CALL语句也需要2t
总时间就是4t+(1t+130815t+2t)*R5
一般不要这么复杂,实际调整R6/R7的值,调整延时大小。R5是输入的变量。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
z351621961 + 1 赞一个!
9
gx_huang| | 2013-9-23 17:22 | 只看该作者
如果你为了准确,可以插入NOP

使用特权

评论回复
10
z351621961|  楼主 | 2013-9-24 17:13 | 只看该作者
gx_huang 发表于 2013-9-23 17:20
DELAY:        
        MOV         R5,#04H    =1t           
F3:

哦,这么说就明白了,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝