80C51单片机的指令系统(三)80C51单片机指令系统

发布者:BlissfulAura最新更新时间:2019-06-28 来源: eefocus关键字:80C51  单片机  指令系统 手机看文章 扫描二维码
随时随地手机看文章

指令字节和指令周期

指令字长有三种:


单字节    RET


双字节    MOV   A,  #68H


三字节    MOV   30H, 46H


指令周期是指执行一条指令所需要的时间


1机器周期指令

2机器周期指令

4机器周期指令

4.3.1  数据传送指令:


1、内部8位数据传送指令

mov A,#data    ;(A)<--- #data

mov A, data     ;(A)<--- (data)

mov A, @Ri     ;(A)<--- ((Ri))   i=0,1

mov A,Rn        ;(A)<--- (Rn)  n=0~7

mov Rn,# data;(Rn ) <--- #data

mov Rn,  data ;(Rn)  <--- (data)

mov Rn,A        ;(Rn)  <--- (A)

【例4-14】MOV    A,    40H    ;    (A)<---(40H)

                  MOV    A,    #40H    ;    (A)<---40H


注意 40H 和#40H的区别


【例4-15】MOV    A,    Rl    ;    (A)<---(R1)

                  MOV    A,    @Rl    ;    (A)<---((R1))


注意 @R1 和R1的区别


【例4-16】MOV    90H,     #40H   ;(P1)<---40H

                  MOV    P1,       #40H   ;(P1)<---40H

                  MOV    R0,       #90H   ;(R0)<---90H

                  MOV    @R0,    #40H   ;(90H)<---40H


注意:

(1) 目的操作数不能采用立即寻址。

(2) @Ri中的i范围为0和1。

(3) Rn中的n的范围为0~7。

(4) 每条指令中最多只能有1个Rn或@Ri。


【例4-17】 以下指令都是错误的。

MOV    #30H,       40H 

MOV    A,    @R2

MOV    R1,    R3

MOV    R1,    @R0

MOV    @R1 ,    R2 

MOV    @R0,    @R1


【例4-18】

MOV         A,    60H  ;(A)<---(60H),目的操作数为寄存器寻址

MOV    0E0H,    60H ;(A)<---(60H),目的操作数为直接寻址

MOV    09H,    #40H ;(09H)<---40H,目的操作数为直接寻址

MOV    R1,    #40H   ;(R1)<---40H,目的操作数为寄存器寻址


【例4-19】 分析程序的执行结果。

设内部RAM中30H单元的内容为80H,试分析执行下面程序后各有关单元的容。

MOV    60H,    #30H  ;(60H)<---30H

MOV    R0,    #60H    ;(R0)<---60h

MOV     A,    @R0      ;(A)<---30H

MOV    R1,    A           ;(R1)<---30H

MOV    40H,    @R1   ;(40H)<---80H


程序执行结果为:(A)=30H,(Ro)=60H,(R1)=30H, (60H)=30H,(40H)=80H,(30H)=80H


2和3、外部数据传送指令


【例4-20】 将内部RAM 80H单元的内容送入外部RAM 70H单元。程序如下:


MOV R0,#80H


MOV A,@R0


MOV R0,#70H


MOVX @R0,A


       此例中访问内部RAM和访问外部RAM均通过R0间接寻址,不同的是访问内部RAM用操作码MOV,访问外部RAM使用操作码MOVX,二者不能混淆。


4、交换指令

-   XCH  A, Rn ;         (A) <=> (Rn), n=0~7


-   XCH   A,direct;       (A)<=> (direct)


-   XCH   A, @Ri;        (A)<=>  ((Ri))    ,i=0,1


-   XCH D  A,@Ri ;      (A) 0~3 <=> ((Ri))0~3


-   SWAP   A         ;      (A)  0~3 <=> (A)4~7


【 例4-22】 设(A)=34H ,  (R3)=56H,  执行指令:


                    XCHA,   R3


则结果为:  (A)=56H,    (R3)=34H


【例4-23】 设(A)=34H ,    (R0)=30H,    (30H)=56H,   执行指令:


                     XCHD  A,    @RO


则结果为: (A)=36H,    (30H)=54H


5、查表指令

MOVC A,    @A+PC       ;(PC)<---(PC)+1;(A)<---((A)+(PC)) 

MOVC A,    @A+DPTR  ;(A)<---((A)+(DPTR))

