51单片机汇编——延时和点灯

发布者:创意狂想最新更新时间:2023-01-06 来源: zhihu关键字:51单片机  汇编  延时  点灯 手机看文章 扫描二维码
随时随地手机看文章

前言

这篇文章主要是看视频学习51汇编,但是我的环境总是配置不好,出现了这个问题(keil2+vdmagdi.exe+Proteus),有懂的小伙伴可以帮助一下我 ^.^

一、延时程序

1.1 延时程序的简介和分类

在单片机的控制应用中,常有延时的需要,CPU 过一段时间再去做某件事,称之为延迟。延时有两种方法,即软件延时和硬件延时

硬件延时是通过定时/计数器(中断程序)来实现的,这种方法不占用 CPU 的工作时间

软件延时一般采用循环程序,通过 CPU 执行一个具有固定延迟时间的循环体来实现的


1.2 软件延时

1、机器周期数

延时程序的延时时间主要与两个因素有关,一是所用晶振,二是延时程序中的循环次数,一旦晶振确定之后,则主要是如何设计与计算需给定的延时循环次数

晶振产生一个波形,这个波是有固定周期的,每个汇编指令执行的周期不同,下面是给出的指令和他的周期数


2、机器周期数求解

假设我们的晶振频率为 10Hz,产生的波形如下图

则 1 秒内震荡 10 次,1 秒 10 个时钟周期

2 个时钟周期是 1 个状态周期,1 机器周期是 6 个状态周期

单片机的晶振频率为 6MHz,则一机器周期为 2us;单片机的晶振频率为 12MHz,则一机器周期为1us;


1.3 基本延时程序模式及延时时间的计算

1、单循环延时程序

把上面的汇编程序封装成一个过程(汇编里面常用过程来表示函数的意思)

先把 #X (#后面的是立即数)数据移动到 R0 寄存器里面,然后循环执行 DJNZ 指令。DJNZ 指令的含义就是 R0 寄存器减少 1,如果 R0 不为 0,就跳转到标号为 DEL1 处执行;如果 R0 为 0 就继续往下执行

所以上述程序:

执行 X 个数次的 DJNZ 函数,总共 2*X*T 时间(T 为机器周期)。执行一次 MOV 函数,消耗 T 时间。执行一次 RET 跳出过程的指令,消耗 2T 时间(指令消耗的机器周期数在前面的图片中有写)


延时时间范围计算

设 X 是装入寄存器 R0 的时间常数,R0 是 8 位寄存器(以下的 R1、R2、R 均是 8 位),因为 0<=R0<=255,R0=0,延时时间最长,RO=1,延时时间最短。当 R0=0 时,由汇编语言的特征知其将从零开始判断,共 256 次,所以应在公式中代入 256,因此这个程序的最长定时时间为 1030us


2、双重循环延时程序

MOV R1,Y 执行了 1 次

MOV R0,X;DJNZ R1,DEL2 两条语句执行了 Y 次

DJNZ R0,DEL1 语句执行了 X*Y 次


3、三重循环延时程序


4、设计一个延时为 100us 的程序

让延时精确到 100us 的方法如下

NOP 是占位,不进行任何操作的汇编指令


二、汇编指令控制灯亮灭

2.1 单灯亮灭

1、电路图

XTAL1、XTAL2 接的是晶振,为单片机提供时钟脉冲信号

RST 为复位电路引脚


2、汇编程序

ORG:告诉单片机,下一条执行的指令起始位置

SETB 指令:将 P1.0 引脚置 1,让灯泡灭

LCALL 指令:调用 DELAY 延时过程

CLR 指令:寄存器清 0 指令,让灯泡亮

AJMP 指令:跳转到 START 循环执行这个过程


2.2 多灯亮灭

1、电路图


2、汇编程序

与单灯相比,单灯用的是位操作,这个是整体的地址赋值


2.3 开关控制灯亮灭

1、电路图


2、汇编程序

JB P0.0, LIG 指令:如果 P0.0 引脚为 1(高电平),则跳转到 LIG 过程,LIG 过程把等电平信号置为 0(低

电平),灯就亮;否则不跳转到 LIG,电平信号置为 1(高电平),灯就灭


2.4 多开关控制多灯泡

1、电路图


2、汇编代码

前面的代码依次判断每个灯需要亮或者灭。在 next1 前判断 P1.0 的亮灭,在 next2 前判断 P1.1 的亮灭。


3、电路图2


4、汇编程序2

把低 4 位的输入数据和高 4 位进行调换,再把高 4 位送到控制灯亮灭的地方,然后调用延时,延时程序用于软件防止抖动。最后调用循环函数


关键字:51单片机  汇编  延时  点灯 引用地址:51单片机汇编——延时和点灯

