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