MCS-51单片机的算术运算指令解析

发布者:EtherealGaze最新更新时间:2023-08-23 来源: elecfans关键字:MCS-51  单片机  算术运算指令 手机看文章 扫描二维码
随时随地手机看文章

MCS-51具有强大的加、减、乘、除四则算术运算指令。

1.程序状态字PSW

MCS-51有一个程序状态字寄存器PSW,用来保存指令执行结果的标志,供程序查讯和判别。PSW是特殊功能寄存器中的一个,其格式如下:

PSW7--既是布尔处理机的累加器C,又是进位标志CY,如果操作结果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”CY。

AC--辅助进位(半进位)标志。如果操作结果的低4位有进位(加法时)或向高4位借位时(减法),置AC,否则清“0”AC,AC主要用于二-十进制数加法调整。

OV--溢出标志。如果操作结果有进位进入最高位,但最高位没有产生进位,或者最高位产生进位而低位没有向最高位进位,这时置位溢出标志位,否则OV清“0”。溢出标志位用于补码运算,当有符号的数运算结果不能用8位二进制数表示时,OV将置位。


P--累加器A的奇偶标志位,如果累加器A的8位的模2和为1(奇),则P=1;否则P=0。由于P总是表示A的奇偶性,随着A的内容变化的,所以一个值写入PSW的P位的值不变。

RS1、RS0--指示当前使用的工作寄存器区。

F0--用户标志位。可作为软件标志,它的作用和内部RAM位寻址区的各位相似。

PSW1--保留位,对它的操作无效。


2.加法指令

1、不带进位加法指令

ADD A,#dataADD A,dataADD A,@RiADD A,Rn

工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,分别将AC,CY标志位置1;否则为0。

上述指令的执行将影响标志位AC、CY、OV、P。

对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”否则被清“0”。OV=1表示两个正数相加,和变为负数,或两个负数相加,和变为正数的错误结果。

源操作数有四种寻址方式:寄存器、直接、间接和立即数。

2、带进位加法指令:

ADDC A,#dataADDC A,dataADDC A,@RiADDC A,Rn

这是四条带进位的加法指令。将累加器A内容加当前CY标志位内容,再加无符号单字节的数,和存于累加器A中。当运算结果第3、7位产生进位溢出时,则分别置位AC、CY和OV标志位。本指令执行将影响标志位AC、CY、OV、P。

本指令常用于多字节加法。

3、加1指令:

INC AINC dataINC @RiINC RnINC DPTR

INC指令将指定的内容加1,结果仍存放于原A或原单元中。如原值为0FFH,加1运算后将变成00H,运算结果不影响标志位。

本指令可对累加器A、工作寄存器RN、RI间址和直接寻址的单元内容进行加1运算。可见MCS-51加1指令是较丰富的。

注意:当用本指令使输出并行I/O内容加1时,用作输出口原始值,将从输出口的数据锁存器中读入,而不是从输出口的引脚上读入。

4、二-十进制调正指令:

DA A

若[(A0-3)》9]或[(AC)=1),则(A0-3)(A0-3)+06H

本指令是对A的BCD码加法结果进行调正。两个压缩型BCD码按二进制数相加之后,必须经本指令调正,才能得到压缩型BCD码的和数。

本指令的操作为:若累加器A的低4位数值大于9或者第3位向第4位产生进位,即AC辅助进位位为1,则需将A的低4位内容加6调正,以产生低4位正确的BCD码值。如果加0调正后,低4位产生进位,且高4位均为1时,则内部加法将置位CY,反之,它并不清“0”CY标志位。

若累加器A的高4位值大于9或最高进位位CY=1,则高位4位需加6调正,以产生高4位的正确BCD码值。同样,在加6调正后产生最高进位,则置位CY,反之,不清“0”CY这时CY的置位,表示和数BCD码值大于等于100。这对多字节十进制加法有用。不影响OV标志。

由此可见,本指令是根据累加器A的原始数值和PSW的状态,对累加器A进行加O6H、60H或66H的操作。

必须注意:本指令不能简单地把累加器A中的16进制数交换成BCD码,也不能用于十进制减法的调正。

3.减法指令

MCS-51在MCS-48的基础上增加了带借位减法指令,加强了计算机的运算功能。

