找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7711|回复: 13
打印 上一主题 下一主题
收起左侧

小白请问单片机延时函数的具体作用与里面语句的含义

  [复制链接]
跳转到指定楼层
楼主
ID:694299 发表于 2020-3-15 21:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//小白请教:问m,n的含义,为什么用他们,他们在哪方面起到什么作用

void delay60ms(void)
{
    unsigned char m,n;
    for(m=0;m<100;m++)
    for(n=0;n<200;n++)
    ;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:709078 发表于 2020-3-15 21:42 | 只看该作者
楼主的题中,“m”和“n”是函数定义的变量,也可以用其他字母像“i"和“j”,就是通过他们的值得变化和相互的关系实现延时,像原地踏步一样。
回复

使用道具 举报

板凳
ID:668457 发表于 2020-3-16 00:43 | 只看该作者
现实中单片机运行程序是需要时间的,各个器件都需要时间(即使很短),比如按键,当你按下是一个过程并不是瞬间完成。所以需要等待时间来确认
回复

使用道具 举报

地板
ID:462827 发表于 2020-3-16 00:48 | 只看该作者
m、n都是循环次数,空循环空转来延时
回复

使用道具 举报

5#
ID:709151 发表于 2020-3-16 00:56 | 只看该作者
单片机的运行虽然很快,但也是需要时间的,先看n的设置,n要从0加到200,而中间不执行任何程序,单片机会在很快的速度内完成这项任务,虽然很快,但也消耗了一定的时间,m在0-100的过程中所执行的任务相当于把n从0加到200执行100次,这样单片机所消耗的时间就显著增加了,m和n就相当于函数里的x,y,本身没有意义,char 后面可以换成任意两个字母。
回复

使用道具 举报

6#
ID:149799 发表于 2020-3-16 08:38 | 只看该作者
谢谢楼上几位的讲解
回复

使用道具 举报

7#
ID:703220 发表于 2020-3-16 11:35 | 只看该作者
首先你要能承认机器不论执行一条多么短的程序都是要消耗时间的,所谓延时函数就是在执行这个函数时,能起到既让CPU运行着去消耗时间,又让CPU实际上并不执行真正你不需要的操作。这也就是相当于机器在原地踏步。
我举一个比你这个还简单的并且能起到延时作用的函数:
void delay()
{
     unsigned int i=50000;
     while(i--)
}
void 代表这个函数没有返回值
delay 是函数的名字
()内没有内容说明没有参数
unsigned int i=50000  中unsigned int是无符号整型数据类型,所以这句话的意思是定义一个无符号整型变量i并赋初值。
花括号内是函数体
while(i--)是循环函数,这个函数是当()内的参数不为0时执行,由于i初值不为0,所以要自减50000次才能为0,所以才能跳出这个循环,故CPU要在这里花费时间去执行这50000次循环。

由上述可知,可以实现让CPU停在延时函数处,从而不去执行延时函数下面的程序。


所以这种延时函数与其说是延时,不如是让CPU干点别的事,而这些事只能浪费CPU的时间,却不能让它真正干出什么成就。

你给的这个函数和我这个不同的就是用for这个循环语句又嵌套了一个for,更浪费时间而已
回复

使用道具 举报

8#
ID:709334 发表于 2020-3-16 11:51 | 只看该作者
单片机初学者,正好搞不懂这部分,谢谢各位大佬
回复

使用道具 举报

9#
ID:709172 发表于 2020-3-16 13:52 | 只看该作者
m,n分别是外循环和内循环的循环次数,这2个嵌套循环总计循环m*n次,就是延时约5*m*n个指令周期(不包括调用for循环的开销)
回复

使用道具 举报

10#
ID:709787 发表于 2020-3-17 09:48 来自手机 | 只看该作者
mn是这个子函数中的临时变量。当然,也可以换成x,y等。任意。为什么是unsigned char类型。因为x.y的数值没超255,所以不用unsigned int(0~65536)。可以节约单片机的存储空间。
回复

使用道具 举报

11#
ID:619787 发表于 2020-3-17 22:51 | 只看该作者
自定义变量,起到记数的作用。
回复

使用道具 举报

12#
ID:710594 发表于 2020-3-18 09:17 | 只看该作者
单片机运行速度特别快,为了实现人机交互就需要延时函数。m,n没有特别的意义,就是普通的变量。你可以通过改变m,n的值来增减循环的次数。从而改变延时的长短。
回复

使用道具 举报

13#
ID:531524 发表于 2020-3-18 11:05 | 只看该作者
void delay60ms(void)
{
    unsigned char m,n;
    for(m=0;m<100;m++)
    for(n=0;n<200;n++)
    ;
}
第一个for没有大括号,这要写的意义不大
这是典型的延时函数,for循环里再for循环,目的就程序在这里等待
m,n都是控制循环次数的。循环次数越多等待时间越长。
回复

使用道具 举报

14#
ID:751533 发表于 2020-5-17 11:15 | 只看该作者
答得很好,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表