MCS-51单片机汇编语言程序设计

发布者:SparkCrafter最新更新时间:2021-12-03 来源: eefocus关键字:MCS-51  单片机  汇编语言 手机看文章 扫描二维码
随时随地手机看文章

前言

MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言)。


高级语言编程快捷,但程序长,占用存储空间大,执行慢;

汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。


无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。

在这里插入图片描述

目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如KEIL 集成软件。


一、汇编的方法

1.手工汇编:

人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。


2.机器汇编:

用计算机中的汇编程序对用户源程序进行汇编。

用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定(这些由伪指令指定)。

1)确定程序中每条汇编语言指令的指令机器码

2)确定每条指令在存储器中的存放地址

3)提供错误信息

4)提供目标执行文件(.OBJ/.HEX)和列表文件(*.LST)


二、伪指令

一、汇编语言指令类型

机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行。

伪指令: 汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。


二.伪指令 常用伪指令及功能

1.起始指令 ORG nn

功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。

指令地址 机器码 源程序

ORG 2000H

2000H 78 30 MAIN: MOV R0,#30H

2002H E6 MOV A,@R0


2.字节定义 标号: DB(字节常数,或字符或表达式)

功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。

例如:

LN:DB 32,’C’,25H,-1;

LN~LN+2 地址单元依次存放20H , 43H , 25H ,FFH

在这里插入图片描述

字定义 标号:DW (字常数或表达式)

作用: 指示在程序存储器中以标号为起始地址

的单元里存放的数为字数据(即16位的二进制数)

例如:

GH :DW 1234H,5678H,08

在这里插入图片描述

4.保留字节 标号:DS (数值表达式)

作用: 指示在程序存储器中保留以标号为起始地

址的若干字节单元,其单元个数由数值表达式指定。

例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。

在这里插入图片描述

位定义 标号 BIT [位地址]

作用: 同EQU指令,不过定义的是位操作地址。

例如 AIC BIT P1.1。


7.汇编结束 END

作用: 指示源程序段结束。

END指令放在程序的最后。


三、汇编语言程序设计步骤

一.确定方案和计算方法

二.了解应用系统的硬件配置、性能指标

三.建立系统数学模型,确定控制算法和操作步骤

四.合理分配存储器单元和了解I/O接口地址

五. 编制源程序

1.按功能设计程序,明确各程序之间的相互关系

2. 用流程图表示程序结构和功能

3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改

在这里插入图片描述

四、常用的顺序结构

顺序程序

分支程序

循环程序

子程序


1、顺序程序设计

顺序程序(简单程序),程序走向只有一条路径

例1:编程将外部数据存储器的000EH和000FH单元的内容相换

分析: 外部数据存储器的数据操作只能用MOVX指令,且只能和A之间传送,因此必须用一个中间环节作暂存,设用20H单元。使用DPTR指示地址。编程过程如下:

MOV DPTR, #000EH

MOVX A, @DPTR

MOV R0, A

MOV DPTR, #000FH

MOVX A, @DPTR

XCH A, R0

MOVX @DPTR, A

MOV A,R0

MOV DPTR, #000EH

MOVX @DPTR, A


2 、分支程序的设计

由条件转移指令构成程序判断框部分,形成分支结构

一个判断决策框,两种分支结构图。

在这里插入图片描述
在这里插入图片描述

例1 求8位有符号数的绝对值,数据存放在A中。

ORG 0000H

MOV A,R2

JNB ACC.7,N ;为正数?

CPL A ;负数变补

INC A

MOV R2,A

N: SJMP $ ;结束


3 、多分支散转程序的设计

情况一:该类分支程序根据不同的输入条件或不同的运算结果,转向不同的处理程序,也称之为散转程序。这类程序通常利用

JMP @A+DPTR间接转移指令实现转移。有如下两种设计方法:


查转移地址表:

将转移地址列成表格,将表格的内容作转移的目标地址。

查转移指令表:

将转移到不同程序的转移指令列成表格,判断条件后查表,转到表中指令执行,下面举例说明。


五、循环程序设计

循环程序的构成:


一、初始化部分

