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

[复制链接]
606|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 | 显示全部楼层
还与单片机所选的晶振有关系

使用特权

评论回复
hanwe| | 2018-6-14 09:26 | 显示全部楼层
延时时间,与单片机的时钟,指令,运行情况有关系,在熟悉资料的情况下,可以借助工具进行验证

使用特权

评论回复
llia| | 2018-6-14 09:35 | 显示全部楼层
这个需要先了解震荡周期吧

使用特权

评论回复
wangzsa| | 2018-6-14 09:38 | 显示全部楼层
如果是12M的晶振,1个机器周期是1US,如果是6M晶振,1个机器周期是2US,4940*2个周期约等于10ms了。

使用特权

评论回复
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

使用特权

评论回复
zhuww|  楼主 | 2018-6-14 09:45 | 显示全部楼层

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

使用特权

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

本版积分规则

893

主题

8252

帖子

1

粉丝