1
FFH 特殊功能 寄存器区 (SFR) 80H 7FH 用户RAM区 (堆栈、数据缓冲) 30H 位寻址区 2FH (00H~7FH) 20H 第3组 1FH 工作寄存器区 18H 第2组 17H 工作寄存器区 10H 第1组 0FH 工作寄存器区 08H 第0组 07H 工作寄存器区 00H
FFH F0H B 00000000 E0H ACC 00000000 D0H PSW 00000000 CDH TH2 00000000 CCH TL2 00000000 CBH RCAP2H 00000000 CAH RCAP2L 00000000 C9H T2MOD xxxxxx00 C8H T2CON 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 80H P0 11111111 2
主要SFR寄存器介绍
1. 电源控制寄存器PCON(87H) (不可位寻址) D7 SMOD D6 - D5 - D4 - D3 GF1 D2 GF0 D1 PD D0 IDL
SMOD:波特率倍增位。SMOD=1,波特率提高1倍。 GF1,GF0:通用标志位。
PD:掉电方式位。当PD=1时,进入掉电方式。 IDL:空闲方式位。当IDL=1,进入空闲工作方式。 2. 定时/计数器控制寄存器TCON(88H) D7 TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 IT0 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-------------------|
3
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位定时器/计数器 (28X)/fN Reload direction: TH--->TL TH= TL=8位X (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 SM0 D6 SM1 D5 SM2 D4 REN D3 TB8 D2 RB8 D1 TI D0 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 0 0 1 1
SM1 0 1 0 1 工作方式 0 1 2 3 功能 同步移位寄存器 8位UART 9位UART不变波特率 9位UART可变波特率 4
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关闭。 EX1:INT1中断允许控制位。1打开,0关闭。 ET0:T0中断允许控制位。1打开,0关闭。 EX0:INT0中断允许控制位。1打开,0关闭。 6. 中断优先级寄存器IP(B8H) B8H IP xx000000
D7 D6 D5 D4 D3 D2 D1 D0 - - PT2 PS PT1 PX1 PT0 PX0 当相应的位为0时,对应中断源为低优先级;否则为高优先级。 串行端口→T1→INT1→T0→INT0 低————————————→高
7. 程序状态字PSW(D0H) D7 D6 D5 D4 D3 D2 D1 D0 CY AC F0 RS1 RS0 OV - P CY:进位标志位。当D7有进位或借位时,CY=1,否则CY=0。CY也是位操作累加器,助记符为C。
5
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系列单片机指令表
算术运算指令 (共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 P √ √ √ √ √ √ √ √ √ √ √ √ √ 字节对标志影响 OV AC CY 数 √ √ √ 1 √ √ √ 2 √ √ √ 1 √ √ √ 2 √ √ √ 1 √ √ √ 2 √ √ √ 1 √ √ √ 2 √ √ √ 1 √ √ √ 2 √ √ √ 1 √ √ √ 2 × × × 1 周期数 1 1 1 1 1 1 1 1 1 1 1 1 1 6
28~2F ADD A,Rn 25 24 35 36,37 34 95 94 04
ADD A,direct ADD A,#data ADDC A,direct ADDC A,@Ri ADDC A,#data SUBB A,direct SUBB A,#data INC 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 05 A3 14 15 A4 84 D4 INC driect INC DPTR DEC A DEC driect MUL AB DIV AB DA A 06,07 INC @Ri (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进行十进制调整 × × × × √ × × × √ √ √ × × × × × × × × × × √ × × × × × × × × × × √ × × × × × × × × √ √ √ 1 2 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 4 4 1 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 (A)⊕((Ri))→A (A)⊕ data →A (direct)⊕(A)→direct 0 →A /(A)→A A循环左移一位 A带进位循环左移一位 A循环右移一位 A带进位循环右移一位 A半字节交换 P √ √ √ √ × × √ √ √ √ × × √ √ √ √ × × √ × × × × × × 58~5F ANL A,Rn 55 54 52 53 45 44 42 43 65 64 62 63 E4 F4 23 33 03 13 C4 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 XRL A,#data XRL direct,A CLR A CPL A RL A RLC A RR A RRC A SWAP A 68~6F XRL A,Rn 66,67 XRL A,@Ri XRL direct,#data (direct)⊕ data →direct 对标志影响 OV AC × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × 字节CY 数 × × × × × × × × × × × × × × × × × × × × × × × × × 1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 3 1 1 1 1 1 1 1 周期数 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 数据传送指令 (共28条) 机器码 助记符 功能 (Rn)→A 字节对标志影响 P OV AC CY 数 √ × × × 1 周期数 1 7 E8~EF MOV A,Rn E5 74 MOV A,driect MOV A,#data (driect)→A ((Ri))→A data →A (A)→(Rn) (driect)→Rn data →Rn (A)→driect (Rn)→driect ((Ri))→driect data→driect (A)→(Ri) driect →(Ri) data →(Ri) √ √ √ × × × × × × × × × × × × × × √ √ √ × × × √ √ √ √ × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × 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 2 1 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 1 1 1 E6,E7 MOV A,@Ri F8~FF MOV Rn,A A8--AF MOV Rn,direct 78~7F MOV Rn,#data F5 85 75 MOV driect,A 88~8F MOV driect,Rn 86,87 MOV driect,@Ri MOV driect,#data F6,F7 MOV @Ri,A A6,A7 MOV @Ri,driect 76,77 MOV @Ri,#data 90 93 83 E0 F2,F3 F0 C0 D0 MOV driect1,driect2 (driect2) →driect1 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 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 功能 P × × × × × × × × × × × × /(Cy) → Cy /(bit) → bit (Cy)∧ (bit) → Cy (Cy)∧ /(bit) → Cy (Cy)∨ (bit) → Cy (Cy)∨ /(bit) → Cy (bit)→ Cy (Cy)→ bit 对标志影响 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 8 √ √ √ √ √ √ √ √
控制转移指令 (共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 (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) × × × × 2 2 12 22 LCALL addr16 RET × × × × × × × × 3 1 2 2 32 *1 02 80 73 60 70 40 50 20 30 10 RETI AJMP addr11 LJMP addr16 SJMP rel JMP @A+DPTR JZ rel JNZ rel JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × √ 1 2 3 2 1 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 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 × × × √ 3 2 (PC)+3→PC 若((Ri))≠data,则(PC)+(rel)→PC 若((Ri)) (PC)+2→PC,(Rn)-1→Rn 若(Rn)≠0,则(PC)+(rel)→PC × × × √ 3 2 × × × × 3 2 9 D5 00 DJNZ direct,rel NOP (PC)+2→PC,(direct)-1→direct 若(direct)≠0,则(PC)+(rel)→PC 空操作 × × × × × × × × 3 1 2 1 伪指令(共7条) 伪指令 ORG EQU BIT DB DW DS END 功能 规定本条指令下面的程序和数据的起始地址 将一个常数或汇编符号赋给字符名 将BIT之后的位地址值赋给字符名 从指定的ROM地址单元开始存入DB后面的数据,这些数据可以是用逗号隔开的字节串或括在单引号中的ASCII字符串 从指定的ROM地址开始,在连续的单元中定义双字节数据 从指令地址开始保留DS之后表达式的值所规定的存储单元数,以备后用 用来指示源程序到此全部结束 格式 ORG Addr16 字符名 EQU 常数或汇编符号 字符名 BIT 位地址 DB 8位数据表 DW 16位数据表 DS 表达式 END 10 因篇幅问题不能全部显示,请点此查看更多更全内容