条件转移指令共有8条。1.累加器判零转移指令累加器判零转移指令共有两条:这组指令的功能是对累加器的内容为“0”和不为“0”进行检测并转移。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。例如,已知累加器=00H,执行指令:2.数值比较转移指令数值比较转移指令共有4条。利用这两条指令可实现循环控制,循环次数存放于寄存器中或直接寻址单元中。......
2023-11-17
MCS-51单片机指令系统在功能上可以分为数据传输类指令(29条)、算术运算类指令(24条)、逻辑运算类指令(24条)、控制转移类指令(17条)和位操作类指令(17条)。
在单片机执行指令的过程中,分为取指令和执行指令两个基本内容。在取指令阶段,单片机从程序存储器中取出指令操作码,送至指令寄存器IR中,通过指令译码器的译码,产生一系列的控制信号。在执行指令阶段,利用指令译码产生的控制信号,进行指令规定的操作,操作结果对程序状态字PSW的标志位影响比较大。程序状态字PSW中,有P(奇偶)、OV(溢出)、CY(进位)和AC(辅助进位)4个测试标志,不同的指令对标志位的影响不同,归纳如下:
1)P(奇偶)标志仅对累加器A操作的指令有影响,凡是对A操作的指令都将A中的“1”的个数反映到PSW的P标志位上。
2)数据传送指令,加1、减1指令,逻辑运算指令不影响CY、OV和AC位。
3)加、减运算指令影响P、CY、OV和AC这4个标志位,乘、除法指令使CY=0,当乘积大于255或除数为0时,OV=1。
具体指令对标志位的影响可参阅不同的指令。标志位的状态是控制转移类指令的判断条件。
数据传送类指令是使用最频繁的指令,主要用于数据的复制、保存及交换。这类指令一般是将源操作数传送到指令所指定的目的操作数中,指令执行后,源操作数不变,目的操作数被源操作数所替换。数据传送类指令的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP。数据传送类指令如表3-2所示。
1.内部RAM数据传送类指令MOV
单片机内部RAM的数据传送最为频繁,相关的指令也最多(共16条),包括寄存器、累加器、RAM单元以及专业寄存器之间的数据传送。其通用数据传送类指令格式为
MOV 目的操作数,源操作数
表3-2 数据传送类指令
注:√表示该指令影响某一标志位。
1)立即寻址传送指令,共有如下5条:
这条指令的功能将16位的立即数的高8位送至DPH,立即数的低8位送至DPL,这条指令是3字节指令,即操作码占一个字节,16位立即数占两个字节。
例如,MOV DPTR,#1234H ;(DPH)←12H,(DPL)←34H
2)内部RAM单元之间的数据传送类指令,共有以下5条:
内部RAM单元之间的数据传送可以使用直接寻址、寄存器寻址和寄存器间接寻址方式。
例如,下列指令均属于内部RAM单元之间的数据传送。
3)通过累加器A的数据传送指令,共有以下6条:
2.外部RAM或I/O口之间的数据传送指令
对外部数据存储器或I/O口的访问只能使用寄存器间接寻址方式,使用的寄存器只能是DPTR和Ri(i=0,1)。需要注意的是访问外部数据存储器或I/O口必须使用“MOVX”操作码。由于外部RAM和I/O是统一编址的,共同占用一个64KB的空间,所以从指令本身无法区分是访问外部RAM还是I/O口,只能由硬件的地址分配情况来确定。
外部RAM或I/O口之间的数据传送指令共有4条。
1)使用DPTR进行间接寻址,DPTR寄存器是16位寄存器,因此可对外部数据存储器或I/O口的寻址范围为64KB。
执行第一条指令时,P 3.7引脚上输出有效信号,用作外部数据存储器或I/O口的读选通信号。DPTR所包含的16位地址信息由P0口(低8位)和P2口(高8位)输出,选中外部数据单元或I/O口的内容由P0口输入至累加器A中,P0口作为地址/数据分时复用的总线使用。
执行第二条指令时,P3.6引脚上输出有效信号,用作外部数据存储器或I/O口的写选通信号。DPTR所包含的16位的地址信息由P0口(低8位)和P2口(高8位)输出,累加器A的内容由P0口输出,P0口作为地址/数据分时复用的总线使用。
2)使用Ri(i=0,1)寄存器进行间接寻址,由于Ri(i=0,1)只能寻址256个字节,那么能否使用Ri对外部64KB空间进行寻址呢?回答是肯定的。单片机提供了P2专用寄存器,将外部RAM空间分成了256页,每一页有256个字节,这样整个访问空间也是256×256B=64KB,因此又将P2专用寄存器称之为页寄存器。
例如,外部数据区地址为2048H单元的内容为5AH,执行下列指令:
即将外部RAM(2048H)的内容5AH传送至累加器A中。
若使用Ri寄存器间接寻址,则指令如下:
即形成的外部数据地址为256×20H+48H=2048H,也是将外部RAM(2048H)的内容5AH传送至累加器A中。
采用这两种方式均可访问外部数据区或I/O口,但编程时建议大家使用DPTR寄存器间接方式。
3.程序存储器ROM数据传送指令
程序存储器ROM数据传送指令亦称查表指令,共有两条。
程序存储器ROM包括内部程序存储器和外部程序存储器。由于对程序存储器的访问只能读不能写,因此数据传送是单向的。
(www.chuimin.cn)
这两条指令均是从程序存储器中读取数据(如表格、常数等)。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和PC的当前内容(下一条指令第一个字节地址)相加后得到一个16位的地址,把该地址指向的程序存储器单元的内容送至累加器A中。这条指令的优点是不改变其他专用寄存器和PC的状态,根据A的内容就可以取出表格中的常数;缺点是表格只能存放在该查表指令后的256个单元之内,因此表格大小受到限制,而且该表格只能被该程序段使用。
第二条指令是以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加后得到一个16位的地址,把该地址指向的程序存储器单元的内容送至累加器A中。这条指令的执行结果只与指针DPTR及累加器A的内容相关,与该指令的存放位置无关,表格的位置可在64KB程序存储器中任意安排,可被各个程序块使用。
【例3-6】若在片外ROM的2000H单元开始已存放有0~9的平方值,要求根据累加器A中的值0~9来查找对应的平方值。
【解】若用DPTR作为基址寄存器,可编程如下:
这时,A+DPTR的值就是所查平方值存放的地址。
若用PC作为基址寄存器,则应在MOVC指令之前先用一条加法指令进行地址调整。
其中,#data的值要根据MOVC指令所在的地址进行调整。设A*为原来累加器A中的值0~9,PC为MOVC指令所在的地址,假设为1FF0H,则可以用下面的方法来确定data值:
因此,程序中的指令应为
4.堆栈操作指令
堆栈操作指令有PUSH和POP指令两条,分别如下:
PUSH为入栈指令,是将其指定的直接寻址单元的内容压入堆栈。其具体操作是先将堆栈指针SP的内容加1,指向堆栈顶的一个空单元,然后将指令指定的直接寻址单元内容送到该空单元中。由于MCS-51是向上生长型的堆栈,所以进栈时堆栈指针要先加1,然后再将数据推入堆栈。
POP为出栈指令,是将当前堆栈指针SP所指示的单元内容弹出到指定的片内RAM单元,而后将SP减1。注意:使用堆栈时,SP的初始值最好重新设定(否则上电或复位后,SP的值为07H),并避开工作寄存器区和位寻址区,一般SP的值可以设置在30H或以上的片内RAM单元,但应注意不超出堆栈的深度。MCS-51型单片机的堆栈规则是“先进后出”。
另外,由于堆栈操作只能以直接寻址方式来取得操作数,所以不能用累加器A或工作寄存器Rn作为操作数。若要将累加器A的内容压入堆栈,应用指令PUSH ACC或PUSH 0E0H,这里ACC表示累加器的直接地址0E0H。出栈的应用指令以此类推。
【例3-7】在中断响应时,SP=07H,DPTR的内容为1234H,试分析执行下列指令后的结果。
【解】执行结果为:片内RAM的(08H)=12H,(09H)=34H,(SP)=09H,(DPTR)=1234H未变。
【例3-8】设(SP)=32H,片内RAM的30H~32H单元的内容分别为20H、23H和01H,执行下列指令后(DPTR)、(SP)为多少?
【解】
所以,(DPTR)=0123H,(SP)=30H。
5.交换指令
交换指令共有5条。
(1)字节交换指令
该指令的功能是将A的内容与源操作数的内容相互交换。
(2)半字节交换指令
该指令的功能是将A中内容的低4位和Ri所指的片内RAM单元中的低4位交换,它们的高4位保持不变。
(3)累加器A高低4位互换
该指令的功能是将A中内容的高、低4位互换。
例如,若(R0)=30H,(30H)=4AH,(A)=28H,则分别执行:
MCS-51指令系统的数据传送指令种类很多,这为程序中进行数据传送提供了方便。为了更好地使用数据传送指令,特作如下两个说明:
1)同样的数据传送,可以使用不同寻址方式的指令来实现。例如,要把A中的内容送入片内RAM的40H单元中,可由以下不同的指令来完成:在实际应用中选用哪种指令,可根据具体情况来决定。
2)数据传送类指令一般不影响程序状态字PSW。
有关单片机基础及应用的文章
条件转移指令共有8条。1.累加器判零转移指令累加器判零转移指令共有两条:这组指令的功能是对累加器的内容为“0”和不为“0”进行检测并转移。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。例如,已知累加器=00H,执行指令:2.数值比较转移指令数值比较转移指令共有4条。利用这两条指令可实现循环控制,循环次数存放于寄存器中或直接寻址单元中。......
2023-11-17
MCS-51单片机的算术运算类指令包括加、减、乘、除、加1、减1等指令。这类指令有ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV共8种。表3-3算术运算类指令注:√表示该指令影响某一标志位。运算结果对PSW的影响同上述4条ADD指令。6.十进制调整指令十进制调整指令只有以下1条:该指令用于BCD码加法运算时,对BCD码的加法运算结果自动进行调整,但对BCD码的减法运算不能用此指令来调整。在运算过程中,单片机按二进制规则进行运算。......
2023-11-17
表5-27 数据传送指令注:EDMOV指令仅适合QnU系列PLC。下面以16位数据传送指令MOV为例展开说明。图5-4 K155存储在数据寄存器D8中2)浮点数据传送EMOV指令是将源操作数中存储的浮点型实数数据传送至目标软元件中去。EMOV指令是单精度浮点数据,占32位,双精度指令占64位。4)相同16位数据批量传送指令FMOV的主要功能是将数据同时传送到指定软元件开始的n点位置。......
2023-06-16
伪指令是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。在汇编时伪指令自身不产生机器码,不属于指令系统。常用的伪指令有以下几种。1.汇编起始地址命令ORG该命令总是出现在源程序的开头位置,用于规定目标程序的起始地址。在END之后所写的指令,汇编程序不再处理。一个源程序只能有一个END指令,并放在所有指令的最后。例如:以上指令经汇编后,将对1000H开始的若干内存单元赋值。......
2023-11-17
MCS-51的所有指令均不超过3个字节,且多为单字节指令。为了使“乱飞”程序在程序区迅速纳入正轨,应在编程时多用单字节指令,并在关键的地方人为地插入一些单字节指令NOP,或将有效单字节指令重写,称之为指令冗余。需要注意的是,乱飞的PC必须指向程序运行区,并且必须执行到冗余指令才能使PC纳入正确轨道。......
2023-11-17
MCS-51单片机逻辑运算及移位类指令包括与、或、异或、清0、取反、移位等操作指令。1.逻辑“与”运算指令逻辑“与”运算指令共有以下6条:这组指令中的前4条指令完成源操作数与累加器的内容相与,并将结果送入累加器中。其寻址方式、标志位影响、端口操作与ANL指令相同。表3-4逻辑运算及移位类指令注:√表示该指令影响某一标志位。......
2023-11-17
数据采集是系统的核心,直接影响系统的测量精度、分辨率、输入阻抗、速度、抗干扰能力等主要指标。图10-2模拟量采集通道结构示意图1)传感器。A/D转换器是模拟量信号采集的核心器件,主要完成模拟量到数字量的转换,其器件的重要技术指标可详细参考A/D转换器的数据手册。设计时应注意如下几点:①数据采集部分与现场被采对象相连,是现场干扰进入的主要通道,是整个系统抗干扰设计的重点部位。......
2023-11-17
无条件转移指令共有以下4条:1.LJMP addr16LJMP addr16指令是3个字节指令,其机器码为02H,addr15~8,addr7~0。3.SJMP relSJMP rel指令是相对寻址方式转移指令,其中rel为偏移量,偏移量rel是一个带符号的8位二进制补码数。因此,有时也称其为散转指令。4条无条件转移指令的功能相同,不同之处在于转移的范围。其中长转移指令LJMP的转移范围最大,为64KB。短转移指令SJMP的转移范围最小,仅为256字节。......
2023-11-17
相关推荐