个机器周期。 若MCS-51单片机外接晶振为12MHz时,则单片机的四个周期的具体值为: 振荡周期=1/12MHz=1/12us=0.0833s 时钟周期=1/6us=0.167us 机器周期=1us 指令周期=1~4us 2.4.3MCS-51单片机指令的取指和执行时序 2.4.4单片机复位电路及复位状态 1.复位电路 单片机复位电路包括片内、片外两部分。外部复位电路就是为内部复位电路提 供两个机器周期以上的高电平而设计的。MCS-51单片机通常采用上电自动复位和 按键手动复位两种方式。如图所示 2.单片机复位后的状态 单片杋运行出错或进入死循环时,可按复位键重新运行。21个特殊功能寄存器 复位后的状态为确定值,如表所示。 复位后,P0一P3口输出高电平,初值07H写入栈指针SP,清“0”其余的特殊 功能寄存器和程序计数器PC。只要 RESET保持高电平,单片机循环复位 RESET由高 变低后,单片机从0地址开始执行程序。单片机初始复位不影响内部RAM的状态, 包括工作寄存器RO一R7。 第3章MCS-51单片机指令系统 3.1MCS-51指令系统概述 3.2寻址方式 3.3分类指令 MCS-51单片机指令系统有如下特点 (1)指令执行时间快。 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现2个一字节的相乘或相除 4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。 3.1MCS-51指令系统的概述 3.1.1指令分类 指令格式 3.1.3指令描述符号介绍 3.1.1指令分类 ·按指令功能,MS-51指令系统分为数据传递与交换、算术运算、逻辑运算、程序 转移、布尔处理操作、CPU控制等6类。 ·布尔处理操作类指令又称位操作指令
个机器周期。 若MCS-51单片机外接晶振为12MHz时,则单片机的四个周期的具体值为: 振荡周期=1/12MHz=1/12μs=0.0833μs 时钟周期=1/6μs=0.167μs 机器周期=1μs 指令周期=1~4μs 2.4.3 MCS-51单片机指令的取指和执行时序 2.4.4 单片机复位电路及复位状态 1.复位电路 单片机复位电路包括片内、片外两部分。外部复位电路就是为内部复位电路提 供两个机器周期以上的高电平而设计的。MCS-51单片机通常采用上电自动复位和 按键手动复位两种方式。如图所示。 2.单片机复位后的状态 单片机运行出错或进入死循环时,可按复位键重新运行。21个特殊功能寄存器 复位后的状态为确定值,如表所示。 复位后,P0—P3口输出高电平,初值07H写入栈指针SP,清“0”其余的特殊 功能寄存器和程序计数器PC。只要RESET保持高电平,单片机循环复位RESET由高 变低后,单片机从0地址开始执行程序。单片机初始复位不影响内部RAM的状态, 包括工作寄存器R0—R7。 第3章 MCS-51单片机指令系统 3.1 MCS-51指令系统概述 3.2 寻址方式 3.3 分类指令 MCS-51单片机指令系统有如下特点: (1)指令执行时间快。 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现2个一字节的相乘或相除。 (4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。 3.1 MCS-51指令系统的概述 3.1.1 指令分类 3.1.2 指令格式 3.1.3 指令描述符号介绍 3.1.1 指令分类 • 按指令功能,MCS-51指令系统分为数据传递与交换、算术运算、逻辑运算、程序 转移、布尔处理操作、CPU控制等6类。 • 布尔处理操作类指令又称位操作指令
3.1.2指令格式 在MCS-51指令中,一般指令主要由操作码、操作数组成 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。 3.1.3指令描述符号介绍 Rn一当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。 Ri一一当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1) direct-8位的内部数据存储器单元中的地址。 #data-—包含在指令中的8位常数 #data16——包含在指令中的16位常数。 adr16—16位目的地址。 addr11-11位目的地址 rel——8位带符号的偏移字节,简称偏移量。 DPTR—一数据指针,可用作16位地址寄存器 bit一一内部RAM或专用寄存器中的直接寻址位 A—一累加器。 B—一专用寄存器,用于乘法和除法指令中。 C一一进位标志或进位位,或布尔处理机中的累加器。 @—一间址寄存器或基址寄存器的前缀,如@Ri,DPTR /—一—位操作数的前缀,表示对该位操作数取反,如/bit 一一片内RAM的直接地址或寄存器。 (×)一一由×寻址的单元中的内容 箭头左边的内容被箭头右边的内容所代替。 3.2寻址方式 3.2.1立即寻址 3.2.2直接寻址 3.2.3寄存器寻址 3.2.4寄存器间接寻址 3.2.5变址寻址 3.2.6相对寻址 3.2.7位寻址 3.2.1立即寻址 指令中跟在操作码以后的第一个字节就是实际的操作数。操作数前面加有#号。 例如:MOVA,#7OH;A←#7OH Mov DPTR, #1600H DPTR+#1600H MOV3OH,#4OH;30H单元←#4OH
3.1.2 指令格式 • 在MCS-51指令中,一般指令主要由操作码、操作数组成。 • 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。 3.1.3 指令描述符号介绍 Rn——当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。 Ri——当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。 direct—8位的内部数据存储器单元中的地址。 #data——包含在指令中的8位常数。 #data16——包含在指令中的16位常数。 addr16——16位目的地址。 addr11——11位目的地址。 rel——8位带符号的偏移字节,简称偏移量。 DPTR——数据指针,可用作16位地址寄存器。 bit——内部RAM或专用寄存器中的直接寻址位。 A——累加器。 B——专用寄存器,用于乘法和除法指令中。 C——进位标志或进位位,或布尔处理机中的累加器。 @——间址寄存器或基址寄存器的前缀,如@Ri,@DPTR。 / ——位操作数的前缀,表示对该位操作数取反,如/bit。 ×——片内RAM的直接地址或寄存器。 (×)——由×寻址的单元中的内容。 ——箭头左边的内容被箭头右边的内容所代替。 3.2 寻址方式 3.2.1 立即寻址 3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址 3.2.5 变址寻址 3.2.6 相对寻址 3.2.7 位寻址 3.2.1 立即寻址 • 指令中跟在操作码以后的第一个字节就是实际的操作数。操作数前面加有#号。 例如:MOV A,#70H ;A←#70H MOV DPTR,#1600H ;DPTR←#1600H MOV 30H,#40H ;30H单元←#40H
3.2.2直接寻址 ·指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器 和内部数据RAM。 例如: Mov PSW,#2OH;PSW←#2OH,PSW为直接寻址寄存器的符号地址 MOVA,3OH;A←30H内部RAM单元中的内容,30H为直接给出的内部RAM的地 址。 ANL 70H, #48H 把RAM中70H单元内容同48H相“与”结果一〉7OH单元中 3.2.3寄存器寻址 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7。 例如:CLRA;A←0 INC DPTR;DPTR←DPTR+1 ADd R5, 20H R5+#20H+R5 3.2.4寄存器间接寻址 ·以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储 器空间包括内部数据RAM和外部数据RAM ·能用于寄存器间接寻址的寄存器有RO,R1,DPTR,SP。其中R0、R1必须是工作寄 存器组中的寄存器。SP仅用于堆栈操作 例如:MOV@R0,A:内部RAM(R0)←A其指令操作过程示意图如图所示。 又如:MOXA,@R1:A←外部RAM(P2R1)其指令操作过程示意图如图所示 再如:MOVX@DPTR,A;外部RAM(DPTR)←A 其指令操作过程示意图如图所示。 3.2.5变址寻址 ·变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变 址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式(如图所示) 例如: MOVC A,@A+DPTR;A←(A+DPTR) 又如, MOVC A,@A+PC A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC 3.2.6相对寻址 ·以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形 成新的PC值的寻址方式 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP08H PC←PC+2+08H 指令操作示意图如图所示
3.2.2 直接寻址 • 指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器 和内部数据RAM。 例如:MOV PSW,# 20H ;PSW←#20H, PSW为直接寻址寄存器的符号地址。 MOV A,30H ;A←30H内部RAM单元中的内容,30H为直接给出的内部RAM的地 址。 ANL 70H ,#48H 把RAM中70H单元内容同48H相“与”结果—〉70H单元中 3.2.3 寄存器寻址 • 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B 、DPTR以及R0~R7 。 例如:CLR A ;A←0 INC DPTR ;DPTR←DPTR+1 ADD R5,# 20H ;R5←#20H+R5 3.2.4 寄存器间接寻址 • 以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储 器空间包括内部数据RAM和外部数据RAM。 • 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄 存器组中的寄存器。SP仅用于堆栈操作。 例如:MOV @R0,A ;内部RAM(R0)←A其指令操作过程示意图如图所示。 又如:MOVX A,@R1;A←外部RAM(P2R1)其指令操作过程示意图如图所示。 再如:MOVX @DPTR,A;外部RAM(DPTR)←A 其指令操作过程示意图如图 所示。 3.2.5 变址寻址 • 变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此变 址寻址只有读操作而无写操作,在指令符号上采用MOVC的形式(如图所示)。 例如:MOVC A,@ A+DPTR;A←(A+DPTR) 又如,MOVC A,@ A+PC ;A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC。 3.2.6 相对寻址 • 以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形 成新的PC值的寻址方式。 • 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP 08H ;PC←PC+2+08H 指令操作示意图如图 所示
3.2.7位寻址 位寻址只能对有位地址的单元作位寻址操作 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB1OH ;将1OH位置1若22H单元中存放着数据40H,22H单元 的D位的位地址为1OH,执行上述指令后(22H)=4H 又如:MoV32H,C 32H←进位位C ORL C, 32H C←CV32H 3.3分类指令 数据传送类指令 ·3.3.2算术运算类指令 ·3.3.3逻辑运算与循环类指令 ·3.3.4程序转移类指令 ·3.3.5调用子程序及返回指令 ·3.3.6位操作指令 ·3.3.7空操作指令 3.3.1数据传送类指令 数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数 不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX MOWC、XCH、XCHD、SWAP、PUSH、POP8种。 ·源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的 操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内 数据传送途径如图所示。 1.以A为目的操作数 MOVA,Rn;A←Ran Mov A, direct A←( direct) Mov A, Ri A←(Ri) A←#data 2.以Rn为目的操作数 MOV Rn, A: RI A MOv Rn, direct n←( direct) MOv Rn, #data Rn +#data 3.以直接地址为目的操作数 MOV ORi, A (Ri) MOV ORi, direct (direct) Mov Ri, #data (Ri)←#data 4.以间接地址为目的操作数 Mov @Ri, A (Ri) A Mov @Ri, direct (Ri)+(direct)
3.2.7 位寻址 • 位寻址只能对有位地址的单元作位寻址操作。 • 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB 10H ;将10H位置1若22H单元中存放着数据40H,22H单元 的D0位的位地址为10H,执行上述指令后(22H)=41H。 又如:MOV 32H,C ;32H←进位位C ORL C ,32H ;C←C∨32H 3.3 分类指令 • 3.3.1 数据传送类指令 • 3.3.2 算术运算类指令 • 3.3.3 逻辑运算与循环类指令 • 3.3.4 程序转移类指令 • 3.3.5 调用子程序及返回指令 • 3.3.6 位操作指令 • 3.3.7 空操作指令 3.3.1 数据传送类指令 • 数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数 不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、 MOVC、XCH、XCHD、SWAP、PUSH、POP8种。 • 源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的 操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内 数据传送途径如图所示。 1.以A为目的操作数 MOV A,Rn ;A← Rn MOV A,direct ;A←(direct) MOV A,@Ri ;A←(Ri) MOV A,#data ;A← #data 2.以Rn为目的操作数 MOV Rn,A ;Rn ← A MOV Rn,direct ;Rn ←(direct) MOV Rn,#data ;Rn ← #data 3.以直接地址为目的操作数 MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data 4.以间接地址为目的操作数 MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct)