标题:
关于延时函数 与 机器周期,问题请教。
[打印本页]
作者:
csz9981
时间:
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呀。
作者:
黄煌皇
时间:
2017-1-15 22:49
你可能需要先了解震荡周期、时钟周期、机器周期之间的关系
作者:
不倒翁.WZT
时间:
2017-1-16 07:19
标题:
RE: 关于延时函数 与 机器周期,问题请教。
for(b=38;b>0;b--)并不是运行了38个周期,而是运行了38次,同理,for(a=130;a>0;a--)并不是运行了130个周期,而是运行了130次。这条指令可能是双周期指令,甚至更多。另外,10ms也就是随便一说。究竟延时是多少,可通过KEIL软件自带仿真功能测试一下。
作者:
a627534198
时间:
2017-1-16 17:13
还与单片机所选的晶振有关系
作者:
mengxia0510
时间:
2017-1-16 17:37
建议用定时器看看这个函数的运行时间
作者:
jiajuntao
时间:
2017-1-17 08:28
延时时间,与单片机的时钟,指令,运行情况有关系,在熟悉资料的情况下,可以借助工具进行验证
作者:
cam226390674
时间:
2017-1-18 14:19
需要先了解震荡周期
作者:
lyl44
时间:
2017-1-18 14:20
双周期指令
作者:
angmall
时间:
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
作者:
ahshmj
时间:
2017-1-28 10:07
如果是12M的晶振,1个机器周期是1US,如果是6M晶振,1个机器周期是2US,4940*2个周期约等于10ms了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1