上海大学单片机市公开课一等奖省赛课获奖课件_第1页
上海大学单片机市公开课一等奖省赛课获奖课件_第2页
上海大学单片机市公开课一等奖省赛课获奖课件_第3页
上海大学单片机市公开课一等奖省赛课获奖课件_第4页
上海大学单片机市公开课一等奖省赛课获奖课件_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章MCS-51指令系统上海大学单片机第1页提要3.1指令系统介绍3.2寻址方式3.3数据传送类指令3.4算术运算类指令3.5逻辑运算类指令3.6控制转移类指令3.7位操作类指令上海大学单片机第2页3.1指令系统介绍1、简明介绍2、指令格式上海大学单片机第3页3.1指令系统介绍1、简明介绍MCS-51单片机共有111条指令:单字节指令有49条,双字节指令有45条,三字节指令有17条。其中有64条是单机器周期指令,45条双机器周期指令,有2条是4机器周期指令(乘法和除法,单字节)。当系统时钟为12M时,机器周期为1微秒,则指令执行时间仅需1-4微秒。上海大学单片机第4页MCS-51指令系统依据功效可分为5类:数据传输指令,有29条算术运算类指令,有24条逻辑操作类指令,有24条位操作指令,有17条控制转移指令,是17条。3.1指令系统介绍上海大学单片机第5页3.1指令系统介绍2、指令格式指令格式:[标号]:<操作码>[目标操作数],[源操作数][;注释]标号:指令符号地址操作码:要求了指令操作功效操作数:参加操作数据、数据地址或符号地址注释:该条指令说明,便于阅读上海大学单片机第6页3.1指令系统介绍MCS-51指令系统依据指令字节长度可分为单字节、双字节和三字节:单字节指令:RETI目标码:32H双字节指令:MOVA,#0FFH目标码:74HFFH三字节指令:MOV74H,#0FFH目标码:75H74HFFH指令字节越长,占用内存单元越长,但执行时间长短只取决于执行这条指令所需要机器周期个数(指令周期)。上海大学单片机第7页3.2寻址方式1、寻址方式定义2、寻址方式中惯用符号3、寻址方式上海大学单片机第8页3.2寻址方式1、寻址方式定义将寻找指令中操作数或操作数所在地址,称为寻址。把怎样找到操作数或操作数所在地址,称为寻址方式。寻址方式越多,计算机功效就越强,灵活性就越大,更能有效处理各种数据。上海大学单片机第9页3.2寻址方式2、寻址方式中惯用符号Rn:n等于0—7。R0-R7代表当前所选定工作存放器组。Ri:i取值为0或1。可作为地址指针两个工作存放器,既可存放数据,又可存放地址。#data:表示8位马上数,出现在指令中8位常数。#data16:表示16位马上数,出现在指令当中16位常数。direct:直接地址,表示8位片内数据存放器单元,SFR也是直接地址。上海大学单片机第10页3.2寻址方式addr11:表示一个11位目标地址,主要用在ACALL和AJMP指令,其目标地址是在下一条指令地址所在2K字节分区内。addr16:表示一个16位目标地址,主要用在于LCALL和LJMP指令中,可在整个64K地址空间内转移。rel:表示一个补码形式8位地址偏移量,以下一条指令第一字节地址为基值,偏移范围是-128到+127。bit:表示片内数据存放器中或特殊存放器中可直接寻址位地址。上海大学单片机第11页@:间址存放器前面前缀符号,用在存放器间接寻址方式中。/:取反符号,在位操作指令中,先求反再进行操作。(x):表示指定存放器或地址中内容。((x)):表示由x所指地址单元中内容,适合间址寻址使用。箭头←:表示指令操作流程,将箭头右边内容送给左边单元。$:表示本条指令起始地址。3.2寻址方式上海大学单片机第12页3.2寻址方式3、寻址方式1)马上寻址2)直接寻址3)存放器寻址4)间接寻址5)变址寻址6)相对寻址7)位寻址上海大学单片机第13页3.2寻址方式1)马上寻址马上寻址指令大多是双字节:第一个字节是操作码第二个字节是操作数。真接参加运算操作数,称为马上数,数前面面用“#”来表示。例:MOVA,#31H上海大学单片机第14页3.2寻址方式51指令系统中,只有一条指令源操作数是16位,功效是向DPTR传送16位马上数,马上数高8位送到DPH里,而低8位送到DPL中。例:MOVDPTR,#3FA6H指令代码:90H,3FH,A6H上海大学单片机第15页3.2寻址方式2)直接寻址在指令当中,直接给出操作数所在存放地址,包含片内RAM128个单元,以及全部特殊功效存放器SFR。对于特殊功效存放器,直接寻址时,能够用其地址,也能够使用其名字。(P1或90H)例:MOVA,69H指令代码:E5H,69H上海大学单片机第16页3.2寻址方式3)存放器寻址对工作存放器R0——R7、累加器A、存放器B、数据指针DPTR中数进行寻址。R0到R7是由操作码低三位来表示。其它存放器隐含在操作码当中。上海大学单片机第17页3.2寻址方式例:MOVA,R5;A(R5)指令代码:EDH(11101101)注:操作码低三位101表示操作数是R5。RS1和RS0为01,R5(0DH)中存放4AH,执行指令之后,4AH被送到累加器中。上海大学单片机第18页3.2寻址方式4)存放器间接寻址方式存放器间接寻址中,操作数所指定存放器存放不是操作数本身,而是操作数地址。可用作间接存放器有R0、R1和DPTR。间址存放器使用时,前面一定要加@来标识。在执行压栈和出栈操作时:堆栈指针SP作为间址存放器,自动进行。注意压入是直接地址。当访问片内RAM,或片外RAM低256个字节时:可用R0或R1来作为间址存放器。操作码最低位指明详细使用哪个存放器。上海大学单片机第19页3.2寻址方式例:MOVA,@R1指令代码:E7H(最低位是1,表明使用工作存放器是R1)

