资源描述
任课教师:孟建华
08级自动化04班
单片机原理及应用
2.1基本结构
基本组成
中央处理器 (CPU)
存储器
输入/输出接口
CPU
字长8位 00H ~ 0FFH
无符号数 0 ~ 255
有符号数 -128 ~ 127
寻址空间16位地址 64KB×2
工作频率0 ~ 40MHz
程序存储器
0 / 4KB / 8KB
ROM / PROM (OTP)
(UV)EPROM / E2PROM / FLASH
数据存储器
128B / 256B
SRAM
特殊功能寄存器(SFR)
21 (26)个
控制管理片内各功能模块
并行口
4个8位并行双向I/O接口电路
P0、P1、P2、P3
串行口(UART)
1个串行全双工异步接口
4种工作方式
定时/计数器
2 / 3个
16位 0000H ~ 0FFFFH 65536
4种工作方式
中断系统
5 / 6个中断源
2个中断优先级
时钟电路
片内振荡器及时钟产生电路
需外接晶振
总线结构
布尔处理机
实现位操作
命名方式
N N C N N
│ │ │ │ │
│ │ │ │ 1 -51子系列
│ │ │ │ 2 -52子系列 增强型
│ │ │ 3 片内无程序存储器
│ │ │ 5 片内有程序存储器
│ │ NMOS或HMOS
│ │ C CMOS或CHMOS(低功耗)
│ │ S 支持ISP(在线编程)
│ 0 掩模ROM
│ 7 (UV)EPROM
│ 9 FLASH
8
数据
存储器
程序
存储器
定时/计数器
中断源
-51
128B
4KB
2
5
-52
256B
8KB
3
6
8031
8051
8751
89C51
89S52
2.2引脚
封装形式
DIP (Double In-line Package) 双列直插式
PLCC
LQFP
引脚功能
40条引脚
电源线(2条)
VCC 电源线 +5V
VSS 接地线 GND
时钟引脚(2条)
XTAL1和XTAL2
Crystal
片内振荡电路输入输出端
有生命,生物,心跳
端口线(8 × 4 = 32条)
4个8位并行I/O端口
P0、P1、P2、P3
单片模式
扩展模式
P0
I/O口
数据总线
低8位地址总线
(分时复用)
P1
I/O口
I/O口
P2
I/O口
高8位地址总线
第二功能
注 释
P3.0
RXD
串行数据接收口
P3.1
TXD
串行数据发送口
P3.2
INT0(_________)
外部中断0输入口
P3.3
INT1(_________)
外部中断1输入口
P3.4
T0
计数器0计数脉冲输入口
P3.5
T1
计数器1计数脉冲输入口
P3.6
WR(_______)
片外数据存储器写选通信号输出口
P3.7
RD(______)
片外数据存储器读选通信号输出口
控制线(4条)
RST / VPD (9)
Reset
复位信号输入端
单片机正常工作的保证
24个时钟周期的高电平
12MHz
1/12μs
2μs
上电复位
手动复位
VPD
Voltage Power Down
备用电源
EA(_____) / VPP (31)
External Access Enable
片外程序存储器访问允许输入端
EA(_____)=0时,CPU访问片外程序存储器
EA(_____)=1时,CPU访问片内程序存储器
VPP
Voltage Pulse of Programming
编程电源
ALE / PROG(___________) (30)
Address Latch Enable
地址锁存允许信号输出端
单片机上电正常工作后,ALE引脚不断向外输出正脉冲信号,频率为振荡器频率fosc的1/6。12MHz
2 MHz
CPU访问片外存储器时,该信号作为将P0口输出的低8位地址锁存到片外地址锁存器中的控制信号。
ALE = 1 P0地址总线
ALE = 0 P0数据总线
PROG(_________)
Programming
编程脉冲输入端
编程器、烧录器、写入器
PSEN(___________) (29)
Program Store Enable
片外程序存储器读选通信号输出端
应用模式
工作状态
单片模式
扩展模式
编程状态
2.3存储器配置
哈佛结构 MCS-51单片机
程序存储器和数据存储器分开设计。
普林斯顿结构 微机
只有一个地址空间,程序和数据可以随意安排在这一地址范围内不同的空间。
程序存储器 (ROM)
指令、常数 掉电不失
数据存储器 (RAM)
数据 可用程序改写
在单片机内部,程序存储器和数据存储器存贮器是分开制造的。通常,程序存储器的容量较大,数据存储器的容量较小,这是单片机用作控制的一大特点。
程序存储器
数据存储器
片内
4KB
128B
片外
64KB
64KB
物理上有4个存储空间
片内程序存储器
片外程序存储器
片内数据存储器
片外数据存储器
逻辑上有3个存储空间
片内外统一编址的程序存储器 MOVC
片内数据存储器 MOV
片外数据存储器 MOVX
程序存储器
EA(_____)
输入引脚
E(___)A(___) = 0 访问片外程序存储器
E(___)A(___) = 1 访问片内程序存储器
程序计数器PC
16位程序地址寄存器,专门用来存放下一条需要执行指令的地址,能自动加1。
PC指示程序执行的位置
PC中存放的是程序存储器的地址
PC中存放下一条将要执行的指令的地址
复位后 PC = 0000H
寻址范围:0000H ~ 0FFFFH
64KB 65536B
入口地址
入口地址
复位
0000H
INT0(_________)
0003H
T0
000BH
INT1(_________)
0013H
T1
001BH
串行口
0023H
T2
002BH
通常,在入口地址处写一条跳转指令,跳转至服务程序。
0000H
LJMP 0030H
0003H
LJMP 1000H
┇
000BH
LJMP 2000H
┇
0030H
主程序
┇
1000H
INT0中断服务程序
┇
RETI
2000H
T0中断服务程序
MOVC
常数
MOVC指令
MOV DPTR, #2000H
MOV A, #08H
MOVC A, @A+DPTR
片外数据存储器
最大64KB
0000H ~ 0FFFFH
只可用MOVX指令
间接寻址方式访问
读:
MOV DPTR, #2008H
MOVX A, @DPTR
写:
MOV A, #12H
MOV DPTR, #2008H
MOVX @DPTR, A
片外数据存储器与片外I/O设备统一编址
(如A/D、D/A、I/O芯片等)
片内数据存储器(低128B)
地址范围:00H ~ 7FH
通用数据区 (30H~7FH)
80个字节
用于存放的用户数据或作堆栈区使用。
读:
MOV A, 30H ;直接寻址
MOV R0, #30H
MOV A, @R0 ;间接寻址
INC R0
写:
MOV A, #12H
MOV 30H, A
位寻址区 (20H~2FH)
16个字节
即可按字节寻址,又可按位寻址
8 × 16 = 128位
用途:
开关决策、逻辑电路仿真、实时控制
位地址空间:00H ~ 7FH
位操作指令:
SETB
CLR
CPL
JB
JNB
2FH字节的位地址:
D7
D0
7FH
7EH
7DH
7CH
7BH
7AH
79H
78H
将2FH字节的最高位置“1”
不能影响其它位
SETB 7FH
ORL 2FH, #10000000B
MOV 2FH, #10000000B
最高位清“0”
CLR 7FH
ANL 2FH, #01111111B
若 2FH 字节的最高位为“1”,
则跳转到LED_ON
JB 7FH, LED_ON
若 2FH 字节的最高位为“0”,
则跳转到LED_OFF
JNB 7FH, LED_OFF
工作寄存器区 (00H~1FH)
32个字节
4个工作寄存器组
每组8个工作寄存器
R0 ~ R7
由RS1、RS0两位决定目前使用哪组工作寄存器
RS1
RS0
组号
0
0
0
0
1
1
1
0
2
1
1
3
方便快速保护现场
主程序(0组)
MOV R0, #12H ;(00H)←12H
(程序中断)
INC R0
中断服务程序(2组)
PUSH PSW
SETB RS1
CLR RS0 ; bank2
MOV R0, #34H ;(10H)←34H
┇
POP PSW
RETI
工作寄存器的功能:
MOV R0, #30H
MOV A, @R0 ;间接寻址
寄存器与存储器的区别:
存储器:容量大 速度慢 有地址
寄存器:容量小 速度快 有名字
MCS-51
统一编址
速度一致
MOV A, R0 ;1 byte
MOV A, 00H ;2 bytes
片内数据存储器(高128B)
地址范围:80H ~ 0FFH
仅52子系列有
只可用间接寻址方式访问
MOV R0, #80H
MOV A, @R0 ;间接寻址
MOV A, 80H ;直接寻址SFR
特殊功能寄存器(SFR)
地址范围:80H ~ 0FFH
只可用直接寻址方式访问
21个 51子系列
26个 52子系列
离散分布
控制、管理各个功能模块(中断、定时器、串行口……)
控制寄存器
状态寄存器
数据寄存器
符号
寄存器名称
地址
ACC
累加器
0E0H
B
B寄存器
0F0H
PSW
程序状态字
0D0H
SP
堆栈指针
81H
DPL
数据指针低8位
82H
DPH
数据指针高8位
83H
P0
P0口寄存器
80H
P1
P1口寄存器
90H
P2
P2口寄存器
0A0H
P3
P3口寄存器
0B0H
IE
中断允许控制寄存器
0A8H
IP
中断优先控制寄存器
0B8H
TMOD
定时器方式选择寄存器
89H
TCON
定时器控制寄存器
88H
TL0
定时器0低8位
8AH
TH0
定时器0高8位
8CH
TL1
定时器1低8位
8BH
TH1
定时器1高8位
8DH
SCON
串行口控制寄存器
98H
SBUF
串行数据缓冲寄存器
99H
PCON
电源控制及波特率选择寄存器
87H
累加器ACC
(Accumulator)
具有特殊用途的8位寄存器
专门用来存放操作数或运算结果
3 + 5 = ?
MOV A, #3 ; A = 3
ADD A, #5 ; A = 3 + 5
通用寄存器B
(General Purpose Register)
8位
专门为乘法和除法设置的寄存器
3 × 5 = ?
MOV A, #3 ; A = 3
MOV B, #5 ; B = 5
MUL AB ; BA←A×B
程序状态字PSW
(Program Status Word)
8位标志寄存器
用来存放指令执行后的有关状态
可按位寻址
D7
D0
CY
AC
F0
RS1
RS0
OV
-
P
CY 进位标志位
OV 溢出标志位
AC 半进位位(辅助进位位)
二进制加法 无符号数 有符号数
1111 1111 255 -1
+) 0000 0001 +) 1 +) 1
1 1111 111
0000 0000 256 0
CY=1 最高进位位(进位标志位)
(无符号数运算溢出标志位)
CS=1 次高进位位
AC=1 半进位位(辅助进位位)
(用于BCD码调整)
OV=0 溢出标志位 = CYCS
(有符号数运算溢出标志位)
F0 用户位
RS1、RS0 工作寄存器组
选择控制位
P 奇偶标志位
偶校验
串行通信差错控制
注意标志位(状态位)和控制位区别
标志位(状态位) 指示灯
由硬件系统根据运行状态自动置“1”或清“0”,供用户通过指令查询、判断,决定程序的执行顺序。
CY、AC、OV、P
控制位 开关
由用户通过指令置“1”或清“0”,以控制相应的硬件功能模块。
RS0、RS1
TR1
TR0
写
读
标志位
硬件
软件
控制位
软件
硬件
写控制位:
SETB RS1 ; RS1 = 1
CLR RS0 ; RS0 = 0
判断标志位:
JB OV, Overflow
;若OV=1则跳转到 Overflow
JNB OV, NOT_Overflow
;若OV=0则跳转到 NOT_Overflow
堆栈指针SP
(Stack Pointer)
8位寄存器
专门用来存放堆栈的栈顶地址
能自动加1和减1
堆栈是一种按 “后进先出”规律存取数据的存储区域
处理中断、子程序调用
栈区:片内RAM低128B
不可对任意地址操作
堆栈的操作
压栈(入栈) PUSH
弹栈(出栈) POP
SP先加一,再入栈(向上生成)
复位后 SP = 07H
修改到 SP = 2FH
MOV SP, #2FH
数据指针DPTR
(Data Pointer)
16位寄存器
由两个8位寄存器DPH和DPL拼装而成
用来存放16位地址。
用于访问程序存储器和片外数据存储器
访问程序存储器
MOV DPTR, #2000H
MOV A, #08H
MOVC A, @A+DPTR
访问片外数据存储器
MOV DPTR, #2008H
MOVX A, @DPTR
MOV A, #12H
MOV DPTR, #2008H
MOVX @DPTR, A
端口P0 ~ P3
寄存器
端口
端口 字节单元 P1
引脚 位 P1.0
输出锁存、输入缓冲
MOV P1, #12H
MOV A, #12H
SETB P1.0
SETB ACC.0
字节地址可被8整除的寄存器可按位寻址
最低位位地址与字节地址相同
可按位寻址的寄存器:
A B PSW
P0 ~ P3 ……
不可按位寻址的寄存器:
SP DPTR ……
地址的重叠与区分
片内程序存储器vs片外程序存储器
片外程序存储器 EA(_____) = 0
片内程序存储器 EA(_____) = 1
EA(_____)输入引脚
SETB EA
程序存储器vs片内数据存储器
vs片外数据存储器
程序存储器 MOVC
片内数据存储器 MOV
片外数据存储器 MOVX
例:
访问程序存储器
MOV DPTR, #0030H
MOV A, #0
MOVC A, @A+DPTR
MOVC A, 0030H
访问片外数据存储器
MOV DPTR, #0030H
MOVX A, @DPTR
MOVX A, 0030H
访问片内数据存储器
MOV R0, #30H
MOV A, @R0
or
MOV A, 30H
片内数据存储器高128B vs SFR
高128B 间接寻址方式
MOV R0, #80H
MOV A, @R0
SFR 直接寻址方式
MOV A, P0
or
MOV A, 80H
字节地址vs位地址
字节地址 字节指令
INC 30H
MOV A, 30H
位地址 位指令
CPL 30H
MOV C, 30H
2.4时钟
内部时钟方式
高增益反相放大器
外接晶体 0 ~ 24MHz
电容 30pF 帮助起振
XTAL1
XTAL2
外部时钟方式
时钟脉冲从XTAL1或XTAL2接入
不同类型的芯片接法不一样
多个芯片同时工作
机器周期和指令周期
振荡周期
晶振振荡周期
最小时间单位
机器周期
计算机执行一种基本操作的时间单位
CPU访问一次存储器所需要的时间
1机器周期 = 12振荡周期 1μS @12MHz
6状态 (State) S1 ~ S6
2拍(相位)(Phase) P1 ~ P2
S1P1 S1P2 S2P1 S2P2
…… …… S6P1 S6P2
指令周期
执行一条指令所需的时间
1指令周期 = 1 ~ 4机器周期
时间
单周期
双周期
四周期 乘除
空间
单字节
双字节
三字节
pp350 附录A
CPU取指、执行时序
每个机器周期,地址锁存信号ALE有效两次,CPU可访问两次存储器
2.5复位
复位操作的主要功能
使单片机从一个稳定的初始状态开始工作
上电复位
手动复位
复位后各寄存器的状态:
PC
0000H
SP
07H
P0~P3
0FFH (输入状态)
片内RAM
不定
SBUF
不定
其他
清“0”(功能关闭)
MOV SP, #2FH
复位信号及其产生
RST引脚
复位信号:
高电平
24振荡周期
2机器周期
2μs @12MHz
复位电路
上电复位
手动复位
复位芯片
2.6低功耗工作方式
便携式
电池供电
方式的设定
PCON (87H)
D7
D0
SMOD
-
-
-
GF1
GF0
PD
IDL
不可按位寻址
SMOD 波特率倍频位
GF1 通用标志
GF0 通用标志
PD 掉电方式位
IDL 空闲方式位
空闲(等待、待机)工作方式
CPU停止工作
其它部件工作
中断
定时器
串行口
功耗降低为20%
正常工作电流20mA
空闲状态电流5mA
进入方式:
ORL PCON, #00000001B
SETB IDL
退出方式:
中断
硬件复位
掉电(停机、休眠)工作方式
所有部件停止工作
片内RAM内容保留
功耗最低
电压2V
电流75μA
进入方式:
ORL PCON, #00000010B
SETB PD
退出方式:
硬件复位
2.7输入/输出端口
概述
4个
P0、P1、P2、P3
8位
准双向口
正确、合理使用端口
I/O口的功能
单片模式
扩展模式
P0
I/O口
数据总线
低8位地址总线
(分时复用)
P1
I/O口
I/O口
P2
I/O口
高8位地址总线
P3
I/O口 或 第二功能
第二功能
注 释
P3.0
RXD
串行数据接收口
P3.1
TXD
串行数据发送口
P3.2
INT0(_________)
外部中断0输入口
P3.3
INT1(_________)
外部中断1输入口
P3.4
T0
计数器0计数脉冲输入口
P3.5
T1
计数器1计数脉冲输入口
P3.6
WR(_______)
片外数据存储器写选通信号输出口
P3.7
RD(______)
片外数据存储器读选通信号输出口
I/O口的内部结构
输出 锁存器(D触发器)
驱动器(场效应管)
输入 缓冲器(三态门)
引脚
特殊功能寄存器
输出:
MOV A, #12H
MOV P1, A
输入:
MOV A, P1
输出
输入
P0
I/O口
C=0
开关向下
漏极开路式
外接上拉电阻
读引脚 先写“1”
读锁存器
总线
C=1
开关向上
推拉式
读引脚
P1
I/O口
内部有上拉电
阻的漏极开路
读引脚 先写“1”
读锁存器
P2
I/O口
开关向左
同P1
同P1
总线
开关向右
同P1
--
P3
I/O口
W=1
同P1
同P1
第二功能
Q=1
漏极d
栅极g
源极s
MOV P1, #0FFH
MOV A, P1
MOV R1, #0FFH
MOV A, R1
I/O口的读操作
读引脚
MOV A, P1
先写“1”
读锁存器
CPL P1.0
“读-修改-写”指令
输出驱动三极管
SETB P1.0
CPL P1.0
I/O口的写操作及驱动能力
MOV P1, A
S6P2 写入锁存器
P0 8个LS型TTL门
P1 4
P2 4
P3 4
2.8布尔处理器
功能
位操作
开关决策
逻辑电路仿真
实时控制
资源
CPU
位处理器
寄存器
位累加器CY
存储器
可按位寻址空间
(1) 片内数据存储器20H~2FH单元
(2) 部分SFR
I/O口
P0.0~P0.7
P1.0~P1.7
P2.0~P2.7
P3.0~P3.7
指令
位指令
SETB 00H
CLR C
CPL P1.0
JB OV, Overflow
3.1指令系统概述
指令和程序设计语言
指令
指令系统
程序
程序设计
高级语言 编译
汇编语言 汇编
机器语言
A = 10 + 20
74 0A MOV A, #0AH
24 14 ADD A, #14H
指令格式
操作码 [操作数][,操作数][,操作数]
42个助记符
MOV
ADD
+ 不同的寻址方式
MOV A, #12H
MOV A, R0
111条指令
MOV A, Rn
255个机器码
A5除外
反汇编
破译
加密
指令分类
按字节数分类
空间
单字节指令 49条
双字节指令 45条
三字节指令 17条
学会正确计算指令字节数
按指令周期分类
时间
单周期指令 64条
双周期指令 45条
四周期指令 2条
按功能分类
数据传送 28
算术运算 24
逻辑运算 25
控制转移 17
位操作 17
符号注释
Rn R0 ~ R7 工作寄存器
Ri R0、R1 地址寄存器
#data 8位立即数
#data16 16位立即数
direct 8位直接地址(片内数据存储器)
addr11 11位目的地址(程序转移)
addr16 16位目的地址(程序转移)
rel 8位带符号数(补码 -128 ~ +127)
偏移量(程序转移)
bit 直接位地址
@ 间接寻址
/ 位取反
(X) X中的内容
((X)) 由X指出的地址单元中的内容
→ 数据流向
3.2寻址方式
寻址方式:
如何找到操作数的地址,并提取出来的方法
直接寻址
机器码 助记符
05 30 INC 30H
85 40 30 MOV 30H, 40H
MOV A, 40H
MOV 30H, A
寄存器寻址
机器码中不出现操作数的地址
05 E0 INC A
04 INC A
08 INC R0
A3 INC DPTR
E8 MOV A, R0
A4 MUL AB
84 DIV AB
05 90 INC P1
;P1是寄存器,不是寄存器寻址
05 90 INC 90H
E5 30 MOV A, 30H
E5 90 MOV A, P1
E5 F0 MOV A, B
立即数寻址
74 30 MOV A, #30H
E5 30 MOV A, 30H
90 12 34 MOV DPTR, #1234H
75 30 40 MOV 30H, #40H
75 81 2F MOV SP, #2FH
寄存器间接寻址
08 INC R0
06 INC @R0
E6 MOV A, @R0
E0 MOVX A, @DPTR ;片外RAM读
F0 MOVX @DPTR, A ;片外RAM写
变址寻址
93 MOVC A, @A+DPTR
83 MOVC A, @A+PC ;当前PC值
仅有的两条使用变址寻址方式的指令
仅有的两条访问程序存储器的指令
位寻址
直接寻址
C2 30 CLR 30H
D2 30 SETB 30H
位地址的表达方式:
直接位地址
位名
字节名.位号
字节地址.位号
D2 D4 SETB 0D4H
D2 D4 SETB RS1
D2 D4 SETB PSW.4
D2 D4 SETB 0D0H.4
D2 90 SETB P1.0
D2 D7 SETB C
D3 SETB C
A2 30 MOV C, 30H
E5 30 MOV A, 30H
相对寻址
寻找程序转移的目的地址
绝对寻址:
地址 机器码 助记符
ORG 0000H
0000 02 00 30 LJMP MAIN
ORG 0030H
0030 74 12 MAIN: MOV A, #12H
相对寻址:
地址 机器码 助记符
ORG 0000H
0000 80 2E SJMP MAIN
(0030H – 0002H = 2EH)
0002
ORG 0030H
0030 74 12 MAIN: MOV A, #12H
ORG 0050H
0050 80 DE SJMP MAIN
(0030H - 0052H = -22H = 0DEH)
0052
rel 8位带符号数(补码 -128 ~ +127)
偏移量(程序转移)
80 FE SJMP $
80 FE HERE: SJMP HERE
B4 12 XX CJNE A,#12H,NOT_EQU
3.3数据传送指令
28条
最基本、最主要的操作
以累加器A为目的操作数的指令
4条
MOV A, Rn
MOV A, direct
MOV A, @Ri
MOV A, #data
以寄存器Rn为目的操作数的指令
3条
MOV Rn, A
MOV Rn, direct
MOV Rn, #data
非法指令:
MOV R1, R0
MOV R7, @R0
以直接地址为目的操作数的指令
5条
MOV direct, A
MOV direct, Rn
MOV direct, direct
MOV direct, @Ri
MOV direct, #data
[例]
MOV 30H, 40H
MOV A, 40H
MOV 30H, A
以间接地址为目的操作数的指令
3条
MOV @Ri, A
MOV @Ri, direct
MOV @Ri, #data
16位数据传送指令
1条
MOV DPTR, #data16 ; DPTR←data16
[例]
MOV DPTR, #1234H
查表指令
2条
MOVC A, @A+DPTR ; A←((A+DPTR))ROM
MOVC A, @A+PC ; A←((A+PC))ROM
仅有的两条访问程序存储器的指令
仅有的两条使用变址寻址方式的指令
[例]
程序存储器
1010H
24H
1011H
05H
1012H
16H
1013H
08H
ORG 1000H
1000H MOV A, #0DH
1002H MOVC A, @A+PC
1003H MOV R0, A
0DH + 1003H = 1010H
(A) = 02H
ORG 7010H
DB 02H
DB 04H
DB 06H
DB 08H
[例]
程序存储器
7000H
65H
7010H
52H
7011H
64H
7012H
36H
7013H
78H
MOV DPTR, #7000H
MOV A, #12H
MOVC A, @A+DPTR
累加器A与片外RAM传送指令
4条
MOVX A, @DPTR ;A←((DPTR))片外RAM
MOVX @DPTR, A ;((DPTR))←(A)片外RAM
MOVX A, @Ri ;A←((Ri))片外RAM
MOVX @Ri, A ;((Ri))←(A)片外RAM
高8位地址由P2口决定
唯一的4条访问外部数据存储器的指令
[例]
片外RAM 1000H单元中的数
à 片外RAM 2000H单元
MOVX 2000H, 1000H
MOV DPTR, #1000H
MOVX A, @DPTR
MOV DPTR, #2000H
MOVX @DPTR, A
输入/输出指令
片外数据存储器与片外I/O设备统一编址
(如A/D、D/A、I/O芯片等)
堆栈操作指令
2条
PUSH direct ; SP←SP+1
((SP))←(direct)
间接←直接
POP direct ; direct←((SP))
SP←SP-1
直接←间接
[例]
利用堆栈交换70H单元和71H单元的内容
MOV SP, #2FH
PUSH 70H
PUSH 71H
POP 70H
POP 71H
70H
71H
X
Y
错误指令 正确指令
PUSH A PUSH ACC
POP A POP ACC
PUSH R0 PUSH 00H
POP R0 POP 00H
SETB ACC.0
交换指令
4条
XCH A, Rn ;(A)ó(Rn)
XCH A, direct ;(A)ó(direct)
XCH A, @Ri ;(A)ó((Ri))
XCHD A, @Ri ;(A)3~0ó((Ri))3~0
[例]交换30H单元和31H单元的内容
XCH 30H, 31H
MOV A, 30H
MOV 30H, 31H
MOV 31H, A
MOV A, 30H
XCH A, 31H
MOV 30H, A
30H
31H
A
X
Y
X
Y
X
Y
[例]
交换片外RAM 3000H单元
和片内RAM 30H单元的内容
MOV DPTR, #3000H
MOVX A, @DPTR
MOV R0, #30H
XCH A, @R0
MOVX @DPTR, A
片外
3000H
片内
30H
DPTR
A
R0
X
Y
3000H
X
30H
Y
X
Y
3.4算术运算指令
24条
加法指令
ADD A, Rn ;A←(A)+(Rn)
ADD A, direct ;A←(A)+(direct)
ADD A, @Ri ;A←(A)+((Ri))
ADD A, #data ;A←(A)+data
[例]
MOV A, #0C3H
MOV R0, #0AAH
ADD A, R0
二进制加法 无符号数 有符号数
1100 0011 195 -61
+) 1010 1010 +) 170 +) -86
1 0000 01
0110 1101 365 -147
CY=1 最高进位位
(无符号数运算溢出标志位)
CS=0 次高进位位
AC=0 辅助进位位(半进位位)
OV=1 溢出标志位 = CYCS
(有符号数运算溢出标志位)
带进位加法指令
ADDC A, Rn ;A←(A)+(Rn)+CY
ADDC A, direct ;A←(A)+(direct)+CY
ADDC A, @Ri ;A←(A)+((
展开阅读全文