51单片机汇编语言实例2

发布者:MysticalSoul最新更新时间:2021-05-18 来源: eefocus关键字:51单片机  汇编语言  电平状态 手机看文章 扫描二维码
随时随地手机看文章

简介:上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。









a)单个按键与多个LED灯(位操作—输入与字节操作—输出)—判断与子程序


此处只是将输出指令由位指令换成了字节指令,而输入判断仍然是位判断指令。



ORG 0000H


MAIN:


;CLR C


MOV C,P2.0 ;获取P2.0位状态送位累加器;位与字节转换需要判断指令


JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE ,


JNC位累加器为0转移到ZIJIE,否则顺序执行。


MOV C,P1.0


ZIJIE:;子程序起始


MOVA,#00H


MOVP3,A


RET;子程序结束并返回调用处


END




b)单个按键与多个LED灯(位操作—输入与位、字节操作—输出)


l位输入控制位或字节输出


ORG 0000H


MAIN:


;CLR C


MOV C,P1.0 ;获取P1.0位状态送位累加器;位与字节转换需要判断指令


JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE ,JNC位累加器为0转移到ZIJIE,否则顺序执行。


MOV P0.0,C ;送位累加器到P0.0位等,P1.0位状态变化则输出随之变化


ACALLDELAY;调延时子程序


MOV P0.1,C


ACALLDELAY


MOV P0.2,C


ACALLDELAY


MOV P0.3,C


ACALLDELAY


MOV P0.4,C


ACALLDELAY


MOV P0.5,C


ACALLDELAYMOV P0.6,C


ACALLDELAYMOV P0.7,CACALLDELAY


SJMP MAIN ;相对转移时间短,用AJMP绝对转移时间长,RET是用于子程序的返回


ZIJIE:


MOV A,#00H


MOV P2,AACALLDELAY


MOV P3,AACALLDELAY


CLR AMOV P0,A


MOV P1,AACALLDELAY


RET


DELAY:;延时子程序-这是一个非常有用、而且常见的一个子程序


MOV R5,#04H;将16进制数04H传递给寄存器R5


F1:


DJNZR7, F1 ;寄存器R7减1非0跳转到F1,直到减为0顺序执行下一指令


RET;子程序结束,返回子程序入口处ACALLDELAY;调延时子程序


END


l位输入控制字节输出




c)单个按键与单个电机控制—开环控制


单“位”—P口1位--单个灯—位输出,单个按键控制—硬控制与软控制


一个按键,一盏照明灯,一个继电器。硬件接口问题—线路连接、硬件硬驱动问题(程序称为软驱动)。


一个按键,两盏灯(指示、照明),一个继电器。硬件接口问题—线路连接、硬件硬驱动问题。程序称为软驱动:就是利用两个端口,通过延时或计时器完成转换。


说明:


硬件特性,驱动与控制信号,程序编写


由继电器引出的强电驱动电器的控制问题,如电动机—交流电机、直流电机、步进电机、伺服电机;单项或多项




1.单个开关(按键)与多个LED灯→数码管→点阵问题—最小系统—输出扩展


a)单个按键与多个LED灯(位操作—输入与字节操作—输出)


b)单个按键与多个LED灯—数码管(位操作—输入与字节操作—输出)—数组


c)单个按键与多个数码管(位操作—输入与多字节操作—输出)—静态—数组


d)多个按键与多个数码管(位操作—输入与字节操作—输出)—动态—扫描函数


e)单个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—静态


f)多个按键与多个数码管—点阵(位操作—输入与字节操作—输出)—动态




3.单个开关(按键)与多个LED灯→数码管→点阵问题—输出扩展—最小系统


a)单个按键,多个LED灯(位操作—输入与字节操作—输出)


l单输入与多输出的电子线路—静态特性—结构与联接


对于多个LED灯(LED数< 8个)来说(图4),在硬件连接方面、软件编写方面均没有大的难点。按照单个LED的连接方式增加便可。控制程序编写基本上也是重复性工作—用COPY简单修改即可。


对于LED数= 8个或是8的倍数的情况,需要解决两个方面的问题。一个是硬件的连接方法,一个是控制程序的编写指令—用词方法—字节操作指令。硬件方面可以用单个或多个成组(NET)的LED或总线接口、单个接口扩展等实现。程序编写则可以使用重复性工作、可以使用字节操作指令而摒弃位操作指令,使得程序简洁、可读性好、硬件运行效率高。


