11课:单片机算术运算指令

发布者:岭南布衣最新更新时间:2020-03-11 来源: eefocus关键字:单片机  算术运算指令  运行结果 手机看文章 扫描二维码
随时随地手机看文章

不带进位位的单片机加法指令

ADD A,#DATA ;例:ADD A,#10H

ADD A,direct ;例:ADD A,10H

ADD A,Rn ;例:ADD A,R7

ADD A,@Ri ;例:ADD A,@R0

用途:将A中的值与其后面的值相加,最终结果否是回到A中。

例:MOV A,#30H

ADD A,#10H

则执行完本条指令后,A中的值为40H。


下面的题目自行练习

MOV 34H,#10H

MOV R0,#13H

MOV A,34H

ADD A,R0

MOV R1,#34H

ADD A,@R1

带进位位的加法指令

ADDC A,Rn

ADDC A,direct

ADDC A,@Ri

ADDC A,#data


用途:将A中的值和其后面的值相加,并且加上进位位C中的值。

说明:由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0-255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位的数学运算合起来,成为一个16位的运算,这样,能表达的数的范围就能达到0-65535。如何合并呢?其实很简单,让我们看一个10进制数的例程:

66+78。

这两个数相加,我们根本不在意这的过程,但事实上我们是这样做的:先做6+8(低位),然后再做6+7,这是高位。做了两次加法,只是我们做的时候并没有刻意分成两次加法来做罢了,或者说我们并没有意识到我们做了两次加法。之所以要分成两次来做,是因为这两个数超过了一位数所能表达的范置(0-9)。


在做低位时产生了进位,我们做的时候是在适当的位置点一下,然后在做高位加法是将这一点加进去。那么计算机中做16位加法时同样如此,先做低8位的,如果两数相加产生了进位,也要“点一下”做个标记,这个标记就是进位位C,在PSW中。在进行高位加法是将这个C加进去。例:1067H+10A0H,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是7,而1则到了PSW中的CY位了,换言之,CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。


带借位的单片机减法指令

SUBB A,Rn

SUBB A,direct

SUBB A,@Ri

SUBB A,#data

