打印

关于延时函数与机器周期问题请教

[复制链接]
704|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2018-6-14 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
130*38=4940 个机器周期,就是10ms???  4940个机器周期,应该是  4940us  吧???


void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
            
}



200 个机器周期,就是1ms???  200 个机器周期,应该是  200us  吧???
沙发
zhuww|  楼主 | 2018-6-14 09:20 | 只看该作者
机器周期书上说是1us呀。

使用特权

评论回复
板凳
zhanglli| | 2018-6-14 09:22 | 只看该作者
你应该先了解震荡周期、时钟周期、机器周期之间的关系。。

使用特权

评论回复
地板
guoyt| | 2018-6-14 09:24 | 只看该作者
还与单片机所选的晶振有关系

使用特权

评论回复
5
hanwe| | 2018-6-14 09:26 | 只看该作者
延时时间,与单片机的时钟,指令,运行情况有关系,在熟悉资料的情况下,可以借助工具进行验证

使用特权

评论回复
6
llia| | 2018-6-14 09:35 | 只看该作者
这个需要先了解震荡周期吧

使用特权

评论回复
7
wangzsa| | 2018-6-14 09:38 | 只看该作者
如果是12M的晶振,1个机器周期是1US,如果是6M晶振,1个机器周期是2US,4940*2个周期约等于10ms了。

使用特权

评论回复
8
zhanglli| | 2018-6-14 09:42 | 只看该作者
程序共有三层循环

一层循环n:R5*2 = 130*2 = 260us DJNZ 2us

二层循环m:R6*(n+3) = 38*263 = 9994us DJNZ 2us + R5赋值 1us = 3us

三层循环: R7*(m+3) = 1*9997 = 9997us DJNZ 2us + R6赋值 1us = 3us

使用特权

评论回复
9
zhuww|  楼主 | 2018-6-14 09:45 | 只看该作者

哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

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

本版积分规则

893

主题

8252

帖子

1

粉丝