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位定时器/计数器
(213X)/fN
TH=X高8位,TL=X低5位
0 1 1 16位定时器/计数器
(216X)/fN
TH=X高8位,TL=X低8位
1 0 2
自动重装初值的8位定时器/计数器
(2X)/fN
Reload direction: TH--->TL
TH= TL=8位X
8(28X1)/fN1,TH0 =8位X1
1 1 3 仅T0分为两个8位定时器/计数器
(28X2)/fN2,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
发布评论