假设工作存放器为0组,R1中存放数是50H,而片内数据存放器50H单元中存放数是30H,执行指令之后,实际上就是把30H送入累加器。上海大学单片机第20页3.2寻址方式5)变址寻址变址寻址是经过“基址存放器+变址存放器”来进行间接寻址。以DPTR(数据指针)或PC(程序计数器)为基址存放器以A作为变址存放器。变址寻址时,把基址存放器内容和变址存放器内容,二者相加,所得到结果来作为操作数地址。主要是用在查表操作。上海大学单片机第21页3.2寻址方式例:MOVCA,@A+DPTR指令代码:93HACC中原来存放数值为E0H上海大学单片机第22页3.2寻址方式6)相对寻址相对寻址:PC中当前值+指令第二字节给出偏移量,相加结果作为相对跳转指令目标地址。当前值:正运行指令之后字节地址,即下一条指令起始地址。偏移量是带符号是数,有正负之分,以补码形式给出,转移范围是-128到+127。上海大学单片机第23页3.2寻址方式例:JC06H指令代码:40H,06H上海大学单片机第24页3.2寻址方式7)位寻址位寻址:对片内RAM可位寻址区域和一些可位寻址特殊功效存放器进行位操作。在进行位操作时候,进位位C作为位累加器使用。操作数是指令中直接给出位地址。依据操作码性质对它进行位操作。位地址与直接地址中字节地址,形式是完全一样,主要由操作码来区分。上海大学单片机第25页3.2寻址方式例:SETB3DH指令代码:D2H,3DH功效:3DH是片内数据存放器27H字节单元D5位。假设27H中原来内容是00,执行这条指令后,就会变成20。上海大学单片机第26页3DH是27H单元中D5。3.2寻址方式上海大学单片机第27页3.2寻址方式总结:寻址方式和寻址空间关系序号方式使用变量寻址空间1马上寻址马上数程序存放器2直接寻址直接地址内部RAM和特殊功效存放器SFR3存放器寻址R0~R7、A、B、DPTRR0~R7、A、B、DPTR4存放器间址@R0、@R1、SP内部RAM@R0、@R1、@DPTR外部RAM5变址寻址@A+DPTR、@A+PC程序存放器6相对寻址PC当前值+偏移量rel程序存放器7位寻址位地址、位名称内部RAM和特殊功效存放器位地址空间上海大学单片机第28页3.3数据传送类指令传送类指令是指令系统当中,最基本、使用最多一类指令,主要用于数据传送,保留和交换等。详细分为以下几类: 1、以累加器A为目标操作数指令 2、以存放器Rn为目标操作数指令 3、以直接地址为目标操作数指令 4、以间接地址为目标操作数指令 5、16位数据传送指令 6、累加器A与片外数据存放器传送指令 7、查表指令 8、交换指令 9、堆栈指令上海大学单片机第29页3.3数据传送类指令1、以累加器A为目标操作数指令汇编格式机器码操作机器周期振荡周期字节MOVA,Rn11101rrrA←(Rn)1121MOVA,direct11100101directA←(direct)1122MOVA,@Ri1110011iA←((Ri))1121MOVA,#data01110100dataA←data1122上海大学单片机第30页3.3数据传送类指令2、以存放器Rn为目标操作数指令注意:工作存放器间不能直接传送;没有“MOVRn,Rn”指令;没有“MOVRn,@Ri”指令。汇编格式机器码操作机器周期振荡周期字节MOVRn,A11111rrrRn←(A)1121MOVRn,direct10101rrrdirectRn←(direct)2242MOVRn,#data01111rrrdataRn←data1122上海大学单片机第31页3.3数据传送类指令3、以直接地址为目标操作数指令注意:直接地址之间可直接进行传送;MOVdirect2,direct1;三字节汇编格式机器码操作机器周期振荡周期字节MOVdirect,A11110101directdirect←(A)1122MOVdirect,Rn10001rrrdirectdirect←(Rn)2242MOVdirect2,direct110000101direct1direct2direct2←(direct1)2243MOVdirect,@Ri1000011idirectdirect←((Ri))2242MOVdirect,#data01110101directdatadirect←data2243上海大学单片机第32页3.3数据传送类指令4、以间接地址为目标操作数指令注意:没有“MOV@Ri,Rn”指令。汇编格式机器码操作机器周期振荡周期字节MOV@Ri,A1111011i(Ri)←(A)1121MOV@Ri,direct1010011idirect(Ri)←(direct)1122MOV@Ri,#data0111011idata(Ri)←data2242上海大学单片机第33页3.3数据传送类指令5、16位数据传送指令汇编格式机器码操作机器周期振荡周期字节MOVDPTR,#data1610010000data15~8data7~0DPH←data15~8DPL←data7~02243上海大学单片机第34页3.3数据传送类指令6、累加器A与片外数据存放器传送指令在单片机里面没有专门输入输出指令,输入输出操作都是经过累加器A与片外数据存放器(包含I/O接口)四条数据传送指令来实现。汇编格式机器码操作机器周期振荡周期字节MOVXA,@DPTR11100000A←((DPTR))2241MOVX@DPTR,A11110000(DPTR)←(A)2241MOVXA,@Ri1110001iA←((Ri))2241MOVX@Ri,A1111001i(Ri)←(A)2241上海大学单片机第35页3.3数据传送类指令第一条和第三条在功效上是一样,作为输入指令使用,片外存放器送到片内累加器,或将片外I/O口内容送给累加器。第二条和第四条功效上是一样,作为输出指令使用,把累加器内容送到片外数据存放器中,也能够把累加器内容送到片外I/O口上。汇编格式机器码操作机器周期振荡周期字节MOVXA,@DPTR11100000A←((DPTR))2241MOVX@DPTR,A11110000(DPTR)←(A)2241MOVXA,@Ri1110001iA←((Ri))2241MOVX@Ri,A1111001i(Ri)←(A)2241上海大学单片机第36页总结:片外访问时,在输入时目操作数是累加器,输出时源操作数是累加器,均与累加器有关,不能用其他寄存器。@DPTR和@Ri区别:DPTR是16位寄存器,寻址范围是整个64K,包括低256字节;Ri是8位寄存器,寻址范围是256字节。3.3数据传送类指令上海大学单片机第37页3.3数据传送类指令7、查表指令第一条基址存放器是PC。而正在执行当前指令,PC值被固定,只能经过累加器A内容作为偏移量进行查找。第二条基址存放器是DPTR,除A外,DPTR能够随意赋值,实际上能够在整个64K范围内,随意进行查表。汇编格式机器码操作机器周期振荡周期字节MOVCA,@A+PC10000011PC←(PC)+1A←((A)+(PC))2241MOVCA,@A+DPTR10010011A←((A)+(DPTR))2241上海大学单片机第38页注意:第一条指令受到PC限制,PC值已被锁定。只能在当前地址基础上,经过累加器里8位数进行偏移,偏移地址限定在256个字节内。第二条指令中DPTR能够随意放一个数,累加器也可随意地放数,所以可在整个64K范围内进行偏移。3.3数据传送类指令上海大学单片机第39页8、交换指令3.3数据传送类指令SWAPA相当于循环移位了4位!!

