1s延时程序
#include <reg52.h>
sbit P1_0 = P1^0;
void Delay(); // 下面引用时一定要和这里的大小写一致否则会有警告或错误
void Main()
{
while (1) // 开始一直循环
{
P1_0 = 0;
Delay(); // 没有参数也要加 () 否则会有Warning
P1_0 = 1;
Delay();
}
}
void Delay() // 12M晶振1s延时
{
unsigned char h, i, j, k;
for (h = 5; h > 0; h--)
for (i = 4; i > 0; i--)
for (j = 116; j > 0; j--)
for (k = 214; k > 0; k--); // 最后个要有 ; 号
}
//=======以下非代码==========//
原理,利用h,i,j,k循环指令消耗掉一定时间来达到延时,为什么利用循环延时的做法,在12M晶振延时1秒中需要h,i,j,k四个变量,且各变量的值是上面代码中那样呢?这要从单片机的周期说起,单片机有指令周期,机器周期,状态周期,时钟周期;
时钟周期:也就晶振的振荡周期,以12MHz为例,时钟周期为 1/ 12000000 = 1/12us;
机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;
指令周期:单片机执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需要的机器周期不一定相同(1-4个),单片机执行一条单周期指令需要1us,执行一条双周期指令需要2us,for循环需要8个指令周期;
具体执行for循环消耗的时间,可以在Keil里通过代码测量:
#include <reg52.h>
sbit P1_0 = P1^0;
void Delay();
void Main()
{
while (1) // 开始一直循环
{
P1_0 = 0;
Delay();
P1_0 = 1;
Delay();
}
}
void Delay()
{
unsigned char h;
for (h = 1000; h > 0; h--); // 此处下断点
}

循环1000次执行完后的时间点

1000次循环耗时 0.00042850s - 0.00019600s = 0.00023250s = 232.5us;1次循环耗时约 0.2us,
1s = 1000000us,1000000us / 0.2us = 500000次,而 5 * 4 * 116 * 214 = 496480;因为无符号字符型unsigned char 大小为1 byte,范围为0~255,所以只能通过循环嵌套,近似的得到一个1s延时。
1s延时程序的更多相关文章
- 51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)
一. 500ms延时子程序 void delay500ms(void) { unsigned char i,j,k; ;i>;i--) ;j>;j--) ;k>;k--); } 产生 ...
- 51单片机 Keil C 延时程序的简单研究
应用单片机的时候,经常会遇到需要短时间延时的情况.需要的延时时间很短,一般都是几十到几百微妙(us).有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很 ...
- fpga延时程序编写
//工匠小建 延时计数 100微妙计数 50M*0.00001-1 (个人理解:1s中50M次动作.那么100us多少次动作.做完这些动作就是延时)parameter delay_100us=16'd ...
- C51 延时程序
一.相关换算 1.1s=10^3ms(毫秒)=10^6μs(微秒)=10^9ns(纳秒)=10^12ps(皮秒)=10^15fs(飞秒)=10^18as(阿秒)=10^21zm(仄秒)=10^24ym ...
- C语言单片机中延时程序的实现
在单片机或嵌入式系统的程序,常常用规定次数的空循环来实现延时 /** * 通过一个空循环体循环让程序运行一段时间.在嵌入式系统中,这个函数用来实现延时. * * 参数: * u16 i -- 循 ...
- 延时程序执行Qt
有时候为了让程序暂停一下,不让它一直跑下去,可以使它进入循环结构中! 例如: #include <QCoreApplication> #include <qdebug.h> # ...
- 50ms延时程序
12MHz晶振 一个机器周期2us, DEL: MOV R7,#200D DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250us DJNZ R7,DE ...
- PIC单片机编译器自带的延时程序
https://wenku.baidu.com/view/3c94e2934028915f814dc205.html
- 定时工作方式2实现1s定时
定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只 ...
随机推荐
- javascript的几个问题
基础 1. 可选的分号 只有在缺少了分号就无法正确解析代码的时候,javascript,才会在一行的最后自动添加; a = 3 //自动填充 b = 4; var a a = 3 console.lo ...
- 如何选择NoSql数据库
How to choose a No Sql database 介绍了一下怎么选择一个No Sql数据库,下面简单翻译一下重点. No Sql的数据库可以分为如下4类: Key-Value数据库 数据 ...
- boost------asio库的使用1(Boost程序库完全开发指南)读书笔记
asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio ...
- QT+QT creator+OpenCV图像灰度化
1).pro文件 #------------------------------------------------- # # Project created by QtCreator 2014-05 ...
- spring beans源码解读之--BeanFactory的注册
beanFactory的继承关系如下图所示: (图片来源:http://www.myexception.cn/software-architecture-design/925888.html) 在上节 ...
- VS2012减负:加快启动速度,减少编辑卡壳
我公司的笔记本配置如下: CPU:i5-3210M @ 2.50 GHz 2.50 GHz mem: 4.00 GB OS: 64bit Win7 用VS2012编译Cocos2d-X项目时非常的卡. ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- css 权威指南笔记( 六)-基本视觉格式化
块级元素 百分数:边框的宽度不能是百分数,只能是长度.基本原则是只使用百分数将无法创建完全灵活的元素布局(即所有属性都可设置). 合并垂直外边距 相邻外边距会沿着竖轴合并.两个外边距中较小的一个会被较 ...
- 关于弹出层(iframe)时刷新页面的js
[javascript] view plaincopyprint? iframe弹出子页面刷新父页面iframe parent.location.reload(); [javascript] view ...
- 【读书笔记】管道和FIFO
管道 提供一个单路(单向)数据流,可以为两个不同进程提供进程间的通信手段 #include <unistd.h> ]); 返回两个文件描述符,fd[0](读) 和 fd[1](写) 管道间 ...