2023年12月23日发(作者:)

特殊功能

寄存器区

(SFR)

用户RAM区

(堆栈、数据缓冲)

位寻址区

(00H~7FH)

第3组

FFH

FFH

工作寄存器区

F0H B 00000000

E0H ACC 00000000

第2组

D0H PSW 00000000

工作寄存器区

CDH TH2 00000000

CCH TL2 00000000

第180H

CBH RCAP2H 00000000

工作寄存器区

7FH

CAH RCAP2L 00000000

C9H T2MOD xxxxxx00

第0组

工作寄存器区

C8H T2CON 00000000

30H

2FH

B8H IP xx000000

B0H P3 11111111

A8H IE 0x000000

20H

A0H P2 11111111

1FH

99H SBUF 不定

98H SCON 00000000

18H

90H P1 11111111

17H

8DH TH1 00000000

8CH TH0 00000000

10H

8BH TL1 00000000

0FH

8AH TL0 00000000

89H TMOD 00000000

08H

88H TCON 00000000

07H

87H PCON 0xxx0000

83H DPH 00000000

00H

82H DPL 00000000

81H SP 00000111

80H P0 11111111

1

主要SFR寄存器介绍

1. 电源控制寄存器PCON(87H) (不可位寻址)

D7 D6 D5 D4 D3 D2 D1 D0

SMOD - - - GF1 GF0 PD IDL

SMOD:波特率倍增位。SMOD=1,波特率提高1倍。

GF1,GF0:通用标志位。

PD:掉电方式位。当PD=1时,进入掉电方式。

IDL:空闲方式位。当IDL=1,进入空闲工作方式。

2. 定时/计数器控制寄存器TCON(88H)

D7 D6 D5 D4 D3 D2 D1 D0

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

2

IT0:选择INT0的中断触发方式:IT0=0,电平触发,低电平有效;IT0=1,边沿触发,下降沿有效。

IT1:选择INT1的中断触发方式:功能同IT0。

IE0:外部中断INT0的中断请求标志位。若有中断申请,IE0=1,否则IE0=0。在电平触发方式中,CPU响应中断后,硬件和软件都无法清除IE0标志位,只能撤消外部引脚的低电平才能清除;在边沿触发方式中,IE0由硬件清零,负脉冲宽度不小于一个机器周期。

IE1:外部中断INT1的中断请求标志位。功能同IE0。

TF0,TF1:分别为片内T0,T1溢出中断请求标志位。由硬件置位和清零。

TR0,TR1:分别为T0,T1的运行控制位。1启动,0停止。

3. 定时/计数器工作方式寄存器TMOD(89H) (不可位寻址)

89H TMOD 00000000

D7

GATE

D6

C/T

D5

M1

D4

M0

D3

GATE

D2

C/T

D1

M1

D0

M0

|-------------------T1--------------------|--------------------T0-------------------|

GATE:门控制位。GATE=0,由TR0或TR1启动定时器;GATE=1,只有TR0或TR1为1且INT0或INT1为高电平时才能启动定时器。

C/T:定时/计数选择位。C/T=1,计数方式,计数脉冲从外部引脚输入;C/T=0定时方式,计数脉冲周期为机器周期。

M1,M0:工作方式选择位。见下表。

M1 M0 工作方式 功能 定时初值计算

0 0 0 13位定时器/计数器

(213X)/fN

TH=X高8位,TL=X低5位

0 1 1 16位定时器/计数器

(216X)/fN

TH=X高8位,TL=X低8位

1 0 2

自动重装初值的8位定时器/计数器

(2X)/fN

Reload direction: TH--->TL

TH= TL=8位X

8(28X1)/fN1,TH0 =8位X1

1 1 3 仅T0分为两个8位定时器/计数器

(28X2)/fN2,TL0 =8位X2

Note:只有T1和T2能做波特率发生器

4. 串行端口控制寄存器SCON(98H)

98H SCON 00000000

D7

D6 D5 D4 D3 D2 D1 D0

3

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0,SM1:串行口工作方式选择位,见下表。

SM2:多机通讯选择位。在工作方式2和3中,当SM2=1时,如果接收到的第9位RB8为1,则RI被激活;RB8为0,RI不能被激活。在方式1中,如果SM2=1且没有接收到有效的停止位,RI不会被激活。在方式0中,SM2必须为0。

REN:串行口允许接收位。1允许接收,0禁止接收。

TB8:发送数据的第9位。

RB8:接收数据的第9位。