高4位

低4位汇编格式机器码操作机器周期振荡周期字节XCHA,Rn11001rrr1121XCHA,direct11000101direct1122XCHA,@Ri1100011i1121XCHDA,@Ri1101011i1121SWAPA110001001121(A)(Rn)(A)(direct)(A)((Ri))(A)0~3((Ri))0~3上海大学单片机第40页3.3数据传送类指令9、堆栈指令压栈或出栈通常是在中止子程序中使用。压栈:机器代码是C0,第二字节是直接地址(R0-R7,A是存放器,不能直接进行压栈操作)。入栈时,SP一直指向栈顶,向上生长.出栈:机器代码是D0,SP向下一直跟踪栈顶。遵照先进后出。汇编格式机器码操作机器周期振荡周期字节PUSHdirect11000000directSP←(SP)+1(SP)←(direct)2242POPdirect11010000directdirect←((SP))SP←(SP)-12242上海大学单片机第41页总结:1)对不一样存放器空间采取不一样指令来访问,注意MOV(内部RAM),MOVX(外部RAM),MOVC(ROM)区分。2)除位P会随A内容改变而改变外,数据传送类指令不影响状态字PSW其它位。3)89C51指令系统没有专用输入输出指令,经过数据传送指令来进行I/O操作。3.3数据传送类指令上海大学单片机第42页例1.把累加器A中内容传送到片外RAM3500HMOVDPTR,#3500HMOVX@DPTR,A例2.把片内7AH内容传送到片外数据存放器3000H单元MOVA,7AHMOVDPTR,#3000HMOVX@DPTR,A3.3数据传送类指令上海大学单片机第43页例3.依据累加器A中内容(0-9),查它平方表子程序square:PUSHDPHPUSHDPLMOVDPTR,#TABMOVCA,@A+DPTR;A作为入口/出口POPDPLPOPDPHRETTAB:DB0,1,4,9,16,25,36,49,64,813.3数据传送类指令上海大学单片机第44页算术运算类指令主要是对8位数进行算术操作,包含加法、减法、加1、减1、乘法和除法,以及十进制调整指令。算术运算类操作大多要影响到PSW中相关位:经过溢出标志OV,能够对带符号数进行补码运算;借助进位标志C,能够进行多精度加减运算;借助辅助进位位AC对压缩BCD码进行运算。BCD码:一个BCD码需要4位表示,把两个BCD码放在一个字节里,称为压缩BCD码。3.4算术运算类指令上海大学单片机第45页3.4算术运算类指令1、加法2、带进位加法3、减法4、加一5、减一6、乘除法7、十进制调整指令上海大学单片机第46页3.4算术运算类指令1、加法加法指令目操作数必定是累加器。汇编格式机器码操作机器周期振荡周期字节ADDA,Rn00101rrrA←(A)+(Rn)1121ADDA,direct00100101directA←(A)+(direct)1122ADDA,@Ri0010011iA←(A)+((Ri))1121ADDA,#data00100100dataA←(A)+data1122上海大学单片机第47页3.4算术运算类指令与加法相关标志位 C:加法运算中,最高位第7位有进位,进位位C=1,不然C=0。

