单片机汇编语言程序设计

发布者:心怀感恩最新更新时间:2015-03-23 来源: diangon关键字:单片机  汇编语言  程序设计 手机看文章 扫描二维码
随时随地手机看文章
1、汇编语言源程序的格式
  1.内部数据传送指令
 汇编语言是面向机器的,因此,语言格式因机器不同而异。对MCS-51系统来说,汇编语言中每条语句的格式包括下列4项内容:
    标号: 操作码 操作数; 注释
汇编语句中,标号和操作码要用冒号“:”隔开;操作码和操作数之间的分隔符是空格,多个操作数之间用“,”分隔;操作数与注释之间用“;”分隔;操作码是必选项,其余都是可选项,即任何语句都必须包含操作码,其他部分因语句不同而异。
    1.ORG伪指令
    ORG伪指令称为起始汇编伪指令,一般用于汇编语言源程序或某数据块的开头,格式为:
    [标号]:ORG 16位的地址或标号
    2.END伪指令
    END伪指令称为汇编结束伪指令,经常用在汇编语言源程序的末尾,用来指示源程序结束汇编的位置。即表明程序的结束。一般格式为:
    [标号]:END
    3.EQU伪指令
    EQU伪指令称为赋值伪指令,用于给左边的“字符名”赋值。此伪指令的格式为:
    字符名 EQU 数据或汇编符号
    4.DATA伪指令
    DATA伪指令称为数据地址赋值伪指令,它用来给左边的“字符名”赋值。其一般格式为:
    字符名 DATA 数据或表达式
    5.BIT伪指令
    BIT伪指令称为位地址符号伪指令,用来给符号形式的位地址赋值,此伪指令的格式为:
    字符名 BIT 位地址
    6.DB伪指令
    DB伪指令称为定义字节伪指令,它的功能是从指定单元开始定义(存储)若干个字节的数据或字符,字符若用引号括起来则表示ASCII码。其一般格式为:
    标号:DB 字节常数或字符
    7.DW伪指令
    DW伪指令称为定义字伪指令,其功能为在程序存储器中从指定单元开始,定义若干个字,一个字相当于两个字节。此伪指令的一般格式为:
    标号: DW 字常数或字表
    8.DS伪指令
    DS伪指令称为定义存储空间伪指令,格式为:
    标号: DS 表达式
