51单片机中的延时应该怎么计算?

例如1ms的延时(如下)是怎么计算出来的?希望能具体说说。voiddelay1ms(void)//12M晶振{unsignedchara,b,c;for(c=1;c>0;... 例如1ms的延时(如下)是怎么计算出来的?希望能具体说说。

void delay1ms(void) //12M晶振
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
展开
 我来答
慢生活ican
2014-05-03 · TA获得超过131个赞
知道小有建树答主
回答量:64
采纳率:0%
帮助的人:84.9万
展开全部
for(a=2;a>0;a--) // 2微秒, 执行2次(a+2)是4微秒;

for(b=142;b>0;b--) // 2微秒, 执行142次,for(a=2;a>0;a--)是4微秒,即2*(142*4);
for(c=1;c>0;c--) // 2微秒, 执行1次,即2*(142*4)=1136微秒;
b=125,1000/8=125,再减去其它调用时间,应该b取值不大于125。
追问
这些时间是怎么得出来的?
追答
51单片机执行一条指令一般是1---3微秒(12MHz),执行一条减一-判断-跳转指令,就是2微秒,这是c语言翻译为机器语言后的指令,cjne或djnz(汇编语言),编译器用什么指令和方法,需要你自己试验,我说的只是一种。
匿名用户
2014-05-03
展开全部
两种方法,精确的话用定时器,不精确的话用函数。
追问
我只想要for延时的计算方法。。。不要延时方法。。。
追答
首先根据晶振算出单片机一条指令需要多长时间,然后for多少个就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不自知的小强
2014-05-03
知道答主
回答量:6
采纳率:0%
帮助的人:5.3万
展开全部
你看一下它编译出来的汇编代码是怎样的,然后按照汇编指令的执行时间计算就对了。

或者如果有示波器,在该段程序的开头处和结尾处让芯片引脚产生一个电平变化,然后用示波器观察,这是针对单片机来说的。
追问
我只想要for延时的计算方法。。。不要测量方法。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a758f13
2014-05-03
知道答主
回答量:19
采纳率:0%
帮助的人:14.7万
展开全部
for循环延时是不精确地,一般用定时器。用循环的话可以跑一下用示波器看或者仿真看一下。
追问
嗯,我想知道计算的方法方,毕竟很多时候都是用for循环做的延时。
追答
51单片机的机器周期是12个时钟周期,12M晶振就是一个时钟周期是1/12M秒,即机器周期是1/1M秒,那一个for循环延时时间就等于执行指令数乘以机器周期
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-05-03
展开全部
for延时可以用断点来看,把for那里作为断点,看运行完那程序花了多长时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式