循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。


二、循环体

循环工作部分:需多次重复处理的工作

循环控制部分:

1.修改指针和循环控制变量。

2.检测循环条件:满足循环条件继续循环;否则退出循环。


三、结束部分

处理和保存循环结果。


四、 单重循环,简单循环结构:循环体中不套循环。

循环控制方法:计数控制、特征标志控制。

一、特征控制:设定循环结束标志实现循环控制。

二、 多重循环,循环体中套循环结构。以双重循环使用较多。


六、位操作程序设计

MCS-51单片机有着优异的位逻辑功能,可以方便的实现各种复杂的逻辑运算。这种用软件替代硬件的方法可以大大简化甚至完全不用硬件,但比硬件要多花运算时间。

能够进行位操作的区域之前我们已经说过了

大家只有记住这两张图就行了。其中的位寻址区,和特殊功能寄存器

在这里插入图片描述
在这里插入图片描述

七、子程序

子程序:完成确定任务,并能为其他程序反复调用的程序段。要求子程序在结构上具有通用性和独立性.

子程序编写注意的问题:

① 子程序入口用标号作为子程序名,子程序调用:ACALL、LCALL ;

② 调用子程序之前设置好堆栈;

③ 用返回指令RET结束子程序,并保证堆栈栈顶为调用程序的返回地址

④ 子程序嵌套须考虑堆栈容量,即嵌套深度与堆栈区大小的问题

⑤ 注意子程序数据存储器的使用不要与主程序及其它子程序冲突

⑥提供足够的调用信息:

如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。


1、按子程序与主程序之间传递参数的方式分类。

入口参数:调用子程序之前,需要传给子程序的参数。

出口参数:子程序送回调用程序的结果参数。

设计子程序应满足通用性的要求,一般不针对具体数据编程。

如:1.子程序功能为求单字节数的立方:

A¬A3,入口参数和输出参数为A。

2.子程序功能为求单字节数的n次方: (41H)(42H)¬(40H)A,入口参数为(40H)和A,出口参数为(42H)(41H)。


选用不同的参数传递方式。

1.寄存器传送参数

2.存储器传送参数

3.堆栈传送参数

在这里插入图片描述
在这里插入图片描述

总结

1、程序设计的关键在于指令熟悉和算法(思路)正确、清晰,对复杂的程序应先画出流程图。只有多做练习多上机调试,熟能生巧,才能编出高质量的程序。

2、伪指令是非执行指令,提供汇编程序以汇编信息,应正确使用。

关键字:MCS-51  单片机  汇编语言 引用地址:MCS-51单片机汇编语言程序设计

上一篇:80c51汇编语言格式,MCS-51汇编语言程序格式
下一篇:51单片机并行接口P0~P3

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