对于LED数> 8个且不能被8整除的,仍需要用位操作指令。参见图5,指令如下:


l单输入与多输出电子线路的控制指令—动态特性


ORG0000H


MAIN:


MOVA,#00H


MOVP1,A;P1口的状态,低电平为关


MOVC,0A0H;按位操作,P2.0口的状态—按键定,关为低电平,开为高电平


MOVP1.0,C;P1.0口的状态,按位高电平显示灯亮,低电平显示灯灭


MOVP1.1,C


MOVP1.2,C


MOVP1.3,C;P1.3口的状态,


MOVP1.7,C


MOVP2.1,C


MOVP2.2,C


MOV P2.4,C


MOVP3.0,C


MOVP3.3,C


MOVP3.5,C


MOVP3.7,C


MOVP0.0,C


MOVP0.4,C


END


对于LED数> 8个且能被8整除的需要用字节操作指令。参见图2所示。


ORG0000H


START:


MOVA,#00H


MOVP1,A


MOVC,0A0H


JB0A0H,GUAN;按位操作;按P2.0口的状态获得两种显示结果,0跳转


MOVP1,#0FFH;按P2.0口的状态为非1时的顺序显示本指令


RET;返回控制指令


GUAN :;程序控制指令入口,跳转入口


MOVP2,#0FFH;按P2.0口的状态为1时的转移显示本指令


RET;子程序返回控制指令


END


程序说明:


每个口用位赋值指令来开关P1口的各个LED。也可以用字节赋值指令一次性的开关8位P1口全部LED。


P1=0;// P1口8位置低电平,点亮8个LED


P1=1;// P1口8位置高电平,关闭8个LED。图5为多个LED灯-单个按键的运行结果与汇编语言。


上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。


ORG 0000H


START:


MOVA,#0FFH


MOVP3,A


MOVP1,A


MOV C, 0A0H


JNB0A0H,GUAN


MOVP1,#00H


RET


GUAN :


MOVP3,#00H


RET;可以产生闪烁效果


END


关键字:51单片机  汇编语言  电平状态 引用地址:51单片机汇编语言实例2

上一篇:一种基于MCU的智能流量监控系统设计
下一篇:两种MCU间的串行通信协议设计

推荐阅读最新更新时间:2024-11-07 14:26