1、带借位减法指令:

SUBB A,#dataSUBB A,dataSUBB A,@RiSUBB A,Rn

带借位减法指令SUBB,从累加器A中减去进位标志位CY和指定的变量,结果在累加器A中,若第七位有借位,则置位位CY,否则CY清0。若第3位有错位,则置位辅助进位标志AC,否则清0 AC。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。溢出位OV用于带符号的整数减法,它表示(OV=1)一个正数减负数结果为负数;或一个负数减正数结果为正数的错误结果。

源操作数允许有四种寻址方式:寄存器RN,直接地址direct,间址Ri或立即数。

当在进行单字节或多字节减法前,不知道进位标志位CY的值,则应在减法指令前先将CY清“0”。

4.乘法指令

MUL AB

乘法指令是MCS-51新增加的,运算速度只需4个机器周期。它大大增加了MCS-51单片机的运算功能,克服了MCS-48系列单片机的不足。

本指令将累加器A和寄存器B中二个8位无符号整数进行相乘,16位乘积的低8位存于A中,高8位存于B中,如果乘积大于255(0FFH),即B的内容不为0时,则置位溢出标志位OV,否则清“0”OV。进位标志位CY总是清“0”。

5.除法指令

DIV AB

MCS-51系列单片机增加的除法指令,运算时间亦只需4个机器周期,同样也增强了MCS-51的运算功能,使它能适用于复杂的且要求运算功能较强的控制系统。除法指令格式:

本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数,所得结果商的整数部分存于A中,整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数(B中内容)为00H时,则执行结果将为不定值,即执行结果送往A和B中的为不定值,且置位溢出标志位OV。在任何情况下,均清“0”CY。

6.减一指令

DEC ADEC dataDEC @RiDEC Rn

DEC指令把所指的寄存器内容减1,结果仍送回原寄存器,若原来寄存器的内容为00H,则减1后将为FFH,运算结果不影响任何标志位,该组指令使用了直接、寄存器和寄存器间寻址。同加1指令一样,在第二条指令中,若直接地址是I/O口,则进行“读-改-写”操作。


关键字:MCS-51  单片机  算术运算指令 引用地址:MCS-51单片机的算术运算指令解析

上一篇:80C51的复位技术盘点
下一篇:基于地磁传感器V2XE在GPS系统设计中的应用

推荐阅读最新更新时间:2024-11-21 18:01