TI:串行端口发送中断请求标志位。每发送完一帧数据,由硬件置位,需要软件清零。

RI:串行端口接收中断请求标志位。每接收完一帧数据,由硬件置位,需要软件清零。

注意:RI和TI共用一个串行中断,所以在程序中要识别是RI还是TI产生的中断。

SM0 SM1 工作方式 功能

0 0 0 同步移位寄存器

0 1 1 8位UART

1 0 2 9位UART不变波特率

1 1 3 9位UART可变波特率

5. 中断允许寄存器IE(A8H)

A8H IE 0x000000

D7 D6 D5 D4 D3 D2 D1 D0

EA - ET2 ES ET1 EX1 ET0 EX0

EA:总中断允许控制位。EA=1,打开所有中断;EA=0,关闭所有中断。

ES:串行端口中断允许控制位。1打开,0关闭。

ET1:T1中断允许控制位。1打开,0关闭。

4

EX1:INT1中断允许控制位。1打开,0关闭。

ET0:T0中断允许控制位。1打开,0关闭。

EX0:INT0中断允许控制位。1打开,0关闭。

6. 中断优先级寄存器IP(B8H)

D7

D6

D5

PT2

D4

PS

B8H IP xx000000

D3

PT1

D2

PX1

D1

PT0

D0

PX0

当相应的位为0时,对应中断源为低优先级;否则为高优先级。

串行端口→T1→INT1→T0→INT0

低————————————→高

7. 程序状态字PSW(D0H)

D7

CY

D6

AC

D5

F0

D4

RS1

D3

RS0

D2

OV

D1

D0

P

CY:进位标志位。当D7有进位或借位时,CY=1,否则CY=0。CY也是位操作累加器,助记符为C。

AC:辅助进位位。当低半字节D3向高半字节进位或借位时,AC=1,否则AC=0。

F0:用户标志位。用户可以根据自己需要对F0进行定义。

RS1,RS2:工作寄存器组选择控制位。单片机复位后,RS1RS0=00。

OV:溢出标志位。当进行补码运算时,如有溢出,即结果超出-128~+127时,OV由硬件置1,否则为0。

P:奇偶校验标志位。该位始终跟踪累加器A中1的个数的奇偶性。若为奇数,P=1,否则,P=0。

系统复位、中断入口地址

中断源

系统复位

外部中断0(/INT0)

定时器0溢出中断

外部中断1(/INT1)

定时器1溢出中断

串行口中断

定时器2溢出中断

中断号

-

0

1

2

3

4

5

入口地址

0000H

0003H

000BH

0013H

001BH

0023H

002BH

保留存储单元

0000H~0002H

0003H~000AH

000BH~0012H

0013H~001AH

001BH~0022H

0023H~002AH

002BH~0032H

MCS-51系列单片机指令表

5

算术运算指令 (共24条)

机器码 助记符 功能

(A)+(Rn)→A

(A)+(direct)→A

(A)+((Ri))→A

(A)+ data →A

(A)+(Rn)+Cy →A

(A)+(direct)+ Cy →A

(A)+((Ri))+Cy →A

(A)+ data +Cy →A

(A)-(Rn)-Cy →A

(A)-(direct)-Cy →A

(A)-((Ri))-Cy →A

(A)- data - Cy →A

(A)+ 1 →A

(Rn)+ 1→Rn

(direct)+ 1 →direct

((Ri))+ 1 →(Ri)

(DPTR)+ 1 →DPTR

(A)- 1 →A

(Rn)- 1→Rn

(direct)- 1 →direct

((Ri))- 1 →(Ri)

(A)·(B)→AB

(A)/(B)→AB

对A进行十进制调整

P

×

×

×

×

×

×

×

字节对标志影响

OV

AC

CY

1

2

1

2

1

2

1

2

1

2

1

2

×

×

×

1

×

×

×

1

×

×

×

2

×

×

×

1

×

×

×

1

×

×

×

1

×

×

×

1

×

×

×

2

×

×

×

1

×

×

1

×

×

1

1

周期数

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

2

1

1

1

1

4

4

1

28~2F

ADD A,Rn

25

24

35

36,37

34

95

94

04

05

A3

14

15

A4

84

D4

ADD A,direct

ADD A,#data

ADDC A,direct

ADDC A,@Ri

ADDC A,#data

SUBB A,direct

SUBB A,#data

INC A

INC direct

INC DPTR

DEC A

DEC direct

MUL AB

DIV AB

DA A

26,27