AC:加法运算中,假如低半字节向高半字节有进 位,AC=1,不然AC=0。

OV:带符号位数相加,要考虑溢出位OV。假如OV=1,表示运算产生溢出。判断准则:OV=(D7进位位)⊕(D6进位位)上海大学单片机第48页例1、A=AEH,R1=81H,执行ADDA,R110101110

+C10000001100101111结果: (A)=2FH (C)=1 (AC)=0 (P)=1

(OV)=13.4算术运算类指令把A,R1内容看成补码了解,正数补码是它本身,负数补码是取反加1。上海大学单片机第49页3.4算术运算类指令关于OV位总结:实际上决定两个相加数是带符号还是不带符号是由用户来确定,而不是由电脑确定。假如是无符号数运算,不考虑溢出标志。假如带符号运算需考查OV位,判断是否产生溢出。OV取决于带符号位运算时D6和D7进位情况,假如D6和D7有一个产生进位,另一个不产生进位,OV等于1。OV=(D6进位位)⊕(D7进位位)上海大学单片机第50页例2:A=-24,R0=-27,执行ADDA,R1。 -24=10011000B,-27=10011011B(A)补=11101000B,(R0)补=11100101B11101000

+C11100101111001101

恢复原码等于10110011B(-33H),等于-51。

OV=0表明是正确结果!

3.4算术运算类指令上海大学单片机第51页3.4算术运算类指令2、带进位加法利用ADDC指令能够进行多字节加法运算!运算结果对PSW标志位影响与ADD指令相同。说明:所加进位标志CY值是在该指令执行之前已经存在进位标志值,而不是执行该指令过程中产生进位标志值。汇编格式机器码操作机器周期振荡周期字节ADDCA,Rn00111rrrA←(A)+(Rn)+(Cy)1121ADDCA,direct00110101directA←(A)+(direct)+(Cy)1122ADDCA,@Ri0011011iA←(A)+((Ri))+(Cy)1121ADDCA,#data00110100dataA←(A)+data+(Cy)1122上海大学单片机第52页3.4算术运算类指令3、减法指令减法指令只有带借位减法,没有不带借位减法。C被称为借位位,C=1,表示有借位;C=0,表示没有借位。汇编格式机器码操作机器周期振荡周期字节SUBBA,Rn10011rrrA←(A)-(Rn)-(Cy)1121SUBBA,direct10010101directA←(A)-(direct)-(Cy)1122SUBBA,@Ri1001011iA←(A)-((Ri))-(Cy)1121SUBBA,#data10010100dataA←(A)-data-(Cy)1122上海大学单片机第53页OV位情况:OV=1:带符号数相减时,假如一个正数减去一个负数结果为负,或者一个负数减去一个正数结果为正数,出现错误情况,实际上产生溢出。溢出标志由运算时第6位和第7位借位位“异或”计算得到。假如第六位向第七位有借位位,第七位向高位没有借位位,OV=1;第6位没有借位,而第7位向高位有借位,OV=1。3.4算术运算类指令上海大学单片机第54页例1.A=C9H,R3=54H,C=1,执行SUBBA,R3。 11001001

-00000001 11001000

-0101010001110100结果:A=74H;C=0;AC=0;OV=1;P=0。注意:假如运算不需要C参加,要对C进行清0处理!

注意:减法在计算机中实际上变成补码相加。3.4算术运算类指令上海大学单片机第55页例2.被减数存放在20H和21H,减数存在30H和31H,差存放在40H和41H。SUB:MOVA,20H;取低字节到A