基于AT89C52单片机对遥控电扇的改造
传统电风扇多采用机械方式进行控制,功能少,噪音大,各档的风速变化大。随着科技的发展和人们生活水平的提高,家用电器产品趋向于自动化、智能化、环保化和人性化,使得由微机控制的智能电风扇得以出现。随着电子制造业的不断发展,社会对生产率的要求越来越高,各行业都需要精良高效、高可靠性的设备来满足要求。作为一种老式家电,电风扇具有价格便宜、摆放方便、体积轻巧等特点。由于大部分家庭消费水平的限制,电风扇作为一个成熟的家电行业的一员,在中小城市以及乡村将来一段时间内仍然会占有市场的大部分份额,但电风扇功能简单,不能满足智能化的要求。本文利用了单片机的红外控制功能,对电扇的控制结构进行了重新的设计,使得人在距离电扇10 m范围内就可以短程控制电
[单片机]
基于AT89C52<font color='red'>单片机</font>对遥控电扇的改造
Python实现的简单的单片机串口助手程序
项目中遇到需要用电脑通过串口来控制单片机IO口,查询了一些资料,可以使用python来实现简单的串口通信, 所以用python实现了一个简单的单片机串口助手,可以将串口助手发往单片机的字符回传给串口助手。也可以 将配合单片机程序对单片机进行控制。 python实现的串口助手代码如下: import time; #需要调用延时函数 import serial #需要调用串口库 import binascii #需要将传送的字符进行转换 if __name__ == '__main__': ser = serial.Serial(); #生成串口 ser.baudrate = 4800 #设
[单片机]
Python实现的简单的<font color='red'>单片机</font>串口助手程序
51单片机中的周期
首先明确几个概念:时钟周期、振荡周期、状态周期、机器周期、指令周期 1、时钟周期,也称为振荡周期:定义为时钟脉冲的倒数,在单片机中也就等于晶振的倒数。 51单片机中把一个时钟周期定义为一个节拍(用P表示),2个节拍定义为状态周期(用S表示) 时钟周期是单片机中最小的时间单位。 eg:12M晶振的单片机,时钟周期=振荡周期=1/12 us。 2、机器周期:定义为完成一项基本操作所需要的时间,称为机器周期。 在计算机中,为了方便管理,把一条指令的执行过程分为若干个阶段,每个阶段去执行一项基本操作。 如:取指令,存储器读,存储器写等。 在51单片机中1个机器周期由6个状态周期组成,也就是12个时钟周期=12
[单片机]
51<font color='red'>单片机</font>中的周期
8051单片机int字节的实现
在使用单片机中,unsigned int 占2个字节,unsigned char 占一个字节。而单片机是实行的字节寻址。16字节的bit寻址实在是不好用, 不好用在不能建数组。 在实际的开发过程中,要使用DPTR,还有定时器的TL0,TH0 的高低字节等。 需要我们先定义一个int类型的可以用来赋值什么的比较自然。 然后和0xff与得到低8,一个字节。可以放入DPTR的低字节或定时器的低字节。 将int类型的左移8位后,再和0xff与得到int的高8位,一个字节,移入到DPTR的高字节或定时器的高字节。 这样很麻烦。 实际上,我们可以通过struct和union方便的直接一步到位的得到int 类型的高字节和低字节,同时也能观察
[单片机]
8051<font color='red'>单片机</font>int字节的实现
单片机MQTT实现推送简单使用
1、准备条件: a)硬件:ATMEGA644PA 8位单片机 ENC28J60 b)下载MQTT c语言的包: C/C++ MQTT Embedded clients https://www.eclipse.org/paho/clients/c/embedded/ c)MQTT基础知识 http://mqtt.org/ http://download.csdn.net/detail/zhou6343178/9495445 2、移植MQTTPacket到项目里: 复制文件夹MQTTPacket到工程,复制MQTTPacketsamples里面的transport.c、transport.h到工程 1、准备条件: a)硬件:A
[单片机]
<font color='red'>单片机</font>MQTT实现推送简单使用
单片机的乘除例子
/* ----------------------------------------------------------------------- 双字节的乘法 (R22:R23)*(R24:R25)-- (R20:R21:R22:R23) counter : r26 ----------------------------------------------------------------------- */ mul_sub: clr r20 clr r21 mov
[单片机]
基于AT89S52型单片机的红外无线PPM发射机设计
1 引言 在工业和生活环境中,便携式信息终端设备的出现加速了无线数字通信线路和局域网的引进,然而,由于无线电的局限性,使它在无线高速数据链路应用方面受阻。在此情况下红外(IR)无线光通信得到人们的重视 。作为一种室内短距离通信的传输介质,IR具有胜过无线电的显著优点:IR有巨大的带宽且不需许可证,可以进行高速数据传输;IR不穿透墙壁,因而消除了在不同房间进行通信时可能带来的干扰,而且通信时不容易被侦听,提高了通信的安全性;IR探测器的尺寸比IR无的波长大得多,避免了多径衰落;IR可强度调制,IR通信设备比无线电通信设备要便宜简单得多。 对室内无线电局域网,要求红外数据链路的峰值-平均光功率比高,高峰值功率可提高系统
[网络通信]
单片机电流的一些经验理解
1、按理说,一个东西的负载电流,应该是它供给外部的电流,这时候也就是流出时,应该为正。 2、外接电阻一般是上拉,通常情况这种接法输出高电平时,内部输出开关管是截止状态,如果该引脚上有负载的话,负载电流经上拉电阻提供,引脚内部基本上不存在电流出入,(所以低功耗) 3、这么讲下去,当该脚输出低电平时(内部开关管导通,电压接近地),电流经电阻流入内部,这时候应该在单片机的相关技术文档中会详细说明单片机的工作电流,但总的来说,每个端口电流不要超过20毫安,否则容易使得器件损坏。描述为负。IO口的灌电流最大30ma左右,拉电流更小了 一般来说上拉或下拉电阻的作用是增大电流,加强电路的驱动能力 比如说51的 还有,p0口必须接上拉电
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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