ADD A,@Ri

38~3F

ADDC A,Rn

98~9F

SUBB A,Rn

96,97

SUBB A,@Ri

08~0F

INC Rn

06,07

INC @Ri

18~1F

DEC Rn

16,17

DEC @Ri

逻辑运算指令 (共25条)

机器码 助记符 功能

(A)∧(Rn)→A

(A)∧(direct)→A

(A)∧((Ri))→A

(A)∧ data →A

(direct)∧(A)→direct

(A)∨(Rn)→A

(A)∨(direct)→A

(A)∨((Ri))→A

(A)∨ data →A

(direct)∨(A)→direct

(A)⊕(Rn)→A

(A)⊕(direct)→A

P

×

×

×

×

58~5F

ANL A,Rn

55

54

52

53

45

44

42

43

65

ANL A,direct

ANL A,#data

ANL direct,A

56,57

ANL A,@Ri

ANL direct,#data

(direct)∧ data →direct

ORL A,direct

ORL A,#data

ORL direct,A

48~4F

ORL A,Rn

46,47

ORL A,@Ri

ORL direct,#data

(direct)∨ data →direct

XRL A,direct

68~6F

XRL A,Rn

对标志影响

OV

AC

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

字节CY

×

×

×

×

×

×

×

×

×

×

×

×

×

×

1

2

1

2

2

3

1

2

1

2

2

3

1

2

周期数

1

1

1

1

1

2

1

1

1

1

1

2

1

1

6

66,67

XRL A,@Ri

64

62

63

E4

F4

23

33

03

13

C4

XRL A,#data

XRL direct,A

CLR A

CPL A

RL A

RLC A

RR A

RRC A

SWAP A

(A)⊕((Ri))→A

(A)⊕ data →A

(direct)⊕(A)→direct

0 →A

/(A)→A

A循环左移一位

A带进位循环左移一位

A循环右移一位

A带进位循环右移一位

A半字节交换

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

1

2

2

3

1

1

1

1

1

1

1

1

1

1

2

1

1

1

1

1

1

1

XRL direct,#data

(direct)⊕ data →direct

数据传送指令 (共28条)

机器码 助记符 功能

(Rn)→A

(direct)→A

((Ri))→A

data →A

(A)→(Rn)

(direct)→Rn

data →Rn

(A)→direct

(Rn)→direct

((Ri))→direct

data→direct

(A)→(Ri)

direct →(Ri)

data →(Ri)

P

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

E8~EF

MOV A,Rn

E5

74

MOV A,direct

MOV A,#data

E6,E7

MOV A,@Ri

F8~FF

MOV Rn,A

A8--AF

MOV Rn,direct

78~7F

MOV Rn,#data

F5

85

75

MOV direct,A

88~8F

MOV direct,Rn

86,87

MOV direct,@Ri

MOV direct,#data

F6,F7

MOV @Ri,A

A6,A7

MOV @Ri,direct

76,77

MOV @Ri,#data

90

93

83

E0

F2,F3

F0

C0

D0

MOV direct1,direct2

(direct2) →direct1

MOV DPTR,#data16

data16 →DPTR

MOVC A,@A+DPTR

((A)+(DPTR))→A

MOVC A,@A+PC

MOVX A,@DPTR

MOVX @Ri,A

MOV @DPTR,A

PUSH direct

POP direct

((A)+(PC))→A

((Ri)+P2) →A

((DPTR)) →A

(A)→(Ri)+(P2)

(A)→(DPTR)

(SP)+1→SP

(direct)→SP

((direct))→direct

(SP)-1→SP

(A)← →(Rn)

(A)← →(direct)

(A)← →((Ri))

(A)0--3← →((Ri))0--3

E2,E3

MOVX A,@Ri

对标志影响

OV

AC

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

字节CY

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

1

2

1

2

1

2

2

2

2

3

2

3

1

2

2

3

1

1

1

1

1

1

2

2

1

2

1

1

周期数

1

1

1

1

1

2

1

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

2

2

1

1

1

1

7

C8~8F

XCH A,Rn

C5

XCH A,direct

C6,C7

XCH A,@Ri

D6,D7

XCHD A,@Ri

位操作指令 (共12条)

机器码

C3

C2

D3

D2

B3

B2

82

B0

72

A0

A2

92

助记符

CLR C

CLR bit

SETB C

SETB bit

CPL C

CPL bit

ANL C,bit

ANL C,/bit

ORL C,bit

ORL C,/bit

MOV C,bit