【例4-24 】 执行程序:

  地址     指令

0F00H    MOV    A,#30H 

0F02H    MOVC  A,@A+PC

                   .

                   .

                   .

0F33H    3FH

                   .

                   .

                   .


实现将程序存储器0F33H 单元内容3FH送入A的功能。

【例4-25 】 执行程序:

MOV    DPTR,    #2000H 

MOV    A,    #30H 

MOVC    A,    @A+DPTR

实现将程序存储器中2030H单元的内容送入累加器A的功能。


6、堆栈操作指令

-PUSH direct ;       ( sp )  <---(sp)+1,   ( (sp))<--- (direct)


-POP direct ;         ( direct ) <---((sp)) ,(sp)<--- (sp)-1


堆栈:一种数据结构,是“先进后出“线性表。

堆栈操作:  压入 PUSH  ,    弹出 POP

堆栈区: 占片内RAM 中连续的存储单元

复位后, 系统自动将SP指针指向07H


用户可将堆栈区设在30H ---7FH 数据缓冲区内,


如: MOV    SP,#5FH


堆栈两种类型:  向上生长型和向下生长型,  如图2-5 所示。向上生长型堆栈,栈底在低地址单元。随着数据进栈, 地址递增, S P 的内容越来越大, 指针上移; 反之, 随着数据的出栈, 地址递减, SP  的内容越来越小, 指针下移。如(b)图所示。



MCS-51属向上生长型堆栈,这种堆栈的操作规则如下:


进栈操作: 先SP加1,后写入数据。


出栈操作: 先读出数据,SP减1 。


       向下生长型堆栈, 栈底设在高地址单元。随着数据进栈, 地址递减, SP内容越来越小, 指针下移; 反之, 随着数据出栈, 地址递增, SP内容越来越大,指针上移。其堆栈操作规则与向上生长型正好相反。如(a)图所示。


堆栈的使用有两种方式:

       一种是自动方式, 即在调用子程序或断点时, 断点地址自动进栈。程序返回时,断点地址再自动弹回PC。这种操作无需用户干预。


       另一种是指令方式, 即使用专用的堆栈操作指令, 执行进出栈操作, 其进栈指令为PUS H,  出栈指令为POP。 例如:


       保护现场就是一系列指令方式的进栈操作;


       而恢复现场则是一系列指令方式的出栈操作。


       需要保护多少数据由用户决定。



【例4-26】 设(SP)=70H,(ACC)=50H,(B)=60H ,

执行下述指令:

PUSH    ACC  ;(SP)<---(SP)+1,(71H)<---(ACC)

PUSH    B       ;(SP)<---(SP)+1,(72H)<---(B)

结果为:(71H)=50H,    (72H)=60H,(SP)=72H

此例中ACC和B都是用直接寻址方式寻址的,不能用寄存器寻址方式。入栈指令常用于保护CPU现场等场合。


【例4-27】 设(SP)=72H,(72H)=60H,(71H)=50H,

执行下述指令;

POP    DPL    ;DPL((SP)),(SP)<---(SP)-1

POP    DPH    ;DPH((SP)),(SP)<---(SP)-1

结果为:    (DPTR)=5060H,(SP)=70H


4.3.2 算术运算指令

1、加法指令

ADD    A,  Rn                      ;(A)<---(A)+(Rn)

ADD    A,  direct                 ;(A)<---(A)+(direct)

ADD    A,    @Ri                    ;(A)<---(A)+((Ri))

ADD    A,      #data                ;(A)<---(A)+ data

带进位的加法指令

ADDC  A,     Rn                     ;(A)<---(A)+(Rn)+(Cy)

ADDC  A,     direct                ;(A)<---(A)+(direct)+(Cy)

ADDC  A,     @Ri                   ;(A)<---(A)+((Ri))+(Cy)

ADDC  A,     #data                ;(A)<---(A)+ data +(Cy)


.

2、带借位的减法指令

SUBB    A,Rn         ;  (A)<---(A)-(Rn)-(Cy)

SUBB    A,direct    ;  (A)<---(A)-(direct)-(Cy)

SUBB    A,@Ri       ;  (A)<---(A)-((Ri))-(Cy)

SUBB    A, #data    ;  (A)<---(A)-data-(Cy)


3、加1指令

INC  A         ;  (A)<---(A)+1

INC  Rn       ;  (Rn)<---(Rn)+1

