PC可寻址64KBROM是独立寻址什么意思思

51单片机的指令系统_MCS-51单片机的指令系统_ppt_大学课件预览_高等教育资讯网
MCS-51单片机的指令系统:51单片机的指令系统
分类: 格式: 日期:日
教学目的指令和指令系统的概念与分类。掌握指令的格式和寻址方式。掌握数据传送、算术运算、逻辑运算、控制转移和位操作指令的功能和应用。学习重点和难点指令的寻址方式。控制转移指令和位操作指令。第三章 指令系统3.1 汇编语言一,概述指令系统,一台计算机所能识别、执行的指令的集合就是它的指令系统。机器语言,指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。机器语言指令是计算机唯一能识别和执行的指令。汇编语言,指令系统是利用指令助记符来描述的,称为汇编语言。计算机的指令系统一般都是利用汇编语言描述的,每一条指令都是由计算机硬件设计所决定的。指令系统没有通用性。单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程,位( bit),位是计算机所能表示的最小的、最基本的数据单位,位通常是指一个二进制位。字节( Byte),一个连续的 8位二进制数码称为一个字节,即 1Byte=8bit。字( Word),通常由 16位二进制数码组成,即1Word=2Byte。字长,字长是指计算机一次处理二进制数码位的多少。 MCS-51型单片机是 8位机,所以说它的字长为 8位。MCS-51系列单片机都是以 Intel公司最早的典型产品 8051为核心,增加了一定的功能部件后构成的。本章以 89C51为主介绍 MCS-51系列单片机 。二、常用单位与术语指令格式是指令码的结构形式。表达形式为:1 指令格式标号 又称为指令地址符号,一般由以英文字母开始的 1-8个字母或数字组成,以冒号,,”结尾如,START,LOOP,NEXT,MAIN[标号 ],操作码 [操作数 ] ;[注释 ]三,MCS-51系统单片机指令格式[ ]项 是可选项。操作码 用 MCS-51单片机所 规定的助记符 来表示,它命令 CPU作何种操作,是一条指令中不可缺少的内容 。 如,MOV,ADD,ORL等 。[标号 ],操作码 [操作数 ] ; [注释 ]注释 是对该指令作用或功能的说明,以便于阅读,不参与编译 (可有可无,不是必备的 )。 注释部分前一定要用分号,;,隔开。操作数 分为目的操作数和源操作数,常用符号(如寄存器,标号 ),常量 (如立即数,地址值等 )来表示 。 操作码和操作数之间用若干空格分隔,而目的操作数和源操作数之间用逗号,,,分隔 。[标号 ],操作码 [操作数 ] ; [注释 ]目的操作数,源操作数寄存器,如,A,B,DPTR,Rn,P0等。标号,如,START,LOOP,MAIN等。如果累加器 A中已有一个加数 10,那么能够完成 10+ 20并把结果送入累加器 A的加法指令的,助记符指令格式 为:SUM,ADD A,# 14H ;A ←A+14H例如编译后的机器语言,0030H 24H0031H 14H2 指令的字节数MCS-51单片机通常可以分为 单字节,双字节和三字节 指令三种 。(1)单字节指令( 49条)单字节指令只有一个字节。通常又可分为两类:1)指令码中隐含着对某一个寄存器的操作这类指令的指令码只有操作码字段,操作数是隐含在操作码中的 。 如,INC DPTR1 0 1 0 0 0 1 1二进制码:这类指令的指令码有操作码字段和专门用来指示操作数所在寄存器号的字段组成 。例如:八位数传送指令MOV A,Rn其中,n的取值范围为 0- 7。2) 由指令码中的 rrr三位的不同编码指定某一个寄存器1 1 1 1 1 r r r二进制码:如 n= 2,则 rrr=0101 1 1 1 1 0 1 0则二进制码:双字节指令含有两个字节,操作码字节在前,操作数字节在后。例如:八位数传送指令MOV A,# data8 ;A←data这条指令的含义是指令码第二字节 data取出来存放到累加器 A中2)双字节指令( 45条)二进制码,0 1 1 1 0 1 0 0# data这类指令的指令码的第一字节为操作码,第二、三字节为操作数或操作数地址。3)三字节指令( 17条)操作码操作数 1操作数 2例如:指令 MOV DPTR,# data16Data15-8Data7-0一、寻址方式中常用符号的说明(1)Rn:表示当前工作寄存器组中 8个工作寄存器,(n=0-7) 中的一个 。(2) @ Ri,表 示 寄 存器 间 接寻 址,Ri只能是 R0或 R1。(3)#data8:8位立即数(常数),实际使用时data应是 00H-0FFH中的一个。(4)#data16,表 示 包 含 在 指 令 中 的 16 位立即数 。 范围,0000H-0FFFFH3.2 寻址方式(5)direct:表示 8位片内数据存储器( RAM)单元的直接地址。(6)addr16:表示 16位的目的地址 。(7)addr11:表示 11位的目的地址 。(8)rel:表示 8位带符号的偏移量 。(9)DPTR:为数据指针,用作 16位的地址寄存器。(10)Bit:表示内部 RAM或专用寄存器中的直接寻址位地址 。(11)A:累加器 ACC。(12)B,专 用 寄 存 器,用于 MUL 和 DIV 指令中 。(13)@,为间址寄存器或基址寄存器的前缀 。 如@ Ri,@ A+PC,@ A+DPTR。(14)/,位 操 数 的 前 缀,表 示 对 该 位 操 作数取反 。 如 /bit.(15)$:正在执行的指令的地址 。(16)(× ),× 中的内容 。(17)((× )),由 × 指出的地址单元中的内容 。指令字节数判断操作码 目的操作数,源操作数1,操作数都在 Rn( n=0-7),A,B,DPTR,Cy,@Ri、@A+DPTR,@A+PC范围中,是单字节指令。2、两操作数中有一个在此范围,指令字节数需根据另一操作数来判断,如是 8位的地址或立即数则是双字节指令;如是 16位的地址或立即数则是三字节指令。3、操作数都不在此范围,则肯定是三字节指令1 寄存器寻址2 直接寻址3 立即寻址4 寄存器间接寻址5 变址寻址6 相对寻址7 位寻址二、寻址方式MCS-51的指令系统共用了七种寻址方式。声明,寻址包括目的操作数寻址和源操作数寻址,如无特别说明,指的是源操作数寻址!!1 寄存器寻址以 寄存器的内容 为 操作数 的寻址方式可进行寄存器寻址的寄存器有:工作寄存器 R0~R7,A,B,DPTR和进位 CY。11100rrr……ROM操作码PC→PSW RS0RS110……片内 RAM00Hrrr=010B(R2)0AHMOV A,R0 ;A R0例如,R0(35H) A 结果 A=35H35HFFE0(A)80用户 RAM区位寻址区工作寄存器区7F302000此条指令属单字节指令吗?此时 PSW寄存器中 RS1,RS0位的值是多少?直接寻址指令的指令码中所给出的操作数是:片内 RAM单元的地址,地址中放着被操作的数 。2 直接寻址例,MOV A,40H ; A ( 40H)机器码,E5 40……ROM操作码直接地址PC→PC+ 1→……片内 RAM40H A直接寻址可访问片内 128B的 RAM单元和特殊功能寄存器 SFR。对于 特殊功能寄存器 (除开 A,B,DPTR)既可以使用它们的地址,也可使用它们的名称。如,MOV A,P2; P2←AMOV A,0A0H; P2的地址为 0A0H注意,Rn,A,B,DPTR一般不会用作直接寻址!说明指令码中直接含有所需的操作数,操作数之前加,#”符号为前缀。以区别直接地址。使用时一定要注意!3 立即寻址特点源操作数为立即数(即操作数本身)注,51系列单片机有 8 位立即数和 16 位地址立即数,立即数不能作目的操作数。寻址范围:程序寄存器注:操作码下一单元。例,MOV A,#20HMOV DPTR,#2000H……ROM操作码立即数PC→PC+ 1→……ROM操作码立即数高 8位PC→PC+ 1→PC+ 2→ 立即数低 8位功能,( 1) 将片内 RAM中 44H单元的内容送累加器 A,属于直接寻址;( 2) 则是把 44H这个数本身送到累加器 A,属于立即寻址。( 1) MOV A,44H ;A (44H)( 2) MOV A,#44H ;A 44H例4 寄存器间接寻址指令指定寄存器中的内容为操作数的地址。工作寄存器 R0,R1和专用寄存器 DPTR可用于间接寻址,在寄存器前加,@”符号作前缀。工作寄存器 R2-R7不能用于间接寻址!① MOV A,R0 ;A←(R 0)② MOV A,@ R0;A←((R 0))例如:(R0)= 65H,(65H)= 26H如图 3.2所示,执行 ① 结果 A= 65H,执行 ② 结果 A= 26H。注意:,@,是它区别寄存器寻址的标志 。AR0 65H①②例65H26H65H 26H片内RAM( 1) @R0,@R1可寻址内部 RAM 00H - 7FH共 128B单元内容,不能寻址特殊功能寄存器。MOV A,@R0MOV A,@R1说明( 2) @ R0,@ R1可寻址外部 RAM 00 ~ FFH共 256B单元内容。MOVX A,@R0MOVX A,@R1( 3) @ DPTR寻址外部数据存储器的 64KB空间MOVX A,@DPTR ; A?(DPTR)MOVX @DPTR,A ; (DPTR)?A5 变址寻址以 DPTR和 PC基址寄存器 和累加器 A变址寄存器的 内容和 为 地址,寻址该地址单元,读取数据A06HA L U(1)MOVC A,@ A+ DPTR ; A← ( A+ DPTR)20 00HDPTR 程序存储器34H× ×…….…….2006H2006H(2)MOVC A,@ A+ PC ; A ← ( A+ PC)执行第二条指令时先取指,将 该指令取完后的 PC值 和 累加器 A中的偏移量 相加,作为操作数地址,从该地址中取出操作数送入 A中 。第二条过程与第一条指令类似,A06H←PC+1=2006HA L U20 06HPC200CH←PC=2005H程序存储器34H…….…….83H…….200CH34H说明寻址范围,64KB程序存储器变址 + 基址形成的 ROM地址中的值为操作数基址寄存器 DPTR ―― 16 位数据指针PC ―― 16 位程序指针变址寄存器 A ―― 8 位累加器(1)MOVC A,@ A+ DPTR ; A← ( A+ DPTR)(2)MOVC A,@ A+ PC ; A ← ( A+ PC)6 相对寻址相对寻址只出现在 相对转移指令 中 。 相对转移指令执行时,以 PC当前值 加上 偏移量 rel得 转移地址目的地址=源地址+ 2+ rel源地址,转移指令操作码所在的地址目的地址,转移后的地址2:相对转移指令字节数PC当前值,执行完相对转移指令后的 PC值PC当前值A26HPC02H20HA L U程序存储器0000H2000H2001H80H26H× ×× ×2028H2002H ┆SJMP rel ; PC← PC+2+relH例2028H目的地址由 CPU把目的地址送入 PC寻址空间:程序存储器偏移量 rel的范围是,C128 ~ +127转移公式:PC目的地址 = PC当前地址 + rel说明在实际程序编译时,经常需要根据已知的源地址和目的地址计算偏移量 rel!!rel=(目的地址-(源地址+ 2)) 补= FFH- (源地址+ 2-目的地址 )+ 1= 100H- (源地址+ 2-目的地址 )= FEH- |目的地址-源地址 |= FEH - |地址差 |是负数时7 位寻址进行位操作时,位累加器 C即为进位标志 CY,位操作的操作数的地址就称为位地址,对位地址寻址简称位寻址 。MOV C,30H ; 30H是位寻址位地址MOV A,30H ; 30H是直接寻址的字节地址JB 30H,如果 30H位是 1,则相对偏移 rel由上面指令可知,位寻址的位地址与直接寻址的字节地址形式完全一样,由操作指令区分,使用时需应该特别注意 。说明位寻址仅对片内 RAM的部分区域有效片内低 128BRAM区字节地址为 20H ~ 2FH,16 Byte单元共有 128 bit 位片内专用 RAM区(特殊功能寄存器)字节地址能被 8 整除的特殊功能寄存器单元说明位地址表示,直接使用位地址。对于 20H~2FH的 16个单元共128位的位地址分布是 00H~7FH。对于特殊功能寄存器1) 用位地址 MOV C D0H2)用 SFR.n的形式 MOV C PSW.03)用位名称 MOV C P序号 寻址方式 寻址空间1 寄存器寻址 寄存器 R0~ R7,A,B,DPTR,C2 直接寻址 内部 RAM低 128B,SFR3 寄存器间接寻址内部 RAM低 128B、外部 RAM寄存器只能是 @R0,@R1,@DPTR4 立即寻址 程序存储 ROM5 变址寻址 程序存储器 ( @A+DPTR,@A+PC)6 相对寻址 程序存储器 ROM( PC+rel(- 128~127) )7 位寻址 内部 RAM的 20H~ 2FH单元和部分 SFR寻址方式小节MOV 30H,R7MOV A,55HMOV A,# 55HJMP @A+DPTRMOV 30H,CMOV A,@R0MOVX A,@R0练习一答案:寄存器寻址方式直接寻址方式立即寻址方式变址寻址方式位寻址方式间接寻址方式间接寻址方式说明下列指令中源操作数采用的寻址方式。MCS-51单片机的指令可以分为五类:1.指令分类2)算术运算指令4)控制程序转移指令3)逻辑运算指令1)数据传送指令5)位操作指令3.3 89C51单片机的指令系统数据传送指令是计算机中最基本、应用最广泛的指令类型。 MCS-51单片机有 四类 29 条 数据传送指令。内部数据传送指令( 15条)外部数据传送指令( 7条)数据交换指令( 5条)堆栈操作指令( 2条)1 数据传送指令指令格式,MOV &dest&,&src&注,&src&为源操作数,&dest&为目的操作数指令功能:将源操作数送到目的操作数单元,且源操作数单元中的源操作数不变。内部数据传送指令累加器 A 寻址@Ri 间接寻址direct 直接寻址Rn 工作寄存器寻址 #data 立即数寻址MOV A,RnMOV A,directMOV A,@RiMOV A,#dataMOV Rn,AMOV Rn,directMOV Rn,#dataMOV direct,AMOV direct,RnMOV direct1,direct2MOV direct,@RiMOV direct,#dataMOV @Ri,AMOV @Ri,directMOV @Ri,#data在以上的传送指令中:两操作数中有一个是累加器 A的肯定是单机器周期指令两操作数中无累加器 A但有立即数的,如目的操作数为直接寻址方式是双机器周期指令;其它的为单机器周期指令两操作数中无累加器 A,也无立即数的,肯定是双机器周期指令指令的机器周期数已知,R1=30H,R2=31H,(56H)=23H,试问执行以下指令后,结果各是什么?MOV A,R1MOV R2,AMOV 56H,R1结果为,A= R2= (56H)=例30H 30H 30H已知,(30H)=12H,(31H)=13H,R0=30H、R1=31H,试问执行以下指令后 A,30H、31H和 32H各是什么?MOV A,@R0 ;MOV @R1,A ;MOV @R0,#34H ;MOV 32H,@R1 ;例A←((R0)) =12H((R1)) ←A=12H,(31H)=12H((R0))←34H,(30H)=34H(32H) ←((R1))=12H结果为,A=12H,(30H)=34H,(31H)=12H,(32H)=12HMOV R0,R1MOV @R1,R7MOV @R0,@R1MOV A,R1MOV R0,AMOV A,R7MOV @R1,AMOV R6,@R0 MOV A,@R0MOV R6,AMOV A,@R1MOV @R0,A练习 判断下列指令的正误,将错误的更正,更正更正更正更正应用举例 1MOV P1,#0FEH ; B可以使 P1.0上的发光二极管点亮MOV P1,#0F0H ; B可以使 P1口上的上面 4个发光二极管点亮P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.75v8段数码管显示MOV P1,#00H ;MOV P1,#0F8H ;MOV P1,#88H ;P1.0 aP1.1 bP1.2 cP1.3 dP1.4 eP1.5 fP1.6 gP1.7dp5v显示 8.显示 7显示 AMOV DPTR,#data16; DPTR ← ROM,外部 RAM的16 位地址值16位数据传送指令( 1 条)例,MOV DPTR,#2030HROM902030片内 RAM00H7FH80H81H82H(DPH)83H(DPL)双机器周期指令访问 ROM 存储器的指令(查表)( 2 条)MOVC A,@A + DPTR; A ← ( A+DPTR) 数据指针MOVC A,@A + PC; PC ← PC + 1,A ← ( A+PC) 程序指针注,PC 不能随便改变,称为近程查表DPTR 可随时赋值,称远程查表故 @A+DPTR 比 @A+PC 更常用为两机器周期指令例,CLR AMOV DPTR,#2030HMOVC A,@A + DPTR2030H00H7FH80H81H82H(DPH)83H(DPL)片内 RAME0H(A)……2030AAROM3020AA90PC→93 PC+3→00H7FH80H81H82H83H片内 RAME0H(A)ROM2000H 742001H 052002H 832003H2008H AAAA例,MOV A,#05HMOVC A,@A + PC05AA已知,1000H,MOV A,#10H ; A = 10H1002H,MOVC A,@A+PCROM表项1010H,02H1011H,04H1012H,06H1013H,08HA ← ( A+PC),A = 08H结果取指后 PC = 1003H,A + PC = 1013H注,能够查表的地址范围为:1003H ∽ 1003H + FFH例已知,片外 ROM的 2008H单元中有一数 34H,试用两条外部 ROM数据传送指令各编写一个程序,把数送到片内 RAM的 7FH单元 。解,① 采用 DPTR作为基址寄存器,基址可定为2000H,地址偏移量则为 08H,程序如下:MOV DPTR,# 2000H ; DPTR← 2000HMOV A,# 08H ; A← 08HMOVC A,@ A+ DPTR ; A← 34HMOV 7FH,A ; ( 7FH) ← A例#2007H#01② 采用 PC作为基址寄存器,程序如下:ORG 2000HSTART,MOV A,# 05H ; A← 05HMOVC A,@ A+ PC ; A← 34HMOV 7FH,A ; ( 7FH) ← A2008H 342000H 742001H2002H 832003H05ROMACC0534 05是怎么确定的?8段数码管显示0,C0H 1,F9H P1.0 aP1.1 bP1.2 cP1.3 dP1.4 eP1.5 fP1.6 gP1.7dp5v2,ABH 3,B0H4,99H 5,92H6,82H 7,F8H8,80H 9,90H2000H,C0H F9H ABH B0H 99H92H 82H F8H 80H 90HMOV DPTR,#2000HMOV A,# 05HMOVC A,@ A+ DPTRMOV P1,Acage外部 RAM 传送指令( 4 条)(双机器周期)MOVX A,@Ri ;外部 RAM的 00H ~ FFH单元读MOVX @Ri,A ;外部 RAM的 00H ~ FFH单元写MOVX A,@DPTR ;外部 RAM的 64K单元读MOVX @DPTR,A ;外部 RAM的 64K单元写注,MOVC 指令仅 读 操作,MOVX 指令可 读写 操作访问外部存储器仅用间址,不用直接地址累加器 A寄存器间接寻址@R1,@R0(片外 0- 255B)寄存器间接寻址@DPTR(片外 0- 64KB)已知外部 RAM的 60H单元中有一个数为 30H,试编程把 30H送到片外 RAM的 2000H单元中。例解,MOV R1,#60H ;R1=60HMOVX A,@R1 ;A=30HMOV DPTR,#2000H ;DPTR=2000HMOVX @DPTR,A ;2000H←30H分析:上面虽都是片外 RAM的地址单元,但不能直接传送,必须经过累加器 A的转送,才能实现。MOVX A,2000HMOVX A,20H错误MOV DPTR,#2000HMOVX A,@DPTR错误MOV R0,#20HMOVX A,@R0练习 判断下列指令的正误,将错误的更正,访问外部 RAM指令字节 数据交换指令 ―― XCHXCH A,Rn ; A? (Rn)XCH A,direct ; A? ( direct)XCH A,@Ri ; A?((Ri))数据交换指令(单机器周期)低 4 位数据交换指令 ―― XCHD累加器 A 中高低 4 位 交换 指令 ―― SWAPXCHD A,@Ri ; A0~3? ( Ri) 0~3SWAP A ; A0~3? A 4~7注:交换指令均与累加器 A 有关 !!!已知,片内 20H单元有一个数为 30H,片外 20H单元有一个数为 03H,编程把二个数相互交换。例解,MOV R0,#20H ; R0←20HMOVX A,@R0 ; A←03HXCH A,20H; A←30H,20H←03HMOVX @R0,A ; 30H→20H (外部 RAM)分析:片内、片外没有直接的交换指令,必须经过累加器 A的中转,才能实现。@R0堆栈操作的规则,先进后出,后进先出。PUSH direct; SP ← SP + 1,( SP) ← ( direct)POP direct;( direct ) ← ( SP),SP ← SP C 1堆栈操作指令( 2机器周期)例 已知,(20H)=M1、( 50H) =M2、编写程序用堆栈指令把 20H和 50H单元中的内容相交换。解:由堆栈所具备的原则,程序为:MOV SP,#60H ;设置栈底首址为 60HPUSH 20H ; SP←SP+1,61 ←M1PUSH 50H ; SP←SP+1,62 ←M2POP 20H ; (20H)←M2,SP ← SP -1= 61HPOP 50H ; (50H)←M1,SP ← SP -1= 60H加法指令( 13条):减法指令( 8条):十进制调整指令( 1条):乘法和除法指令( 2条):ADD,ADDC,INCSUBB,DECDAMUL,DIV2 算术运算指令注意指令对 PSW中标志位的影响!!不带 Cy加法指令( 4条):ADD A,Rn ; A ← A + RnADD A,direct ; A ← A + ( direct)ADD A,@Ri ; A ← A + ( Ri)ADD A,#data ; A ← A + data注:指令的目的操作数为累加器 A 执行指令后将影响标志位Cy,AC,OV及 P。(都属单字节指令)试分析执行如下指令后,累加器 A和 PSW中各标志位的变化情况如何?MOV A,#5AHADD A,#6BH解:第一条指令先向累加器 A传送一个数5AH,第二条为加法指令,在此 机器执行加法指令时按带符号数运算 。例竖式表示如下图:执行结果,A=5A+6B=C5H,PSW=44H0 1 0 0 0 1 0 0Cy AC F0 RS1 RS0 OV - P5A+6B=?A= 0 1 0 1 1 0 1 0 Bdata= 0 1 1 0 1 0 1 1 B1071 1 1 0 0 0 1 0 1 B90+ )1971AC00CPC71C6例 MOV A,#5AHADD A,#6BH执行结果,A=78+9A=12H,PSW=C0H1 1 0 0 0 0 0 0Cy AC F0 RS1 RS0 OV - P78+9A=?A= 0 1 1 1 1 0 0 0 Bdata= 1 0 0 1 1 0 1 0 B1541 0 0 0 1 0 0 1 0 B120+ )2741AC1CPC71C6例 MOV A,#78HADD A,#9AH(无符号数相加)带 Cy加法指令( 4条):ADDC A,Rn ; A ← A + (Rn) + CyADDC A,#data ; A ← A + data + CyADDC A,direct ; A ← A +(direct) + CyADDC A,@Ri ; A ← A +((Ri)) + Cy注:若 Cy = 0,则 ADD 相当于ADDC注:指令的目的操作数为累加器 A 执行指令后将影响标志位Cy,AC,OV及 P。(都属单字节指令)练习已知,A= 7DH,R0= 30H,(30H)= 35H、(31H)= 0DCH和 Cy= 1,试问 CPU执行以下的每条指令后累加器 A和 Cy中的值是多少。a.ADDC A,R0 b.ADDC A,31H解:操作结果应为:a,A=7D+30+1=0AEH,Cy=0b.A=7D+DC+1=5AH,Cy=1练习编写程序,进行两个 16位数的加法:6F5DH+13B4H,结果从低位到高位依次存入内部 RAM的 30H,31H和 32H单元。MOV A,#5DHADD A,#0B4H ;Cy= 1MOV 30H,AMOV A,#6FHADDC A,#13H ;Cy=0MOV 31H,AMOV 32H,#00HINC A ;A←(A) + 1INC RRn←(Rn) + 1INCdirect←(direct) + 1INC @R(Ri)←((Ri)) + 1INC DPTR ;DPTR←(DPTR) + 1加 1指令( 5条):加 1指令中,只有,INC A” 这一条影响奇偶标志位,其余均不影响任何标志位。,INC DPTR” 对 DPTR中内容加 1,是唯一的一条 16位算术运算指令。也是加 1指令中唯一的一条 2机器周期指令。注意例已知,A= 34H,R0= 42H、( 43H)= 23H、DPTR= 3020H,试问 CPU依次执行如下程序后 A、R4,43H,R0,DPTR及 PSW中的内容各是什么?INC AINC R0INC 43HINC @R0INC DPTR解:由加 1指令的规则,上述指令执行后的结果为:A= 35H,R0= 43H,43H= 25H,DPTR= 3021H。由于,加 1指令在程序中频繁地出现,常用来修改地址和数据指针加 1处理 。练习编写程序,进行两个 16位数的加法:6F5DH+13B4H,结果从低位到高位依次存入内部 RAM的 30H,31H和 32H单元,要求用寄存器间接寻址的方式存入。MOV A,#5DHADD A,#0B4H ;Cy= 1MOV R0,#30HMOV @R0,AMOV A,#6FHADDC A,#13H ;Cy=0INC R0MOV @R0,AINC R0MOV @R0,#00H带借位 Cy减法指令( 4条):SUBB A,Rn ; A ← A C Rn- CySUBB A,#data ; A ← A - data - CySUBB A,direct ; A ← A -(direct) - CySUBB A,@Ri ; A ← A C ((Ri)) - Cy注意:1、指令的目的操作数为累加器 A执行指令后将影响标志位 Cy,AC,OV及 P。2,MCS-51仅有带借位的减法指令,若要使用不带借位的减法指令,则令 Cy = 0。(都属单字节指令)0000011Cy AC F0 RS1 RS0 OV ━1P例试分析执行下列指令后,累加器 A和 PSW中各标志位状态?CLR CMOV A,#35HSUBB A,#0B6H解,A = -) 结果为,A=35-B6=7FH,Cy =1,PSW为:DEC A ;A←A -1DEC RRn←(Rn) -1DECdirect←(direct) -1DEC @R(Ri)←((Ri)) -1减 1指令( 4条):注减 1指令与加 1指令相似,只有以 A为操作数的指令才影响 PSW的 P位。(都属单字节指令)已知,A= 10H,R1= 3BH,R7= 34H、(60H)= 00H,(3BH)= 0FFH,试分析,执行如下每条指令后累加器 A和 PSW中各标志位状态?① DEC A ② DEC @R1③ DEC 60H ④ DEC R7解:根据减 1指令功能,结果为:① A= 0FH,P=0② (3B)= 0FEH,PSW不变③ (60H)= 0FFH,PSW不变④ R7=33H,PSW不变列十进制调整指令( 1条)1,BCD加法 DA A对 A中 两个压缩 BCD数相加之 和 调整为 2位 BCD码数1)对压缩 BCD码数进行 ADD或 ADDC操作后使用2)影响标志位,Cy,AC,P;不影响 OV。; A ← A +06H60H66H试编程实现 44H+ 86H的 BCD加法程序,并对其工作原理分析。程序 CLR CMOV A,# 44H ;A←44HADD A,# 86H ;A←44 + 86= 0CAHDA A ;A←30H,Cy = 1,AC= 1A= 0 1 0 0 0 1 0 0 B44data=1 0 0 0 0 1 1 0 B86+ )0 1 1 0 1 0 0 0 0 B0 1 1 01 0 0 1 1 0 0 0 0 B0 1 1 0 0 1 0 1 0 B1300 1 1 0 B低 4位> 9,加 6调整高 4位> 9,加 6调整BCD加法过程1 1 - - - - - 0Cy AC F0 RS1 RS0 OV - PBCD减法MCS- 51单片机中没有十进制减法调整指令,因此,这里的 BCD减法运算必须采用 BCD补码运算法则。例已知,30H和 31H中分别存有被减数 80和减数25,试编程求差,并把结果存入 32H单元中。解:根据 BCD减法的实施步骤,程序如下:思路:因为没有 BCD码的减法调整指令,将减法运算转化为加法运算。80-25=5580+(-25)补码 =80+( 100-25) =80+75=155执行加法运算80H+75H=F5H运行 BCD码调整指令F5+60=155其中 1进至 Cy,A=55ORG 0100HCLR C ;清 CyMOV A,# 9AH ;A←BCD 模 100SUBB A,31H ;A←BCD 减数的补数ADD A,30H ;A← 被减数+减数的补数DA A ;对 A进行加法调整MOV 32H,A ;存入 M3 M3←BCD 差CLR C ;清 CySJMP $ ;停止80-25=?BCD被减数1 1 1 1 0 1 0 1 B1 0 1 0 1 0 1 0 1 B0 1 1 1 0 1 0 1 B 减数的补数两位 BCD数的模 100BCD减数BCD减法过程1 0 0 1 1 0 1 0 B1000 0 1 0 0 1 0 1 B25+ 1 0 0 0 0 0 0 0 B80加 60调整 BCD差0 1 1 0+ 6055指令格式,MUL AB ; A× B =B高 8A低 8指令功能,寄存器 A,B中两个 8 位数相乘,结果为 16 位数据,其中高 8 位放在寄存器 B中,低 8 位放寄存器 A中。专用寄存器,寄存器 B 和累加器 A乘法指令标志位 Cy,OV,P 讨论:执行乘法指令后 Cy = 0若积为 8 位(即 B = 0),则 OV = 0若积为 16 位(即 B ≠ 0),则 OV = 1根据累加器 A 确定奇偶标志 P已知:有两个 8位无符号乘数分别放在 20H和 21H单元中,试编写程序把乘积的低 8位放入 22H单元中,积的高 8位放入 23H单元中 。例分析:这是一个乘法问题,可用 MUL AB指令。其操作数分布在相邻四个单元,采用间址寻址方式较为方便。ORG 1000HMOV R1,#20H ; R1← 第一个乘数地址MOV A,@R1 ; A← 第一个乘数INC R1 ; 修改乘数地址MOV B,@R1 ; B← 第二个乘数地址MUL AB ; A*B=BAINC R1 ; 修改目标单元地址MOV @R1,A ; 22H← 积的低 8位INC R1 ; 修改目标单元地址MOV @R1,B ; 23H← 积的高 8位指令格式,DIV AB ; A÷ B =A整数商 B余数指令功能:两无符号数相除,被除数 A 除以除数 B,整商存 A中,余数存 B 中。专用寄存器,寄存器 B 和累加器 A除法指令标志位 Cy,OV,P 讨论:执行除法指令后 Cy = 0若除数 B = 0,则 OV = 1若除数 B ≠ 0,则 OV = 0根据累加器 A 确定奇偶标志 P逻辑与运算指令( 6条):逻辑或运算指令( 6条):逻辑异或指令( 6条):累加器清零和取反指令( 2条):ANLORLXRLCLR,CPL逻辑操作指令累加器 AANL,ORL,XRL直接地址单元ANLORLXRLR0- R7寄存器寄存器间接寻址 @R1,@R0立即数(# DATA)有 A参与的逻辑操作都是单机器周期,其余为双机器周期ANL A,RnANL A,@RiANL A,directANL A,#dataANL direct,AANL direct,#A A ∩ Rn;A A ∩ (Ri);A A ∩A A ∩ #direct direct ∩ A;direct direct ∩ #data逻辑 与 指令将两个指定的操作数按位进行“与”,“与” 运算:有 0出 0,全 1为 1。例② A=0FH,( 20H) =0AEHA = ∧ ) ( 20H) = 已知,R0=20H、( 20H) =0AEH,试问分别执行如下指令后,累加器 A和 20H单元中内容各是什么?① MOV A,#20H ② MOV A,#0FHANL A,R0 ANL A,20H解:根据逻辑乘指令功能,上述指令执行后的结果为:① A=20H,( R0) =20HA = ∧ ) R0 = A=20H A=0EH已知,M1,M2皆为 8位的二进制数,若 M1?M2=M1,则 M2=?请思考 0FFH或 M1ORL A,RA←A ∪ RnORL A,A←A ∪ directORL A,@RA←A ∪ (Ri)ORL A,#A←A ∪ dataORL direct,A ;direct←(direct) ∪ AORL direct,#direct←(direct) ∪ data逻辑 或 指令将两个指定的操作数按位进行“或”,“或” 运算:有 1出 1,全 0为 0。已知,M1,M2皆为 8位的二进制数,若 M1+ M2=M1,则 M2=?请思考例② A=0FH,( 20H) =0AEHA = ∪ ) ( 20H) = 已知,R0=20H、( 20H) =0AEH,试问分别执行如下指令后,累加器 A和 20H单元中内容各是什么?① MOV A,#20H ② MOV A,#0FHORL A,R0 ORL A,20H解:根据或逻辑指令功能,上述指令执行后的结果为:① A=20H,( R0) =20HA = ∪ ) R0 = A=20H A=0AFH00H或 M1已知,A= 0AAH和 P2= 0FFH,编程把累加器A中低 4位送入 P2口低 4位,P2口高 4位不变 。解:程序思路为:根据逻辑与,逻辑或两类指令的特性来实现ORG 0030HANL A,# 0FH ;屏蔽 A中的高 4位,低 4位不变ANL P2,# 0F0H ;屏蔽 P2中的低 4位,高 4位不变ORL P2,A ;装配数据,结果送 P2例XRL A,RA←A
RnXRL A,A←A
(direct)XRL A,@RA←A
(Ri)XRL A,#A←A
dataXRL direct,A ;direct←(direct)
AXRL direct,#direct(direct) data逻辑 异或 指令将两个指定的操作数按位进行“异或”,“异或” 运算:相异为 1,相同为 0。例② A=0FH,( 20H) =0AEHA =
) ( 20H) = 已知,R0=20H、( 20H) =0AEH,试问分别执行如下指令后,累加器 A和 20H单元中内容各是什么?① MOV A,#20H ② MOV A,#0FHXRL A,R0 XRL A,20H解:根据异或逻辑指令功能,上述指令执行后的结果为:① A=20H,( R0) =20HA =
) R0 = 已知,M1,M2皆为 8位的二进制数,若 M1+ M2=M1,则 M2=?请思考 00HA=00H A=0F1H已知:外部 RAM0040H中有一数 BBH,假定高 4位不变和低 4位取反,试编出它的相应程序 。解:利用 MOVX A,@DPTR类指令ORG 0300HMOV DPTR,#0040H ;地址送指针 DPTRMOVX A,@DPTR ; A←BBHXRL A,#0FH ; A←BBH
0FH=B4HMOVX @DPTR,A ;结果送回 30H单元例位清 0 ―― 逻辑与位置 1 ―― 逻辑或位取反及恢复 ―― 逻辑异或ANL A,#0F0H ; A 中低 4 位清 0,高 4 位不 变ORL A,#0F0H ; A 中高 4 位置 1,低 4 位不变XRL A,#0FFH ; A 中各位取反XRL A,#0FFH ; A 中各位恢 复应用小结累加器清零指令( 1 条 )CLR A ; A ← 0取反指令( 1 条 )CPL A ; A←/A清零取反指令+ 5V89C51P1.3K1P1.2P1.1P1.0 K2K3K4MOV P1,#0FFHMOV A,P1ANL A,#0FH针对以下的独立式键盘电路原理图试编写一段程序确定是否有键按下CPANL A,#0FH用指令实现逻辑电路逻辑式编程电路逻辑式 F = ( X·Y) +( Y Z)注,X,Y,Z,F 为直接地址MOV A,X ;符号地址 X 中的数送 AANL A,Y ;符号地址 X,Y 中的数与后送 AMOV R0,A ; R0 中暂存 X· Y 的结果MOV A,YXRL A,Z ; A 中存 YZ 的结果CPL A ; A中存 /(YZ) 的结果ORL A,R0 ; A中存 (X·Y) +/(YZ) 的结果MOV F,A ;结果存入符号地址 F 中例RL A ;RR A ;Cy A7 A0ACy A7 A0ARLC A ;RRC A ;移位指令AA7 A0AA7 A0已知,A=9AH,且 Cy=1,求运行下列指令后,A=?(1)RL A (2)RR A(3)RLC A (4)RRC A解,A=(1)A= (2)A= 0 1001101(3)A=
Cy=1(4)A=1 1001101 Cy=0例已知,M和 M+ 1单元中有一个 16位二进制数( M为低 8位),编程将其扩大到二倍。解:一个 16位二进制数扩大到二倍就等于是把它进行一次算术左移。由于 MCS- 51单片机的移位指令都是二进制 8位的移位指令,因此 16位数的移位指令必须用程序来实现。算法为:MM+10例程序为:ORG 0030HCLR C ;清进位标志位MOV R0,# M ;操作数低 8位地址送 R0MOV A,@ R0 ;A← 操作数低 8位RLC A ;低 8位操作数左移低位补 0MOV @ R0,A ;结果送回 M单元,Cy中为最高位INC R0 ;R0指向 M+ 1单元MOV A,@ R0 ;A← 操作数高 8位RLC A ;高 8位操作数左移并加上低位 CyMOV @R0,A ;结果送回 M+ 1单元INC R0MOV @R0,#00H/#01H ;进位位存入 M+ 2单元1)长转移指令LJMP addr16 ;PC←addr162)短转移指令AJMP addr11 ;PC←PC+2,PC10 ―0←addr113)相对转移指令SJMPPC←PC+2,PC←PC+rel4)间接转移指令JMP @A+DPTR ;PC←A+DPTR1,无条件转移指令 (4条 )3 控制程序转移指令一页,256个地址单元一区,8页,共 2KB地址单元;地址高 5位决定区。64K,32区,256页。地址的前 8位相同地址的前 5位相同几个概念“F800H~FFFFHF000H~F7FFHE800H~EFFFHE000H~E7FFHD800H~DFFFHD000H~D7FFHC800H~CFFFHC000H~C7FFHB800H~BFFFHB000H~B7FFHA800H~AFFFHA000H~A7FFH9800H~9FFFH9000H~97FFH8800H~8FFFH8000H~87FFH7800H~7FFFH7000H~77FFH6800H~6FFFH6000H~67FFH5800H~5FFFH5000H~57FFH4800H~4FFFH4000H~47FFH3800H~3FFFH3000H~37FFH2800H~2FFFH2000H~27FFH1800H~1FFFH1000H~17FFH0800H~0FFFH0000H~07FFH程序存储器 64K地址空间64K地址空间分为 32个区,256个页① 长转移指令三字节指令,不影响标志位,可在 64KB地址范围内无条件转移。LJMP addr16 ; PC addr16例0000H,LJMP 2000H 00PC0000 020001 200002 0000032000 022001 002002 002003程序存储器FFFF……..64KB寻址范围② 短转移指令二字节指令,可在 2KB地址范围内转移。AJMP addr11 ; PC PC+2PC15-11不变PC10-0 addr11PC2KB寻址范围寻址范围在 PC+ 2所在的区内2031H,AJMP addr11例程序存储器FFFF……..……..0000a10 a9 a8 0 0 0 0 1a0- a7……..……..2031200027FF特征码PC15 PC14 PC12PC13 PC11 a10 a8a9 a7 a6 a4a5 a3 a2 a0a1转移地址:a10 a9 0a8 0 0 10 a7 a6 a4a5 a3 a2 a0a1机器码:若 PC的当前地址为 2802Haddr11=16AH转移地址,296AH0 0 01 1 0 10 0 1 01 1 0 01机器码,216AH0 0 01 0 0 10 0 1 01 1 0 01练习(0 0010B)(001 B)讨论 AJMP指令的转移范围:PC15 PC14 PC12PC13 PC11 0 00 0 0 00 0 0 00最小地址:PC15 PC14 PC12PC13 PC11 1 11 1 1 11 1 1 11最大地址:AJMP指令可在 2KB地址范围转移思考若 PC+2=3FFF,则执行 AJMP的转移范围为:3800H ∽ 3FFFH③ 相对转移指令机器码,80Hrel本指令是一条双字节双周期指令,在 PC内容加 2所指地址上,以 rel,-128∽+127 为偏移量,在一页地址 (-128∽+127) 范围内实现短转移。SJMP PC PC+2+relrel是一个带符号数,00H- 7FH对应 0~ 127;80H- FFH对应- 128~- 1在实际使用时,rel用一个转移目标地址标号来表示。在编译时计算 rel的实际偏移值ORG 1000HH START,MOV A,#01H;字位码初值送 A1002H F8H MOV R0,A ;暂存于 R01003H 90 CF 01H LOOP,MOV DPTR,#0CF01H ;端口地址; CF01送 DPTR┋1017H 80rel SJMP START ;转入 START┋SJMP $ ;停止例 下列程序中,请计算 SJMP START指令码中的 rel,并分析目标地址的转移范围 。地址偏移量 rel的计算:PC目的地址 = PC当前地址 + relrel=PC目的地址 - PC当前地址= 1000H-( 1017H+2)=- 19Hrel应采用补码表示,为此rel=[-19H]补 = []补 =E7H解,SJMP指令中地址偏移量是采用 START符号表示的,指明指令执行后转入本程序开头重新执行 。PC0FFF1000 74H1001 01H1002 F8H1017 80H1018 rel10191017H,SJMP START;START=1000H; rel=E7E7H跳转范围:0F99H- 1098H练习 已知,SZ,SJMP LOOP其中 SZ=126FH,LOOP=1200H请计算偏移量 rel=?解,PC目的地址 =1200HPC当前地址 =126FH+2=1271Hrel=[]补 =[-71H]补=[B]补 ==FH注意:当 rel=- 2,用补码表示为 FE时,PC目的 = PC源 + 2- 2= PC源例,SZ,SJMP SZ 及 SZ,SJMP $④ 变址寻址转移指令 (间接转移指令 )JMP @A+DPTR; PC A+DPTR机器码,73H该类指令是一条单字节双周期无条件转移指令。 在 64KB地址范围内无条件转移。+ 5V89C51P1.3K0P1.2P1.1P1.0 K1K2K3…………STAR:MOV A,R1CLR CRLC A ;A←A* 2MOV DPTR,#MAIN ;转移指令表始址送 DPTRJMP @ A+ DPTRMAIN:AJMP PM0 ;转入 0#命令程序AJMP PM1 ;转入 1#命令程序AJMP PM2 ;转入 2#命令程序AJMP PM3 ;转入 3#命令程序PM0,CLR C MOV A,40HADD A,41H MOV 42H,A ……PM1,CLR C MOV A,40HSUBB A,41H MOV 42H,A ……PM2,…………………,JZ rel; A=0 PC PC+2+relA≠ 0 PC PC+2JNZ A≠0 PC PC+2+relA=0 PC PC+22,条件转移指令① 累加器 A判零转移 (2条 )rel是一个带符号数,00H- 7FH对应 0~ 127;80H- FFH对应- 128~- 1在实际使用时,rel用一个转移目标地址标号来表示。在编译时计算 rel的实际偏移值已知:外部 RAM中以 2000H为起始地址的数据块,以零为结束标志,试编程将该数据块送到以 60H为起始地址的内部 RAM单元中 。例00000001000200032000 AA2001 BB2002 CC2003 00外部 RAMAA0001020360616263内部 RAM结束标志分析:外部 RAM 内部 RAMA关键指令,MOVX A,@DPTRMOV @R0,A步骤,①设置 DPTR=#2000H② 设置目的地首地址 R0=#30H③ 取外部数据至 A⑤ A≠0,送数,修改地址转至 ③⑤ A=0,转至结束处④ 判断转移解:程序为:ORG 1000H① MOV DPTR,#2000H ;外部 RAM数据块始地址② MOV R0,#60H ;内部 RAM数据块始址送 R0③ MOVX A,@DPTR ;取外部 RAM数据送 A④ JZ QUIT ;若 A=0,则跳转到 QUIT处,;否则往下执行⑤ MOV @R0,A ;A中的数据送给内部 RAM单元中INC R0 ;修改外部 RAM地址的指针INC DPTR ;修改内部 RAM地址的指针SJMP ;循环执行⑤ QUIT,SJMP $ ;停止MAIN:MAINCJNE A,#data,不相等转移; A=#data,PC ← PC+3,Cy ← 0; A&#data,PC ← PC+3+rel,Cy ← 0; A&#data,PC ← PC+3+rel,Cy ← 1CJNE A,direct,不相等转移;若 A=(direct),则 PC← PC+3,Cy← 0;若 A&(direct),则 PC← PC+3+rel,Cy← 0;若 A&(direct),则 PC← PC+3+rel,Cy← 1② 不相等转移(影响标志位)CJNE Rn,#data,不相等转移;若 (Rn)=data,则 PC← PC+3,Cy← 0;若 (Rn)&data,则 PC← PC+3+rel,Cy← 0;若 (Rn)&data,则 PC← PC+3+rel,Cy← 1CJNE @Ri,#data,不相等转移;若 ((Ri))=data,则 PC← PC+3,Cy← 0;若 ((Ri))&data,则 PC← PC+3+rel,; Cy← 0;若 ((Ri))&data,则 PC← PC+3+rel,;Cy← 1DJNZ direct,direct← (direct)-1;若 (direct)≠ 0,则 PC← PC+3+若 (direct)=0,则 PC← PC+3DJNZ Rn,Rn ← (Rn)- 1;若 (Rn)=0 则 PC ← PC+2;若 (Rn)≠0 则 PC ← PC+2+rel③ 减一不为零转移(循环转移指令)例,从 P2.0输出 20个方波。解:程序为:ORG 1000HMOV R2,#40D ;预置波形数= 2× 方波数BACK,CPL P2.0 ;P2.0取反DJNZ R2,BACK ;R2- 1不等于 0继续循环SJMP $ ;停止思考,1、在此程序中标号的地址范围可以是??2、用此程序产生的方波周期是多少??子程序ADD1RETACB断点D断点3,子程序调用和返回指令子程序:具有一定功能的共用程序段子程序的最后一条指令必须是 RETA:调用子程序指令地址B:PC当前值,入栈保护入口地址(一般用标号来表示 )ADD1:① 调用指令 (2条 )ACALL addr11 ;PC ← PC+2;SP ← SP+1;(SP) ← PC7~0;SP ← SP+1;(SP) ← PC15~8;PC10~0 ← addr11a)短调用是一条双字节指令,格式为,双字节指令,不影响标志位,在 2KB地址范围内寻址,以调用子程序。保护返回地址目标地址机器码,a10 a9 a8 1 0 0 0 1a7 a6 a5 a4 a3 a2 a1 a0特征码例 已知,SZ,ACALL 3F2H; SZ=1800H试确定:操作码及目的地址(子程序入口地址)解,3F2H= 011 B机器码,011
HPC当前值 = SZ+ 2= 10B目的地址,11 H3F2注意,所调用的子程序首地址必须在 PC当前值所在的同一区里b) 长调用指令LCALL addr16 ;PC ← PC+3;SP ← SP+1,(SP) ← PC7~0;SP ← SP+ 1,(SP) ← PC15~8;PC ← addr16(子程序入口地址)三字节指令,在64KB地址范围内调用子程序。例已知,MAIN= 0200H,试问执行如下指令后,堆栈中数据如何变化? PC中内容是什么?MOV SP,# 65HMAIN,LCALL 2000H解:执行上述指令后,SP= 67H、( 66H) = 03H,( 67H) = 02H,PC= 2000H。② 返回指令 (2条 )RET PC15~8 ← (SP),SP ← SP-1PC7~0 ← (SP),SP ← SP-1② 子程序返回指令调用子程序后必须返回主程序,因此,每种子程序的最后一条指令必须是返回指令RET。返回时完成将调用子程序时压入堆栈的断点地址送回 PC以恢复断点功能。堆栈遵循“后进先出”原则。b)中断返回指令RETI中断服务程序的最后一条指令后是中断返主指令。其恢复断点的操作与返回指令 RET相同。此条指令前必须将相应的优先级状态触发器清 0。NOPPC15~8 ← (SP),SP← SP-1PC7~0 ← (SP),SP← SP-1③ 空操作用来产生一个机器周期的延时!试利用子程序指令编写出以20H- 23H单元中的数分别拆字送以50H为首的地址单元中 。例解:程序为:ORG 0030HMOV SP,#60HCZCX:MOV R0,#50H ;目标首地址MOV A,20H ;拆第一个字LCALL PTDS ;调用拆字子程序MOV A,21H ;拆第二个字LCALL PTDS ;调用拆字子程序MOV A,22H ;拆第三个字LCALL PTDS ;调用拆字子程序MOVA,23H ;拆第四个字LCALL PTDS ;调用拆字子程序SJMP $ ;停止PTDS,MOV B,A ;把要拆的字送 B保存ACALL PTDS1 ;调拆字子程序MOV A,B ;调 B中的内容SWAP A ;交换高低位PTDS1:ANLA,#0FH ;屏蔽高位,保留低位MOV @R0,A ;送目标地址INC R0 ;目标地址加 1RET ;返回内部 RAM中 20H~2FH单元是位寻址区和11个可以位寻址的寄存器 P0,P1,P2,P3、TCON,SCON,IE,IP,PSW,A,B。5、位操作(布尔处理)类指令 (17条 )① 传送指 令MOV C, C ← bitMOV bit,C ; bit ← Cbit可以是位直接地址、位名称、点操作的形式( psw.2)若 C=1,P1=B,P3=B,顺次执行下列指令后结果表如何:MOV P1.3,C;MOV C,P3.3;MOV P1.2,C;例解:结果为,C=0,P1=,P3不变1→ P1.3则 P1=P3.3=0 →C0 → P1.2则 P1=试编程把 00H位中内容和 3FH位中内容相交换 。解:程序为:MOV C,00H ; Cy← ( 00H)MOV 01H,C ;暂存于 01H位中MOV C,3FH ; Cy← ( 3FH)MOV 00H,C ;存入目标 00H位中MOV C,01H ; 00H位的原内容送 CMOV 3FH,C ;存入目标 3FH位中SJMP $ ;停止例② 位置位和位清零指令 (4条 )CLR C ; Cy ← 0CLRbit ← 0SETB C ;Cy ← 1SETBbit ← 1③ 位运算指令 (6条 )ANL C,Cy ← Cy ∧ (bit)ANL C,/Cy ← Cy ∧ /(bit)ORL C,Cy ← Cy ∨ (bit)ORL C,/Cy ← Cy ∨ /(bit)CPL C ;Cy ← /CyCPLbit ← /bit④ 位控制转移指令 (5条 )若条件满足则 PC值改变,实现程序的转移。JC若 Cy= 1 则 PC ←PC+2+relJNC若 Cy≠1 则 PC ←PC+2+relJB bit,若 bit=1 则 PC ←PC+2+relJNB bit,若 bit ≠1则 PC ←PC+2+relJBC bit,若 bit= 1 则 bit=0且 PC ←PC+3+rel应用举例 2一个引脚的高低电平,可以通过,光电耦合器” 控制继电器,从而以“弱电”控制“强电”。第三章 作 业5,7,8,9,19,3233,36,3726,27,2921,23,24,25自学内容 3.3.3及 3.3.4
课件名称:课件分类:电气与自动化课件类型:参考资料文件大小:476.91KB下载次数:25评论次数:3用户评分:6}

我要回帖

更多关于 位寻址是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信