CLRC;清借位位SUBBA,30H;低字节相减MOV40H,A;把减结果送到40HMOVA,21H;取高字节

SUBBA,31H;高字节相减,减CMOV41H,A;把高字节相减结果缓存3.4算术运算类指令上海大学单片机第56页3.4算术运算类指令4、加1指令INC@Ri:Ri存放器所指向地址单元内容加1。除INCA,造成P发生改变外,其它指令不会影响到PSW标志位。INC指令主要应用于存放器间接寻址,用来改变操作数地址。汇编格式机器码操作机器周期振荡周期字节INCA00000100/A←(A)+11121INCRn00001rrrRn←(Rn)+11121INCdirect00000101directdirect←(direct)+11122INC@Ri0000011i(Ri)←((Ri))+11121INCDPTR10100011DPTR←(DPTR)+12241上海大学单片机第57页3.4算术运算类指令5、减1指令减一指令中没有DECDPTR,与加一指令是有区分。汇编格式机器码操作机器周期振荡周期字节DECA00010100/A←(A)-11121DECRn00011rrrRn←(Rn)-11121DECdirect00010101directdirect←(direct)-11122DEC@Ri0001011i(Ri)←((Ri))-11121上海大学单片机第58页3.4算术运算类指令6、乘除法八位无符号数乘法,乘积低8位放在A中,高8位放在B中。假如乘积大于FFH,OV被置1,表示乘积大于FFH。乘法运算会将C硬件清0。在编程时候,一定要注意C改变。

汇编格式机器码操作机器周期振荡周期字节MULAB10100100BA←(A)×(B)4481上海大学单片机第59页3.4算术运算类指令累加器A除以B存放器内容,把商送到累加器A,把余数存放在B存放器。假如除数为0,OV被置1,表示除法没有意义。不然OV被清0。除法运算将C清零。汇编格式机器码操作机器周期振荡周期字节DIVAB100001004481B(余数)(B)A(商)(A)上海大学单片机第60页7、十进制调整指令DAA功效:对A中刚进行两个BCD码加法结果自动进行修正。该指令只影响进位标志CY。BCD码加法:假如两个BCD码数相加,结果也是BCD码。在单片机中没有专门BCD码加法指令,要进行BCD码加法运算,一样要使用加法指令ADD或ADDC。3.4算术运算类指令上海大学单片机第61页单片机在执行ADD或ADDC指令时,是按照二进制规则进行,对于4位二进制数是按逢16进位。而BCD码是逢十进位,二者存在进位差,中间差了6。所以单纯用ADD或ADDC指令进行BCD码相加时,会出现错误。例:3+5=8;//和小于10,满足BCD码5+7=13;//和大于10,出现错误,需要调整

8+9=17;//和大于16,出现错误,需要调整3.4算术运算类指令上海大学单片机第62页3.4算术运算类指令DA指令定义[10,15][16,18]上海大学单片机第63页例3-14实现95+59BCD码加法,并将结果存入30H、31H单元。MOVA,#95H;95BCD码数送A中ADDA,#59H;两个BCD码相加,结果在A中

DAA;对相加结果进行十进制调整;执行DAA指令结果:A=54H,CY=1MOV30H,A;十位个位BCD码之和送30HMOVA,#00H;A清0ADDCA,#00H;加进位(百位BCD码)

DAA;BCD码相加后,用调整指令MOV31H,A;存进位;最终止果:(31H)=01H,(30H)=54H3.4算术运算类指令上海大学单片机第64页注意:DAA指令只能紧跟在加法指令后面。在51单片机中,碰到十进制调整情况,中间结果修正是由硬件自动进行,用户不用考虑加6,只要在加法指令后紧跟一条“DAA”指令既可。若要进行BCD码减法运算,也应该进行调整,但不存在十进制减法调整指令,所以可将减法改为加法,加减数补数。可参加书上例3-15。3.4算术运算类指令上海大学单片机第65页3.5逻辑运算及移位类指令1、逻辑与2、逻辑或3、逻辑异或4、累加器清零、取反5、循环移位上海大学单片机第66页3.5逻辑运算及移位类指令1、逻辑与前四条指令是将累加器A内容和操作数所指内容按位进行逻辑“与”,结果存放在A中。后两条指令是将直接地址单元中内容和操作数所指内容按位进行逻辑“与”,结果存入直接地址单元中。若直接地址恰好是I/O端口,则为“读——改——写”操作。如ANLP1,A。逻辑与可用于将一些位屏蔽,将要屏蔽位和“0”相与,保留不变位同“1”相与。汇编格式机器码操作机器周期振荡周期字节ANLA,Rn01011rrrA←(A)∧(Rn)1121ANLA,direct01010101directA←(A)∧(direct)1122ANLA,@Ri0101011iA←(A)∧(Ri)1121ANLA,#data01010100dataA←(A)∧data1122ANLdirect,A01010010directdirect←(direct)∧(A)1122ANLdirect,#data01010011directdatadirect←(direct)∧data2243上海大学单片机第67页3.5逻辑运算及移位类指令2、逻辑或功效:将两个指定操作数按位进行逻辑“或”。前四条指令操作结果存放在累加器A中,后两条指令操作结果存放在直接地址单元中。逻辑或可将一些位置位,将要置位位和“1”相或,要保留不变位同“0”相或。汇编格式机器码操作机器周期振荡周期字节ORLA,Rn01001rrrA←(A)∨(Rn)1121ORLA,direct01000101directA←(A)∨(direct)1122ORLA,@Ri0100011iA←(A)∨((Ri))1121ORLA,#data01000100dataA←(A)∨data1122ORLdirect,A01000010directdirect←(direct)∨(A)1122ORLdirect,#data01000011directdatadirect←(direct)∨data2243上海大学单片机第68页例3-16:将累加器A低4位送到P1口低4位输出,而P1高4位保持不变。 解:这种操作不能简单地用MOV指令实现,能够借助与、或逻辑运算。

