单片机C51编程两个问题(里面详细,欢迎高手) 10
问题一:有一个延时函数如下所示voidDelay(unsignedinti){unsignedintj;for(;i>0;i--)for(j=0;j<125;j++){;...
问题一:有一个延时函数如下所示
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}为什么说Delay(500)就是延时0.5s呢?
问题二:定时器工作方式1的定时时间是(2^16-计数初值)×晶振周期 ×12,为什么是这样呢? 展开
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}为什么说Delay(500)就是延时0.5s呢?
问题二:定时器工作方式1的定时时间是(2^16-计数初值)×晶振周期 ×12,为什么是这样呢? 展开
5个回答
展开全部
12个晶振周期为一个机器周期,在单片机里面的指令都以机器周期来计算的,所以要乘以12,至于那个2^16-计数初值那就是定时器的溢出计算式,也就是从计数初值到溢出所占用的机器周期来计算的!~
那个延时的问题,我看有问题。也不知道你用的是多少的晶振。
不过大致的计算式是:震荡周期*12*125*500=延时时间。这个是大致的,有一定的误差,如果你真要精确算,那你得用外部高精度晶振,然后用汇编语言取算。
那个延时的问题,我看有问题。也不知道你用的是多少的晶振。
不过大致的计算式是:震荡周期*12*125*500=延时时间。这个是大致的,有一定的误差,如果你真要精确算,那你得用外部高精度晶振,然后用汇编语言取算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题一:为什么说Delay(500)就是延时0.5s呢?
是估算的. C 不能精确定时, 通过调节 for(j=0;j<125;j++) 的 125的数值.
取125刚好接近 1ms.
我就做了好几个 20us, 1ms, 1s,的delay程序. 把他们运行很多次后, 用秒表核对. 1ms 程序也是用的125 这个值, 很接近1ms. 试过其他数值,运行1天后偏差很大.比如124. 一天后就差了10多分钟.
Delay(500)就是delay 500 个 1ms = 0.5s
问题二:晶振周期 ×12 = 晶振频率 / 12,
应该知道为什么了吧? 哈.
是估算的. C 不能精确定时, 通过调节 for(j=0;j<125;j++) 的 125的数值.
取125刚好接近 1ms.
我就做了好几个 20us, 1ms, 1s,的delay程序. 把他们运行很多次后, 用秒表核对. 1ms 程序也是用的125 这个值, 很接近1ms. 试过其他数值,运行1天后偏差很大.比如124. 一天后就差了10多分钟.
Delay(500)就是delay 500 个 1ms = 0.5s
问题二:晶振周期 ×12 = 晶振频率 / 12,
应该知道为什么了吧? 哈.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、这个函数需要看晶振及单片机,得到一条指令的时间
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--) //i=500
for(j=0;j<125;j++)
{;}
}
时间 = 500*一条for指令的时间。
2、看下书吧,书上解释的很详细。
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--) //i=500
for(j=0;j<125;j++)
{;}
}
时间 = 500*一条for指令的时间。
2、看下书吧,书上解释的很详细。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用MEDWIN仿真软件,可以仿真出一个执行一次DELAY函数的时间。
不同的单片机或不同的晶振频率,执行同一个函数的时间是不一样的。
不同的单片机或不同的晶振频率,执行同一个函数的时间是不一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我们都初学,好好看看书吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询