2、MCS—51单片机汇编语言程序设计举例
 1. 简单程序设计
    例:将一个字节内的两位压缩BCD码拆开并转换成相应的ASCH码,存入两个RAM单元。
    解:设两位压缩BCD码已放在内部RAM的20H单元,转换后的ASCII码放在21H和22H单元。根据ASCII码表,字符0~9对应的ASCII码为30H~39H,之间仅相差30H。因此,转换时,只需把20H单元中两位压缩BCD码拆开后,将BCD的高四位置成“0011”即可。相应程序如下:
    ORG       1000H
    MOV    R0,  #20H
    MOV    A,   @R0    ;两位BCD码送A
    PUSH    ACC
    ANL    A,  #0FH    ;取低位BCD码 
    ORL    A,  #30H    ;完成低位转换
    INC   R0
    MOV    @R0,  A    ;低位BCD码的转换结果存入21H中
    POP    ACC 
    ANL    A  ,#0F0H    ;取高位BCD码
    SWAP   A
    ORL    A,  #30H   ;完成高位转换
    INC   R0
    MOV    @R0,  A    ;存数
    SJMP   $    ;结束
    END
    2. 分支程序设计
    例:设变量X存放于R2,函数值Y存放在R3。试按照下式的要求给Y赋值:
 解:这是一个三分支的条件转移程序,可采用CJNE和JC或JNC指令进行判断。
    ORG    0500H
    MOV A, R2 ;自变量→(A)
    CJNE A,#10,L1 ;(A)与10比较
    L1:JC L2 ;若X<10,则转L2
    ADD A, #01H
    MOV R3, A ; 设X>20,Y=1
    CJNE A,#21,L3
    L3:JNC L4 ;X>20,则转L4
    MOV R3,#0 ;20≥X≥10,Y=0
    SJMP L4
    L2:MOV R3,#0FFH
    L4:SJMP $
    END
    3. 循环程序设计
    循环程序一般由以下几部分组成:
    1)循环初始化部分
    2)循环体部分
    3)循环结束部分
    例:在内部RAM的20H~2FH连续16个单元中存放单字节无符号数。求16个无符号数之和。
    解 这是重复相加问题。16个单字节数的和最大不会超过两个字节,设和存放在31H,30H中。用R0作加数指针,R7作循环次数计数器。程序流程如图3-11所示。[page]
    ORG 1000H
    MOV R7,#0FH
    MOV R0,#21H
    MOV 31H,#00H
    MOV A,20H
    LOOP1: ADD A,@R0
    MOV 30H, A
    JNC LOOP2
    INC 31H
    LOOP2: INC R0
    DJNZ R7, LOOP1
    SJMP $
    END
    4.查表程序设计
    查表程序是根据查表算法设计的。它有两条专门的查表指令:
    例:设计一个将16进制数转换成ASCII码的子程序。设16进制数存放在R0中的低4位,要求将转换后的ASCII码送回R0中。
    解:给出二种方案。
    ①计算求解。由ASCII码字符表可知0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H。因此,计算求解的思路是:若(R0)≤9,则R0内容只需加30H;若(R0)>9,则R0需加37H。相应程序为:
    ORG 1000H
    MOV A,R0 ;取转换值到A
    ANL A,#0FH ;屏蔽高4位
    CJNE A,#10,NEXTl
    NEXTl:JNC NEXT2 ;若A>9,则转NEXT2
    ADD A,#30H ;若A<10,则A (A)+30H
    SJMP DONE
    NEXT2:ADD A,#37H ;A (A)+37H
    DONE: MOV R0,A ;存结果
    SJMP $
    END
     ②查表求解。求解时,两条查表指令任选其一。现以“MOVC A,@A+PC”指令为例,给出相应程序:
    地址 机器码 ORG 1000H
    1000 E8 MOV A,R0 ;取转换值
    1001 54 0F ANL A,#0FH ;屏蔽高4位
    1003 24 03 ADD A,#03H ;计算偏移量
    1005 83 MOVC A,@A+PC ;查表
    1006 F8 MOV R0,A ;存结果
    1007 80 FE SIMP $
    1008 30 31 32 33 ASCTAB: DB 30H,31H,32H,33H
    100C 34 35 36 37 DB 34H,35H,36H,37H
    1010 38 39 41 42 DB 38H,39H,41H,42H
    1014 43 44 45 46 DB 43H,44H,45H,46H
    END
    5. 子程序设计
    子程序在结构上应具有通用性和独立性,在编写子程序时应注意:
    ①程序第一条指令的地址称为入口地址,该指令前必须有标号,最好以子程序任务名作为标号,例如显示程序常以DIR作为标号;
    ②调用子程序指令设在主程序中,在子程序的末尾一定要有返回指令。一般说来,子程序调用指令和子程序返回指令要成对使用,子程序应只有一个出口;
    ③子程序调用和返回指令能自动保护和恢复断点地址,但对需要保护的寄存器和内存单元的内容,必须在子程序开始和末尾(RET指令前)安排保护和恢复它们的指令;
    ④调用子程序时,要了解子程序的“入口信息”和“出口信息”,即进入子程序前应给哪些变量赋值,子程序返回时结果存在何处,以便主程序应用这些结果。这就是所谓的参数传递。一般称传入子程序的参数为入口参数,由子程序返回的参数为出口参数。
    例:用程序实现C=a2+b2。设a、b均小于10。a存在21H单元,b存在22H单元,结果C存在20H单元。
    解:因本题中两次用到求平方的运算,故此把求平方运算编成子程序。依题意编写主程序和子程序如下:
    ORG 1000H
    MAIN: MOV SP,#60H ;设堆栈指针
    MOV A,21H ;取a值
    LCALL SQR ;求a2
    MOV 20H,A ;a2值送入20H单元
    MOV A,22H ;取b值
    LCALL SQR ;求b2
    ADD A,20H ;求a2+b2
    MOV 20H,A ;结果存入20H单元
    SJMP $
    ORG 2000H
    SQR: MOV B,A ;求平方子程序
    MUL AB
    RET