51单片机汇编语言:利用 RET 指令实现多路分支
有这样一个问题: ----------------------------- 已知程序执行前有 A = 02H,SP = 52H,(51H) = FFH,(52H) = FFH。 执行下列程序: POP DPH POP DPL MOV DPTR, #4000H RL A MOV B, A MOVC A, @A + DPTR PUSH A MOV A, B INC A MOVC A, @A + DPTR PUSH A RET ORG 4000H DB 10H, 80H, 30H, 50H, 30H,
[单片机]
STM8与汇编语言(4)
今天要做的实验是在ST的三合一开发板上,用汇编语言写一个程序,驱动板上的LED指示灯闪烁。 开发板上的LED1接在STM8的PD3上,因此要将PD3设置成输出模式,为了提高高电平时的输出电流,要将其设置成推挽输出方式。这主要通过设置对应的DDR/CR1/CR2寄存器实现。 还是利用ST的开发工具,先生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到LED1在闪烁,且闪烁的频率为5HZ。 stm8/ #include mapping.inc ; 下面定义端口D的寄存器地址 PD_ODR EQU $500f PD_IDR
[单片机]
89C51单片机内部结构深度解析一
9C51单片机内部结构深度解析一:单片机内部资源ROM/RAM/CLOCK/RST 8位CPU:和32位处理器的意思一样,计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据,同理,8位的CPU意味着89C51单片机只能够处理8位的数据。 4K ROM:4K字节闪烁可编程可擦除只读存储器(FPEROM Flash Programmable and Erasable Read Only Memory),主要用来存放程序和表格常数,地址是0000H~0FFFH,总线地址的宽度为16位,因此片内ROM最大为2^16次方=64K,片外的ROM最大也是64K,片内片外的ROM采用统一编址的方
[单片机]
MCS-51单片机实用子程序库6
17) 标号: FSQR 功能:浮点数开平方(快速逼近算法) 入口条件:操作数在 中。 出口信息:OV=0时,平方根仍在 中,OV=1时,负数开平方出错。 影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节 FSQR: MOV A,@R0 JNB ACC.7,SQR SETB OV ;负数开平方,出错 RET SQR: INC R0 INC R0 MOV A,@R0 DEC R0 ORL A,@R0 DEC R0 JNZ SQ MOV @R0,#41H;尾数为零,不必运算 CLR OV RET SQ: MOV A,@R0 MOV C,ACC.6 ;将阶码扩展成8bit补码 MOV ACC.7,C INC A ;加一 CLR
[单片机]
基于状态机的51单片机独立按键检测与消抖思路
状态机的按键检测思路2 先回顾一下定义: 状态机有如下性质 按键状态机发生状态迁移的条件 如何准确检测条件是否发生并进行状态迁移 确保状态机能稳定地进行迁移 按键消抖的原理:状态切换 按键操作触发的时机 先回顾一下定义: 按键从未按下到按下,再到弹起,可以视为一个有4个状态的有限状态机。 分别是未按下、前沿抖动、按下、后沿抖动。 即按键只在这4个状态间进行迁移,而且是当条件满足时按一定的顺序进行迁移: 未按下­­(条件1)­ 前沿抖动­­(条件2)­ 按下­­(条件3)­ 后沿抖动­­(条件4)­ 未按下 当且仅当条件成立时,才进行状态的迁移,当条件不成立时,状态机会保持当前状态不变。 状态机有如下性质 1.状态机会在条件满足时
[单片机]
基于<font color='red'>状态</font>机的<font color='red'>51单片机</font>独立按键检测与消抖思路
51单片机串口C程序
#include reg51.h unsigned char tmp; //初始化串行口 void csh() { SM0=0; SM1=1; REN=1; TI=0; RI=0;//以上是初始化scon寄存器,想当于SCON=0x50; PCON=0;//初始化电源,为波特率不增加 TH1=0xF3; TL1=0XF3;//设置波特率为2400 TMOD=0X20;//设置定时器,定时器1工作于8位自动重载模式, 用于产生波特率 EA=1;//开总中断 ES=1;//ES-串行中断允许控制位 ES = 1 允许串行中断。 TR1=1;//启动定时器开始工作 } void delayms
[单片机]
89c51单片机的简单运用1--数码管、流水灯
一.简单的点灯程序需要记住的 1.单片机控制开发板的二极管亮灭: 由单片机的P1口控制,注意开发板的原理图,分清楚到底是给低电平亮还是高电平亮,一般都给低电平亮。 控制灯分为总线法和位选法,总线法是用十六进制数控制P1口的高低电平,1为高,0为低,位选是选出P1口的任意一位操作。 流水灯是通过延时函数或定时器延时,依次控制不同的灯亮来完成流水灯 2.数码管的静态显示和动态扫描: Lab-MCS51开发板通过单片机的P^0~P^3口分别控制四个数码管的亮灭,每个数码管显示的内容由P0口控制, 控制线路图如上,通过P0使a,b,c,d,e,f,g,dp亮,显示不同的数字或符号。 动态扫描是减少数码管间亮
[单片机]
89c<font color='red'>51单片机</font>的简单运用1--数码管、流水灯
AT89C2051单片机的晶闸管触发电路设计
自晶闸管被用作开关元件以来,其触发电路经过了晶闸管分离元件阶段和集成电路阶段后进入了 单片机 嵌入阶段。使用以单片机为核心的触发电路虽然避免了前两个阶段元件多、故障率高和低智能化的缺点,但可靠性、迅速性和抗干扰性还存在诸多不足。 本设计详细介绍了一种基于 AT89C2051 单片机 的晶闸管触发电路,具有高集成度、智能化、体积小、安全、迅速、可靠稳定等优点,今后必将被广泛应用。文中以晶闸管投切电容器为例来详细说明触发电路的工作原理。 1 触发电路的硬件设计 硬件电路以ATMEL公司的AT89C2051单片机为核心,包括晶闸管过零检测电路、控制器投切命令电路、脉冲隔离放大电路等几部分组成,硬件框图如图1所示。 2 触发电
[电源管理]
AT89C20<font color='red'>51单片机</font>的晶闸管触发电路设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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