找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4536|回复: 9
收起左侧

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

[复制链接]
ID:161933 发表于 2017-1-15 22:15 | 显示全部楼层 |阅读模式


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呀。
回复

使用道具 举报

ID:100391 发表于 2017-1-15 22:49 | 显示全部楼层
你可能需要先了解震荡周期、时钟周期、机器周期之间的关系
回复

使用道具 举报

ID:149988 发表于 2017-1-16 07:19 | 显示全部楼层

RE: 关于延时函数 与 机器周期,问题请教。

for(b=38;b>0;b--)并不是运行了38个周期,而是运行了38次,同理,for(a=130;a>0;a--)并不是运行了130个周期,而是运行了130次。这条指令可能是双周期指令,甚至更多。另外,10ms也就是随便一说。究竟延时是多少,可通过KEIL软件自带仿真功能测试一下。
回复

使用道具 举报

ID:160071 发表于 2017-1-16 17:13 | 显示全部楼层
还与单片机所选的晶振有关系
回复

使用道具 举报

ID:116683 发表于 2017-1-16 17:37 | 显示全部楼层
建议用定时器看看这个函数的运行时间
回复

使用道具 举报

ID:104472 发表于 2017-1-17 08:28 | 显示全部楼层
延时时间,与单片机的时钟,指令,运行情况有关系,在熟悉资料的情况下,可以借助工具进行验证
回复

使用道具 举报

ID:162242 发表于 2017-1-18 14:19 | 显示全部楼层
需要先了解震荡周期
回复

使用道具 举报

ID:159575 发表于 2017-1-18 14:20 来自手机 | 显示全部楼层
双周期指令
回复

使用道具 举报

ID:155507 发表于 2017-1-27 17:32 | 显示全部楼层
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--);
}
计算分析:

程序共有三层循环

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

循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

延时总时间 = 三层循环 + 循环外 = 9997+5 = 10002us =10.002ms

计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5

//误差 2us
回复

使用道具 举报

ID:7485 发表于 2017-1-28 10:07 | 显示全部楼层
如果是12M的晶振,1个机器周期是1US,如果是6M晶振,1个机器周期是2US,4940*2个周期约等于10ms了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表