8课单片机寻址方式与指令系统
单片机原理及应用电子教案课件

单片机原理及应用电子教案课件第一章:单片机概述1.1 单片机的定义和发展历程1.2 单片机的特点和应用领域1.3 单片机的分类和主要性能指标1.4 单片机的发展趋势和前景第二章:单片机的基本组成原理2.1 单片机的硬件组成2.2 单片机的软件组成2.3 单片机的工作原理2.4 单片机的时序和工作状态第三章:单片机的指令系统3.1 单片机的指令格式和分类3.2 单片机的寻址方式3.3 单片机的常用指令及其功能3.4 单片机的特殊指令及其功能第四章:单片机的编程技术和应用4.1 单片机的编程语言和工具4.2 单片机的编程步骤和技巧4.3 单片机的程序调试和优化4.4 单片机的应用领域及实例第五章:单片机的接口技术和扩展应用5.1 单片机接口技术的基本概念5.2 单片机的并行接口和串行接口5.3 单片机的外设接口及驱动电路5.4 单片机的扩展应用及实例第六章:单片机的中断系统6.1 中断系统的概念和分类6.2 单片机中断系统的工作原理6.3 单片机中断系统的编程和应用6.4 外部中断源的识别和应用实例第七章:单片机的定时器和计数器7.1 定时器和计数器的基本概念7.2 单片机定时器和计数器的工作原理7.3 单片机定时器和计数器的编程和应用7.4 定时器和计数器应用实例第八章:单片机的串行通信接口8.1 串行通信的基本概念和标准8.2 单片机串行通信接口的工作原理8.3 单片机串行通信的编程和应用8.4 串行通信接口应用实例第九章:单片机的人机交互接口9.1 人机交互接口的基本概念9.2 单片机与显示器接口的编程和应用9.3 单片机与键盘接口的编程和应用9.4 单片机与鼠标和触摸屏接口的编程和应用第十章:单片机的开发工具和环境10.1 单片机开发工具的分类和功能10.2 单片机编程软件的使用和操作10.3 单片机仿真器和调试器的工作原理和使用方法10.4 单片机开发环境和项目的创建与管理第十一章:单片机在工业控制中的应用11.1 工业控制中的单片机概述11.2 单片机在工业现场的作用与地位11.3 工业控制中单片机的典型应用案例11.4 工业控制中单片机的选型与设计要点第十二章:单片机在嵌入式系统中的应用12.1 嵌入式系统的基本概念12.2 单片机在嵌入式系统中的应用12.3 嵌入式系统设计的基本原则与步骤12.4 嵌入式系统应用实例分析第十三章:单片机在物联网中的应用13.1 物联网的基本概念与发展趋势13.2 单片机在物联网中的作用与地位13.3 物联网中单片机的应用案例分析13.4 物联网中单片机的选型与设计要点第十四章:单片机在消费电子中的应用14.1 消费电子中的单片机概述14.2 单片机在常见消费电子产品中的应用14.3 消费电子中单片机的选型与设计要点14.4 消费电子中单片机的最新发展趋势第十五章:单片机实验与实践15.1 单片机实验的重要性与目的15.2 单片机实验设备与材料15.3 单片机实验项目与步骤15.4 单片机实验结果分析与总结重点和难点解析本教案主要介绍了单片机原理及应用,内容涵盖了单片机的基本概念、硬件组成、指令系统、编程技术、接口技术、中断系统、定时器和计数器、串行通信接口、人机交互接口、开发工具和环境、工业控制应用、嵌入式系统应用、物联网应用、消费电子应用以及实验与实践等方面。
第3章80C51的指令系统

另一类直接寻 址是转移目标地 址的寻址。如: LJMP ADDR16
操作数 在50H单元
50H
3AH
E5H 50H
MOV A,50H
RAM
3AH
ACC
ROM
SFR
2021/6/23
15
❖ 定义:将操作数的地址直接存放在指令中,这种 寻址方式称为直接寻址。
❖ 特点:指令中含有操作数的地址。该地址指出了 参与操作的数据所在的字节单元地址或位地址。 计算机执行它们时便可根据直接地址找到所需要 的操作数。
第3章 80C51的指令系统
3.1 指令格式及常用符号
3.2 80C51的寻址方式
3.3 数据传送指令
(29条)
3.4 算数运算指令
(24条)
3.5 逻辑运算与循环类指令(24条)
3.6 控制转移类指令
) 3.7 位操作类指令
(17条 (17条)
2021/6/23
1
❖ 指令:CPU按照人们的意图来完成某种操作的命令。
24
❖ 定义:将程序计数器PC的当前值(取出本条指令后的PC 值)与指令第二个字节给出的偏移量(rel)相加,形成 新的转移目标地址。称为相对寻址方式。
❖ 特点:相对寻址方式是为实现程序的相对转移而设计的, 为相对转移指令所使用,其指令码中含有相对地址偏移量, 能生成浮动代码。
❖ 如: SJMP rel
寻址范围:只能对程序存储器ROM进行寻址,主要用于 查表性质的访问。
2021/6/23
22
注意:累加器A中存放的操作数地址相对基地址的 偏 移 量 的 范 围 为 00H ~ FFH ( 无 符 号 数 ) 。 MCS-51单片机共有以下三条变址寻址指令:
3-2寻址方式

• 学习单片机的寻址方式及其功能
• 学习如何判断一条是何种寻址方式
1、MCS-51单片机的指令系统有几种寻址方式 2、什么是立即数 3、什么直接寻址 4、直接寻址方式与立即寻址方式有什么区别 5、寄存器寻址、寄存器间接寻址、变址寻址、 位寻址、相对寻址的概念 6、七种寻址方式分别有什么特征
•
指令包含操作码和操作数,有些指令直接 给出参与运算和操作的数,但更多指令只 是以各种方式给出操作数所在的地址。单
片机通过地址信息寻找操作数的方式,称
为寻址方式。寻址方式越多,表明计算机
的功能越强,灵活性越好。
单片机C51的寻址方式
1、寻址方式:寻找操作数或指令的地址的方式。
2、寻址方式的种类:共有7种,
• [例 ] • •
MOV A,#30H MOV DPTR,#1240H 则A和DPTR的内容是多少?
直接寻址
1. 概念:
指令中直接给出操作数所在地址的寻址方式称为直接寻址
2. 寻址空间
片内RAM( 128字节)
如:MOV A,50H ;以50H为地址,寻找到的内容,送给A
• 例如:MOV A,30H 这条指令中操作数就在30H单元中,也 就是30H是操作数的地址,并非操作数。
寄存器寻址、直接寻址、寄存器间接寻址、
立即寻址、 变址寻址、 相对寻址和位寻址。
立即寻址
1、指令中的操作数只是数据,而不是地址,这样的操作数就称
为立即数,立即数直接参与操作,这种寻址方式称为立即寻
址。
2、立即数
大多是一个字节的8位二进制数
标识:#源操作数
3、寻址空间:ROM
• 4、例如:
(1)MOV A,#3AH
计算机系统结构多媒体教程课件_第二章 寻址方式和指令优化1

各自单独编址构成各个一维 线性地址。 例:MEM编址,I/O地址。 特点:指令字长较短,地址 形成简单,MEM编址空间大,但指 令中应有区分各类对象标志及使 用约定增加指令OP(操作码) 长度指令译码复杂。
2013-8-31 计算机系统结构多媒体教程 5
统一编址不同对象在一 维统一空间中个占一段地址 空间。 例:VAX/11、MSC—51系 列单片机,6502。 特点:简化指令系统(只 存MEM RD/WR指令),但MEM 空间减少。
1、寻址方式 2、数据表示 3、指令优化
2013-8-31 计算机系统结构多媒体教程 1
寻址方式定义:指令为了得到 所需数据或信息而去寻找(或 访问)的方式。 2.1.1 寻址方式分析 2.1.2 逻辑地址与MEM物理地址 转换
2013-8-31 计算机系统结构多媒体教程 2
1、寻址对象 2、编址方式 3、寻址方式 4、寻址方式在指令中指 明(表达)形式
2013-8-31 计算机系统结构多媒体教程
19
优点:1、不增加硬件,全部用软件实现 2、静态定位装入程序可以对多个程序段组 成的程序进行静态链接,且实现简单。 缺点: 指令地址码修改出错,易导致其他 程序被破坏。妨碍程序可再入性实现, 对提高主存利用率不利。多用户不能共 享放在主存的同一程序,每个用户必须 在各自主存空间存放一个副本。大程序 超过分配的主存容量,必须用覆盖结构。 难于调试、诊断。不利于流水技术采用。
2013-8-31 计算机系统结构多媒体教程 8
面向寄存器寻址方式: OP r,m 例:MOV AL,(2000H) OP r1,r2 MOV AL,BL r:寄存器地址,m:MEM单元地 址, OP:操作码。
2013-8-31 计算机系统结构多媒体教程 9
专题四 MCS-51指令系统-第三章 单片机的指令系统

8、指令字节数和机器周期数
第三章 单片机的指令系统
是必须掌握的内容。 Ø 一台计算机所有指令的集合, 称为该计算机的指令系统。 Ø 各种计算机都有专用的指令系统。
Ø 本章主要介绍单片机的寻址方式及指令系统,
学时分配:2学时 1—53+97+98+99 2学时 54—96 100
第三章 单片机的指令系统 • 3.1 MCS-51 指令系统概述
类
按指令字长分类
按指令执行时间分类
3.2 寻址方式
• 寻址方式:7种
– – – – – – – – – 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址间接寻址 相对寻址 位寻址 寻址方式与寻址空间 MCS-51单片机的两个突出特点
寄存器寻址——操作数存放在寄存器中
寄存器为 MOV A,R0 MOV R0,#01001111B R0~R7,A,DPTR,C SETB RS0 MOV R3,#56H
目的寻址为直接寻址
2) 20H ~2FH 可位寻址区的寻址方式
字节寻址方式: 直接寻址 direct
寄存器间接寻址@R0,@R1
位寻址: bit 直接寻址
例: MOV 26H,C ; 位寻址 (26H)1位
MOV 26H,A ;字节寻址(26H)8位
3) 30H ~7FH 数据缓冲区的寻址方式
字节寻址方式: 直接寻址 direct
MOV A,#23H
PUSH ACC
;
A寄存器寻址
POP
0E0H
;直接寻址
4、可做片内RAM的指针有:
R0,R1, 四个组共有8个 预先设置RS1、RS0,以选定组。 SETB RS0 CLR RS1; 1组
指令系统与汇编语言程序设计

