单片机原理与应用技术(一)———51单片机延时汇编语言_51单片机延时1ms的程序汇编-程序员宅基地

技术标签: 单片机  

一、延时函数

        在单片机实时控制系统中,常常会用到延时函数,因此,延时函数是编写单片机程序不可缺少的一部分。由于单片机读、写都需要消耗一定时间,因此延时程序通过执行空白指令来完成。单片机执行一条指令所需要的时间是一个指令周期,完成一个基本操作所用的时间是一个机器周期,如读操作、写等操作。当晶振频率为12MHz时,1个机器周期为1us。

        一个指令周期通常含有1~4个机器周期,其中常用的DJNZ指令周期为两个机器周期,即执行DJNZ指令需要2us; MOV指令周期为一个机器周期,即执行MOV指令需要1us。

二、延时函数计算实例

1.单重循环短暂延时

        短暂延时可以通过单重循环来实现,例如,下面为延时200μs子程序,DJNZ指令周期为两个机器周期,即执行DJNZ指令需要2us,每执行一次寄存器R7的值减一,不断重复,到R7值为0是跳转到RET指令结束,即执行DJNZ100次达到延时200μs的目的。

DELAY:	
MOV R7,#100      
DELAY1: 
DJNZ R7,DELAY1    
RET

2.多重循环较长延时

如果需要较长的时间延时,则需通过多重循环来实现。例如,下面为延时1秒子程序。

DELAY:	MOV R5,#20
DELAY1: MOV R6,#100
DELAY2: MOV R7,#100
		DJNZ R7,$
		DJNZ R6,DELAY2
		DJNZ R5,DELAY1
		RET

此子程序采用了3重循环结构,先运行第5行代码操作,每次减1,减到0为止;再运行第6行代码对R6进行减操作,每次减1,减1后不为0,则转移到标号DLY2处运行,此时将R7赋值为100,并再对R7进行减法内循环。当R6减为0时,程序运行到第7行,开始外循环,R5减1不为0时转移到标号DLY1处运行。

为了计算上的简便,可以忽略赋值语句的时间,只计算“DJNZ R7,$"语句的执行时间,该指令执行一次需2μs,执行的次数为R5、R6和R7值的乘积,即:
总延时=2us×R7×R6×R5=2us×100×100×50 =1000000us=1s

三、延时函数应用举例———LED闪烁灯

51单片机最简单的实例就是LED闪烁灯,下面就来介绍

