接下来我们要讲单片机的延时函数,那什么是延时函数呢,其实在我们单片机代码中,每次执行一条代码是很快的,也就几微秒左右,那有时候我们想让某一条代码执行后等待一阵子,再去执行下一条,这时候就需要用到延时函数了。最简单的延时函数也就是让cpu处于跑空的状态,也就是利用一段while函数来跑空,什么都不干,等while跑完了,再来执行下一条,我们本章先讲这种最简单吗,也是最浪费cpu资源的一种办法。构建一个Delay函数,用来跑空。
while循环

While函数是C语言中的一种循环函数,函数使用的格式为:

int main()
{i = 10;while (i > 0){i--;}printf("i=%d\n", i);return 0;
}

while (i > 0):(i>0)是循环执行条件,只要符合这个条件循环就会一直执行。循环函数的两种状态由其决定。成立则执行循环,不成立则停止循环执行循环后续语句。

花括号{}:花括号{}内部的内容为循环执行的内容,循环条件成立的情况下会一次有一次的执行花括号{}内部的代码,直到循环条件不成立(此循环为i<=0时结束循环),才会执行循环语句后面的语句(printf("i=%d\n", i);)

注意:除非程序需要,否则循环必须设置结束条件或者利用break函数结束循环。如果一个循环没有结束方式那么就会变成死循环。

死循环:一般C语言程序是需要避免出现死循环。但是由于单片机没有操作系统,不像电脑有Windows,程序运行与结束有操作系统管理。单片机的程序结束后会使单片机系统出现不确定的状态。并且如果不加死循环我们所编写的程序只会运行一次,所以我们通过死循环来达成让单片机程序不结束的效果。
Delay函数

原理:51单片机执行语句的时候需要通过一定的时间才能成功执行该语句,因此我们只需要知道51单片机执行某一语句所消耗的时间,再通过让单片机重复执行该语句一定的次数就可以达到延时的效果。已知用while循环执行一次自减运算约为2微秒,因此我们只需要将其执行50次就可以达成延时100微秒的目的。

注意:不同晶振的执行时间不同,此教程使用晶振为11.0592MHZ晶振。

例:

void Delay100us()
{unsigned char i;i = 50;while (i>0);{i--;}
}

接下来我们利用延时函数来实现灯的闪烁,也就是先让灯亮延时一段时间后灭,如此往复,就可以是实现灯的闪烁,代码如下:

#include <regx52.h>void mian()
{while (1){P1 = 0X00;//点灯Dleay500ms();//延时P1 = 0XFF;//灭灯Dleay500ms();//延时}
}
void Delay500ms()       //延时函数,延时500ms
{unsigned char i, j, k;i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);//do while循环} while (--i);
}

51单片机 (四)延时函数相关推荐

  1. 【51单片机】延时函数计算问题以及如何准确延时

    几种周期介绍 周期名称 描述 时间 振荡(时钟) 单片机提供时钟脉冲信号的振荡源的周期 T=1/f 状态 振荡周期经二分频后得到的 2T 机器 在一个机器周期内,CPU可以完成一个独立的 操作 12T ...

  2. 51单片机的延时函数快速生成技巧

    可以借助软件快速生成代码.利用STC-ISP 就可以 1.打开stc-isp后点击软件延时计算器 2.选择好使用的单片机型号.晶振频率.延时的时间 3.点击生成代码 即可. 有时候生成的c代码会有 _ ...

  3. 51单片机的延时子程序

    延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器 周期和指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念.机器周期和指 令周期的区 ...

  4. 51单片机的延时计算

    51单片机的延时计算 前言 正文 首先是时钟周期的算法:时钟周期(T)=1(秒)/晶振频率. 其次是机器周期:机器周期是由时钟周期组成的,机器周期是单片机完成一个基本操作所需要的时间. 1 传统的80 ...

  5. 51单片机精确延时设计

    在我们使用单片机的时候,很多情况下需要用到精确的延时.比如在跟DS18B20进行通讯的时候需要遵循严格的时序,这就需要我们严格把控程序执行的时间. 一般我们都是通过执行空语句的方式来使程序延时.这种方 ...

  6. 51单片机如何用c语言位定义,嵌入式编程(一):51单片机如何将函数 定义到指定程序地址...

    在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...

  7. 嵌入式编程(一):51单片机如何将函数 定义到指定程序地址

    在单片机编程使用中,会涉及到将某些函数定义到指定的code区.此时需要对工程文件进行配置修改才可完成.本期针对单片机平台做出说明介绍 1.测试目标 将函数testaddr定义到0x6000地址 2.测 ...

  8. 单片机:延时函数的理解

    在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的.一般我们写延时函数的时候,默认的晶振频率fosc=12MHZ,而机器周期T=12/fosc=1us. 这里我们来写一 ...

  9. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

  10. 单片机自定义延时函数Delay取值详解

    我们想实现一个定时延时函数,在单片机里并没有什么sleep,需要我们自己实现. 延时函数跟 晶振频率 有很大的关系,因为晶振频率影响程序执行速度. 1.打开Keil 4 - Target Option ...

最新文章

  1. 摘自一个读者读后rework的感受
  2. AI大牛周明打造的轻量“孟子模型”开源!靠10亿参数冲上CLUE榜第三,可用于新闻分类、文案生成...
  3. python 均值漂移
  4. 对java集合类的认识——基础很重要
  5. Centos7 安装 nginx 服务器的两种方式
  6. QT误修改了系统内的头文件处理
  7. Powershell 最大值堆栈实现
  8. 异步通信在生活中的例子_AJAX简单异步通信实例分析
  9. html 实现列表组并排,列表组--自定义列表组
  10. Word2Vec学习笔记(三)
  11. Docker容器虚拟化技术---Docker安装和操作1
  12. Linux 更改共享内存tmpfs的大小
  13. 解决公司服务器加入域中不能启动应用系统的问题
  14. Java类的方法的理解
  15. nuget下载太慢的问题解决方案 多次尝试下载该 nupkg 均已失败解决方案
  16. 流程即代码:云研发、低代码 IDE —— Uncode
  17. js密码生成器小工具
  18. 珠海金湾区红旗图书馆 WIFI 连接方法
  19. 阻塞与非阻塞、同步与异步、I/O模型
  20. 大数据项目之电商分析平台(2)

热门文章

  1. NIO与JVM基本概念
  2. 一款极简聊天应用,比较完整,略好看
  3. 国产操作系统能不能完全替代windows,普及大众?
  4. 读《阿里铁军》有感【4000字】
  5. linux-DNS服务器的搭建
  6. 手机屏幕尺寸、分辨率,图像像素、分辨率、实际大小解惑
  7. 2023注册会计电子版教材
  8. 字符串类(CString)
  9. 【附源码】计算机毕业设计SSM人脸识别考勤系统
  10. 电气火灾监控探测器安装在哪里?