INC  direct  ;  (direct)<---(direct)+1

INC  @Ri     ;  ((Ri))<---((Ri))+1

INC  DPTR  ;  (DPTR)<---(DPTR)+1


4、减1指令    

DEC  A         ;  (A) (A)-1

DEC  Rn         ;  (Rn) (Rn)-1

DEC  direct   ;  (direct) (direct)-1

DEC  @Ri      ;  ((Ri)) ((Ri))-1



【例4-33】 试分析执行以下程序后, 各有关单元的结果。


解:程序如下:

MOV  R1,    #7FH 

MOV  7EH, #00H 

MOV  7FH, #40H

DEC    @R1 

DEC    R1

DEC    @R1

执行结果: (R1)=7EH    (7EH)=0FFH   (7FH)=3FH


【例 4-32】 设20H~21H单元存放一个16位二进制数X1(高8位存于21H单元),30H~31H单元存放另一个16位二进制数X2(高8位存于31H单元)。求X1+X2,和存于20H~21H ,设两数之和不超过16位。解:程序如下:

 

ORG 2000H 

MOV  R0,    #20H 

MOV  R1,    #30H 

MOV  A,   @R0  ; 取被加数低8位

ADD   A,    @R1  ;  求和的低8位

MOV  @RO, A   ;  存和的低8位

INC    R0     ; 指向被加数高8位

INC    R1     ;  指向加数高8位

MOV   A,    @R0 ;  取被加数高8位

ADDC  A,    @R1 ; 求和的高8位

MOV   @R0,A   ; 求和的高8位

SJMP   $           ;停机

END


运算结果:高8位存于21H单元,低8位存于20H单元。

5、十进制调整指令

DA  A  ;  若(AC)=1 或(A)3~0>9,则A<---(A)+06H

           ;若(Cy)=1 或(A)7~4>9,则A<---(A)+60H

•调整原则:形式上非BCD码 需要加 06H、60H、66H调整

-形式上是BCD码时:    CY   AC   调整原则

                                   0     0    不调整

                                   0     1      +06H

                                   1     0      +60H

                                   1     1      +66H

【例4-34】 编写程序完成78+93的BCD码加法程序, 并对调整过程进行分析。解: 相应BCD码加法程序为:

[1] [2] [3]
关键字:80C51  单片机  指令系统 引用地址:80C51单片机的指令系统(三)80C51单片机指令系统

上一篇:80C51单片机的指令系统(二)寻址方式
下一篇:80C51单片机的指令系统(一)程序设计语言和指令

推荐阅读最新更新时间:2024-11-14 20:06