上一篇:51单片机汇编——延时和点灯
下一篇:51单片机学习——存储和引脚

推荐阅读最新更新时间:2024-11-17 23:02

浅谈51单片机内存优化
对 51 单片机内存的认识,很多人有误解,最常见的是以下两种: ① 超过变量128后必须使用compact模式编译 实际的情况是只要内存占用量不超过 256.0 就可以用 small 模式编译 ② 128以上的某些地址为特殊寄存器使用,不能给程序用 与 PC 机不同,51 单片机不使用线性编址,特殊寄存器与 RAM 使用重复的重复的地址。但访问时采用不同的指令,所以并不会占用 RAM 空间。 由于内存比较小,一般要进行内存优化,尽量提高内存的使用效率。 以 Keil C 编译器为例,small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为我们的程序所
[单片机]
51单片机最小系统的构成与绘制
一、51单片机最小系统构成 51单片机最小系统是一个最基本的硬件配置,通常由一个51单片机、晶体振荡器、电源、外部芯片(如LCD屏幕、键盘、LED等)以及必要的电路组成。其主要功能是提供一种简单的方式来开始使用和学习51单片机,使其能够进行基本的输入、输出、计算和控制其具体构成如下: 1、51单片机芯片:51单片机是一种基于哈佛结构的8位微控制器,具有强大的输入输出能力、易于编程、稳定可靠等特点。目前市面上流行的有AT89C51、AT89S51、STC89C51等。 2、晶体振荡器:晶体振荡器是提供时钟信号的重要组成部分,一般为11.0592MHz,它能够提供稳定的时钟信号,保证51单片机的正常工作。 3、电源:为51单片机最
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>最小系统的构成与绘制
MCS-51单片机P0口扩展技术研究
0 引言 在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。 MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O口应用的就只有P1口了。这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。 由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问
[应用]
51单片机实现外围设备中断
有5台外围设备,分别为EX1~EX5,均需要 中断 。现要求EX1与EX2的优先级为高,其他的优先级为低,请用51单片机实现,要求画出电路图并编制程序(假设中断信号为低电平),要执行相应的中断服务子程序WORK1~WORK5。 org 0000h ljmp main org 0003h ljmp int0_int org 0013h ljmp int1_int org 0030h main: mov sp,#60h orl tcon,#00000101b mov ie,#10000101b
[单片机]
51单片机学习笔记———4.两个按键控制LED小灯
两个按键的控制LED的程序: /* * @Author: 王云龙 * @Date: 2020-02-23 12:48:51 * @Last Modified by: 王云龙 * @Last Modified time: 2020-02-23 15:37:24 */ #include reg52.h #define LED P0;//设置LED引脚 sbit KEY1 = P3^4;//设置按键1引脚 sbit KEY2 = P3^5;//设置按键2引脚 void LightLed1();//点亮方式1 void LightLed2();//点亮方式2 void delay(unsigned int n);//n
[单片机]
利用89C51单片机实现红外线通信接口电路控制
在通信系统中,常利用非电信号来传递控制信号和数据,以实现遥控或遥测的功能红外通信,具有控制简单、实施方便,传输可靠性高的特点,是一种较为常用的通信方式。红外通信利用950 nm近红外波段的红外线作为传递信息的媒体,发送端采用脉时调制方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送,接收端将收到的光脉冲转换成电信号。再经过放大、滤波处理后送给解调电路,还原为二进制数字信号后输出。 1 系统的总体构成 红外通信系统采用红外光传输及无限工作机制,其组成结构主要包括:红外发射器,通信信道,红外接收器三大部分组成。 (1)完成信号的电光变换并向空间发射红外脉冲 红外发射器的关键是红外发光二极
[单片机]
利用89C<font color='red'>51</font><font color='red'>单片机</font>实现红外线通信接口电路控制
立体旋转LED汇编程序设计
org 00h jmp cfg org 03h clr 00h reti cfg: ;setb ea ; setb ex0 ; setb it0 mov dptr,#tab MM00: CLR 00H mm: mov a,r2 movc a,@a+dptr cpl a call hbit mov r4,a deC r2 mov a,r2 movc a,@a+dptr dec r2 cpl a call hbit jb 01h,gr0 mov p1,a mov p3,r4 jmp gr00 gr0:mov p2,a mov p0,r4 gr00: djnz r6,$ djnz r6,$ ;djnz r6,$
[单片机]
51单片机——_crol_
_crol_:位左移,带循环 :位左移,后面补0。 例如P1=0xEE; //P1=_crol_(P1,1); 效果是11101110、11011101、10111011...... //P1 =1; 效果就是11101110、11011100、10111000..... 库函数头文件为: /strong intrins.h ​_crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 参考链接: http://www.cnblogs.com/heiyue/p/3242714.html​
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved