单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用
一、 MCS-51系列单片机的基本硬件结构 硬件结构原理 工作方式
1.1 硬件结构原理 1.1.1 概述 1.1.2 CPU 1.1.3 存储器 1.1.4 并行I/O口 1.1.5 串行I/O口 1.1.6 定时器/计数器 1.1.7 中断 1.1.8 时钟
1.1 硬件结构原理 1.1.1 概述 A.产品简介 Intel公司 MCS—51系列高档8位单片机 1)基本特征 A.产品简介 Intel公司 MCS—51系列高档8位单片机 8051/80C51 8052/80C52 8751 8031 B.主要性能 40脚双列直插式封装 ⑴ 一个8位CPU ⑵ 片内振荡定时电路 ⑶ 内部数据存贮器(RAM)容量 128B/256B ⑷ 内部程序存贮器(ROM)容量 2KB/4KB/…… ⑸ 特殊功能寄存器(SFR) 21个/26个 ⑹ 具有位寻址功能 寻址空间00H ~ FFH ⑺ 外部数据存贮器寻址空间 64KB ⑻ 外部程序存贮器寻址空间 64KB ⑼ 输入/输出口线 32根 ⑽ 16位可编程定时器/计数 2个/3个 ⑾ 可编程为2个优先级的中断源 5个/6个 ⑿ 可通过编程选定的全双工同步/异步的串行口 1个
1.1 硬件结构原理 2种封装形式:40引脚双列直插(DIP)/ 44引脚的PLCC 1.1.1 概述(续) 2)8051的内部总体结构 3) 外部引脚功能 2种封装形式:40引脚双列直插(DIP)/ 44引脚的PLCC 六大部分:数据总线、地址总线、控制总线、I/O线、时钟、电源。 A. 数据总线 P0(BUS) B. 地址总线 P0 (BUS)、 P2 C. 控制总线 ALE/PROG PSEN EA/ VDD RST/VPD D. I/O线 P0 P1 P2 P3 P30— RXD P31—TXD P32 — INT0 P33 —INT1 P34 — T0 P35 —T1 P36 — WR P37 — RD E. 时钟 XTAL1 XTAL2 F. 电源 VSS VCC
MCS-51 VCC P0/BUS VSS P1 XTAL1 XTAL2 P2/AB PSEN P30(RXD) P31(TXD) /8 VSS P1 /8 XTAL1 XTAL2 MCS-51 /8 P2/AB PSEN P30(RXD) P31(TXD) ALE/PROG P32(INT0) P33(INT1) P34(T0) EA/VDD P35(T1) P36(WR) RST/VPD P37(RD)
1.1 硬件结构原理 1.1.2 C P U 1)ALU和布尔处理机 2)累加器A 3)程序状态字寄存器PSW 7 6 5 4 3 2 1 0 C AC F0 RS1 RS0 OV 1 P 4)堆栈指针SP 5)数据指针DPTR
1.1 硬件结构原理 1.1.3 存储器 1) 数据存储器 分内部数据存储器(00H ~ 7FH/00H ~ FFH)和外部数据存储器(0000H ~ FFFFH) A. 内部数据存储器 ①作用 ②寻址空间 内部数据RAM地址空间256B(00H ~ FFH) 特殊功能寄存器地址空间 128B(80H ~ FFH) ③重叠地址的寻址 内部RAM(80H ~ FFH) 只能用寄存器间接寻址 SFR (80H ~ FFH) 只能用直接寻址 ④结构
1.1 硬件结构原理 1.1.3 存储器(续) ⑤SFR 主要功能、分类、名称 ⅰ 算术运算寄存器 A B PSW ⑤SFR 主要功能、分类、名称 ⅰ 算术运算寄存器 A B PSW ⅱ 指针寄存器 SP DPTR ⅲ 并行I/O口(对应PIO) P0 P1 P2 P3 ⅳ 串行I/O口(对应SIO) SCON SBUF PCON ⅴ 定时器/计数器 TMOD TCON TH0 TL0 TH1 TL1 (T2CON TH2 TL2 RCAP2H RCAP2L) ⅵ 中断系统(对应中断控制逻辑) IE IP
1.1 硬件结构原理 7FH(FFH) FFH 数据缓冲区 30H 可直接位寻址 2FH 16个单元,位 地址空间00H ~7FH 20H 工作寄存器区3 18H 17H 工作寄存器区2 10H 0FH 工作寄存器区1 08H 07H 工作寄存器区0 00H 80H 内部RAM 特殊功能寄存器SFR
1.1 硬件结构原理 1.1.3 存储器(续) B. 外部数据存储器 ①作用 存储数据 ②地址空间 0000H ~ FFFFH 64KB ①作用 存储数据 ②地址空间 0000H ~ FFFFH 64KB ③寻址 i )DPTR间接寻址 P0口(BUS) 输出AB7~0 (DPL值) P2口 输出AB15~8(DPH值) 在读写周期保持不变;此时P2口的SFR内容不变,并在读/写选通结束后将在P2口恢复其信息。 ⅱ)R0/R1间接寻址 P0口 输出AB7~0(R0/R1中内容) P2口 输出AB15~8,这不是R0/R1间接寻址本身的功能,而是寻址前用指令事先输出的; R0/R1间接寻址不访问内部RAM而访问外部数据存储器,是由于采用MOVX指令的缘故,这时将产生RD或WR信号(P3口)。
1.1 硬件结构原理 1.1.3 存储器(续) 1)程序存储器 A 作用 存放程序及一些常数(常为表格) B 地址空间 分为片内ROM/EPROM/FLASH 4KB(0000H ~ 0FFFH)和外部程序存储器 64KB (0000H ~ FFFFH) C 寻址 ① 片内程序存储器寻址 PC寻址,EA=1,PC中地址在0000H ~ 0FFFH(或1FFFH )范围内,则不产生PSEN信号,从片内程序存储器寻址 ② 外部程序存储器寻址 PC寻址,两种情况 i EA=1:当PC中地址>0FFFH(或1FFFH)时,产生PSEN信号,在外部程序存储器寻址。 ii EA=0:无论PC中地址为何地址,均产生PSEN信号,在外部程序存储器寻址。
1.1 硬件结构原理 1.1.3 存储器(续) D 专用地址矢量 0000H:复位矢量 0000H~0002H:初始化程序 0003H:外部中断0矢量 0003H~000AH:外部中断0服务程序 000BH:定时器0中断矢量 000BH~0012H:定时器0中断服务程序 0013H:外部中断1矢量 0013H~001AH:外部中断1服务程序 001BH:定时器1中断矢量 001BH~0022H:定时器1中断服务程序 0023H:串行中断矢量 0023H~002AH:串行中断服务程序 (002BH:定时器2中断矢量 002BH~0032H:定时器2中断服务程序) 在固定分配的矢量地址中,若放不下初始化程序或中断服务程序,可在相应矢量地址中放一条转移指令,转到相应程序入口地址。 当不使用某种中断时,该中断的矢量地址8个单元可用作一般程序存储器单元使用。
1.1 硬件结构原理 3) 存储器地址空间的重叠 A 存储器映像 FFFFH FFFFH EA=0/1 1.1.3 存储器(续) 3) 存储器地址空间的重叠 A 存储器映像 FFFFH FFFFH EA=0/1 (1FFFH) (1FFFH) 特殊功能寄存器 0FFFH 0FFFH FFH FFH EA=1 EA=0 7FH 80H 0000H 0000H 00H 0000H 内部程序存储器 外部程序存储器 内部数据RAM 外部数据存储器 程序存储器 数据存储器 B 各地址空间寻址的区分
B 各地址空间寻址的区分 FFFFH FFFFH 程序存储器 数据存储器 FFH FFH @Rj DIRECT MOVC bit 1.1.3 存储器(续) B 各地址空间寻址的区分 FFFFH FFFFH FFH FFH @Rj DIRECT MOVC bit 指令 7FH @Rj 80H DIRECT 特殊功能寄存器 MOVX @Rj 指令 (1FFFH ) DIRECT 0FFFH bit MOVC @Rj 指令 DIRECT Rr 0000H 0000H 00H 0000H 内部程序存储器 外部程序存储器 内部数据RAM 外部数据存储器 程序存储器 数据存储器
1.1 硬件结构原理 1) 结构与工作原理 32根I/O线 4个双向并行I/O口 P0 P1 P2 P3 地址/数据 CPU控制 VCC 1) 结构与工作原理 32根I/O线 4个双向并行I/O口 P0 P1 P2 P3 地址/数据 CPU控制 VCC 读锁存器 D Q P0 . X 锁存器 CL Q 写锁存器 内部总线 读引脚数据 P0. X引脚 MUX
VCC VCC 地址/控制 MUX 读锁存器 P1. X引脚 内部总线 D Q P1 . X 锁存器 CL Q 写锁存器 P2 . X 读引脚数据 P1. X引脚 P2 . X VCC 地址/控制 读锁存器 D Q P2 . X 锁存器 CL Q 写锁存器 内部总线 读引脚数据 P2 . X引脚 MUX
1.1 硬件结构原理 A 输入功能 a)读锁存器 “读–改–写”指令 ANL、JBC、CLR PXY b)读引脚 B 输出功能 VCC 第二输出功能 读锁存器 D Q P0 . X 锁存器 CL Q 写锁存器 内部总线 读引脚数据 I/O引脚 第二输入功能 2) 输入/输出功能 A 输入功能 a)读锁存器 “读–改–写”指令 ANL、JBC、CLR PXY b)读引脚 B 输出功能
1.1 硬件结构原理 1.1.5 串行I/O口 1.1.6 定时器/计数器 1) 定时器/计数器功能
1.1 硬件结构原理
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用
二、 MCS-51指令系统 概述 寻址方式 指令系统 汇编语言程序设计
2.1 概述 2.1.1 指令系统简况 2.1.3 符号及含义 单字节指令 49条 双字节指令 45条 三字节指令 17条 2.1 概述 2.1.1 指令系统简况 111条指令。其中 单字节指令 49条 双字节指令 45条 三字节指令 17条 单周期指令 64条 双周期指令 45条 四周期指令 2条 组合情况 单字节单周期 单字节双周期 单字节四周期 双字节单周期 双字节双周期 三字节双周期 2.1.2 二级表达形式 机器语言 汇编语言 2.1.3 符号及含义 A 累加器 AB 乘除法寄存器对 addr 程序存储器地址 rel 相对地址 Rj 间接寻址用寄存器 Rr 工作寄存器
2.1 概述 bit 位 C 进位标志 data 立即数 DIRECT 直接寻址地址 PC 程序计数器 PSW 程序状态字 2.1 概述 bit 位 C 进位标志 data 立即数 DIRECT 直接寻址地址 PC 程序计数器 PSW 程序状态字 SP 堆栈指针 X 外部数据存储器 # 立即数前缀 @ 寄存器间接寻址前缀 $ 程序计数器的当前值 (X) X中的内容 ((X)) X中的内容为地址的单元中的内容 → 送入
2.2 寻址方式 2.2.1 寻址方式总表 直接寻址 寄存器寻址 间接寻址 寄存器 立即寻址 方式 直接寻址 方式: 间接寻址 直接位寻址 2.2 寻址方式 2.2.1 寻址方式总表 直接寻址 寄存器寻址 间接寻址 寄存器 立即寻址 方式 直接寻址 方式: 间接寻址 直接位寻址 方式: 变址寻址 方式: 立即寻址 变址寻址 相对寻址 直接位寻址 方式 类页面寻址 简表 Rr @Rj DIRECT # data @A+PC bit @A+DPTR rel (AJMP ACALL)
2.2 寻址方式 2.2.2 寻址方式 A 立即寻址 B 寄存器寻址 概念:操作数包含于指令中(指令中直接给出操作数) 2.2 寻址方式 2.2.2 寻址方式 A 立即寻址 类别:立即寻址 概念:操作数包含于指令中(指令中直接给出操作数) 表达:汇编语言 #data 机器语言 n OR nn 例: MOV A,#0FH 74H,0FH MOV DPTR,#1046H 90H,10H,46H 寻址区域:程序存储器 寻址过程及时序 B 寄存器寻址 类别:直接寻址 概念:指令中直接指明存放操作数的寄存器 表达:汇编语言 Rr(r = 0 ∼ 7) 机器语言 ╳8H ∼ ╳FH 例: ADD A,R4 2CH 寻址区域:R0 ~ R7(含4个工作寄存器区,区号以RS1、RS0表达) A、B、AB、DPTR(一般隐含) SFR不是用寄存器寻址方式 寻址过程及时序
2.2 寻址方式 C 直接寻址 类别:直接寻址 概念:指令中直接给出存放操作数的1字节地址,即操作数的有效地址EA存放于操作码后续的1个字节中 表达:汇编语言 m(DIRECT) 机器语言 OP CODE,m 例: ADDC A,61H 35H,61H 寻址区域:内部数据RAM阵列中的任何一个单元,即00H ~ 7FH 特殊功能寄存器SFR:80H ~ FFH 寻址过程及时序 D 寄存器间接寻址 类别:间接寻址 概念:指令中指出存放操作数的1或2字节地址由哪个寄存器给出(仅含Rj和DPTR) 表达:汇编语言 @R0、@R1、@DPTR(此外堆栈操作) 机器语言 略 例: ADD A, @R0 寻址区域:ⅰ) @R0或@R1方式或堆栈指针访问的内部数据RAM区域(00H ~ FFH);ⅱ) @R0、@R1或@DPTR方式访问的外部数据存储器(0000H ~ FFFFH) 寻址过程及时序
2.2 寻址方式 E 变址寻址 类别:变址寻址 概念:基地址(PC和DPTR)和变址(偏移量)寄存器A中内容相加形成操作数的地址或转移地址,这里A中偏移量为无符号数(仅出现在MOVC及转移指令中) 表达:汇编语言 @A+DPTR @A+PC 机器语言 OP CODE表示 例: MOVC A,@A+DPTR MOVC A,@A+PC JMP @A+DPTR 寻址区域:程序存储器(往往是表格形式) 寻址过程及时序 F 相对寻址 类别:变址寻址 概念:指令中给出偏移量(补码),以下条指令的PC值作基地址加上指令给定的相对偏移量即得转移地址 表达:汇编语言 标号 机器语言 rel 例: JNZ NEXT 70H,rel 寻址区域:程序存储器 寻址过程及时序
2.2 寻址方式 G (类页面寻址) 类别:变址寻址 概念:以下条指令的PC值的高 5 位与指令中给出的 11 位相连接而获得所寻址地址(转移地址或子程序入口地址) 表达:汇编语言 AXXXX 符号地址( AJMP 符号地址/ACALL 符号地址) 机器语言 mn(11位地址,A10~0) ,其中m( A10~8)即OP码D7~5,而n在OP码后的一字节,表 A7~0 例: AJMP NEXT 寻址区域:程序存储器 寻址过程及时序 H 直接位寻址 类别:位寻址 概念:指令中指出存放位操作数(0或1)的直接位地址(00H~FFH),该位地址由操作码中的相应位来表达。 表达:汇编语言 bit(00H~FFH或ACC.4、PXY等) 机器语言 bit(00H~FFH) 例: MOV C,P10 A2H,,90H ANL C,90H B0H,90H 寻址区域:内部数据RAM阵列中20~2FH单元中的位:00H~7FH 特殊功能寄存器SFR中的可直接位寻址的位: 80H~FFH 寻址过程及时序
2.2 寻址方式 I 隐含寻址 类别:隐含寻址 概念:指令中以隐含方式指出存放操作数的地址,该地址以操作码来指定,而不提供地址的任何信息。隐含寻址方式是一种不可选择的寻址方式。 表达:汇编语言 指令本身 机器语言 无 例: MOV A,51H MOV DPTR,#4089H MUL AB 寻址区域:专对A、B、AB、DPTR等
2.3 指令系统 MCS-51系列指令系统可分为四大类指令,即:数据传送类指令、算术/逻辑运算类指令、程序控制类指令、位操作类指令。 学习指令系统必须掌握的内容:ⅰ)类别:大类、子类、次级子类;ⅱ)寻址方式:源地址、目标地址允许采用的寻址方式;ⅲ)指令结构及表达格式:单/双操作数指令(源、目地址)、条件等(指令所提供的信息);汇编语言表达格式、机器语言表达格式;ⅳ)指令功能及对标志位的影响;ⅴ)指令执行过程及时序 2.3.1数据传送类指令 A 通用传送指令 ⅰ) MOV 目,源 ;目←(源),1B,寻址:A,#data,Rr,DIRECT,@Rj ⅱ) PUSH 源 ;SP←(SP)+1,(SP) ←(源), 1B,DIRECT ⅲ) POP 目 ; 目← ((SP)), SP←(SP)-1,1B,DIRECT B 累加器专用传送指令
2.3 指令系统 B 累加器专用传送指令 ⅰ) XCH A,源 ;A←(源)同时 源←(A),1B,寻址:Rr,DIRECT,@Rj 2.3 指令系统 B 累加器专用传送指令 ⅰ) XCH A,源 ;A←(源)同时 源←(A),1B,寻址:Rr,DIRECT,@Rj XCHD A,源 ;AD←(源)D同时 源D←(A)D,高半字节不变,寻址:@Rj ⅱ) MOVX A,源 ;A←(源),外部,1B,寻址:@Rj/@DPTR MOVX 目,A ;目←(A),外部,1B,寻址:@Rj/@DPTR ⅲ) MOVC A,源 ;A←(源),源为程序存储器单元,1B,寻址:@A+DPTR/@A+PC C 目标地址传送指令 MOV DPTR,#data ;DPTR←#data ,2B 本大类指令,除对PSW执行POP或MOV指令外,均不影响标志位。 本系列单片机的并行I/O操作、串行I/O操作、定时/计数器操作、中断的某些控制处理,都归于统一的形式——直接寻址SFR的数据传送指令,其区别仅在于寻址不同的(相关的)SFR而已。 直接地址与立即数的区别:立即数有前缀“#”。
2.3 指令系统 2.3.2 算术/逻辑运算类指令 A 算术运算指令 2.3 指令系统 2.3.2 算术/逻辑运算类指令 A 算术运算指令 算术运算指令分为一般算术运算(加、减、乘、除)指令和增量/减量指令两部分。 a)一般算术运算指令 ⅰ) ADD A,* ;A←(A)+(*),寻址:#data、Rr、DIRECT、@Rj ADDC A,* ;A←(A)+(*)+C,寻址:#data、Rr、DIRECT、@Rj ⅱ) DA A ;二→十进制调整(不能用于:二进制数转换为十进制数,减法的二→十进制调整) ⅲ) SUBB A,* ; A←(A)-(*)-C,寻址:#data、Rr、DIRECT、@Rj ⅳ) MUL AB ; AB←(A)(B),8位无符号整数相乘,积的低8位在A,高8位在B,C=0,若积 > FFH,则 OV=1 ⅴ) DIV AB ;A←(A)(B),8位无符号整数相除,无符号整数商送A,无符号整数余送B,C=0,若除数为0,则 (A)、(B)不定,且OV=1
2.3 指令系统 b) 增量/减量指令 ⅰ) INC * ;*←(*)+1,寻址:A、DPTR、Rr、DIRECT、@Rj,其中仅INC DPTR 为双字节运算 ⅱ) DEC * ;*←(*)-1,寻址:A、Rr、DIRECT、@Rj B 逻辑运算指令 逻辑运算指令又分为双操作数指令和单操作数指令。 a)双操作数逻辑运算指令 ⅰ) ORL A,* ;A←(A)∨(*),寻址:#data、Rr、DIRECT、@Rj ORL DIRECT,* ;DIRECT ←(DIRECT)∨(*),寻址:#data、A ⅱ) ANL A,* ;A←(A)∧(*),寻址:#data、Rr、DIRECT、@Rj ANL DIRECT,* ;DIRECT ←(DIRECT)∧(*),寻址:#data、A ⅲ) XRL A,* ;A←(A)(*),寻址:#data、Rr、DIRECT、@Rj XRL DIRECT,* ;DIRECT ←(DIRECT)(*),寻址:#data、A b)单操作数逻辑运算指令
2.3 指令系统 b)单操作数逻辑运算指令 ⅰ) CLR A ;A←0 CPL A ;A←(A) ⅱ) RL A ; RLC A ; 2.3 指令系统 b)单操作数逻辑运算指令 ⅰ) CLR A ;A←0 CPL A ;A←(A) ⅱ) RL A ; RLC A ; RR A ; RRC A ; ⅲ) SWAP A ; C C D7 ~D4 D3 ~D0
2.3 指令系统 2.3.3 控制转移类指令 本大类指令分为三个子类:转移指令(无条件转移指令、条件转移指令)、调用和返回指令、中断控制指令。 A 转移指令 a)无条件转移指令 ⅰ) AJMP addr10~0 ;PC←(PC)+2, PC10~0 ← addr10~0,在2KB范围内跳转,仅当该指令处于2KB页面的最后2B时,方可转移入下一页 ⅱ) LJMP addr15~0 ;PC15~0 ← addr15~0,可转移到任意处 ⅲ) SJMP rel ;PC←(PC)+2, PC←(PC)+rel(rel为补码),可转移到以下一条指令的首地址为中心的256B(-128B,+127B) ⅳ) AJMP @A+DPTR ;PC←(A)+(DPTR),可转移到64KB范围内的任意一处地址 ⅴ) NOP ;空操作,用于调整地址空间或定时时间以及用作调试/修改程序时使用的缓冲单元 b)条件转移指令
2.3 指令系统 b)条件转移指令 ⅰ) JZ rel ; 当(A)= 00H 时,PC←(PC)+2, PC←(PC)+rel(rel为补码);当(A)≠ 00H 时,PC←(PC)+2 JNZ rel ; 当(A)≠ 00H 时,PC←(PC)+2, PC←(PC)+rel(rel为补码);当(A)= 00H 时,PC←(PC)+2 ⅱ) DJNZ *,rel ;*←(*)-1,*寻址方式:Rr、DIRECT,若(*)≠0, PC←(PC)+2(Rr方式)或PC←(PC)+3(DIRECT方式), PC←(PC)+rel(rel为补码);若(*)= 0, PC←(PC)+2(Rr方式)或PC←(PC)+3(DIRECT方式) ⅲ) CJNE *,*′,rel ;(*)-(*′),*寻址方式:A、Rr、@Rj---*′为#data时,*寻址方式:A---*′为DIRECT时,若(*)<(*′),则PC←(PC)+3, PC←(PC)+rel,C←1;若(*)>(*′), 则 PC←(PC)+3 , PC←(PC)+rel,C←0;若(*)=(*′), 则 PC←(PC)+3 B 子程序调用和返回指令
2.3 指令系统 B 子程序调用和返回指令 ⅰ) ACALL addr10~0 ; PC←(PC)+2, SP←(SP)+1,(SP)←(PC7~0), SP←(SP)+1,(SP)←(PC15~8),PC10~0 ← addr10~0 可调用下一条指令所在2KB页内任意指定地址处的子程序;该指令若位于2KB页面的最后2字节,则调用将转向下一页。 ⅱ) LCALL addr15~0 ; PC←(PC)+3, SP←(SP)+1,(SP)←(PC7~0), SP←(SP)+1,(SP)←(PC15~8),PC ← addr15~0 ⅲ) RET ; PC15~8 ←((SP)), SP←(SP)-1, PC7~0 ←((SP)), SP←(SP)-1 C 中断控制指令 RETI ; 主要功能同RET,区别在于:能恢复中断逻辑以准备接收与刚处理完的中断有相同优先级的其它中断。
2.3 指令系统 2.3.4 位操作类指令 本大类指令分为三个子类:位传送指令、位逻辑运算指令、位条件判转指令。 A 位传送指令 2.3 指令系统 2.3.4 位操作类指令 本大类指令分为三个子类:位传送指令、位逻辑运算指令、位条件判转指令。 A 位传送指令 MOV C,* ; C←(*), *寻址:bit MOV *,C ; *←(C), *寻址:bit B 位逻辑运算指令 a) 基本的位逻辑运算指令 ORL C,* ; C←(C)∨(*), *寻址:bit、bit ANL C,* ; C←(C)∧(*), *寻址:bit 、bit b) 位状态控制指令 SETB * ;*←1, *寻址:C、bit CLR * ;*←0, *寻址:C、bit CPL * ;*←(*), *寻址:C、bit
2.3 指令系统 C 位条件判转指令 ⅰ) JC rel ; 若(C)=0, PC←(PC)+2;若(C)=1, PC←(PC)+2, PC←(PC)+rel JNC rel ; 若(C)=1, PC←(PC)+2;若(C)=0, PC←(PC)+2, PC←(PC)+rel ⅱ) JB *,rel ; 若(*)=0, PC←(PC)+3;若(*)=1, PC←(PC)+3, PC←(PC)+rel, *寻址:bit JBC *,rel ; 若(*)=0, PC←(PC)+3;若(*)=1, PC←(PC)+3, PC←(PC)+rel,*←0, *寻址:bit JNB *,rel ; 若(*)=1, PC←(PC)+3;若(*)=0, PC←(PC)+3, PC←(PC)+rel, *寻址:bit
2.4 汇编语言程序设计 2.4.1 简单程序设计 · 简单程序设计 · 结构程序设计 · 算术运算程序设计 2.4 汇编语言程序设计 · 简单程序设计 · 结构程序设计 · 算术运算程序设计 · 代码和数制转换程序设计 · 排序、搜索程序设计 · 浮点运算子程序设计 2.4.1 简单程序设计 例. RAM中60H单元中存有一个带符号数,求其绝对值,存入外部数据存储器2460H单元。 解.源程序可编制为: MOV A,60H JNB ACC.7,DONE CPL A INC A DONE: MOV DPTR,#2460H MOVX @DPTR,A
2.4 汇编语言程序设计 例. 外部数据存储器自2400H单元开始的区域中存储有100个带符号一字节数,找出其中最大的一个,存入RAM60H单元中。 解. 源程序可编制为: MOV DPTR,#2400 MOV R2,#63H MOVX A,@DPTR MOV R0,A AGAIN: INC DPTR CLR C SUBB A,R0 JNB PSW.2,NEXT JNB ACC.7,UNEXCH EXCH: MOVX A,@DPTR SJMP UNEXCH NEXT: JNB ACC.7,EXCH UNEXCH: DJNZ R2,AGAIN MOV 60H,R0
2.4 汇编语言程序设计 例. 将内部RAM中SOURCE开始的二个字节拆成四个半字节,并将结果存入内部RAM中RESULT开始的四个单元中。 DISA: MOV A,SOURCE RR A MOV R0,# RESULT RR A ANL A,#0F0H RR A RR A RR A RR A MOV @R0,A RR A INC R0 RR A MOV A, SOURCE+1 MOV @R0,A ANL A,#0FH INC R0 MOV @R0,A MOV A, SOURCE ANL A,#0FH MOV @R0,A INC R0 MOV A,SOURCE+1 ANL A,#0F0H
2.4 汇编语言程序设计 例. 查表求数字 0 ~9的显示字模子程序 功能:将ACC中存放的 0 ~ 9 的数字的字模从程序后面的字模表中查出, 存入内部数据存储器 RAM中 RESULT单元中。 DISP: CLR C SUBB A,#$0AH JNC RRET MOV DPTR,#TAB MOVC A,@A+DPTR MOV RESULT,A DRET: RTS RRET: TAB: DB 3FH, 06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH
2.4 汇编语言程序设计 2.4.2 结构程序设计 例. 将自外部数据存储器SOURCE开始的50个数据的累加和存放到自内部数据存储器DESI开始的二字节中。 SADD: MOV DPTR,#SOURCE CLR A MOV B,A MOV R2,#50 LOOP: ADD A,@DPTR JNC NEXT INC B NEXT: INC DPTR DJNZ R2,LOOP MOV DESI,A MOV DESI+1,B
2.4 汇编语言程序设计 例. 将自内部数据存储器SOURCE开始的100个数据中的所有正数相加,并将其累加和存放到自内部数据存储器BUFF开始的二字节中。 SPAD: MOV R0,#SOURCE CLR A MOV BUFF,A MOV BUFF+1,A MOV R2,#100 LOOP: MOV A,@DPTR JZ NEXT JB ACC.7,NEXT MOV A,BUFF ADD A,@DPTR JNC NEXT INC BUFF+1 NEXT: INC DPTR DJNZ R2,LOOP
Copyright@Keter.com 2003-2003 All right