1.硬件电路

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBARmgzMTM2NzExNjAx,size_20,color_FFFFFF,t_70,g_se,x_16

       在本实例中,硬件电路主要包括AT89C51单片机最小系统电路(包括5V电源,正极接40引脚,负极(地)接20引脚;振荡电路,使用晶体振荡器(12MHZ),接18、19脚;复位电路和发光二极管LED电路(由1只LED和1只限流电阻串联而成),具体的连接原理电路图如图所示。当P1.7引脚输出低电平时,点亮LED;当P1.7引脚输出高电平时,LED熄灭。

2.软件部分

要实现LED的闪烁效果需要通过程序控制单片机连接到LED的P1.7引脚,点亮LED,延时一段时间后,再控制P1.7引脚使LED熄灭,如此循环就可以实现LED的闪烁。下面是完整的软件程序实例。

		ORG 0000H
MAIN:
		CLR P1.7
		LCALL DELAY
		SETB P1.7
		LCALL DELAY
		SJMP MAIN
		
DELAY:	MOV R5,#20
DELAY1: MOV R6,#100
DELAY2: MOV R7,#100
		DJNZ R7,$
		DJNZ R6,DELAY2
		DJNZ R5,DELAY1
		RET

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_55646377/article/details/122598004

智能推荐

部署FTP(二)——用户权限配置与配置文件详解_allow_writeable_chroot-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏26次。目录结构说明默认安装路径:/etc/vsftpd/文件名称说明vsftpd.confftp核心配置文件ftpusers黑名单配置文件(此文件中的用户无法登陆ftp服务)user_list黑白名单配置文件。详情请看下方解释chroot_list是否限制访问主目录之下的用户配置文件(初始安装没有可自行创建)vsftpd.chroot_list是..._allow_writeable_chroot

originPro2021(2)工作簿中添加新列且图中添加线_origin新增一列,怎么更新图-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏7次。方法1:右键工作簿的空白处“添加新列”方法2:快捷键ctrl+D右键图层内容 选中添加的列_origin新增一列,怎么更新图

Redis、Kafka、Storm_redis kafka叫什么-程序员宅基地

文章浏览阅读704次。一、Redis【1】Redis指令查询手册:https://redis.io/commands#hash【2】Redis 是一个完全开源免费的高性能的key-value数据库,常常用作缓存,它有丰富的API接口,其使用类似类似于普通数据库操作,先进行redis客户端的链接,然后进行相应的类似增删改查操作,相关API接口与命令行命令基本是一一对应的。maven依赖:<depe..._redis kafka叫什么

Nginx配置TCP请求转发_stream ssl_ciphers high-程序员宅基地

文章浏览阅读6.8k次。https://www.cnblogs.com/baolin2200/p/7803511.htmlNginx配置TCP请求转发1.TCP请求转发基于stream在1.9版本前,需要单独编译安装该组建:# 依赖服务[root@baolin conf]#yum -y install pcre-devel openssl openssl-devel library_stream ssl_ciphers high

python wmic_使用 Python 玩转 WMI-程序员宅基地

文章浏览阅读1k次。来源:伯乐在线专栏作者 - Prodesire链接:http://python.jobbole.com/86349/最近在网上搜索Python和WMI相关资料时,发现大部分文章都千篇一律,并且基本上只说了很基础的使用,并未深入说明如何使用WMI。本文打算更进一步,让我们使用Python玩转WMI。1 什么是WMI具体请看微软官网对WMI的介绍。这里简单说明下,WMI的全称是Windows Mana..._python wmic

css 的优先级以及设置css的优先级_滚动条优先级-程序员宅基地

文章浏览阅读1.5k次。1.多个选择器可能会选择同一个元素,有3个规则,从上到下重要性降低: !important的用户样式 !important的作者样式 作者样式 用户样式 浏览器定义的样式 2. CSS规范为不同类型的选择器定义了特殊性权重,特殊性权重越高,样式会被优先应用。 权重设定如下: html选择器,权重为1; 类选择器,权重_滚动条优先级

随便推点

php接收json字符串有问题_PHP中,从服务器端接收到的json字符串前端有乱码如何解决...-程序员宅基地

文章浏览阅读156次。classJson{publicstaticfunctionencode($str){$code=json_encode($str);returnpreg_replace("#\\u([0-9a-f]+)#ie","iconv('UCS-2','UTF-8',pack('H4','\1'))",$code);}publicstaticfunctiondecode($..._php中,从服务器端接收到的json字符串前端有乱码如何解决

4个网页翻译工具,一键就能将网页英文翻译成中文_网站如何快速中译英-程序员宅基地

文章浏览阅读1.1w次。这里就给大家分享4个好用的网页翻译插件和工具,每个工具都有自己的优点,大家根据自己的翻译需要去选择使用。_网站如何快速中译英

电子学会-全国青少年编程等级考试真题Scratch一级(2019年12月)在线答题_201912 青少年软件编程等级考试scratch一级真题 答案-程序员宅基地

文章浏览阅读709次。一、小航答题助手预览二、答题页面详细说明三、如何开通使用_201912 青少年软件编程等级考试scratch一级真题 答案

RadioButton的样式设置 以及使用_android中自定义radiobutton的样式怎么设置width-程序员宅基地

文章浏览阅读2.8k次。RadioButton通常要配合RadioGroup使用 基础的RadioButton使用的xml代码如下 <RadioGroup android:id="@+id/act_test_radioGroup" android:layout_width="wrap_content" android:orientation="hor..._android中自定义radiobutton的样式怎么设置width

python 自动点击网页上按钮_python selenium自动化(一)点击页面链接测试-程序员宅基地

文章浏览阅读6.5k次,点赞2次,收藏13次。需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回到原始页面。要完成这个需求就必须实现3点:1. 找到原始页面上面所有的在本窗口内跳转的链接2. 跳转到目标页面之后,“后退”到原始页面3. 在原始页面上继续点击后续的链接首先,要找到页面上的所有链接并不困难。selenium为我们提供了find_elem..._python 自动点击网页按钮

解决外网与内网或内网之间的通信,NAT穿透_nat是一个孔插入到局域网 一个孔插互联网-程序员宅基地

文章浏览阅读1.2k次。http://www.cnblogs.com/lidabo/p/3828846.html在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行。问题就在于NAT。首先介绍下NAT。 NAT的作用NAT(Network Address Translator),网络地址转换。顾名思义,它是一种把内部私有网络IP地址翻译成公有网络IP地址的技术_nat是一个孔插入到局域网 一个孔插互联网