51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验二 LED闪烁

目录

前言

一、原理图及知识点介绍

二、代码分析

[知识点四:delay(u16 i)这个函数为什么i=1时,大约延时10us?](#知识点四:delay(u16 i)这个函数为什么i=1时,大约延时10us?)


前言

已经是第二个实验了,上一个实验是点亮第一个LED灯,这个实验是LED的闪烁。


一、原理图及知识点介绍

原理图与上一小节相同请参考上一小节:

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客

二、代码分析

先来介绍一下工程:

下面我们就直接上代码:

cpp 复制代码
/**************************************************************************************
*		              LED闪烁实验												  *
实现现象:下载程序后D11指示灯闪烁
注意事项:无																				  
***************************************************************************************/

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


sbit led=P0^0;		 //将单片机的P0.0端口定义为led

/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{
	while(1)
	{
		led=0;
		delay(50000); //大约延时450ms
		led=1;
		delay(50000); //大约延时450ms	
	}		
}

前面的知识点一、二、三都在前一小节:51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客

知识点四:delay(u16 i)这个函数为什么i=1时,大约延时10us?

下面是从MCU手册中的原话:

从上面可以看出一句汇编指令(机器周期)=12个CPU工作时钟,要想知道delay这个函数中的while语句翻译成汇编有几条汇编指令组成:

我们使用的为12MHZ的晶振,也就是一个机器周期为1us

下面我我们仿真做实验:

1、先将程序运行到while语句开头,此时系统运行时间为394us

2、再将程序运行到while语句结尾处,此时系统运行时间为401us,消耗了7us的时间,刚好执行了7条汇编指令。

3、再将程序运行到while语句开头处,此时系统运行时间为403us,共消耗了9us的时间,大概10us的样子(不是太准确)

因为不是太准确,例程中

delay(50000); //大约延时450ms

确实是用的9us来计算的延时。


现在知道单片机中的延时是怎么得出来的了吧。

相关推荐
逼子格1 小时前
五种音频器件综合对比——《器件手册--音频器件》
嵌入式硬件·音视频·硬件工程师·硬件测试·电子器件·硬件笔试真题·音频器件
niuTaylor3 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)12 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫13 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi15 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li17 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)19 小时前
【STM32设计】数控直流稳压电源的设计与实现(实物+资料+论文)
stm32·嵌入式硬件·mongodb
march_birds20 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式20 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
触角010100011 天前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网