[TOC]
MSC51寄存器与汇编指令
8051内部结构图

引脚分配
8051一共有40个引脚,其中I/O引脚占了4*8=32个引脚(分别是P0,P1,P2,P3,每个Px分别有8个I/O口,除此之外的引脚有:
| 引脚(引脚号) | 功能 |
|---|
| RST(9) | 复位信号输入 |
| $\overline{PSEN}$ (29) | 外部程序存储器选通信号输出引脚 |
| ALE(30) | 地址锁存允许信号输出引脚 |
| $\overline{EA}$ (31) | 内外程序存储器选择引脚 |
| 引脚(引脚号) | 功能 |
|---|
| XTAL1(19) | 接外部晶振的一个引脚,该引脚内部是反相放大器的输入端 |
| XTAL2(18) | 接外部晶振的另一个引脚,该引脚接至内部反相放大器的输出端 |
| 引脚(引脚号) | 功能 |
|---|
| VCC(40) | 供电,电源正极 |
| GND(20) | 供电,电源负极 |
寄存器
特殊功能寄存器
| 特殊功能寄存器符号 | 名称 | 字节地址 | 位地址 |
|---|
| B | B寄存器 | F0H | F7H~F0H |
| A(ACC) | 累加器 | E0H | E7H~E0H |
| PSW | 程序状态字 | D0H | D7~D0H |
| IP | 中断优先控制寄存器 | B8H | BFH~B8H |
| P3 | P3口锁存器 | B0H | B7H~B0H |
| IE | 中断允许控制寄存器 | A8H | AFH~A8H |
| P2 | P2口锁存器 | A0H | A7H~A0H |
| SBUF | 串行口锁存器 | 99H | |
| SCON | 串行口控制寄存器 | 98H | 9FH~98H |
| P1 | P1口锁存器 | 90H | 97H~90H |
| TH1 | 定时器/计数器1(高八位) | 8DH | |
| TH0 | 定时器/计数器1(低八位) | 8CH | |
| TL1 | 定时器/计数器0(高八位) | 8BH | |
| TL0 | 定时器/计数器0(低八位) | 8AH | |
| TMOD | 定时器/计数器方式控制寄存器 | 89H | |
| TCON | 定时器/计数器控制寄存器 | 88H | 8FH~88H |
| DPH | 数据地址指针(高八位) | 87H | |
| DPL | 数据地址指针(低八位) | 83H | |
| SP | 堆栈指针 | 82H | |
| P0 | P0口锁存器 | 81H | |
| PCON | 电源控制寄存器 | 80H | 87H~80H |
可位寻址的寄存器(共11个)
TCON——定时器/计数器控制寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| TCON | 88H | name | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位阐述
- B7~B4 :定时器计数器
- B3~B0 :外部中断
- TF1 /0: 定时/计数器T1/T0溢出标志位。T1溢出时由硬件置1。中断处理时由硬件清0。也可由软件清0。
- TR1 /0:定时/计数器T1/T0运行控制位。
- IE1 /0: 外部中断1/0(INT1/0)的中断请求标志位。中断处理时由硬件清 0。也可由软件清 0
- IT1 /0:外部中断1/0(INT1/0)触发方式选择位。外部中断触发方式:低电平触发IT=0,下降沿触发IT=1。
PSW——程序状态字寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| PSW | D0H | name | CY | AC | F0 | RSI | RS0 | OV | - | P |
位阐述
- Cy :进位位
- AC:辅助进位位
- F0:用户标志位
- OV:溢出标志位
- P:奇偶校验位
- RS1/RS0:
| RS1 | RS0 | |
|---|
| 0 | 0 | 0区-第0组工作寄存区(内部RAM) |
| 0 | 1 | 1区-第1组工作寄存区(内部RAM) |
| 1 | 0 | 2区-第2组工作寄存区(内部RAM) |
| 1 | 1 | 3区-第3组工作寄存区(内部RAM) |
SCON——串行口控制寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| SCON | 98H | name | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
位阐述
| SM0 | SM1 | 方式 | 说明 |
|---|
| 0 | 0 | 方式0 | 同步移位寄存器输入/输出工作方式 |
| 0 | 1 | 方式1 | 8位可变波特率的异步串行通信工作方式 |
| 1 | 0 | 方式2 | 9位不变波特率的异步串行通信工作方式 |
| 1 | 1 | 方式3 | 9位可变波特率的异步串行通信工作方式 |
- REN:允许接收位。REN=1允许串行口接收,REN=0禁止串行口接收。
- TB8:在方式2和3中,发送的第9位(位8)。由软件置位或清除
- RB8:在方式2和3中,接收的第9位(位8)。
- TI:发送中断标志位。由软件清除。
- RI:接收中断标志位。由软件清除。
IE——中断允许控制寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| IE | A8H | name | EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
位阐述
| 标号 | 功能 |
|---|
| EA | 全局中断禁止位,如果EA=0,禁止所有中断,如果EA=1,通过置位或清0使能位,对应的每个中断使能或禁止。 |
| ES | 串行口中断使能位 |
| ET1 | 定时器1中断使能位 |
| EX1 | 外部中断1中断使能位 |
| ET0 | 定时器0中断使能位 |
| EX0 | 外部中断0中断使能位 |
IP——中断优先级寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| PCON | B8H | name | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
位阐述
| 标号 | 功能 |
|---|
| PS | 串行口中断优先级控制位 |
| PT1 | 定时器1中断优先级控制位 |
| PX1 | 外部中断1中断优先级控制位 |
| PT0 | 定时器0中断优先级控制位 |
| PX0 | 外部中断0中断优先级控制位 |
中断优先级控制位=1,设置为高优先级中断
中断优先级控制位=0,设置为低优先级中断
同中断优先级下,优先级查询顺序
| 中断源 | 中断级别 |
|---|
| PX0 | 最高 |
| PT0 | ⬇ |
| PX1 | ⬇ |
| PT1 | ⬇ |
| RS | 最低 |
P3——P3口第二功能引脚定义
| SFR name | Address | bit | P3.7 | P3.6 | P3.5 | P3.4 | P3.3 | P3.2 | P3.1 | P3.0 |
|---|
| P3 | B0H | name | $\overline{RD}$ | $\overline{WR}$ | T1 | T0 | $\overline{INT1}$ | $\overline{INT0}$ | TXD | RXD |
位阐述
- P3口通常情况下可以作为通用的I/O口使用,除此之外还增加了第二功能
存在位地址但是位地址并未给予特殊的定义的寄存器
B——B寄存器
A——累加器
P0——P0口
I/O口,输入指令,输入输出数据,输出低八位地址
P1——P1口
I/O口
P2——P2口
I/O口,高八位地址
不可位寻址的寄存器(10个)
PCON——电源控制
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| PCON | 87H | name | SMOD | SMOD0 | - | POF | GF1 | GF0 | PD | IDL |
位阐述
- SMOD , SMOD0 :与电源控制无关,与串口有关
- POF :上电复位标志位,单片机停电后,上电复位标志位为1,可由软件复位
- GF1,GF0 :两个通用工作标志位
TMOD——定时/计数器方式字寄存器
| SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
|---|
| TMOD | 89H | name | GATE | C/$\overline{T}$ | M1 | M0 | GATE | C/$\overline{T}$ | M1 | M0 |
位阐述
| M1 | M0 | 说明 |
|---|
| 0 | 0 | 方式0:13位定时/计数器 |
| 0 | 1 | 方式1:16位定时/计数器 |
| 1 | 0 | 方式2:8位自动装载定时/计数器,当溢出时将TH1/0存放的值自动重装入TL1/0里 |
| 1 | 1 | 方式3:T0分为2个8位定时计数器,T1无方式3 |
| 标号 | 功能 |
|---|
| GATE | 启停控制选择位:0-TRx控制启停,1-INTx控制启停————————TCON寄存器中设置 |
| C/$\overline{T}$ | 定时/计数选择位:0-定时,1-计数。 |
- SBUF——串口数据缓冲器
- TH1
- TL1
- TH0
- TL0
- DPH
- DPL
- SP
MCS51扩展与应用
程序存储器扩展

常见存储器芯片——27系列芯片
| 芯片型号 | 2716 | 2732 | 2764 | 27128 | 27256 | 27512 |
|---|
| 芯片储存大小 | 2K | 4K | 8K | 16K | 32K | ;64K |
程序存储器芯片——2764

| 引脚 | D7-D0 | A12-A0 | $\overline{CE}$ | $\overline{OE}$ | PGM | VPP |
|---|
| 数据输出 | 地址 | 片选信号 | 允许输出控制信号,与片内的$\overline{PSEN}$相连 | 编程脉冲输入 | 编程电压输入 |
工作方式:
| 方式\引脚 | $\overline{CE}$/PGM | $\overline{OE}$ | Vpp | D7-D0 |
|---|
| 读出 | 0 | 0 | +5V | 程序读出 |
| 未选中 | 1 | X | +5V | 高阻 |
| 编程 | 正脉冲 | 1 | +25V(或+12V) | 程序写入 |
| 程序校验 | 0 | 0 | +25V(或+12V) | 程序读出 |
| 编程禁止 | 0 | 1 | +25V(或+12V) | 高阻 |
数据锁存器74LS373

| 引脚 | D7-D0 | Q7-Q0 | LE | OE | PGM | VPP |
|---|
| 数据输入 | 地址输出 | 锁存允许信号(高) 当:LE=1,Di=Qi 当:LE=0,Qi保持 | 允许输出控制信号(低) | 编程脉冲输入 | 编程电压输入 |
数据译码器——74LS138

| 引脚 | A,B,C | Y0-Y7 | $\overline{E1}$,$\overline{E2}$ | E3 |
|---|
| 译码器数据输入端 | 译码器输出端 | 使能端(低) | 使能端(高) |
扩展应用:


数据存储器扩展

工作方式:
| 方式\信号 | $\overline{CE}$ | $\overline{OE}$ | $\overline{WE}$ | D7-D0 |
|---|
| 读 | 0 | 0 | 1 | 数据输出 |
| 写 | 0 | 1 | 0 | 数据输入 |
| 维持 | 1 | X | X | 高阻态 |

I/O口扩展
8255芯片

引脚功能表
| 引脚 | D7-D0 | PA7-PA0 | PB7-PB0 | PC7-PC0 | $\overline{CS}$ | $\overline{RD}$ | $\overline{WR}$ | RESET | A1,A0 |
|---|
| 功能 | 三态双向数据线 | A口输入输出线 | B口输入输出线 | C口输入输出线 | 片选信号 | 读信号 | 写信号 | 复位信号 | I/O口地址线 |


工作方式控制字寄存器

C口按位操控制字

方式一:选通输入输出方式
- $\overline{STB}$ :选通输入,低电平有效
- IBF :输入缓冲器,高电平有效
- INTR :中断请求信号,高电平有效
- INTE A/B :中断允许信号A-PC4,B-PC2的置位复位来控制

- $\overline{OBF}$ :输出缓冲器满信号
- $\overline{ACK}$:外设相应信号
- INTR :中断请求信号
- INTE A/B :A-PC6,B-PC2的置位复位控制

工作方式二:双向数据传输工作方式


8155芯片

| 引脚 | AD7-AD0 | PA7-PA0 | PB7-PB0 | PC7-PC0 | $\overline{CE}$ | RD | WR | RESET | ALE | IO/M | TIMERIN | TIMEROUT |
|---|
| 功能 | 三态双向数据线/地址线 | A口输入输出线 | B口输入输出线 | C口输入输出线 | 片选信号 | 读信号 | 写信号 | 复位信号 | 地址锁存信号 | I/O口,RAM选择信号 | 定时器输入 | 定时器输出 |

端口地址分配

8155命令寄存器
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|
| TM2 | TM1 | IEB | IEA | PC2 | PC1 | PB | PA |

8155状态寄存器
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|
| X | TIMER | $INTE_B$ | BBF | $INTR_B$ | $INTE_A$ | ABF | $INTR_A$ |

8155计数寄存器
$T_L$(04H)
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|
| $T_7$ | $T_6$ | $T_5$ | $T_4$ | $T_3$ | $T_2$ | $T_1$ | $T_1$ |
$T_H$(05H)
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|
| M2 | M1 | $T_13$ | $T_12$ | $T_11$ | $T_10$ | $T_9$ | $T_8$ |

串行口扩展并行口
键盘和数码显示扩展
键盘
非编码式键盘分类:



8031键盘接口电路

数码管

串行口扩展键盘与显示电路
并行输入输出移位寄存器——74LS165

| A,B,C,D,E,F,G,H | SH/$\overline{LD}$ | CLK | CLK INH | SER | $Q_H$ ,$\overline{Q_H}$ |
|---|
| 并行输入端 | 移位/装入 | 移位脉冲 | 移位脉冲禁止 | 串行输入端 | 串行输出端 |
MSC51串行口的方式0可以用于I/O口扩展——波特率固定,为fosc/12

串行输入,并行输出寄存器(74LS164)

| $Q_0$-$Q_7$ | A,B | CP | MR |
|---|
| 并行输出端 | 数据输入 | 时钟线 | Master Reset Input (Active Low) |

、
D/A转换接口电路
DAC0832

| VREF | DGND | AGND | D17-D0 | CS | ILE | $\overline{WR1}$ | $\overline{WR2}$ | $\overline{XFER}$ | IOUT1 | IOUT2 | RFB |
|---|
| 基准电压 | 数字地 | 模拟地 | 数字量输入端 | 片选信号(低) | 数据锁存允许信号 | 第一写信号(低) | 第二写信号(低) | 数据传送控制信号(低) | 电流输出端1 | 电流输出端2 | 反馈电阻端 |




A/D转换接口电路
ADC0809

| IN7-IN0 | D7-D0 | START | OE | ALE | EOC | CLK | A,B,C | VREEF+ | VREEF- | VCC | GND |
|---|
| 8路模拟量输入端 | 8路数字量输出端 | A/D启动信号 | 允许输出控制 | 地址锁存允许信号(高) | 转换结束信号(高) | 时钟信号输入端 | 转换通道地址 | 参考电源正端 | 参考电源负 端 | 电源正 | 地 |
