MCS51单片机指令表
MCS-51单片机指令表
MCS-51单片机指令表序号__-__-__年__-__序号__-__附录1MCS-51单片机指令表数据传送类指令指令格式指令功能字节MOVA,RnRn内容传送到A1MOVA,direct 直接地址内容传送到A2MOVA,@Ri间接RAM单元内容送A1MOVA,#data立即数送到A2MOVRn,AA内容送到Rn1MOVRn,direct直接地址内容传送到Rn2MOVRn,#data立即数传送到Rn2MOVdirect,AA传送到直接地址2MOVdirect,RnRn传送到直接地址2MOVdirect2,直接地址传送到直接地址3direct1MOVdirect,@Ri间接RAM内容传送到直接地址2MOVdirect,#data立即数传送到直接地址3MOV@Ri,AA内容送间接RAM单元1MOV@Ri,direct直接地址传送到间接__@Ri,#data立即数传送到间接__CA,@A+DPTR代码字节送A(DPTR为基址)1MOVCA,@A+PC代码字节送A(PC为基址)1MOVXA,@Ri外部RAM(8地址)内容传送到A1MOVXA,@DPTR外部RAM内容(16地址)传送到A1__,#data1616位常数加载到数据指针1MOVX@Ri,AA内容传送到外部RAM(8地址)1MOVX@DPTR,AA内容传送到外部RAM(16地址)1PUSHdirect直接地址压入堆栈2POPdirect直接地址弹出堆栈2XCHA,RnRn内容和A交换1XCHA,direct直接地址和A交换2XCHA,@Ri间接RAM内容A交换1XCHDA,@Ri间接RAM内容和A交换低4位字1节算术运算类指令指令格式指令功能字节INCAA加11INCRnRn加11INCdirect直接地址加12INC@Ri间接RAM加11__数据指针加11DECAA减11DECRnRn减11DECdirect直接地址减12周期__-__-__-__1111周期__-____-__年__序号__-__-__年__-__DEC@Ri__DDA,RnADDA,directADDA,@RiADDA,#dataADDCA,RnADDCA,di rectADDCA,@RiADDCA,#dataSUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#d ata间接RAM减1A和BRn相乘A除以BRnA十进制调整Rn与A求和直接地址与A求和间接RAM与A求和立即数与A求和Rn与A求和(带进位)直接地址与A求和(带进位)间接RAM与A求和(带进位)立即数与A 求和(带进位)A减去Rn(带借位)A减去直接地址(带借位)A减去间接RAM(带借位)A减去立即数(带借位)逻辑运算类指令指令格式指令功能ANLA,RnRn“与”到AANLA,direct直接地址“与”到AANLA,@Ri间接RAM“与”到AANLA,#data立即数“与”到AANLdirect,AA“与”到直接地址ANLdirect,#data立即数“与”到直接地址ORLA,RnRn“或”到AORLA,direct直接地址“或”到AORLA,@Ri间接RAM“或”到AORLA,#data 立即数“或”到AORLdirect,AA“或”到直接地址ORLdirect,#data立即数“或”到直接地址XRLA,RnRn“异或”到AXRLA,direct直接地址“异或”到AXRLA,@Ri间接RAM“异或”到AXRLA,#data立即数“异或”到AXRLdirect,AA“异或”到直接地址XRLdirect,#data立即数“异或”到直接地址CLRAA清零CPLAA求反RLAA循环左移RLCA带进位A循环左移RRAA循环右移RRCA带进位A 循环右移SWAPAA高、低4位交换1__-__-__字节__-__-__-__1__周期__-__-__-__1序号__-__-__-__7序号__-__-__-__7指令格式JMP@A+DPTRJZrelJNZrelCJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,relDJNZRn,relDJNZdirect,relNOPACALLadd11LCALLadd16__AJMPadd11LJMPadd16SJMPrel指令格式__bit__TBbit__bitANLC,bitANLC,/bitORLC,bitORLC,/bitMOVC,bitMOVbit,CJCrelJNCrelJBbit,relJNBbit,relJBCbit,rel 伪指令控制转移类指令指令功能相对DPTR的无条件间接转移A为0则转移A为1则转移比较直接地址和A,不相等转移比较立即数和A,不相等转移比较Rn和立即数,不相等转移字节__周期__-__-__2周期__-__-__2比较立即数和间接RAM,不相等转3移Rn减1,不为0则转移2直接地址减1,不为0则转移3空操作,用于短暂延时1绝对调用子程序2长调用子程序3从子程序返回1从中断服务子程序返回1无条件绝对转移2无条件长转移3无条件相对转移2 位操作指令指令功能字节清进位位1清直接寻址位2置位进位位1置位直接寻址位2取反进位位1取反直接寻址位2直接寻址位“与”到进位位2直接寻址位的反码“与”到进位位2直接寻址位“或”到进位位2直接寻址位的反码“或”到进位位2直接寻址位传送到进位位2进位位位传送到直接寻址2如果进位位为1则转移2如果进位位为0则转移2如果直接寻址位为1则转移3如果直接寻址位为0则转移3直接寻址位为1则转移并清除该3位指令中的符号标识__TEND$指明程序的开始位置定义数据表定义16位的地址表RnRi@Ri工作寄存器R0-R7工作寄存器R0和R1间接寻址的8位RAM单元地址(00H-FFH)8位常数16位目标地址,范围64KB11位目标地址,范围2KB8位偏移量,范围-128~+127片内RAM中的可寻址位和SFR的可寻址位直接地址,范围片内RAM单元(00H-7FH)和80H-FFH给一个表达式或一个字符串#data8起名给一个8位的内部RAM起名addr16给一个8位的外部RAM起名addr11给一个可位寻址的位单元起。
MCS-51单片机指令简表
算 术 运 算 类 指 令
算 术 运 算 类 指 令
04 08~0F 05 __ 06~07 A3 14 18~1F 16~17 15 __ A4 84 D4 58~5F 56~57 54 __ 55 __ 52 __ 53 __ __ 48~4F 46~47 44 __ 45 __ 42 __ 43 __ __ 68~6F 66~67 64 __ 65 __ 62 __ 63 __ __ 23 33 03 13 F4 E4 A2 __ 92 __ C3 C2 __ B3 B2 __ D3 D2 __ 82 __ B0 __
高四位 ↓ → 低四位 0 1 0 1 NOP JBC bit,rel AJMP0 ACALL0
(反汇编)
2 LJMP addr16 LCALL addr16 RET RETI ORL dir,A
3 RR A RRC A RL A RLC A ORL dir,#data ANL dir,#data XRL dir,#data
INC A INC Rn INC direct INC @Ri INC DPTR DEC A DEC Rn DEC @Ri DEC direct MUL AB DIV AB DA A ANL A, Rn ANL A, @Ri ANL A, #data ANL A, direct ANL direct, A ANL direct, #data ORL A, Rn ORL A,@Ri ORL A,#data ORL A,direct ORL direct, A ORL direct,#data XRL A, Rn XRL A,@Ri XRL A,#data XRL A,direct XRL direct, A XRL direct,#data RL A RLC A RR A RRC A CPL A CLR A MOV MOV CLR CLR CPL CPL SETB SETB ANL ANL C,bit bit,C C bit C bit C bit C,bit C,/ bit
mcs51单片机指令集
一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。
在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。
但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。
所以现在基本上都不会直接使用机器语言来编写单片机的程序。
最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
MCS-51共有111条指令,可分为5类:[1].数据传送类指令(共29条)[2].算数运算类指令(共24条)[3].逻辑运算及移位类指令(共24条)[4].控制转移类指令(共17条)[5].布尔变量操作类指令(共17条)一些特殊符号的意义在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写都是相当有用的。
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)direct—内部数据存储单元的8位地址。
MCS-51指令系统
4、控制转移类指令(二)
无条件转移:(LJMP,AJMP,SJMP,JMP—4条) LJMP addr16 长跳转指令
——可在64K范围内跳转 AJMP addr11 绝对跳转指令
——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令
——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令
1
累加器清零/取反操作 (CLR,CPL—2条)
CLR A —对累加器清零
1 Byte 1 Tm
CPL A ——对累加器按位取非 1 Byte 1 Tm 15
3、逻辑运算及移位类指令(三)
逻辑运算指令在程序中的应用(下面的例子认为Acc 的内容为9AH)
逻辑与ANL运算用于对某些位进行清0或者保留: 例: ANL A, #0FH; 则(A) = 0AH
位清零/置位指令(4条): CLR bit(或C) —— (bit或 C)“0” SETB bit(或C) —— (bit或 C)“1”
位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示对bit位先取反然后再参加运算
带借位减法(SUBB):(A) ← (A)- (Cy)- (第二操作数)
10
2、算术运算类指令(三)
加1/减1操作: (INC,DEC—9条) INC, DEC与用加/减法指令做加1/减1 操作不 同之处在于INC、DEC不影响标志位。
单字节乘/除运算: (MUL,DIV—2条) 两个单字节数的乘/除法运算只在A与B之间 进行。 MUL AB: (A)与(B)相乘, 积为16位数,
MCS-51单片机汇编指令详解
MCS-51单片机汇编指令详解以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。
第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。
第四条指令是将立即数data送到A中。
下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。
MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。
MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。
如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。
MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是3 4H。
以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。
其中高8位送入 DPH(083H),低8位送入DPL(082H)。
例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。
指令表
MCS51单片机内部RAM(数据存储器)地址分配表
通用 工作 寄存 器区 (00H ~ 1FH) 0组 00H 01H 02H 03H 04H 05H 06H 07H 地址 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 2AH 2BH 2CH 2DH 2EH 2FH 地址 1组 2组 08H 10H 09H 11H 0AH 12H 0BH 13H 0CH 14H 0DH 15H 0EH 16H 0FH 17H D7 07 0F 17 1F 27 2F 37 3F 47 4F 57 5F 67 6F 77 7F D6 06 0E 16 1E 26 2E 36 3E 46 4E 56 5E 66 6E 76 7E 3组 18H 19H 1AH 1BH 1CH 1DH 1EH 1FH D5 05 0D 15 1D 25 2D 35 3D 45 4D 55 5D 65 6D 75 7D 名称 说明 专用寄存器名称 符号 地址 R0 常用于存放操作数中间结果 R1 等。共有4组寄存器,32个RAM R2 单元,各组都以R0~R7作寄存单 R3 元编号。由程序状态字寄存器 R4 PSW中RS1、RS0位的状态组合来 R5 决定。RS1RS0=00,01,10,11 R6 时分别对应第0,1,2,3组,默 R7 认为第0组。 位地址 说明 D4 D3 D2 D1 D0 04 03 02 01 00 既可 0C 0B 0A 09 08 作为一般 14 13 12 11 10 RAM单 1C 1B 1A 19 18 元使用, 24 23 22 21 20 进行字节 2C 2B 2A 29 28 操作,也 34 33 32 31 30 可以对单 元中每一 3C 3B 3A 39 38 位进行位 44 43 42 41 40 操作。位 4C 4B 4A 49 48 寻址区共 54 53 52 51 50 有16个 5C 5B 5A 59 58 RAM单 64 63 62 61 60 元,计 6C 6B 6A 69 68 128位。 74 73 72 71 70 7C 7B 7A 79 78 P0 80H P0口 SP 81H 堆栈指针 82H 数据指针(DPTR)低字节 DPL 83H 数据指针(DPTR)高字节 DPH TCON 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 定时器/计数器控制 TMOD 89H GATE C/ T M1 M0 GATE C/ T M1 M0 定时器/计数器方式控制 TL0 8AH 定时器/计数器0低字节 TL1 8BH 定时器/计数器1低字节 TH0 8CH 定时器/计数器0高字节 TH1 8DH 定时器/计数器1高字节 P1 90H P1口 PCON 97H SMO — GF1 GF0 PD IDL 电源控制 — — D SCON 98H SM0 SM1 SM2 REN TB8 RB8 TI RI 串行控制 SBUF 99H 串行数据缓冲器 P2 A0H A7 A6 A5 A4 A3 A2 A1 A0 P2口 IE A8H EA ET2 ES ET1 EX1 ET0 EX0 中断允许控制 — P3 B0H B7 B6 B5 B4 B3 B2 B1 B0 P3口 IP B8H — PT2 PS PT1 PX1 PT0 PX0 中断优先级控制 — PSW D0H CY AC F0 RS1 RS0 OV — P 程序状态字 A E0H E7 E6 E5 E4 E3 E2 E1 E0 累加器 B F0H F7 F6 F5 F4 F3 F2 F1 F0 B寄存器 (1)21个可字节寻址的专用寄存器是不连续地分散在内部RAM高128单元之中,尽管还余有 许多空闲地址,但用户并不能使用。 (2) 程序计数器PC不占据RAM单元,它在物理上是独立的,因此是不可寻址的寄存器。 (3) 对专用寄存器只能使用直接寻址方式,书写时既可使用寄存器符号,也可使用寄存器 地址。 (4)地址末位数为0或8的特殊功能寄存器可进行位寻址。 D7 87 D6 86 D5 85 位地址名称 D4 D3 84 83 D2 82 D1 81 D0 80
单片机MC51指令表
MCS-51单片机操作数共有5种操作数1、立即数( 常数) #data 例 #20、#14H 、#00010100B2、寄存器 R0~R7、 A 、 B 、 DPTR 等3、存储器4、位操作数5、相对转移地址 relMCS-51单片机操作数1、立即数(常数)操作数 #data例 #20、#14H 、#00010100B例:1)、 MOV A , #14H2)、 MOV R0, #20称为立即数寻址方式2、寄存器操作数 R0~R7、 A 、 B 、 DPTR(1)4组通用工作寄存区共32个工作寄存器。
(2)部分特殊功能寄存器,例如A 、B 以及数据指针寄存器DPTR 等。
例: 1)、 MOV A , R12)、 MOV R5, #00010100B3)MOV DPTR, #1000H称为寄存器寻址方式3、存储器操作数 片内RAM 器 片外RAM ROM片内RAM 器片外RAMROM1)、片内RAM表示方法a、直接地址表示00H~7FH、80H~FFH中21个SFR例MOV A , 30HMOV A , P1 或MOV A , 90H称为直接寻址方式b、寄存器间接地址表示为@R0 、@R1例MOV A , @R1 (假设R1=0030H)称为寄存器间接寻址方式2)、片外RAM表示方法(只能寄存器间接表示)a、8位寄存器间接地址表示为@R0、@R1例MOVX A , @R0 (假设R0=0040H)b、16位寄存器间接地址表示为@DPTR例MOVX A , @DPTR (假设DPTR=1020H) 称为寄存器间接寻址方式3)、ROM表示方法(只能寄存器间接表示)@A+PC、@A+DPTRCPU对ROM的访问用MOVC指令格式1:MOVC A , @A+DPTR格式2:MOVC A , @A+PC格式2: JMP @A+DPTR其中@A+DPTR 与@A+PC表示ROM中某个单元称为基址寄存器加变址寄存器寻址方式4 位操作数位操作数为片内RAM的位寻址区20H~2FH( 位地址00~7FH)及特殊功能寄存器中的可寻址位。
mcs51指令表
1010 1011 1100 1101 1110 A B C D E INC Rn (n=0~7) DEC Rn (n=0~7) ADD A,Rn (n=0~7) ADDC A,Rn (n=0~7) ORL A, Rn (n=0~7) ANL A, Rn (n=0~7) XRL A, Rn (n=0~7) MOV Rn,#data (n=0~7) MOV direct,Rn (n=0~7) SUBB A, Rn (n=0~7) MOV Rn,direct(n=0~7) CJNE Rn,#data,rel (n=0~7) XCH A, Rn (n=0~7) DJNZ Rn,rel (n=0~7) MOV A, Rn (n=0~7) MOV Rn,A (n=0~7)
0110 0111 1000 6 7 8 INC @Rn (n=0,1) DEC @Rn (n=0,1) ADD A, @Rn (n=0,1) ADDC A, @Rn (n=0,1) ORL A, @Rn (n=0,1) ANL A, @Rn (n=0,1) XRL A, @Rn (n=0,1) MOV @Rn,#data (n=0,1) MOV direct,@Rn (n=0,1) SUBB A, @Rn (n=0,1) MOV @Rn,direct (n=0,1) CJNE @Rn,#data,rel(n=0,1) XCH A, @Rn (n=0,1) XCHD A,@Rn (n=0,1) MOV A, @Rn (n=0,1) MOV @Rn,A (n=0,1)
1001 9
INC Rn ( DEC Rn ( ADD A,Rn ( ADDC A,Rn ORL A, Rn ANL A, Rn XRL A, Rn MOV Rn,#dat MOV direct,R SUBB A, Rn MOV Rn,dire CJNE Rn,#data, XCH A, Rn DJNZ Rn,rel MOV A, Rn MOV Rn,A
51单片机指令系统
第 3 章 MCS - 51单片机指令系统
POP DPH POP DPL POP ACC POP PSW 执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H 单元中的内容依次弹出到DPH、DPL、A、PSW中。
MCS -51 提供一个向上升的堆栈, 因此SP设置初值时要
的总线。由Ri作为间接寻址寄存器时, P0 口上分时输出Ri指
定的 8 位地址信息及传输 8 位数据。
第 3 章 MCS - 51单片机指令系统
5. 堆栈操作指令 PUSH direct POP direct 在MCS -51 单片机的内部RAM中, 可以设定一个先进后 出的区域, 称其为堆栈。在特殊功能寄存器中有一个堆栈指针 SP, 它指出栈顶的位置。 进栈指令的功能是: 首先将堆栈指针 SP的内容加1, 然后将直接地址所指出的内容送入SP指出的内 部RAM单元; 出栈指令的功能是: 将SP所指出的内部RAM单 元的内容送入由直接地址所指出的字节单元, 接着将堆栈指针
第 3 章 MCS - 51单片机指令系统
3.2 指令系统
3.2.1 指令分类
按指令的功能, MCS -51 指令系统可分为下列 5 类:
(1) 数据传送;
(2) 算术运算; (3) 逻辑运算; (4) 位操作; (5) 控制转移。
第 3 章 MCS - 51单片机指令系统
Rn——当前选定的寄存器区中的 8 个工作寄存器R0~R7, 即 n=0~7。 Ri——当前选定的寄存器区中的 2 个寄存器R0、 R1, i=0、1。 direct—— 8 位内部RAM单元的地址, 它可以是一个内部数据 区 RAM单元(00H~7FH)或特殊功能寄存器地址(I / O端口、 控 制寄存器、 状态寄存器 80H~0FFH)。 #data——指令中的 8 位常数。
51指令机器码
FFHF0H B 00000000 E0H ACC 00000000 D0H PSW 00000000 CDH TH2 00000000 CCHTL200000000CBH RCAP2H 00000000 CAH RCAP2L 00000000 C9H T2MOD xxxxxx00 C8HT2CON 00000000 B8H IP xx000000 B0H P3 11111111 A8H IE 0x000000 A0H P2 11111111 99H SBUF 不定 98H SCON 00000000 90H P1 11111111 8DH TH1 00000000 8CH TH0 00000000 8BH TL1 00000000 8AH TL0 00000000 89H TMOD 00000000 88H TCON 00000000 87H PCON 0xxx0000 83H DPH 00000000 82H DPL 00000000 81H SP 00000111 80HP011111111特殊功能 寄存器区 (SFR )用户RAM 区 (堆栈、数据缓冲)位寻址区 (00H~7FH ) 第3组 工作寄存器区 第2组 工作寄存器区 第1组 工作寄存器区 第0组 工作寄存器区FFH 80H 7FH 30H 2FH 20H 1FH 18H 17H 10H 0FH 08H 07H 00H主要SFR寄存器介绍1.电源控制寄存器D7 D6 D5 D4 D3 D2 D1 D0SMOD ---GF1 GF0 PD IDLSMOD:波特率倍增位。
SMOD=1,波特率提高1倍。
GF1,GF0:通用标志位。
PD:掉电方式位。
当PD=1时,进入掉电方式。
IDL:空闲方式位。
当IDL=1,进入空闲工作方式。
2.定时/计数器控制寄存器TCON(88H)D7 D6 D5 D4 D3 D2 D1 D0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0IT0:选择0INT 的中断触发方式:IT0=0,电平触发,低电平有效;IT0=1,边沿触发,下降沿有效。
8051单片机21个特殊功能寄存器和指令汇总
MCS-51单片机21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。
在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。
在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。
这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。
它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。
自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。
该标志常用作程序分枝转移的判断条件。
2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。
3、PSW-----程序状态字。
这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。
它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。
8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。
这样就没事了。
MCS-51单片机指令系统-数据传送类指令
• 例 从片外程序存储器2000H单元 开始存放0~9的平方值,以DPTR作 为基址寄存器进行查表得3的平方 值。
1FFDH 1FFEH 1FFFH 2000H 0 1 4 9 16 25 36 49 64 81
• • • • •
如果用以DPTR为基址寄存器 2001H 的查表指令,其程序如下: MOV DPTR, #2000H;置表首地址 MOV A, #03H MOVC A, @A+DPTR 2009H
• 设MOVC指令所在地址(PC)=1FFDH,则 偏移量=2000H-(1FFDH+1)=02H。 • 相应的程序如下: MOV A,#03H ;(A)←03H ADD A,#02H ;用加法指令 进 行地址调整 MOVC A,@A+PC ;(A)←(A+PC+1) 执行结果为:(PC)=1FFEH,(A)=09。
• 前一条指令采用DPTR作基址寄存器,因此可以很方便地把 一个16位地址送到DPTR,实现在整个64 KB程序存储器单 元到累加器A的数据传送。即数据表格可以存放在程序存 储器64 KB地址范围的任何地方。 • 后一条指令以PC作为基址寄存器,CPU取完该指令操作码 时PC会自动加1,指向下一条指令的第一个字节地址,即 此时是用(PC)+1作为基址的。另外,由于累加器A中的内 容为8位无符号数,这就使得本指令查表范围只能在256个 字节范围内(即(PC)+1H~(PC)+100H),使表格地址空间分 配受到限制。同时编程时还需要进行偏移量的计算,即 MOVC A,@A+PC指令所在地址与表格存放首地址间的距离 字节数的计算,并需要一条加法指令进行地址调整。偏移 量计算公式为: • 偏移量 = 表首地址-(MOVC指令所在地址+1)
第三章MCS-51指令系统
3.1 概述
3.2
3.3
寻址方式
MCS-51的指令系统
3.4
伪指令
3.1
概述
指令:使计算机完成某种操作的命令。 指令系统 :计算机能够执行的全部操作所对应的指 令集合。 机器语言: 采用二进制编码表示指令,是计算机能够直 接识别和执行的语言。 汇编语言: 采用助记符 、符号、数字来表示指令的程序 语言,它与机器语言指令时一一对应的。
如果我们分别向DPH,DPL送数,则结果也一样。
如下面两条指令: 则就相当于执行了 MOV DPH,#35H MOV DPTR,#3512H。 MOV DPL,#12H。
(6) 累加器A与片外RAM之间的数据传递类指令(4条)
MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器。所 有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外 部RAM中的数据也必需通过A读入。 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接 进行数据的传递,而外部则不行。 比如,要将外部RAM中某一单元(设为0100H单元的数据)送 入另一个单元(设为0200H单元),也必须先将0100H单元中的内 容读入A,然后再送到0200H单元中去。
MOV B,R0
PUSH ACC
;R0→B,R0为寄存器寻 址,B为直接寻址。
;A的内容压入堆栈
3.2.4
寄存器间接寻址
例:MOV A, @R0
• 以寄存器中内容为地址,以该地址中内容为操作数的
寻址方式。间接寻址的存储器空间包括内部RAM和
外部RAM。 • 能用于寄存器间接寻址的寄存器有R0,R1,DPTR, SP。其中R0、R1必须是工作寄存器组中的寄存器。 SP仅用于堆栈操作。
第3章 MCS-51单片机指令系统1
2.操作码:指明指令功能,是指令功能的英文缩写。 汇编语句格式中唯一不能空缺的部分。
MOV__move传送 XCH__exchange交换 ANL__and logic与逻辑运算 XRL__exclusive or异或运算
MUL__Multiply乘法
RR__rotate right右循环 SJMP__short jump短跳转 RET__return 子程序返回 操作码助记符
MCS-51系列单片机指令系统分类
按寻址方式分为以下七种 1、立即寻址 2、直接寻址 3、寄存器寻址 按功能分为以下五种: 1、数据传送指令 2、算术运算指令 3、逻辑运算指令
4、寄存器间接寻址指令
5、相对寻址
4、控制转移指令
5、位操作指令
6、变址寻址
7、位寻址
3.3 指令系统的寻址方式
我的信在她 那!找信去!
快件
目的地
MOV A,#30H
30H
A
这类指令大都是双字节指令,仅有指令:MOV DPTR,#DATA16是三字节指令,它提供两字节立即 数。 第一位数字
是A~F时在 其前加0
对立即数的书写要求:对于单字节立即数,若 数值大于等于A0H,则要在其前面加一个0,如指令 “MOV A,#0A0H”,该指令含义是把立即数A0H送 累加器;对于双字节立即数,若数值大于等于 A000H,则要在其前面加一个0。对于直接地址和偏 移量也按相同方法书写。
1.标号:指令的符号地址 一般由字母和数字组成,第一位必须为字母,冒 号 “ :” 结 束 。 字 符 个 数 不 能 超 过 8 个 。 AD5 、 Q555、BB5D、pat、loop等为合法标号;5P、PA、10AD、+A等为非法标号。 不能用汇编语言已定义的符号作标号。如助记符、 伪指令、寄存器名称等。 同一标号在一个程序中只能定义一次。 标号在语句中的有无取决于本语句是否被访问。
第三章 MCS-51单片机指令系统
位操作类指令(17条)
位操作指令实际就是布尔处理机的指令系统,这 为开关量控制提供了非常有效的手段。
位传送
位置位复位
位运算 位控制转移
位数据传送指令(2条)
MOV MOV
C , bit bit,C
例:片内RAM中(20H)=7FH,执行指令
MOV C,07H 则C=0
位置位复位指令(4条)
调用与返回指令组(4条)
长调用指令 绝对调用指令 子程序返回指令
LCALL addr16 ACALL addr11 RET
中断服务程序返回指令 RETI
空操作指令(1条)
NOP
例:把2000H开始的外部RAM单元中的数据送到3000H
开始的外部RAM单元中,数据个数存放在内部RAM 35H单元。
ANL(ORL,XRL) A , { #data ; direct ; @Ri ; Rn }
2. 直接地址单元与累加器A、立即数之间的逻辑操作(6条)
ANL(ORL,XRL) direct , { A ; #data }
清零与取反指令(2条)
清零: 取反:
CLR A CPL A
循环移位指令(4条)
2. 带进位加法指令(4条) ADDC A , { #data ; direct ; @Ri ; Rn }
3. 带借位减法指令(4条) SUBB A , { #data ; direct; @Ri ; Rn }
影响所有标志位状态
例: 执行指令 MOV A , #0C2H ADD A , #0A9H 对PSW相应状态位的影响如下 1 1 1
3.2 MCS-51指令分类介绍
共分5大类,111条指令。
1.数据传送类指令(29条) 2.算术运算类指令(24条) 3.逻辑运算及移位类指令(24条) 4.控制转移类指令(17条) 5.位操作类指令(17条)
MCS-51单片机常用伪指令及常见出错表
MCS-51单片机常用伪指令及常见出错表一)符号定义伪指令符号定义名用法说明EQU 为常量,符号名等定义符号化常量名符号名不能重名定义= 为常量,符号名等定义符号化常量名符号名不能重名定义DATA 用来为一个字节类型的符号定值符号名不能重名定义BYTE 用来为一个字节类型的符号定值符号名不能重名定义WORD 用来为一个字类型的符号定值符号名不能重名定义BIT 用来定义一个字位类型符号名不能重名定义SET 用来定义整数类型的符号名符号名可重名定义1. EQU(=)指令EQU 指令用于将一个数值或寄存器名赋给一个指定符号名。
指令格式:符号名EQU(=)表达式符号名EQU(=)寄存器名经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。
例如:MAX EQU 2000则在程序的其它地方出现MAX,就用2000 代替。
2. SET 指令SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。
指令格式:符号名SET 表达式符号名SET 寄存器名例如:MAX SET 2000MAX SET 30003. BIT 指令BIT 指令用于将一个位地址赋给指定的符号名。
指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。
例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址4. DATA(BYTE)指令DA TA 指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。
例如:REGBUF DA TA(BYTE)40HPORT0 DATA(BYTE)80HDA TA与BYTE的区别: DATA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
5. XDATA 指令XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
详细点的51指令介绍
详细点的51指令介绍MCS-51系列单片机指令表MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ANL C,bit ANL C,/bit 1、ACALL addr11 指令名称:绝对调用指令指令代码:A10 A9 A9 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC 的低11位,PC的高5位不变。
操作内容:PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数:2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2、ADD A,Rn 指令名称:寄存器加法指令指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn),n=0~7 字节数:1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct) 字节数:2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’指令名称:间接寻址加法指令指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 5、ADD A,#data 指令名称:立即数加法指令指令代码:24H 指令功能:累加器内容与立即数相加操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C),n=0~7 字节数: 1 机器周期:1 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C) 字节数:2 机器周期:1 影响标志位:C,AC,OV 8、ADDC A,@Ri 指令名称:间接寻址带进位加法指令指令代码:36H~37H 指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1 字节数: 1 机器周期:1 影响标志位:C,AC,OV 9、ADDC A,#data 指令名称:立即数带进位加法指令指令代码:34H 指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 10、AJMP addr11 指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 指令功能:构造目的地址,实现程序转移。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A,Rn
+
A,direct
+
A,@Ri
+
A,#data
+
ADDC A, <byte>
带进位加法
A,Rn
+
A,direct
+
A,@Ri
+
A,#data
+
INC<byte>
加1
A
+1
Rn
+1
direct
+1
@Ri
+1
INC DPTA
INC DPTA
+1
DA A
十进制调整
DA A
减法指令
SUB A,<byte>
CY←CY∨(bit)
C,/bit
CY←CY∨(bit)
位条件转移
判C转移
JCrel
JCrel
C=1,转移→rel
JNCrel
JNCrel
C=0,转移→rel
判位变量转移
JB bitrel
JB bitrel
*=1,转移→rel
JBC bitrel
JBC bitrel
*=1,转移→rel,并清零
JNB bitrel
逻辑乘法
A,Rn
*
A,direct
*
A,@Ri
*
A,#data
*
Direct,A
*
Direct,#data
*
逻辑或
ORL <byte1>,< byte2>
逻辑加法
A,Rn
+
A,direct
+
A,@Ri
+
A,#data
+
Direct,A
+
Direct,#data
+
逻辑异或
XRL <byte1>,< byte2>
A,Rn
A,direct
A,@Ri
XCHDA,@Ri
低字节数据交换
A,@Ri
外部RAM传送指令
MOVX <dest>,<src>
A,@Ri
←
@Ri,A
←
A,@DPTA
←
@DPTA,A
←
ROM传送令
MOVC A,@A+<基地址寄存器>
A,@A+DPTR
←
A,@A+PC
←
加法指令
ADD A, <byte>
位状态控制指令
CLR bit
位清零
C
CY←0
bit
(bit)←0
SETB bit
置1
C
CY←1
bit
(bit)←1
CPL bit
位取反
C
CY←CY
bit
(bit)←(bit)
位逻辑操作指令
ANL C,<源位>
C,bit
CY←CY∧(bit)
C,/bit
CY←CY∧(bit)
ORL C,<源位>
C,bit
←
@Ri,direct
←
@R,#data
←
内部16位数据传送指令
MOV DPTR,#data16
MOV DPTR,#data16
(DPH)←data15~8
(DPL)←data7~0
堆栈指令
PUSH <src>入栈
direct
POP <deet>出栈
direct
数据交换指令
XCH A,<byte>
字节交换
减法
A,Rn
-
A,direct
-
A,@Ri
-
A,#data
-
SUBB A, <byte>
带进位减法
A,Rn
-
A,direct
-
A,@Ri
-
A,#data
-
DEC <byte>
减1
A
-1
Rn
-1
direct
-1
@Ri
-1
乘法指令
MUL
AB
*
除法指令
DIV
AB
/
逻辑与
ANL <byte1>,< byte2>
MCS51汇编语言指令表
内部8位数据传送指令
MOV <dest>,<src>
A,Rn
←
A,direct
←
A,@Ri
←
A,#data
←
Rn,A
←
direct,A
←
@Ri,A
←
Rn,direct
←
Rn,#data
←
direct,Rn
←
direct1,diect2
←
direct,@Ri
←
direct,#data
direct,rel
调用指令
长调用
LCALL addr16
LCALL addr16
绝对调用
ACALL addr11
ACALL addr11
返回指令
子程序返回
RET
RET
中断返回
RETI
RETI
空操作
NOP
NOP
位传送指令
MOV <目的位>,<源位>
C,bit
CY←(bit)
bit,C
(bit)←CY
逻辑半加法
A,Rn
A,direct
A,@Ri
A,#data
Direct,A
Direct,#data
累加器清零
CLR A
CLR A
A←0
累加器取反
CPL A
CPL A
循环右移
RR A
RR A
A7←0
循环左移
RL A
RL A
A7→0
带进位循环右移
RRC A
RRC A
带进位循环右移
RLC A
RLC A
半字节交换
SWAP A
SWAP A
A3~0←→A7~4
无条件转移
长转移
LJMPaddr16
LJMPaddr16
绝对转移
AJMP addr11
AJMP addr11
短转移
SJMPrel
SJMPrel
变位寻址转移
JMP @A+DPTA
JMP @A+DPTA
条件转移
转移判零
JZrel
JZrel
A=0,转移→rel
JNZrel
JNZrel
A≠0,转移→rel
比较转移指令
CJNE<byte1>,<byte2>,rel
A,direct,rel
A≠@A,转移→rel
A,#data,rel
Rn,#data,rel
@Ri,#darta,rel
循环转移
DJNZ <byte>,rel
Rn,rel
A-1≠0,转移→rel
A-1=0,不转移
JNB bitrel
*=0,转移→rel
<dest>目的位,<src>源位,<byte>字节,<direct>直接地址,<rel>相关地址,<DPTR>数据,<$>当前指令地址
中断地址
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
位地址
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
SCON
-
-
-
-
-
-
TI
RI
位地址
-
-
-
-
-
-
99H
89H
IE
EA
-
ET2
ES
ET1
EX1
ET0
EX0位地址Biblioteka AFH-ADH
ACH
ABH
AAH
A9H
A8H
IP
-
-
PT2
PS
PT1
PX1
PT0
PX0
位地址
-
-
BDH
BCH
BBH
BAH
B9H
B8H