单片机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,为什么是这样呢?
展开
 我来答
lfflash
2009-07-27 · TA获得超过607个赞
知道小有建树答主
回答量:333
采纳率:0%
帮助的人:148万
展开全部
12个晶振周期为一个机器周期,在单片机里面的指令都以机器周期来计算的,所以要乘以12,至于那个2^16-计数初值那就是定时器的溢出计算式,也就是从计数初值到溢出所占用的机器周期来计算的!~

那个延时的问题,我看有问题。也不知道你用的是多少的晶振。
不过大致的计算式是:震荡周期*12*125*500=延时时间。这个是大致的,有一定的误差,如果你真要精确算,那你得用外部高精度晶振,然后用汇编语言取算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
褒艾0Ir
2009-07-27 · TA获得超过998个赞
知道小有建树答主
回答量:615
采纳率:50%
帮助的人:145万
展开全部
问题一:为什么说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,
应该知道为什么了吧? 哈.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiu1123
2009-07-27 · 超过16用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:44.5万
展开全部
1、这个函数需要看晶振及单片机,得到一条指令的时间
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--) //i=500
for(j=0;j<125;j++)
{;}
}
时间 = 500*一条for指令的时间。
2、看下书吧,书上解释的很详细。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
coastchen
2009-07-27 · 超过13用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部
用MEDWIN仿真软件,可以仿真出一个执行一次DELAY函数的时间。
不同的单片机或不同的晶振频率,执行同一个函数的时间是不一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
120马恒伟
2009-07-27 · 超过18用户采纳过TA的回答
知道答主
回答量:130
采纳率:0%
帮助的人:68.5万
展开全部
我们都初学,好好看看书吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式