编程以下:ANLA,#0FH;屏蔽A高4位ANLP1,#0F0H;屏蔽P1低4位 ORLP1,A;经过或运算,完成操作3.5逻辑运算及移位类指令上海大学单片机第69页3、逻辑异或将两个指定操作数按位进行“异或”,前四条指令结果存放在累加器A中,后两条指令操作结果存放在直接地址单元中应用:用于将一些位取反,将需求反位同“1”相异或,要保留位同“0”相异或。3.5逻辑运算及移位类指令汇编格式机器码操作机器周期振荡周期字节XRLA,Rn01101rrr1121XRLA,direct01100101direct1122XRLA,@Ri0110011i1121XRLA,#data01100100data1122XRLdirect,A01100010direct1122XRLdirect,#data01100011directdata2243A←(A)(Rn)A←(A)(direct)A←(A)(Ri)A←(A)datadirect←(direct)(A)direct←(direct)data上海大学单片机第70页4、累加器清零、取反清零和取反指令只针对累加器A,单字节。只有对A取反指令,没有求补指令。若要进行求补操作,可按“求反加1”来进行。以上全部逻辑运算指令,对CY、AC和OV标志都没有影响,只在包括到累加器A时,才会影响奇偶标志P。3.5逻辑运算及移位类指令汇编格式机器码操作机器周期振荡周期字节CLRA11100100A←01121CPLA111101001121A←(A)上海大学单片机第71页5、循环移位3.5逻辑运算及移位类指令上海大学单片机第72页例3-18设(A)=08H,分析下面程序执行结果:

(1)RLA;A内容左移一位,结果(A)=10H

RLA;A内容左移一位,结果(A)=20H

RLA;A内容左移一位,结果(A)=40H

即左移一位,相当于原数乘2(原数小于80H时)。

(2)RRA;A内容右移一位,结果(A)=04H

RRA;A内容右移一位,结果(A)=02H

RRA;A内容右移一位,结果(A)=01H

即右移一位,相当于原数除2(原数为偶数时)。3.5逻辑运算及移位类指令上海大学单片机第73页3.6控制转移类指令51系列单片机有比较丰富控制转移指令,能改变PC内容,使程序发生转移。详细分类: 1、无条件转移指令(4条) 2、条件转移指令(8条) 3、调用子程序和返回指令(4条) 4、空操作指令(1条)上海大学单片机第74页3.6控制转移类指令1、无条件转移指令有4条无条件转移指令,提供不一样转移范围和方式,可使程序无条件转到指令所提供地址上。详细:汇编格式机器码操作机器周期振荡周期字节LJMPaddr1600000010a15~a8a7~a0PC←addr15~02243AJMPaddr11a10a9a800001a7~a0PC←(PC)+2PC10~0←addr10~0PC15~11不变2242SJMPrel10000000relPC←(PC)+2PC←(PC)+rel2242JMP@A+DPTR01110011/PC←(A)+(DPTR)2241上海大学单片机第75页3.6控制转移类指令1)长转移指令把指令中给出16位目标地址addr16送入程序计数器PC,使程序无条件转移到addr16处执行。16位地址可寻址64KBROM,可转向64K程序存放器地址空间任何单元。长转移指令是由三字节指令组成:操作码、高8位地址、低8位地址。LJMPaddr1600000010a15~a8a7~a0PC←addr15~02243上海大学单片机第76页3.6控制转移类指令2)绝对转移指令指令格式:包含2字节,详细为:a10a9a800001a7a6a5a4a3a2a1a0

