打印
[疑难问答]

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

[复制链接]
608|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
handleMessage|  楼主 | 2017-2-9 19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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  吧???


我HC6800ES V2.0的板子,12MHZ的晶振,机器周期书上说是1us呀。
沙发
zhouhuanの| | 2017-2-9 19:43 | 只看该作者
你应该先了解震荡周期、时钟周期、机器周期之间的关系。。

使用特权

评论回复
板凳
wanglaojii| | 2017-2-9 19:47 | 只看该作者

还与单片机所选的晶振有关系

使用特权

评论回复
地板
laozhongyi| | 2017-2-9 19:54 | 只看该作者

延时时间,与单片机的时钟,指令,运行情况有关系,在熟悉资料的情况下,可以借助工具进行验证

使用特权

评论回复
5
Edisons| | 2017-2-9 19:55 | 只看该作者
这个需要先了解震荡周期吧

使用特权

评论回复
6
_gege| | 2017-2-9 20:00 | 只看该作者
如果是12M的晶振,1个机器周期是1US,如果是6M晶振,1个机器周期是2US,4940*2个周期约等于10ms了。

使用特权

评论回复
7
Mozarts| | 2017-2-9 20:03 | 只看该作者
程序共有三层循环

一层循环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

使用特权

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

本版积分规则

166

主题

1689

帖子

4

粉丝