1010011i n
85 n1 n2
MOV DPTR,#d1d2 ;DPTR←d1d2
90 d1 d2
习题1:找出配对指令,实精现选p反pt 向传送。
《单片机原理及应用》教学课件
例2-4-1:顺序执行下列指令序列,求每一步执行结果。
MOV A,#30H
;A= 30H
MOV 4FH,A
;(4FH)= 30H
2-1 指令格式
一. 汇编语言指令格式 [标号:]操作码 操作数1,操作数2[;注释]
换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数
1.标号:指令的符号地址 2.操作码:指明指令功能。 3.操作数:指令操作对象 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。
第2章 指令系统与汇编语言程序设计 2-1 指令格式 2-2 指令寻址方式 2-3 状态标志 2-4 MCS-51指令系统
《单片机原理及应用》教学课件
单片机指令系统概述
一、MCS-51指令分类
MCS-51单片机共有111条指令。 1.按指令所占的字节数分类
①单字节指令49条 ②双字节指令46条 ③三字节指令16条 每条指令的平均字节数:
精选ppt
《单片机原理及应用》教学课件
例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要 求将查表求Y,存入片内RAM21H单元。
2)指令地址
1000H 1002H 1004H 1005H 1007H 1008H 100BH
源程序
ORG 1000H
;程序起始地址
SQU: MOV A,20H ;取X
操作码和操作数是指令主体。
精选ppt
单片机常用指令
计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。
MCS-51单片机汇编语言指令格式:操作符目的操作数,源操作数指令中的常用符号Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器dir : 8 位直接字节地址(片内RAM 和SFR )#data: 8位立即数,即8位常数。
可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16 : 表示16位地址addr11 : 表示11位地址rel : 相对偏移量(为一字节补码)用于相对转移指令中bit :位地址,在位地址空间中。
$: 表示当前指令的地址。
寻址方式1、立即寻址指令中直接给出操作数的寻址方式。
在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。
立即寻址中的数,称为立即数。
例如指令:MOV A,#30H2、直接寻址操作数的地址直接出现在指令中。
寻址对象:①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。
3、寄存器寻址操作数存放在寄存器中。
寻址对象:A,B,DPTR,R0~R7 。
B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。
A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC例如:MOV A,R0 ;R0→A,A、R0均为寄存器寻址,机器码E8MUL AB ;A*B→BA,A、B为寄存器寻址,机器码A4MOV B,R0 ;R0→B,R0为寄存器寻址,B为直接寻址机器码88F0,其中F0为B的字节地址(见表1-2)PUSH ACC ;A的内容压入堆栈机器码C0E04、寄存器间址操作数存放在以寄存器内容为地址的单元中。
8051单片机寻址方式
8051单片机寻址方式8051单片机共有7种寻址方式。
寻址方式是指令中确定操作数的形式,用来确定操作数所处的存储空间。
1.立即寻址:在指令中直接给出操作数MOV A, #80H 8位操作数MOV A, #2000H 16位操作数2.直接寻址:指令中直接给出操作数地址(1)SFR,这一存储空间只能使用直接寻址MOV PSW, #50H(2)内部数据RAM,这一存储空间可以使用直接寻址和寄存器间接寻址MOV A, 30H3.寄存器寻址:以通用寄存器的内容作为操作数(通用寄存器包括A, B, DPTR, R0~R7)INC DPTR注意:A、B既是通用寄存器,也是SFR(直接寻址)4.寄存器间接寻址:以寄存器中的内容作为操作数的地址能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP区分内部数据RAM寻址和外部数据RAM寻址:外部数据RAM寻址指令上采用MOVX 对内部数据RAM寻址:使用8位的R0或者R1即可MOV @R0, A对外部数据RAM寻址:使用P2端口提供高8位地址,使用R0或者R1提供低8位地址;或者使用16位的DPTR提供地址MOVX A, @R1MOVX @DPTR, A5.变址寻址:以基址寄存器PC或者DPTR与变址寄存器A中的内容之和作为操作数的地址变址寻址只能对程序存储器中的数据进行寻址,由于程序存储器是只读的,因此变址寻址只有读操作,指令上采用MOVCMOVC A, @A+DPTRMOVC A, @A+PC6.相对寻址:用于修改PC的值,使得PC加上指令中给出的一字节的偏移量由于转移指令有两字节和三字节这两种形式,因此偏移量的范围分别为-126~+129和-125~+130SJMP 80H7.位寻址:以位地址中的内容为操作数SETB 20HMOV 32H, C总结一下各种寻址方式的使用场合:立即寻址:常数直接寻址:SFR和内部数据RAM寄存器寻址:寄存器区寄存器间接寻址:内部数据RAM和外部数据RAM变址寻址:程序存储器相对寻址:PC位寻址:位地址区。
[物理]单片机3第三章寻址方式
北京化工大学 信息科学与技术学院 郭 青
1
第三章
本章重点
寻址方式
80C51指令系统
指令格式
操作结果及对标志位影响
3.1
111条指令
概述
29 24 24 17
数据传送类指令 数学运算类指令
分类
逻辑运算类指令 控制转移类指令
位操作指令
17
单字节指令 按指令长度分类
双字节指令
三字节指令 12个振荡周期 64
COUNT:PUSH DPH; 保护DPTR内容
PUSH DPL;
MOV DPTR,#TABLE ;赋表首地址给DPTR
MOVC A, @A+DPTR
; POP DPL; 根据A中内容查表 恢复DPTR内容 返回主程序
POP DPH
RET;
ORG 1000H TABLE:DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 81
19
3.3.1 数据传送类指令
按操作方式,分为三种: 数据传送 数据交换 栈操作
一、普通传送类指令 格式: MOV (目的操作数),(源操作数) 操作码助记符 操作: 将源操作数单元内容,传送到目的操作数 单元中,源操作数内容不变。不影响标志 位Cy,AC和OV。
操作数的组合关系
1、立即数的传送 MOV A, #data MOV Rn, #data (A) (Rn) #data #data
d:MOV direct,#data
将8位立即数送入由direct直接寻址的地 址单元中。 direct:00H~FFH,8位二进制地址码
寻址内部RAM(00H~7FH)及SFR
微机原理 单片机 第3章 80C51的指令系统
(2)指令编码字节少。单字节指令有49 条,双字节指令有45条,三字节指令仅 有17条。 (3)位操作指令丰富,这使得80C51单 片机的控制功能方便灵活。
<
>
返回
三、指令编码格式
[标号]: 操作码 [目的操作数] [,源操作数] [;注释]
标号:表示指令的符号地址,可作为转移的目 标地址。 操作码:用来规定该指令要执行的操作性质, 如MOV,ADD,ORL,LJMP等,操作码通常可用1个 字节表示。 操作数:表示在执行过程中所完成的操作对象, 根据指令功能,可有0、1、2、3个操作数,用12个字节表示。 注释:方便用户阅读。
< > 返回
二、指令分类
80C51单片机系统共有111条指令,按指令 功能分为: ♦数据传送(28条) ♦算术运算(24条) ♦逻辑运算(25条) ♦控制转移(17条) ♦位操作指令(17条) 其指令系统的特点是: (1)执行时间短。单机器周期指令有64条,双 机器周期指令有45条,而四机器周期指令仅有 乘、除法2条。当主频为12MHz时,典型指令执 行时间为1us。
+5V C3 K R1 RST
89C51
相应程序:MOV P1,#00H;灯亮
ACALL delay ;延时 MOV P1,#01H;灯灭 ACALL delay
学习指导和要求
• 理解和掌握指令的 三种编码格式; • 熟练掌握七种寻址 方式; • 熟记各种类型的指 令格式及功能,并 能编写简单程序。
80C51的机器指令按编码的字节数可分为 如下三种指令编码格式:
1、单字节指令(49条)
7 0
opcode 7 opcode 3 2 reg 0 0 0 0 0 1 1 1 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让
它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地
学习8051单片机的指令部份。
一、概述
1、指令的格式
我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只
能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第一种格式就是机
器码格式,也说是数字的形式。但这种形式实在是为难我们人了,太难记了,于是有另一种
格式,助记符格式,如MOV P1,#0FFH,这样就好记了。 这两种格式之间的关系呢,我们
不难理解,本质上它们完全等价,只是形式不一样而已。
2、汇编
我们写指令使用汇编格式,而计算机和单片机只懂机器码格式,所以要将我们写的汇编格
式的指令转换为机器码格式,这种转换有两种办法:手工汇编和机器汇编。手工汇编实际上
就是查表,因为这两种格式纯粹是格式不一样,所以是一一对应的,查一张表格就行了。不
过手工查表总是嫌麻烦,所以就有了计算机软件,用计算机软件来替代手工查表,这就是机
器汇编。
二、单片机的寻址
让我们先来复习一下我们学过的一些指令:MOV P1,#0FFH,MOV R7,#0FFH这些指令都
是将一些数据送到对应的位置中去,为什么要送数据呢?第一个因为送入的数能让灯全灭掉,
第二个是为了要实现延时,从这里我们能看出来,在用单片机的编程语言编程时,经常要用
到数据的传递,事实上数据传递是单片机编程时的一项重要工作,一共有28条指令(单片
机共111条指令)。下面我们就从数据传递类指令开始吧。
分析一下MOV P1,#0FFH这条指令,我们不难得出结论,第一个词MOV是命令动词,也
就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规
定做什么事情,后面还有一些参数,分析一下,数据传递必须要有一个“源”也就是你要送
什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条单片
机指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。在
数据传递类指令中,均将目的地写在指令的后面,而将源写在最后。
这条指令中,送给P1是这个数本身,换言之,做完这条指令后,我们能明确地知道,P1
中的值是0FFH,但是并不是任何时候都能直接给出数本身的。例如,在我们前面给出的单
片机延时程序例是这样写的:
MAIN: SETB P1.0 ;(1)
LCALL DELAY ;(2)
CLR P1.0 ;(3)
LCALL DELAY ;(4)
AJMP MAIN ;(5)
;以下子程序
DELAY: MOV R7,#250 ;(6)
D1: MOV R6,#250 ;(7)
D2: DJNZ R6,D2 ;(8)
DJNZ R7,D1 ;(9)
RET ;(10)
END ;(11)
表1
-----------------------------------------------------
MAIN: SETB P1.0 ;(1)
MOV 30H,#255
LCALL DELAY ;
CLR P1.0 ;(3)
MOV 30H,#200
LCALL DELAY ;(4)
AJMP MAIN ;(5)
;以下子程序
DELAY: MOV R7,30H ;(6)
D1: MOV R6,#250 ;(7)
D2: DJNZ R6,D2 ;(8)
DJNZ R7,D1 ;(9)
RET ;(10)
END ;(11)
表2
这样一来,我每次调用延时程序延时的时间都是相同的(大致都是0.13S),如果我提出这
样的要求:灯亮后延时时间为0.13S灯灭,灯灭后延时0.1秒灯亮,如此循环,这样的程序
还能满足要求吗?不能,怎么办?我们能把延时程序改成这样(见表2):调用则见表2中的
主程,也就是先把一个数送入30H,在子程序中R7中的值并不固定,而是根据30H单元中
传过来的数确定。这样就能满足要求。
从这里我们能得出结论,在数据传递中要找到被传递的数,很多时候,这个数并不能直接
给出,需要变化,这就引出了一个概念:如何寻找操作数,我们把寻找操作数所在单元的地
址称之为寻址。在这里我们直接使用数所在单元的地址找到了操作数,所以称这种办法为直
接寻址。除了这种办法之外,还有一种,如果我们把数放在工作寄存器中,从工作寄存器中
寻找数据,则称之为寄存器寻址。例:MOV A,R0就是将R0工作寄存器中的数据送到累加
器A中去。提一个问题:我们知道,工作寄存器就是内存单元的一部份,如果我们选择工
作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOV A,00H,和MOV A,R0
不就没什么区别了吗?为什么要加以区别呢?的确,这两条指令执行的结果是完全相同的,
都是将00H单元中的内容送到A中去,但是执行的过程不一样,执行第一条指令需要2个
周期,而第二条则只需要1个周期,第一条指令变成最终的目标码要两个字节(E5H 00H),
而第二条则只要一个字节(E8h)就能了。
这么斤斤计较!不就差了一个周期吗,如果是12M的晶体震荡器的话,也就1个微秒时
间了,一个字节又能有多少?
不对,如果这条指令只执行一次,也许无所谓,但一条指令如果执行上1000次,就是1
毫秒,如果要执行1000000万次,就是1S的误差,这就很可观了,单片机做的是实时控制
的事,所以必须如此“斤斤计较”。字节数同样如此。
再来提一个问题,现在我们已知,寻找操作数能通过直接给的方式(立即寻址)和直接给出
数所在单元地址的方式(直接寻址),这就够了吗?
看这个问题,要求从30H单元开始,取20个数,分别送入A累加器。
就我们目前掌握的办法而言,要从30H单元取数,就用MOV A,30H,那么下一个数呢?
是31H单元的,怎么取呢?还是只能用MOV A,31H,那么20个数,不是得20条指令才能
写完吗?这里只有20个数,如果要送200个或2000个数,那岂不要写上200条或2000条
命令?这未免太笨了吧。为什么会出现这样的状况?是因为我们只会把地址写在指令中,所
以就没办法了,如果我们不是把地址直接写在指令中,而是把地址放在另外一个寄存器单元
中,根据这个寄存器单元中的数值决定该到哪个单元中取数据,比如,当前这个寄存器中的
值是30H,那么就到30H单元中去取,如果是31H就到31H单元中去取,就能解决这个问
题了。怎么个解决法呢?既然是看的寄存器中的值,那么我们就能通过一定的办法让这里面
的值发生变化,比如取完一个数后,将这个寄存器单元中的值加1,还是执行同一条指令,
可是取数的对象却不一样了,不是吗。通过例程来说明吧。
MOV R7,#20
MOV R0,#30H
LOOP:MOV A,@R0
INC R0
DJNZ R7,LOOP
这个例程中大部份指令我们是能看懂的,第一句,是将立即数20送到R7中,执行完后
R7中的值应当是20。第二句是将立即数30H送入R0工作寄存器中,所以执行完后,R0单
元中的值是30H,第三句,这是看一下R0单元中是什么值,把这个值作为地址,取这个地
址单元的内容送入A中,此时,执行这条指令的结果就相当于MOV A,30H。第四句,没学
过,就是把R0中的值加1,因此执行完后,R0中的值就是31H,第五句,学过,将R7中的
值减1,看是否等于0,不等于0,则转到标号LOOP处继续执行,因此,执行完这句后,将
转去执行MOV A,@R0这句话,此时相当于执行了MOV A,31H(因为此时的R0中的值已
是31H了),如此,直到R7中的值逐次相减等于0,也就是循环20次为止,就实现了我们
的要求:从30H单元开始将20个数据送入A中。
这也是一种寻找数据的办法,由于数据是间接地被找到的,所以就称之为间址寻址。注意,
在间址寻址中,只能用R0或R1存放等寻找的数据。