PIC 单片机软件异步串行口实现技巧
在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通 信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的 产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART,一些低端廉价的PIC单 片机甚至还不带硬件 UART。为了提高系统的性能价格比,就要求设计工程师用软件增加实现一路或多路异步串行通信。很多工程师对用软件实现的UART在可靠性和效率方面持怀 疑态度,其实关键问题是看软件采用何种方式来实现可靠的UART功能。  
[单片机]
PIC <font color='red'>单片机</font>软件异步串行口实现技巧
力旺MCU绿制程 降低成本
嵌入式非挥发性硅智财(eNVM IP)供应商力旺电子(3529)昨(20)日宣布,针对微控制器(MCU)推出绿制程平台,协助晶圆代工厂大幅简化制造流程,力旺已提供单次可程式(OTP)及多次可程式(MTP)硅智财解决方案,不仅制程可推进至0.153微米,还可有效减少光罩数及降低约30%成本。 力旺协助晶圆代工厂建构绿制程平台,在针对MCU特定应用减除非必要之元件后,将传统需花费至少27道光罩的制程步骤,大幅降低至15道光罩以内,协助客户降低30%以上之成本,特别符合大宗消费性电子产品对低成本MCU要求。 力旺指出,绿制程平台原以8寸晶圆厂0.18微米制程为基础,在今年度更进一步推进至0.153微米的布局设计规范(Design
[单片机]
基于LonWorks的在系统编程技术
引言   在系统编程ISP(In System Programming)是指在用户设计的目标系统或印刷电路板上为重新配置逻辑,或实现新的功能而对器件进行编程或反复编程。   随着EDA工具的普及和ISP器件的日益成熟,ISP技术也得到了越来越广泛的应用。ISP技术的应用使得硬件设计软件化,其显著优势体现在:简化生产流程;利用同一硬件结构实现多种系统功能,使之成多功能硬件;在不特殊电路板资源的情况下进行电路板级测试;边界扫描测试;通过Modem和ISP编程接口实现对系统的远程维护和升级。   对ISP器件的编程可通过PC机进行,利用1条编程电路(或称下载电缆)将准确定时的编程信号提供给该器件。但是,这种方法不能使各种器件
[单片机]
基于LonWorks的在系统编程技术
基于80C51单片机的教学演示板设计
随着计算机技术和微电子计算的发展,单片机在工业控制、家用电器、智能化仪器仪表等领域得到了广泛应用。因此,单片机作为一门专业课程,具有实践性、综合性强的特点。现有的单片机教学演示板,功能模块较为复杂,程序代码不公开,制作成本较高。 针对现有单片机开发板的问题,设计了一种功能针对性强、结构简单、成本低廉的单片机教学演示板,其功能模块与教学内容紧密结合,公开程序代码,设计思路清晰便于理解。 1 单片机教学演示板的总体设计 在智能化仪器仪表中,控制核心均为微处理器,而单片机以高性能、高速度、体积小、价格低廉、稳定可靠而得到广泛应用,是设计智能化仪器仪表的首选。单片机结合简单的接口电路即可构成单片机最小系统,它是智能化仪器仪表的基础,也是
[单片机]
基于<font color='red'>80C51</font><font color='red'>单片机</font>的教学演示板设计
PIC单片机之温度采集
大家好, 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管、RS232 串口、步进电机等资源,体会到了学习板的易用性与易学性,看了前几期实例,当你实验成功后一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下DS18B20 数字温度传感器的工作原理及使用方法,这样我们用单片机来读取温度数值,可以做出很多温控方面的小产品来,如温度计,温度控制继电器的应用系统。 一、 单总线温度传感器DS18B20简介 DS18B20 是DALLAS 公司生产的单总线式数字温度传感器,它具有微型化、低功
[单片机]
PIC<font color='red'>单片机</font>之温度采集
基于C8051F单片机的镍氢电池组管理系统
文章描述了镍氢电池充放电原理和特性的分析,并根据镍氢电池充放电管理需求,提出了一种基于C8051F单片机对多节镍氢电池串联电池组进行综合监测和管理的方案,通过设计:实现了新型电池管理电路,包括完整的硬件和软件解决方案。 随着中国煤炭工业的发展和矿山装备技术的进步,我国对煤矿甲烷安全监控系统,运输监控系统,应急救援系统等使用的后备电源的设备要求越来越高,尤其 是其安全特性。作为煤矿用后备电源的重要的组成之一,镍氢电池无论在安全性上,还是可靠性,成本等方面,都具有较大优势。镍氢电池组是一个串联的组成系 统,其中任何单节电池损坏必将影响整个电池组,如何在保证镍氢电池安全性能的同时,发挥电池自身最大的能量效率,这是矿用镍氢电池管理系统研究和
[单片机]
基于C8051F<font color='red'>单片机</font>的镍氢电池组管理系统
瑞萨电子推出超35款全新MCU产品 拓展电机控制嵌入式处理产品阵容
两大产品家族三大系列MCU全新产品为业界带来更广泛的电机控制解决方案 2023 年 5 月 30 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布面向电机控制应用领域发布三个全新MCU产品群,其中超过35种来自于RX和RA家族的新产品。 这些新款MCU扩充了瑞萨包括多种MCU与MPU、模拟和电源解决方案、传感器、通信设备、信号调节器等的卓越电机控制产品组合。 瑞萨推出两款基于Arm® Cortex®-M的RA家族的全新MCU产品群。其中,RA4T1产品群可提供100 MHz性能,以及高达256KB的闪存和40KB的SRAM;全新RA6T3产品群工作频率为200MHz,同时提供256KB的闪存和40KB的S
[嵌入式]
瑞萨电子推出超35款全新<font color='red'>MCU</font>产品 拓展电机控制嵌入式处理产品阵容
基于STC15W408AS单片机内部EEPROM读写接口函数
#include reg51.h #include intrins.h #define uint unsigned int #define uchar unsigned char #define ulong unsigned long typedef uchar BYTE; typedef uint WORD; sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--- Standard, 01--- push-pull sfr P1M0 = 0x92; // =10--- pure input, 11--- open drain sfr P0M1 = 0x93; sfr
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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