关键字:单片机  汇编语言  程序设计 引用地址:单片机汇编语言程序设计

上一篇:用CS5460和μPD75P3116实现功率和电能计量
下一篇:串行通讯的基本方式

推荐阅读最新更新时间:2024-03-16 13:55

基于单片机的超声波测距仪LED显示电路的设计
1 引言 随着科学技术的快速发展,超声波将在测距仪中的应用越来越广。但就目前技术水平来说,人们可以具体利用的测距技术还十分有限,因此,这是一个正在蓬勃发展而又有无限前景的技术及产业领域。展望未来,超声波测距仪作为一种新型的非常重要有用的工具在各方面都将有很大的发展空间,它将朝着更加高定位高精度的方向发展,以满足日益发展的社会需求,如声纳的发展趋势基本为:研制具有更高定位精度的被动测距声纳,以满足水中武器实施全隐蔽攻击的需要;继续发展采用低频线谱检测的潜艇拖曳线列阵声纳,实现超远程的被动探测和识别;研制更适合于浅海工作的潜艇声纳,特别是解决浅海水中目标识别问题;大力降低潜艇自噪声,改善潜艇声纳的工作环境。无庸置疑,未来的超声波测距
[测试测量]
单片机学习必须要掌握知识
实际上,电子工程师就是将一堆器件搭在一起,注入思想(程序),完成原来的这些器件分离时无法完成的功能,做成一个成品。所需要的技能越高、功能越复杂、成本越低、市场上对相应的东东的需求越大,就越成功。这就是电子工程师的自身的价值。从成本到产品售出,之间的差价就是企业的追求。作为企业的老板,是在市场上去寻找这样的应用;对电子工程师而言,是将老板提出的需求或者应用按照一定的构思原则(成本最低、可靠性最高、电路板最小、功能最强大等)在最短的时间内完成。最短的时间,跟电子工程师的熟练程度、工作效率和工作时间直接有关。这就是电子工程师的价值。 将电子产品抽象成一个硬件的模型,大约有以下组成: 1) 输入   2) 处理核心   3) 输出
[单片机]
爱特梅尔用于AT91CAP9H微控制器工具包
      爱特梅尔公司 (Atmel® Corporation) 宣布为即将推出的基于ARM926EJ-S™的AT91CAP9H可定制微控制器,提供带有200 万门可定制逻辑的AT91CAP9HA-DK开发工具包。AT91CAP9HA-DK 可让客户在 AT91CAP9H 预期供货之前就启动开发设计。除了用于固定微控制器架构的标准 AT91CAP9 器件和用于定制逻辑的 FPGA之外,AT91CAP9HA-DK还带有一套完整的存储器、用户接口和外部接头,能够迅速配置以仿真尚在开发之中的应用,从而节省时间、降低成本,并在设计进入金属编程硅片阶段之前就进行全面的调试。爱特梅尔另外还提供一款带有150万门FPGA成本较低的方案选择。