设(每个H,(R2)=55H,CY=1,执行指令SUBB A,R2之后,A中的值为73H。

说明:没有不带借位的单片机减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。


乘法指令

MUL AB

此单片机指令的功能是将A和B中的两个8位无符号数相乘,两数相乘结果一般比较大,因此最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。在乘积大于FFFFFH(65535)时,0V置1(溢出),不然OV为0,而CY总是0。


例:(A)=4EH,(B)=5DH,执行指令

MUL AB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。


除法指令

DIV AB

此单片机指令的功能是将A中的8位无符号数除了B中的8位无符号数(A/B)。除法一般会出现小数,但计算机中可没法直接表达小数,它用的是我们小学生还没接触到小数时用的商和余数的概念,如13/5,其商是2,余数是3。除了以后,商放在A中,余数放在B中。CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么0V=1。


加1指令

INC A

INC Rn

INC direct

INC @Ri

INC DPTR


用途很简单,就是将后面目标中的值加1。例:(A)=12H,(R0)=33H,(21H)=32H,(34H)=22H,DPTR=1234H。执行下面的指令:

INC A (A)=13H

INC R2 (R0)=34H

INC 21H (21H)=33H

INC @R0 (34H)=23H

INC DPTR ( DPTR)=1235H


后结果如上所示。


说明:从结果上看INC A和ADD A,#1差不多,但INC A是单字节,单周期指令,而ADD #1则是双字节,双周期指令,而且INC A不会影响PSW位,如(A)=0FFH,INC A后(A)=00H,而CY依然保持不变。如果是ADD A ,#1,则(A)=00H,而CY一定是1。因此加1指令并不适合做加法,事实上它主要是用来做计数、地址增加等用途。另外,加法类指令都是以A为核心的��其中一个数必须放在A中,而运算结果也必须放在A中,而加1类指令的对象则广泛得多,能是寄存器、内存地址、间址寻址的地址等等。


减1指令

DEC A

DEC RN

DEC direct

DEC @Ri


与加1指令类似,就不多说了。


综合练习:

MOV A,#12H

MOV R0,#24H

MOV 21H,#56H

ADD A,#12H

MOV DPTR,#4316H

ADD A,DPH

ADD A,R0

CLR C

SUBB A,DPL

SUBB A,#25H

INC A

SETB C

ADDC A,21H

INC R0

SUBB A,R0

MOV 24H,#16H

CLR C

ADD A,@R0


先写出每步运行结果,然后将以上题目建入,并在软件仿真中运行,观察寄存器及有关单元的内容的变化,是否与自已的预想结果相同。

关键字:单片机  算术运算指令  运行结果 引用地址:11课:单片机算术运算指令

上一篇:10课:单片机数据传送类指令
下一篇:12课:单片机逻辑运算类指令

推荐阅读最新更新时间:2024-11-13 10:20

MCU晶体旁边电容的作用及振荡电路的分析
绝大多数的MCU爱好者对MCU晶体两边要接一个22pF附近的电容不理解,因为这个电容有些时候是可以不要的。参考很多书籍,讲解的很少,往往提到最多的是起稳定作用,负载电容之类的话,都不是很深入理论的分析。 问题是很多爱好者不去关心这两个电容,他们认为按参考设计做就行了,本人也是如此,直到有一次一个手机项目就因为这个电容出了问题,损失了几百万之后,才开始真正的考虑这个电容的作用。 其实MCU的振荡电路的真名叫 三点式电容振荡电路 ,请参考网页中的图片。 Y1是晶体,相当于三点式里面的电感,C1和C2就是电容,5404和R1实现一个NPN的三极管,大家可以对照高频书里的三点式电容振荡电路。接下来分析一下这个电路。 5404必
[单片机]
<font color='red'>MCU</font>晶体旁边电容的作用及振荡电路的分析
论C8051F005单片机的比例电磁铁控制技术
  引言   比例电磁铁作为执行元件,是机电一体化的关键产品之一,广泛应用于各种自动化控制系统中;比例电磁铁的推力大,结构简单,维护方便,成本低廉,是应用非常广泛的电—机械转换器 ;比例电磁铁的特性及工作的可靠性,对于整个控制系统具有十分重要的影响,是决定控制系统品质的关键部件之一。比例电磁铁作为电—机械转换元件,其功能是将比例控制放大器输给的电流信号,转换成位移或者力信号输出。   比例电磁铁适用于直流电压为24 V比例控制放大器的控制线路中,作为连续地、按比例地控制系统执行元件的运动、速度和方向的动力元件。比例电磁铁在其额定行程范围内的推力与通入其线圈的电流成正比,可在其他需要作用力自动控制的装置上作为线性动力元件,如自动油
[单片机]
论C8051F005<font color='red'>单片机</font>的比例电磁铁控制技术
DSP/MCU会给未来手机带来怎样的惊喜?
1.DSP/MCU给未来手机带来憧憬 如今,智能手机的普及率越来越高,人们对手机的需求量也越来越大。但对于手机厂商来说,竞争却越来越激烈。制造一款同质化的产品并不难,但想要自己的产品能长久地在市场中存活并不是一件简单的事情。对于理智的消费者来说,价格和硬件配置已经不再是决定他们购买手机的最主要的因素,同等价格能够获得更好的使用体验的产品才是真正能在市场中站住脚的产品。   DSP/MCU会给未来手机带来怎样的惊喜? 在前面的几篇文章中,我们从原理以及实际应用角度和大家聊了智能手机DSP(数字信号处理器)和MCU(微型控制单元)的话题,相信大家对自己手机中的硬件应该有了一个新的认识。 通过DSP和MCU的
[单片机]
DSP/<font color='red'>MCU</font>会给未来手机带来怎样的惊喜?
和大家分享一个AVR单片机学习经验
AVR 与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、 功能部件、性能和可靠性等多方面有很大的提高和改善。 但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还 采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR 的,甚至也不能 真正的了解AVR 的特点和长处。 功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1 赛 车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。 AVR 具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR 的优点,还需 要应用工程师本身的硬软件设计开发能力的不断学习、实践提
[单片机]
按钮 温度 红外三种方式控制电机转速的单片机程序
电路原理图如下: 单片机源程序如下: #include reg51.h #include intrins.h unsigned int times; unsigned int controlway; unsigned int flag=0; unsigned int flaghongwai=0; //电机控制 sbit out3=P2^2; sbit out1=P2^0; sbit out2=P2^1; //按钮控制 sbit button=P1^0; sbit buttonup=P1^6; sbit buttondown=P1^7; //温度控制 sbit DQ=P3^7; sbit temp=P1^1; //红
[单片机]
按钮 温度 红外三种方式控制电机转速的<font color='red'>单片机</font>程序
51单片机和PC串口异步通信续
上一篇文章主要罗列了一些编写串口通信必要的知识点。在具体的编程中,还有很多要注意的地方。 下面的程序的主要功能为:通过串口调试助手向51单片机发送一个字母,单片机接收后,在数码管上显示这个字母,并将这个字母反向显示到串口调试助手的界面里。 51单片机的头文件中已经定义了串口缓冲区等一系列特殊功能寄存器,打开头文件就可以找到下面这样的定义: sfr SCON = 0x98; sfr SBUF = 0x99; 等等。 首先新建立一个头文件,将程序中要用到的变量和函数声明写进去: #include reg52.h #include ctype.h #define uchar unsigned char sbit dula=P2
[单片机]
单片机第六次作业
作业:第29题,已知R0中值为n,计算1^2+2^2+3^2+ +n^2并放入30h.(n较小不考虑求和的溢出) 1、先file new 建asm文件29.asm MOV R1,#00H LOOP:MOV A,R0 MOV B,R0 MUL AB ADD A,R1 MOV R1,A DJNZ R0,LOOP MOV 30H,R1 END 为了调试时看数据,预先在r0中赋值为3,所以程序前加: MOV R0,#3 所以程序变为: MOV R0,#3 MOV R1,#00H LOOP:MOV A,R0 MOV B,R0 MUL AB ADD A,R1 MOV R1,A DJNZ
[单片机]
【51单片机学习过程记录】7 中断之 定时计数器0 操作前理解
声明:【51单片机学习过程记录】全是我自己学习、实践所记录的过程,我只是菜鸟,所有论点和观点仅代表我个人,不能确定是这个技术的真理。我的目的是学习和有可能成为可以向别人分享的经验,因此有错误我会虚心接受,并认真改正。 1 由数据手册可知,89c52rc单片机有六个中断,分别为 外部中断0 外部中断1定时计数器0 定时计数器1定时计数器2 以及串口中断,一共六个。 2 如何理解继而操作定时器0? A大概了解:定时器,其实就是单片机的机器周期计数器,工作原理就是 当给计数器设定初始值并开启后,定时计数器会自动计算,到达设定的时间后会产生中断。(当然,更详细还是需要专门查看定时计数器去深入了解) B操作:需要参考另外一个
[单片机]
【51<font color='red'>单片机</font>学习过程记录】7 中断之 定时计数器0 操作前理解
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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