MOV bit,C

0 → Cy

0 → bit

1 → Cy

1 → bit

/(Cy) → Cy

/(bit) → bit

(Cy)∧ (bit) → Cy

(Cy)∧ /(bit) → Cy

(Cy)∨ (bit) → Cy

(Cy)∨ /(bit) → Cy

(bit)→ Cy

(Cy)→ bit

功能

字节对标志位影响

P

OV

AC

CY

×

×

×

1

×

×

×

2

×

×

×

1

×

×

×

2

×

×

×

1

×

×

×

2

×

×

×

2

×

×

×

2

×

×

×

2

×

×

×

2

×

×

×

2

×

×

×

2

周期数

1

1

1

1

1

1

2

2

2

2

1

1

控制转移指令 (共22条)

功能

字节P

OV

AC

CY

对标志影响

机器码 助记符

周期数

*1 ACALL addr11

(PC)+2→PC (SP)+1→SP (PC)L→SP

(SP)+1→SP

(PC)H→SP addr11→PC10~0

(PC)+2→PC (SP)+1→SP (PC)L→SP

(SP)+1→SP (PC)H→SP addr16→PC

((SP))→PCH (SP)-1→SP

((SP))→PCL (SP)-1→SP

((SP))→PCH (SP)-1→SP

((SP))→PCL (SP)-1→SP

从中断返回

addr11 →PC10~0

addr16 →PC

(PC)+(rel) →PC

(A)+(DPTR)→PC

(PC)+2→PC 若(A)=0,(PC)+(rel)→PC

(PC)+2→PC 若(A)≠0,(PC)+(rel)→PC

(PC)+2→PC

若(Cy)=1,(PC)+(rel)→PC

(PC)+2→PC

若(Cy)=0,(PC)+(rel)→PC

(PC)+3→PC 若(bit)=1,(PC)+(rel)→PC

(PC)+3→PC 若(bit)≠1,(PC)+(rel)→PC

× × × × 2 2

12

22

LCALL addr16

RET

×

×

×

×

×

×

×

×

3

1

2

2

32

*1

02

80

73

60

70

40

50

20

30

RETI

AJMP addr11

LJMP addr16

SJMP rel

JMP @A+DPTR

JZ rel

JNZ rel

JC rel

JNC rel

JB bit,rel

JNB bit,rel

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

×

1

2

3

2

1

2

2

2

2

3

3

2

2

2

2

2

2

2

2

2

2

2

8

10 JBC bit,rel

(PC)+3→PC 若(bit)=1,

0 → bit,(PC)+(rel)→PC

(PC)+3→PC

若(A)≠(direct),则(PC)+(rel)→PC

若(A)<(direct),则1→Cy

(PC)+3→PC

若(A)≠data,则(PC)+(rel)→PC

若(A)

× × × √ 3 2

B5 CJNE A,direct,rel × × × √ 3 2

B4 CJNE A,#data,rel × × × √ 3 2

(PC)+3→PC

B8~8F CJNE Rn,#data,rel 若(Rn)≠data,则(PC)+(rel)→PC

若(Rn)

CJNE

B6,B7

@Ri, #data, rel

D8--DF DJNZ Rn,rel

D5

00

DJNZ direct,rel

NOP

(PC)+3→PC

若((Ri))≠data,则(PC)+(rel)→PC

若((Ri))

(PC)+2→PC,(Rn)-1→Rn

若(Rn)≠0,则(PC)+(rel)→PC

(PC)+2→PC,(direct)-1→direct

若(direct)≠0,则(PC)+(rel)→PC

空操作

× × × √ 3 2

× × × √ 3 2

×

×

×

×

×

×

×

×

×

×

×

×

3

3

1

2

2

1

伪指令(共7条)

伪指令

ORG

EQU

BIT

DB

DW

DS

END

功能

规定本条指令下面的程序和数据的起始地址

将一个常数或汇编符号赋给字符名,相当于C语言的define

将BIT之后的位地址值赋给字符名

从指定的ROM地址单元开始存入DB后面的数据,这些数据可以是用逗号隔开的字节串或括在单引号中的ASCII字符串

从指定的ROM地址开始,在连续的单元中定义双字节数据

从指令地址开始保留DS之后表达式的值所规定的存储单元数,以备后用

用来指示源程序到此全部结束

格式

ORG Addr16

字符名 EQU 常数或汇编符号

字符名 BIT 位地址

DB 8位数据表

DW 16位数据表

DS 表达式

END

9