51单片机用c语言怎么写延时函数?

这节我想补充下最基础的东西,变量和运算符,在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义类型说明后使用。变量定义的一般形式为:类型说明符  变量名标识符;如:unsigned int num;基本数据类型的说明符,占用RAM大小和数值范围如下:

循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。1.goto语句和if语句构成循环;2.while语句;3.do-while语句;4.for语句;这节我们来看循环结构之For循环。

上节提到过,main函数中必须有个while1)大循环,否则程序只会跑一遍便停止了,while语句的形式为:while(表达式){语句}, while语句的语义是:计算表达式的值,当值为真(0)时, 执行循环体语句。可以看到while1),1永远为1表达式一直成立,他的语句就会一直在里面循环。

for语句最简单的应用形式如下:for(循环变量赋初值;循环条件;循环变量运算) {语句}

循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量运算,运算后的新值让循环条件判断是否继续成立,这三个部分之间用半角“;”分开。

若是,则执行循环体语句一次,之后i++值增加1。再重新判断是否满足,循环体语句执行第二次, 直到条件为假,即i>100时,结束循环。

由于单片机每条指令的执行是需要时间的,下面我们来用for循环让单片机原地打转延时一会,让一个小灯闪烁起来。第一遍不需要看懂,照抄一遍,然后编译成功看到效果了再去看每句的意思,代码如下:

上面搞懂了,自己尝试写个流水灯吧,流程如下:先让第八个灯熄灭的同时点亮第一个延时一会,然后让第一个熄灭的同时点亮第二个延时一会,以此例推,直到第七个熄灭的同时点亮第八个延时一会。

}

不可能的,是不是你的编译有错的啊我改的晶振12M,在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,不可能出现100ms那么大的差距,是你的软件的原因.不信你实际编写一个秒钟,利用原理计...我运行时都差不多100ms,后来想想估计是执行一次FOR语句,不只是简单的一个机器周期。要把它转场汇编是才能按机器周期来算。还是挺谢你的

}
楼主想问Delay函数实现的延时是怎样计算的是吗,看程序应该是51单片机的延时程序

这个程序有三层循环,循环的总次数为
每次循环都有一次条件判断(如“k>0”)和一次只减(如“k--”),即每次循环消耗两个机器周期
那么花费的总的机器周期即为
对于51单片机12M晶振的话一个周期是1us,那么延时时间

这段程序有可能是精确延时到10ms,这是因为调用这个函数及执行完这个函数分别要压栈和出栈,另外i,j,k也有一个赋初值的过程...所以各种因素叠加到一起延时就是10ms了

其实楼上说的挺好的,如果你想看具体的延时过程可以仿真一下,在keil中对比C语言汇编前后的代码你会理解的更透彻

}

我要回帖

更多关于 单片机c语言延时程序计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信