a10~a8占据第一字节高3位,a7~a0占满第二字节,而00001是这条指令特有操作码,占据第一字节低5位。操作数出现在操作码中。AJMPaddr11a10a9a800001a7~a0PC←(PC)+2PC10~0←addr10~0PC15~11不变2242上海大学单片机第77页程序执行过程:第一步取指令,PC本身加2指向下一条指令起始地址(称为PC当前值)。第二步用指令中给出11位地址替换PC当前值低11位,PC高5位保持不变,组成新PC值,实现转移,跳转到目标地址。3.6控制转移类指令上海大学单片机第78页绝对跳转地址空间分布:低11位地址,范围为00000000000~11111111111,可转移范围是2KB,相对于当前地址能够向前也可向后转移。注意:转移目标位置与PC+2地址必须在同一个2K段内。3.6控制转移类指令上海大学单片机第79页3.6控制转移类指令高5位地址,范围为00000~11111,共32,作为段地址。整个64K程序存放器空间可被分成32个段,每段包含2K地址范围。0000H~07FFH5800H~5FFFHB000H~B7FFH0800H~0FFFH6000H~67FFHB800H~BFFFH1000H~17FFH6800H~6FFFHC000H~C7FFH1800H~1FFFH7000H~77FFHC800H~CFFFHH~27FFH7800H~7FFFHD000H~D7FFH2800H~2FFFH8000H~87FFHD800H~DFFFH3000H~37FFH8800H~8FFFHE000H~E7FFH3800H~3FFFH9000H~97FFHE800H~EFFFH4000H~47FFH9800H~9FFFHF000H~F7FFH4800H~4FFFHA000H~A7FFHF800H~FFFFH5000H~57FFHA800H~AFFFH上海大学单片机第80页注意:相对当前地址,目标地址段地址是不变,执行绝对跳转指令能实现在同一个段地址内程序转移,也就是2K地址范围内。编程时要注意ROM分配,必须确保紧接AJMP指令后面那一条指令第一字节,也就是所谓PC当前地址,与转移目标地址在同一2K范围内。3.6控制转移类指令上海大学单片机第81页3.6控制转移类指令3)短转移指令无条件相对转移指令,双字节,相对寻址,rel是8位偏移量,范围为-128~+127。目地址=(PC)+2+relSJMPrel10000000relPC←(PC)+2PC←(PC)+rel2242上海大学单片机第82页3.6控制转移类指令4)变址寻址转移指令(散转指令/间接转移指令)将累加器A中8位无符号数与基址存放器DPTR中16位地址相加,得到和作为目标地址送入PC,实现转移。转移地址能够在程序运行中加以改变。将多分支转移指令表首地址装入DPTR,对应每个分支索引装入累加器A,依据A中内容动态选择转向哪一条分支,实现多分支转移功效。JMP@A+DPTR01110011/PC←(A)+(DPTR)2241上海大学单片机第83页例3-20依据用户输入键值,转入对应键处理程序。假设累加器A中存有用户从键盘输入键值0~3,键处理程序分别存放在KPRG0、KPRG1、KPRG2、KPRG3位置。3.6控制转移类指令上海大学单片机第84页详细程序:MOVDPTR,#JPTAB;转移指令表首地址送DPTRRLA;键值×2,AJMP指令占2个字节JMP@A+DPTR;JPTAB+2×键值,和送PC中,则程序转移到表中某一位置去执行AJMP指令JPTAB:AJMPKPRG0//0;响应子程序入口AJMPKPRG1//2AJMPKPRG2//4AJMPKPRG3//6KPRG0://子程序┇KPRG1:┇KPRG2:┇KPRG3:┇3.6控制转移类指令上海大学单片机第85页LJMP、AJMP、SJMP、JMP四条无条件转移指令区分:转移范围和方式不一样:LJMP转移范围是64KB,直接跳转;AJMP转移范围是2KB段内,经过改变地址低11位实现跳转;SJMP转移范围是当前PC(-128B~+127B,256B),相对寻址实现转移。JMP转移范围是64KB,经过变址寻址实现转移。使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将犯错。指令字节不一样:LJMP是3字节指令;AJMP、SJMP是2字节指令;JMP是单字节指令。3.6控制转移类指令上海大学单片机第86页2、条件转移指令有条件限制,当满足某种条件时,才进行转移;不满足条件时,程序按次序执行。含有共同特点:全部条件转移指令都属于相对转移指令,转移范围相同,以PC当前值为基准256B范围内(-128~+127)。计算转移地址方法相同:转移地址=PC当前值+rel3.6控制转移类指令上海大学单片机第87页条件转移分类: 1)累加器判零转移指令 2)比较判断转移指令 3)减1条件转移指令3.6控制转移类指令上海大学单片机第88页1)累加器判零转移指令分别对累加器A内容为零或不为零进行检测,当满足各自条件时,程序转向指定目标地址;当不满足各自条件时,程序次序向下执行。目标地址:下一条指令第一个字节地址+相对偏移量。3.6控制转移类指令汇编格式机器码操作机器周期振荡周期字节JZrel01100000relPC←(PC)+2若A=0,则2242PC←(PC)+rel若A≠0,次序执行JNZrel01110000relPC←(PC)+2若A≠0,则2242PC←(PC)+rel若A=0,次序执行上海大学单片机第89页3.6控制转移类指令2)比较判断转移指令汇编格式机器码操作机器周期振荡周期字节CJNEA,direct,rel10110101directrelPC←(PC)+3若(direct)<(A),则2243PC←(PC)+rel且Cy←0若(direct)>(A),则PC←(PC)+rel且Cy←1若(direct)=(A),则次序执行,且Cy←0CJNEA,#data,rel10110100datarelPC←(PC)+3若data<(A),则2243PC←(PC)+rel且Cy←0若data>(A),则PC←(PC)+rel且Cy←1若data=(A),则次序执行,且Cy←0CJNERn,#data,rel10111rrrdatarelPC←(PC)+3若data<(Rn),则2243PC←(PC)+rel且Cy←0若data>(Rn),则PC←(PC)+rel且Cy←1若data=(Rn),则次序执行,且Cy←0CJNE@Ri,#data,rel1011011idatarelPC←(PC)+3若data<(Ri),则2243PC←(PC)+rel且Cy←0若data>(Ri),则PC←(PC)+rel且Cy←1若data=(Ri),则次序执行,且Cy←0上海大学单片机第90页3.6控制转移类指令比较判断转移指令特点:三字节指令,所以PC当前值=PC+3;比较时实际上做是减法操作,不保留差值,详细结果反应在C上;注意在大于和小于(不等于)时候,都会实现跳转,跳转到目标地址位置后,假如要做深入操作,需要经过判断C是0还是1,可依据这个标志来做下一步操作。参加比较两个操作数看成无符号数对待;假如进行两个有符号数大小比较,需要依据符号位、CY和OV来进行判决。上海大学单片机第91页3.6控制转移类指令3)减1条件转移指令减1条件转移指令通常在循环程序中作为计数器使用。赋初值后,每执行一次程序,计数器减1,直到为零结束循环。汇编格式机器码操作机器周期振荡周期字节DJNZRn,rel11011rrrrelPC←(PC)+2Rn←(Rn)-12242当(Rn)≠0,则PC←(PC)+rel当(Rn)=0,则结束循环,程序往下执行DJNZdirect,rel11010101directrelPC←(PC)+3direct←(direct)-12243当(direct)≠0,则PC←(PC)+rel当(direct)=0,则结束循环,程序往下执行上海大学单片机第92页3.6控制转移类指令3、调用子程序和返回指令汇编格式机器码操作机器周期振荡周期字节ACALLaddr11a10a9a810001addr7~0PC←(PC)+2SP←(SP)+12242(SP)←PC7~0SP←(SP)+1(SP)←PC15~8PC10~0←addr10~0PC15~11不变LCALLaddr1600010010addr15~8addr7~0PC←(PC)+3SP←(SP)+12243(SP)←PC7~0SP←(SP)+1(SP)←PC15~8PC10~0←addr15~0RET00100010/PC15~8←(SP)SP←(SP)-12241PC7~0←((SP))SP←(SP)-1RETI00110010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-1上海大学单片机第93页3.6控制转移类指令1)长调用指令长调用是16位目标地址,能够在整个64位地址范围内进行调用。相对于LJMP,有压栈操作。汇编格式机器码操作机器周期振荡周期字节LCALLaddr1600010010addr15~8addr7~0PC←(PC)+3SP←(SP)+12243(SP)←PC7~0SP←(SP)+1(SP)←PC15~8PC10~0←addr15~0上海大学单片机第94页3.6控制转移类指令2)绝对调用在使用ACALL时,单片机会依据详细指令会自动汇编成目标地址。只要确保调用子程序入口地址与PC当前值在2K字节段范围内。相对于AJMP,ACALL有压栈操作。汇编格式机器码操作机器周期振荡周期字节ACALLaddr11a10a9a810001addr7~0PC←(PC)+2SP←(SP)+1(SP)←PC7~02242SP←(SP)+1(SP)←PC15~8PC10~0←addr10~0PC15~11不变上海大学单片机第95页3.6控制转移类指令3)调用返回指令子程序返回中止返回汇编格式机器码操作机器周期振荡周期字节RET00100010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-1汇编格式机器码操作机器周期振荡周期字节RETI00110010/PC15~8←((SP))SP←(SP)-12241PC7~0←((SP))SP←(SP)-1上海大学单片机第96页前者是子程序返回指令,后者是中止子程序返回,二者完成操作是一样,经过返回指令弹出之前压栈PC高八位和低八位。RET与RETI区分:RETI返回中止断点,同时去除中止响应时被置位优先级状态触发器。二者不能交换使用。在子程序或中止服务子程序中,PUSH和POP成对使用。3.6控制转移类指令上海大学单片机第97页3.6控制转移类指令4、空操作指令空操作经常用来产生一个机器周期精确延时。汇编格式机器码操作机器周期振荡周期字节NOP00000000/PC←(PC)+11121上海大学单片机第98页3.7位操作指令51单片机含有丰富位操作功效,共17条指令.位操作指令以“可寻址位”为对象,按位来进行操作,与前面讨论

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论