51单片机c语言延时函数 Void delay 1ms(unsigned int ms){un

51单片机c语言延时函数Voiddelay1ms(unsignedintms){unsignedinti,j;for(i=0;i<ms;i++);for(j=0;j<10... 51单片机c语言延时函数 Void delay 1ms(unsigned int ms){unsigned int i,j;for (i=0;i<ms;i++);for(j=0;j<100;j++);}请大侠解释下为什么延时1ms,当ms=1时。我知道有两个循环,ms=1时循环100次呗。 展开
 我来答
杜哥是个小天才
2018-07-26 · TA获得超过1809个赞
知道答主
回答量:32
采纳率:0%
帮助的人:9426
展开全部

C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。

void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)

{

unsigned int i;

unsigned char j;

for(i=0;i<ms;i++)

{

for(j=0;j<200;j++);

for(j=0;j<102;j++);

}

void Delay()

{

unsigned char a,b,c;

for(a=0;a<?;a++)

for(b=0;b<?;b++)

for(c=0;c<?;c++);

}  

void delay_ms(unsigned int ms)

{

unsigned int i;

unsigned char j;

for(i=0;i<ms;i++)

{

for(j=0;j<200;j++);

for(j=0;j<102;j++);

}

}

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。



帐号已注销
2018-07-29 · TA获得超过4404个赞
知道小有建树答主
回答量:349
采纳率:0%
帮助的人:99.7万
展开全部

delay函数是一般自己定义的一个延时函数。

C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。

关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

ms=1时,第一个for循环进入,然后在第二个for循环中执行100次

再回到第一个for循环中进行第二次循环.

就这样

你可以进入编辑器,添加断点,自行查看代码执行过程

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
2014-06-12 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38385
国家科技进步奖

向TA提问 私信TA
展开全部
这个延时关键看使用的晶振多大,比如12M晶振for(j=0;j<120;j++);大概延时1毫秒,11.0592M晶振那么for(j=0;j<110;j++);延时1毫秒,你这里的for(j=0;j<100;j++);延时1毫秒的话,晶振应该是10M,不太常见哟,特别是在单片机方面。
追问
呃,是12mhz的。。不是1ms吗,那delay1ms就不对了啊。。。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
圣鸾OJ
2015-10-06 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:113万
展开全部
C的话其实时间没有办法完全定性地计算的
如果非得精确的话只能使用定时器了,或者汇编的也行
不过时间要求精度不是很高的话使用下面的代码就行了
当时使用示波器把时间完全调准的,65536ms范围内还是比较准的,已经可以满足通常的要求了:

#include "reg51.h" //头文件包含

//宏定义
#define uint unsigned int
#define uchar unsigned char

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms--)
{
for(ti=0;ti<112;ti++){}//112
}
}

调用方式如下:
delay(400); //开机延时400ms
够详细了吧?!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
展华威
2017-09-06 · TA获得超过477个赞
知道小有建树答主
回答量:187
采纳率:100%
帮助的人:49.3万
展开全部
void delay(unsigned int x) //延时 x ms
{
unsigned int i,j;
for(i=x;i>0;i--)

for(j=110;j>0;j--);
}
延时1ms 即为使x=1;
这程序延时约1ms(x=1时用keil测出来约 0.96831272ms,近似1ms),用C语言很难做到准确的1ms。注意晶振为11.0592MHZ的时候用~ 晶振为12MHZ时 把 i=120 近似值1ms
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式