[单片机]
基于单片机的模糊控制系统的设计与实现
1 引言      模糊控制(Fuzzy Control)是目前自动控制研究中活跃而富有成果的领域之一,模糊理论是当前能用来对信息进行软处理的最新技术,可以将人的定性思维和判断方法定量化 为适合计算机处理的过程,使计算机能判断像“大概”、“轻”这样的模糊信息。采用传统控制理论,不管是用经典控制理论还是用现代控制理论来设计一个控制系 统,都需要事先知道被控对象的精确数学模型。然而,在许多情况下被控对象(或生产过程)的精确数学模型很难建立;像建材工业生产中的水泥窑、玻璃窑,化学 生产中的化学反应过程,食品生产中的发酵过程,还有众多炉类的热处理过程。诸如此类过程具有变量多,各种参数存在不同程度的时变性;且过程具有非线性,强 耦合,较
[嵌入式]
AVR单片机JTAG接口的使用方法
AVR的JTAG 仿真器特别好用,在此特别推荐,它可以对所有含JTAG接口的mega系列进行下载和软件硬件仿真。 刚开始使用AVR JTAG仿真器时,不是很清楚它的使用方法。看完AVR JTAG仿真器的英文说明和中文说明,也不很明确它的具体使用。经过自己的摸索,才清楚如何使用这种仿真器。其实这种仿真器的使用方法很简单,就是说明太罗索,让人越搞越糊涂。不过,使用这种仿真器,确实方便了很多,可实现硬件仿真与软件仿真,步调程序,发现程序漏洞,是较好的辅助调试工具。 下面是摸索出来的较简明的使用方法: (1) AVR JTAG的使用环境是:AVR Studio 4.07以上版本,9-15DC电源,PC与RS232口。 (2) 安装AVR S
[单片机]
​借助实时微控制器优化可再生能源和工业系统的功率效率和功率密度
电力电子产品设计人员致力于提升工业和汽车系统的功率效率和功率密度,这些设计涵盖多轴驱动器、太阳能、储能、电动汽车充电站和电动汽车车载充电器等。 这些系统的主要设计挑战之一是在降低系统成本的同时,实现更出色的实时控制性能。要应对这一挑战,常用的方法是使用拥有超低延迟控制环路处理功能的模拟和控制外设的高度集成的微控制器 (MCU) 。 实时控制性能:延迟是关键 在深入应用实例之前,先让我们简要看下“延迟”。在多轴驱动器、机器人、具有储能系统的光伏逆变器、电动汽车充电站和电动汽车中,控制性能与 MCU 对信号进行采样、处理和控制的速度直接相关。图 1 展示了实时信号链和信号延迟之间的关系,信号延迟指从模数转换器 (ADC)
[工业控制]
​借助实时<font color='red'>微控制器</font>优化可再生能源和工业系统的功率效率和功率密度
有关单片机功耗分类及相关计算方法介绍
单片机的功耗是非常难算的,而且在高温下,单片机的功耗还是一个特别重要的参数。   暂且把单片机的功耗按照下面的划分。  首先我们计算内部功耗单片机的功耗一般和工作频率有关,在固定频率下与功能有关,有   1.内部功耗(与频率有关)   2.数字输入输出口功耗   2.1输入口   2.2输出高   2.3输出低   3.模拟输入口功耗 两种计算办法。   第一种,固定频率,增减功能引起电流变化:   第二种,频率变化,不考虑使用模块:   数字输出口,按照表格中的数据,得出内部的Rdson,可计算出输出高和输出低在内部的功耗。   这里需要注意的是,输入口的功耗一般不大,但是设计的IO口有电流注入
[单片机]
有关<font color='red'>单片机</font>功耗分类及相关计算方法介绍
爱特梅尔的AVR微控制器集成射频发送器功能
爱特梅尔公司(Atmel® Corporation)宣布推出首个ATA874x单芯片UHF ASK/FSK RF发送器系列。这一全新AVR®产品线具有业界领先的射频 (RF) 性能,并可在免授权的ISM频带(868 到 928 MHz、433 MHz和 315 MHz) 运作。ATA874x系列瞄准工业和消费领域的多元化专有无线应用,如计量、报警系统和家居控制应用设备等。 爱特梅尔是智能计量和家居自动化市场的知名厂商,一直提供出色的无线IEEE 802.15.4 和 ZigBee®产品;如今更采取更多的举措,以满足专有无线市场领域各种多元化的需求。 ATA874x系列器件包含一个低功率AVR CPU和一个高效
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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