单片机C语言延时程序的计算,是什么样的算法,请求高手。

单片机STC89C52,8位,12M,程序如下:voiddelay(unsignedintcnt){while(--cnt);}主程序有delay(1000)请问dela... 单片机STC89C52,8位,12M,程序如下:
void delay(unsigned int cnt)
{
while(--cnt);
}
主程序有delay(1000)
请问delay(1000)延时了多长时间,是怎么算的,希望高手能解决,
还有就是如果是void delay(unsigned char cnt)又是怎么算的呢,两者的区别在哪里?
展开
 我来答
百度网友0568cda
2012-02-07 · TA获得超过3.2万个赞
知道大有可为答主
回答量:2887
采纳率:70%
帮助的人:1357万
展开全部
void delay(unsigned char cnt)和void delay(unsigned int cnt)意义上是一样的
延时程序的延时过程,是
while(--cnt);
程序运行过程中消耗的时间
如何计算时间
这要根据你单片机上的晶振频率
51系列单片机1个机器周期等于12个时钟周期,12MHz晶振的话一个机器周期=1/12MHz*12=1us
delay(1000),
delay(1000)即--cnt这条指令运行1000次,消耗1000个机器周期,即1ms。在这个程序上运行消耗1ms时间,相当于延时1ms。
半拉苹果
2012-02-07 · TA获得超过560个赞
知道小有建树答主
回答量:646
采纳率:0%
帮助的人:128万
展开全部
STC89C52, 12M delay(1) 延时大约为14us delay(1000)大约14ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涛哥打狙
推荐于2017-10-06
知道答主
回答量:35
采纳率:0%
帮助的人:22.3万
展开全部
1、一条指令执行的时间是1/12m=1us(算作一微秒);delay(1000);就需要减1000次,就应该是1000*1us=1ms。
2、每减一次需判断是否到0;翻译为汇编语言后应该是cjne指令,一个cjne指令用2个周期,1000个cjne就是2000周期,共用2ms。
3、调用函数时有赋值,应为是8位机,int为16位,赋值就要用两个周期,每减一次需判断低八位是否减到零,又会翻译为cjne指令,这个就不好算了,大概也要1~2ms,看你传递的参数而定,参数越大用时越大。
delay(1000);就应该用1+2+2=5ms。
void delay(unsigned char cnt)用时和上面算法差不多,只是它传递的参数为8为的,值为0~255,最大延时小于上面。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式