实训2 单片机指令系统实训
2.1 数据传送指令实训
2.1.1 实训目的
1. 学习传送指令的寻址方式;
2. 掌握数据传送指令的功能、助记符及使用方法。
2.1.2 相关知识
1. MCS—51单片机存储器的结构
MCS—51型单片机的存储器组织结构可以分为三个不同的存储空间,分别是:
● 外部数据存储器(外RAM);
● 内部数据存储器(内RAM),包括特殊功能寄存器;
● 程序存储器(ROM),包括片内ROM和片外ROM。
(1)数据存储器(RAM)。
数据存储器(RAM)用于存放程序运行中间数据和最终结果。MCS—51单片机数据存储器分成片内RAM和片外RAM,其中片内RAM有128个单元(地址是00H 7FH),还有一个特殊功能寄存器(SFR)区。
① 片内数据寄存器地址是8位,共128个单元,分成工作寄存区、位寻址区和用户RAM区。
② 特殊功能寄存器专门用于控制、管理片内算术逻辑部件、并行I/O口、串行I/O口、定时/计数器、中断系统等各功能部件。MCS—51系列单片机有18个专用寄存器,其中3个为双字节,共占用21个字节。
(2)程序存储器(ROM)。
程序存储器(ROM)用于存储编好的程序。MCS—51单片机内有4KB单元的ROM,若扩展,容量可达到64KB,地址范围为0000H FFFFH,用EA控制片内ROM和片外ROM寻址。
2. MCS—51单片机的指令系统
(1)指令格式。
MCS—51单片机指令的格式由操作码助记符和操作数组成,基本格式为:
指令地址:操作码助记符 目的操作数,源操作数;注释
(2)寻址方式。
在单片机的运算中,可以通过寻找存放操作数的存储单元的地址找到该操作数。寻址方式就是得到存储单元地址的方法,MCS—51系列单片机共有7种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。
① 立即寻址。
在立即寻址中,直接给出参与运算的操作数,即指令中操作数就是具体数字,而不是存储单元的地址,该操作数称为立即数,用“#”标志。
例如:
MOV A,#40H; A ←40H
表示把立即数40H送累加器A中。
② 直接寻址。
在直接寻址中,操作数的存放地址直接在指令中给出。
例如:
MOV A,50H; A ←(50H)
表示把内部RAM 50H单元的内容送到累加器A中。
③ 寄存器寻址。
指令中寄存器存放的内容就是操作数。寄存器寻址是寻找这个寄存器,以便对寄存器进行读写操作。能实现这种寻址功能的寄存器是:累加器A、寄存器B、通用寄存器R0 R7、数据指针寄存器DPTR等。
例如:
MOV A,R0; A ←(R0)
表示把通用寄存器组中的R0的内容送到累加器A中。
④ 寄存器间接寻址。
在寄存器间接寻址中,寄存器中存放的不是操作数,而是操作数所在单元的地址,可以通过这个地址值找到地址单元。
具有间接寻址功能的寄存器有R0、R1、DPTR和SP。间接寻址的寄存器前面加“@”标志。
例如:假定R0寄存器的内容是30H,30H单元的内容是73H,
MOV A,@R0; A ←((R0))
表示以R0寄存器内容30H为地址,把该地址单元的内容73H送累加器A中。
⑤ 变址寻址。
当访问程序存储器的某存储单元时,该单元地址的构成是基址寄存器(PC或DPTR)的内容与变址寄存器(A)的内容相加得出的十六位地址组成。
例如:
MOVC A,@A+DPTR; A ←(A+DPTR)
表示把DPTR和A的内容相加作为单元的地址,再把该地址单元的内容送累加器A中。
⑥ 相对寻址。
相对寻址是把PC当前值与指令给出的偏移量rel相加,形成转移的目的地址。它在转移指令中,用于指定转移的目标地址。其中,rel是带符号的8位二进制补码数,取值范围是-128 +127。
⑦ 位寻址。
位寻址是指对片内RAM的位寻址区或SFR进行位操作的寻址方式。
例如:
MOV C,3AH; C ←(3AH)
表示把位地址3AH的单元内容送位累加器C中。
(3)数据传送指令。
① 内部数据存储器的访问指令。
● 以累加器A为目的的操作数指令
MOV A,#data ;(A)← #data MOV A,direct ;(A)←(direct) MOV A,Rn ;(A)←(Rn) MOV A,@ Ri ;(A)←((Ri))
指令功能是把源操作数的内容送累加器A,但源操作数的内容不变。
● 以Rn为目的的操作数指令
MOV Rn,#data ;(Rn)← #data MOV Rn,direct ;(Rn)←(direct) MOV Rn,A ;(Rn)←(A)
指令功能是把源操作数的内容送到当前工作寄存器组Rn(R0 R7)中的某个寄存器,源操作数的内容不变。
● 以直接地址为目的的操作数指令
MOV direct,#data ;(direct)← #data MOV direct2,direct1 ;(direct2)← direct1 MOV direct,A ;(direct)←(A) MOV direct,Rn ;(direct)←(Rn) MOV direct,@Ri ;(direct)←((Ri))
指令功能是把源操作数的内容送到直接地址指出的存储单元中,源操作数的内容不变。
● 以间接地址为目的的操作数指令
MOV @ Ri,#data ;((Ri))← #data MOV @ Ri,direct ;((Ri))←(direct) MOV @ Ri,A ;((Ri))←(A)
指令功能是把源操作数的内容送到以间接寄存器Ri(R0或R1)的内容为地址的内部RAM存储单元中,源操作数的内容不变。
② 外部数据存储器的访问指令。
累加器A与外部数据存储器RAM传送指令。
MOVX A,@ Ri ;A ← (( Ri)) MOVX A,@ DPTR ;A ← (( DPTR)) MOVX @ Ri,A ;(Ri) ← (A) MOVX @ DPTR,A ;(DPTR) ← (A)
指令功能是把累加器A和外部扩展的RAM或I/O口之间的数据进行传送。指令助记符为MOVX,使用DPTR或Ri作为间接寻址寄存器。
③ 程序存储器的访问指令。
MCS—51单片机使用MOVC指令访问程序存储器,该指令既用于访问内部ROM,也可以用于访问外部ROM。
MOVC A,@ A + PC ;A ←((A)+(PC)) MOVC A,@ A + DPTR ;A ←((A)+(DPTR))
指令功能是将基址寄存器(PC或DPTR)的内容与偏移量(A)的内容相加得出的数据作为地址,然后根据地址在ROM中找出存储单元,把该存储单元的内容送累加器A。指令助记符为MOVC。
2.1.3 实训要求
1. 根据程序的指令写出操作数的寻址方式,分析程序指令的功能,写出结果;
2. 在程序运行前,检查目的操作数单元和源操作数单元的内容;
3. 单步运行程序,观察是否传送成功。
2.1.4 实训设备
MCS—51单片机教学实训系统一台。
2.1.5 实训内容及步骤
1. 实训内容
数据传送指令实训程序:
ORG 2000H MOV R0,#60H MOV R1,#61H MOV A,R0 MOV 70H,A MOV 71H,70H MOV A,#70H MOV @ R0,A MOV A,70H MOV R1,A MOV A,@ R0 MOV R5,A MOV DPTR,#500H MOV 40H,R5 MOV 50H,@ R0 MOV 55H,#88H MOV @ R0,40H MOV @ R1,#38H L1:SJMP L1 END
2. 实训步骤
(1)把程序存入单片机的存储器中;
(2)检查程序是否正确无误;
(3)分析每条指令的结果;
(4)用单步运行方式顺序执行程序中的每一条指令,查看并记录每条指令的运行结果,比较运行结果并分析结果。
2.1.6 实训报告
1. 写出程序运行的最后结果。
2. 每条指令的运行结果和分析结果是否相同?为什么?
3. 通过本次实训你有何收获?对存在的问题请给出分析与建议。