51单片机的精确延时程序一
51单片机的精确延时程序分析(C语言和汇编语言程序) 一、C51程序 在晶振为11.0592的情况下,如下程序能实现ms级的比较精确的延时: 1 void Delayms(unsigned int n) 2 { 3 unsigned int i,j; 4 for(j=n;j 0;j--) 5 for(i=112;i 0;i--); 6 } 用keil可以看出这个延时的时间,我们先延时1ms,即Delayms(1)。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时
[单片机]
为何不在单片机上实现PLC的逻辑呢?
有朋友想定制一个净水机控制器,有一些独特的功能要增加,但是商品控制板没有这样的功能,问我能否做一个,我觉得单片机完全能满足这种简单的控制需要,上手开始编程序时候突然感到,用PLC逻辑编这种功能是非常简单轻松的,而如果用汇编或C编却感觉有点棘手,编程效率不高,所以想为何不在单片机上实现PLC的逻辑呢? 上网搜索尝试看能否找到合适的程序下载来稍微改改就能用的呢?方案几年前就有了,实际上是利用三菱的低档PLC编程软件编辑好梯形图,存盘后用专用的格式转换工具转换成HEX单片机烧写文件烧进去,尝试下载三菱PLC工具软件,但是在我的WIN7-64位系统上不能正常工作,好容易换了系统装好开发工具,但是初次上手这款开发工具,界面挺复杂的,懒得
[单片机]
为何不在<font color='red'>单片机</font>上实现PLC的逻辑呢?
TI首次将Cortex-M4 MCU中集成MAC+PHY
日前,德州仪器宣布推出全球首款支持以太网MAC+PHY的Cortex-M4产品——Tiva C TM4C129x。Tiva C系列产品总经理Matt Muse表示,“这是一款面向云网关的智能MCU。” 为何是面向云计算的产品?Matt总结了TM4C129x的三大特点,即连接(Connectivity)、通信(Communicate)以及控制(Control)。 TM4C129x的系统框图 连接性 这是TM4C129x最重要的一点,目前,仅有TI、Microchip以及飞思卡尔等少量公司推出集成MAC+PHY的MCU。实际上,TI早在Stelaris产品线上就推出了集成MAC+PHY的芯片,而今Tiva则是以全
[单片机]
TI首次将Cortex-M4 <font color='red'>MCU</font>中集成MAC+PHY
基于51单片机的多功能电子钟万年历仿真设计
仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0053 1.主要功能: 基于51单片机的日期时间闹钟秒表倒计时多功能电子钟万年历仿真设计 1、数码管显示当前日期,时间,可以通过按键修改日期时间; 2、设置闹钟时间,时间到播放音乐; 3、具有秒表功能; 4、具有倒计时功能; 5、具有整点报时功能,多少点蜂鸣器响多少次; 6、具备闰年判断功能,设置日期的时候遵守正常大小月规律。 需注意仿真中51单片机芯片是通用的,AT89C51,AT89C52都是51单片机的具体型号,内核是兼容的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序也是一样的,芯片可以替
[单片机]
基于51<font color='red'>单片机</font>的多功能电子钟万年历仿真设计
51单片机开发系列五_矩阵按键扫描
在嵌入式系统中,用的最多的输入设备就是按键,用户的应用需求可通过相应按键传递到系统软件中,软件转而完成用户请求,实现简单的人机交互。笔者此处就矩阵按键的实现作一个简单的介绍。 1. 按键输入概述 按键是一种常开型按钮开关,平时键的二个触点处于断开状态,按下键时它们才闭合。按键控制电路就是用来实时监视按键,当有键接下时,电路监控中的输入引脚电平发生变化,检测到这种变化后,控制电路进行按键扫描,定位按键的位置,并把相关的按键信息反馈回上一层应用中。常见的按键输入设计有独立式按键,矩阵式按键。独立式按键每个键占用一个IO口,电路配置灵活,软件简单,但按键较多时,IO口浪费大。矩阵式按键适用于按键数量较多的场合,由行线和列线组成,按键位
[单片机]
51<font color='red'>单片机</font>开发系列五_矩阵按键扫描
单片机上Flash和EEPROM的异同
FLASH的全称是FLASHEEPROM,但跟常规EEPROM的操作方法不同。 FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。 至于那个“总工”说的话如果不是张一刀记
[单片机]
如何用C51实现单片机和PLC之间通讯的实例
1、 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。 它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机 作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2、Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Mo
[单片机]
如何用C51实现<font color='red'>单片机</font>和PLC之间通讯的实例
什么是单片机的时序
时序的由来 我们已经知道单片机执行指令的过程就是顺序地从ROM程序存储器中取出指令一条一条的顺序执行然后进行一系列的微操作控制来完成各种指定的动作它在协调内部的各种动作时必须要有一定的顺序换句话说就是这一系列微操作控制信号在时间上要有一个严格的先后次序这种次序就是单片机的时序这就好比我们学校上课时用的电铃为了保证课堂秩序学校就必须在铃声的统一协调下安排各个课程和活动那么单片机的时序是如何规定的呢接着往下看。 时序的周期 计算机每访问一次存储器的时间我们把它称为一个机器周期它是一个时间基准就象我们日常生活中使用的秒一样计算机中一个机器周期包括 12个振荡周期什么是振荡周期一个振荡周期是多少时间振荡周期就是振荡源的周期也就是我
[单片机]
什么是<font color='red'>单片机</font>的时序
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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