MCS51单片机常用寄存器及汇编指令梳理

MCS51单片机寄存器简介

最近马上要考试51单片机了,借着这个机会梳理了一下51单片机的各个寄存器以及我个人常弄混淆的一些东西.

管脚

名称 描述
PSEN ROM选通信号
EA =0 只访问片外ROM
ALE 地址锁存器信号
RESET 2机器周期高电平复位
XTAL1 crystal oscillator

一共40脚 32个IO 注意P1可以驱动4个LSTTL,其他为8个

P3口第二功能

管脚 功能
P3.0 RXD
P3.1 TXD
P3.2 INT0
P3.3 INT1
P3.4 T0
P3.5 T1
P3.6 WR
P3.7 RD

内存

地址 说明
00H~07H 第0工作区
08H~0FH 第1工作区
…… …….
20H~2FH 可位寻址区
30H~7FH 用户RAM区
80H~FFH SFR

上电建议将SP改成60H避免冲突

注意事项

  • 内存中对应的位地址为 00H~7FH

    寄存器

    注意 SP复位值为07H(越过第0工作组寄存器区),IO复位是FFH,其他的都是0

    PCON 电源控制寄存器 (不可位寻址)

    名称 说明
    D0 IDL 空闲模式
    D1 PD 掉电模式
    D2 GF0 用户标志位
    D3 GF1 用户标志位
    D7 SMOD 波特率倍频

TCON 定时器控制寄存器/中断

名称 说明
D0 IT0 外部中断0触发方式=0电平触发
D1 IE0 外部中断0标志位,自动清0
D2 IT1
D3 IE1
D4 TR0 定时器计数允许位
D5 TF0 定时器溢出标志位,中断自动清0
D6 TR1
D7 TF1

TMOD 定时器工作方式寄存器 (不可位寻址)

名称 说明
D0 M0 工作方式选择
D1 M1 工作方式选择
D2 C/$\overline{T}$ 工作模式=0定时器模式
D3 GATE 门控=0 仅由$TR_x$控制
D4~D7 …… 功能同上

AUXR 辅助寄存器(不可位寻址)

名称 说明
D0 DISABLE ALE脉冲寄存器 =0 时刻发出脉冲
D3 DISTRO 看门狗 =0开启看门狗
D4 WDILE 空闲看门狗 =0 允许看门狗空闲计数

SCON 串口寄存器

名称 说明
D0 RI 接收中断标志位
D1 TI 发送中断标志位
D2 RB8 接收的第9位
D3 TB8 发送的第9位
D4 REN 允许串口接收
D5 SM2 多机通信控制=1,RB8=1才中断请求
D6/D7 SM1/SM0 工作方式选择

AUXR1 辅助寄存器1(不可位寻址)

名称 说明
D0 DPS 选择DPTR

IE (interrupt enable)中断允许寄存器

名称 说明
D0 EX0 外部中断0允许位
D1 ET0 定时器0中断允许位
D2 EX1
D3 ET1
D4 ES 串口中断允许位
D5 ET2
D7 EA 全局中断允许位

IP (interrupt priority)中断优先级寄存器

名称 说明
D0 PX0
D1 PT0
D2 PX1
D3 PT1
D4 PS
D5 PT2

PSW 程序状态字寄存器

名称 说明
D0 P Acc奇偶校验,偶为0
D2 OV 溢出标志位
D3/D4 RS0/RS1 工作组选择寄存器
D5 F0 用户标志位
D6 Ac 辅助进位标志位
D7 Cy或C 进位标志位或位累加器

低功耗

空闲模式:仅CPU停机,其他工作正常,WatchDog可以计数,可由中断退出
掉电模式:振荡器停机,内存中值保留,Vcc可以下降到2V,WatchDog停止计数,外部中断唤醒

汇编

寻址方式

  • 寄存器寻址(R0~R7 A B C DPTR)
  • 直接寻址
  • 寄存器间接寻址
  • 基址+变址间接寻址
  • 立即数寻址
  • 相对寻址
  • 位寻址

注意事项

  • 以字母开头的数字量需要添加前导0
  • 只有R0 R1能间接寻址
  • 读引脚->读修改写
  • $符号表示跳转到标号

汇编指令

指令 说明
MOVC 查表指令
MOVX 读取外部RAM
XCH 字节交换指令
XCHD 半字节交换指令
ADDC 带进位的加法指令
DA 十进制调整指令
SUBB 带借位的减法指令
MUL 乘法指令(高字节在B 低字节在A,乘积大于255,OV置1)
DIV 除法指令(A/B=A(商)……B(余数)),除数为0,OV置1
SWAP A累加器半字节交换指令
LJMP 长跳转指令
SJMP 相对跳转(地址+偏移量+2)
JMP 间接跳转指令@A+DPTR,用于分支选择
DJNZ 减一不为零指令
LCALL 调用子程序指令,先低字节后高字节
RET 子程序返回指令
RETI 中断子程序返回指令,清除了内部中断相关寄存器的状态
CLR 清零
ANL 逻辑与
ORL 逻辑或
XRL 逻辑异或
JZ 累加器为0跳转
JNZ 累加器不为0跳转
CJNE 比较不相等跳转
位指令 说明
SETB 置位
CLR 清零
CPL 取反
ANL
ORL
JC C为1跳转
JNC C为0跳转

汇编伪指令

伪指令 说明
ORG 标记开始
END 结束汇编
EQU 相当于宏定义
DB Define Byte
DW Define Word
SDA Define Bit
DS Define Storage

中断

注意事项

  • 串口中断TI和RI需要软件清除
  • 中断最小相应3周期 查询1+跳转2
  • 中断最长相应8周期 RETI2+DIV4+跳转2
  • 中断在压栈和出栈的时候需要现场保护关闭中断

定时器

注意事项

  • 定时器工作方式0 TL5位 TH8位
  • 计数器最大频率为晶振频率的1/24,12MHz的最大为500KHz

初值计算

16位

($2^{16}-x$)x(1/主频)=期望的时间

计时时长

以6MHz的晶振

  • 方式0:16.384ms
  • 方式1: 131.072ms
  • 方式2: 512$\mu$s

串口UART

注意事项

  • 方式0时RXD=数据线 TXD=时钟线
  • 方式1接收一位采样3次

    波特率

    方式1或3波特率

    bandrate=$(2^{SMOD}/32)\times$定时器T1的溢出速率
    bandrate=$(2^{SMOD}/32)\times(f_{osc}/12)/(256-x)$ 8位自动重装

方式0/2波特率

bandrate=$(2^{SMOD}/64)\times f_{osc}$


EOF