技术文档

8051单片机 寻址 单片机系列第八讲 单片机寻址方式与指令系统

小编 2024-11-25 技术文档 23 0

单片机系列第八讲 单片机寻址方式与指令系统

通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习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存放等寻找的数据。

最新电子行业资讯、教程以及开发板样片申请,请关注“云汉电子社区”官方微信公众号ickeybbs

8051单片机彻底研究(基础篇)

需要PDF文件书的联系我

第1章单片机的来龙去脉.................................................................2

1-1单片机从头说起.....................................................................2

1-2单片机与个人电脑的比较............................................................2

1-3典型的单片机应用系统.................................................................4

1-4最简化的单片机系统...........................................................................5

1-5单片机开发的实际问题.................................................................7

1-6本书的单片机学习环境....................................................................8

第2章8051单片机简介..............................................................12

2-1微型控制器与微型处理器................................................................12

2-2时势造英雄:MCS-51系列单片机..................................................12

2-38051单片机功能方框图...............................................................14

2-48051系统复位分析...................................................................20

习题.............................................................................................22

第3章单片机的汇编语言....................................................................26

3-18051单片机的程序设计..............................................................26

3-2写汇编程序的预备知识................................................................26

3-3汇编语言的基本架构.................................................................27

3-4写汇编语言前:熟悉寄存器与指令..............................................28

3-5试写一个8051汇编程序..............................................................30

3-6配合示波器做汇编语言的除错......................................................31

3-7更进一步的8051汇编程序.........................................................33

3-88051的反汇编程序....................................................................34

习题............................................................................................34

第4章8051的存储器...........................................................................36

4-18051内部存储器的分配.................................................................36

4-2程序存储器空间..............................................................................37

4-3外部数据存储器空间.....................................................................37

4-4内部数据存储器空间.............................................................38

习题...........................................................................................39

第5章8051指令的寻址模式..............................................................42

5-18051执行指令的过程...............................................................42

5-28051的直接寻址模式............................................................45

5-38051的间接寻址模式...................................................................46

5-48051的寄存器寻址模式...............................................................47

5-58051的立即寻址模式.....................................................................49

5-68051的索引寻址模式....................................................................49

习题..............................................................................................51

第6章 8051指令说明..........................................................................54

6-18051指令格式.................................................................................54

6-28051指令概述.................................................................................54

6-38051指令集整理.......................................................................56

6-4影响标志位的指令.................................................................58

6-58051指令解析一:算术运算指令....................................................59

6-68051指令解析二:逻辑运算与移位指令..........................................62

6-78051指令解析三:数据传送指令.....................................................64

6-88051指令解析四:布尔变量操作指令................................................68

6-98051指令解析五:程序分支指令......................................................69

习题.....................................................................................75

第7章8051单片机的引脚说明.............................................................78

7-18051单片机的引脚...................................................................78

7-2认识AT89C2051........................................................................81

7-38051与AT89C2051的差异...........................................................84

7-4AT89C系列的下一步..............................................................84

习题.............................................................................................8.6

第8章8051基本程序练习..................................................................88

8-1工具的准备............................................................................88

8-28051汇编程序X8051与LINK4的操作................................................89

8-3基础范例一:LED的亮与灭.........................................................90

8-4基础范例二:蜂鸣器的使用.........................................................92

8-5基础范例三:指示灯...................................................................93

8-6基础范例四:七段显示器的使用..................................................95

8-7基础范例五:按键的使用............................................................99

习题.......................................................................................102

第9章8051控制板线路说明..............................................................104

9-1如何选用控制板......................................................................104

9-2AT2051控制板的特点..............................................................105

9-3线路分析.................................................................................105

9-4AT2051控制板的应用与学习方向..................................................108

9-5AT2051元件表及元件照片.........................................................110

9-6组装指南.............................................................................112

9-7组装的测试步骤...................................................................113

第10章8051定时/计数彻底研究......................................................124

10-1什么是定时/计数................................................................124

10-28051定时器和计数器安排......................................................124

10-3定时/计数器相关的寄存器.......................................................125

10-48051的Timer定时/计数器设置步骤...............................................127

10-5 Timer模式0彻底研究...........................................................128

10-6Timer模式1彻底研究..............................................................130

10-7 Timer模式2彻底研究.........................................................137

10-8 Timer模式3彻底研究.........................................................138

10-98051Timer模式3的再探讨.....................................................139

第11章8051中断彻底研究.........................................................142

11-1为何要有中断...............................................................142

11-28051的中断................................................................142

11-5中断的寄存器(IE和IP)的介绍..........................................146

11-68051的中断源彻底研究..........................................................148

11-78051的中断设置步骤............................................................150

11-8AT2051控制板在中断上的安排................................................151

11-9内部计数器0中断程序范例.......................................................151

11-10外部负边沿中断INTO程序范例.............................................157

11-11外部低电平中断程序范例.................................................160

11-12串行传输中断程序范例.....................................................162

习题.........................................................................................168

第12章8051串行通信彻底研究(一).............................................170

12-1为何要通信....................................................................170

12-2如何进行串行通信......................................................171

12-3RS232C的规格...............................................................173

12-48051的串行接口概述..........................................................175

12-5申行传输控制有关的寄存器:SCON.............................................177

12-68051串行传输的波特率设置.....................................................178

12-7串行传输模式0彻底研究..................................................179

12-8串行传输模式1彻底研究.......................................................184

12-9串行传输模式2彻底研究......................................................188

12-10串行传输模式3彻底研究...................................................191

第13章8051串行通信彻底研究(二).................................................196

13-18051的多处理器通信彻底研究......................................................196

13-2AT2051的串行硬件线路分析.........................................................199

13-3AT2051控制板如何与PC连接....................................................200

13-4多处理器通信的写法分析.........................................................201

13-58051串行接口发送硬件分析.....................................................202

13-6串行传输实用程序范例............................................................205

13-7串行传输的应用与影响..........................................................207

习题...........................................................................................208

进阶练习篇

第14章 AT2051进阶练习(一).......................................................210

14-1练习:蜂鸣器的控制................................................................210

14-2练习:中断服务程序所占用的时间..............................................213

14-3练习:七段显示器的初步使用....................................................215

14-4练习:ACC值的转换与显示.......................................................218

14-5练习:BCD值的转换与显示...................................................221

14-6练习:按键操作的确认.............................................................224

14-7练习:学习波形Duty Cycle的计算与显示......................................227

14-8练习:学习温度值的换算与显示...................................................227

14-9练习:温度值每秒读取两次的写法...............................................228

14-10练习:另一种温度测量的写法..................................................229

习题...........................................................................................230

第15章AT2051进阶练习(二)...............................................................234

15-1练习:启动RS485串行通信接口.................................................234

15-2练习:练习温度值转成ASCIⅡ字符串的写法.......................................235

15-3练习:串行传输的写法.........................................................236

15-4练习:串行传输的写法二..........................................................237

15-5练习:将温度的精确度提高到小数点后一位...................................238

15-6练习:串行除错程序的加入.......................................................239

习题.........................................................................................240

第16章AT2051进阶练习(三)...................................................242

16-1练习:写入一个字节的数据到E'PROM 24LC16内...........................242

16-2练习:E2PROM的读回写法分析...............................................243

16-3练习:ID值读取的写法....................................................244

16-4练习:如何判断E2PROM是否存在...........................................245

16-5练习:ID值的在线更改...........................................................246

16-6练习:配合ID调用的串行通信程序........................................246

16-7练习:串行通信程序的除错....................................................247

16-8练习:RS485通信程序的完整版............................................248

第17章汇编语言的写法分析与除错.....................................................254

17-1汇编语言的难点.........................................................................254

17-2写程序的重点..............................................................................254

17-3LED除错法..................................................................................254

17-4蜂鸣器除错法...........................................................................255

17-5DISPLAY除错法.........................................................................255

17-6串行通信除错法.........................................................................256

17-7仪器协助除错法.........................................................................257

17-8高级仪器除错法...................................................................257

习题.......................................................................................258

第18章8051例程归纳整理..................................................................260

18-1清除4个内部DATA MEMORY地址.............................................260

18-2清除4个外部DATA MEMORY地址...............................................260

18-3将外部数据存储器上4个字节值存入内部数据存储器...........................261

18-4将4个内部数据值转存到外部数据存储器中......................................261

18-5内部数据存储器内4字节相加(不含正负符号)...............................262

18-6内部数据存储器的值和外部数据存储器的值相加...............................262

18-7内部数据存储器的4字节相减.....................................................263

18-8将内部数据存储器内的值取补码.................................................263

18-9对外部数据存储器做16位的加法运算.........................................264

18-10对外部存储器做减法运算.........................................................264

18-11内部数据存储器做值的比较..........................................................265

18-12外部数据存储器做整段值的比较.............................................265

18-13内部数据存储器区与累加器做比较...............................................266

18-144字节不含正负符号的乘法运算...............................................266

18-154字节不含正负符号的除法运算...................................................267

18-16对外部数据存储器内的值做异或运算产生一个校验码..........................268

18-17确认外部数据存储器(4字节)的校验码是否正确............................269

18-18在内部数据存储器内产生4个随机数..............................................269

18-19检查外部数据存储器(16位)是否为0000H.....................................270

18-20检查外部数据存储器(16位)的值是否为1000................................271

18-21检查外部数据存储器(16位)的值是否比5000大............................271

18-22将外部数据存储器(16位)值转换成6个BCD码.............................272

18-23将ACC值(<99)转换成两个BCD码..........................................273

18-24将累加器的值转换成3个BCD码...................................................273

18-25检查一段外部数据存储器(2KB)的读写功能...................................274

18-26计算2KB程序空间的校验和(CHECKSUM).......................................274

18-27清除外部数据存储器共2048个地址...............................................275

18-28将1个字节值转换成ASCⅡ码,供数据显示用..................................275

18-29将ASCII码转换成二进.制...................................................276

第19章混合式示波器的认识与使用....................................................280

19-2基本测量示范....................................................................283

19-3特殊信号测量.........................................................................285

第20章数字电表的使用...................................................................288

20-1数字电表功能..............................................................................288

20-2数字电表操作要点...................................................................288

20-3数字电表使用时的特别注意事项...................................................290

20-4AT2051控制板操作示范............................................................291

20-5电表的校正.........................................................................291

习题............................................................................................293

第21章USB烧录器的安装与使用........................................................296

21-1旗威USB烧录器....................................................................296

21-2烧录器的安装...........................................................................296

21-3烧录程序的安装....................................................................297

21-4烧录功能说明............................................................................297

21-5 Files文件菜单......................................................................299

21-6IC芯片菜单........................................................................301

21-7Programmer烧录器菜单.............................................................303

21-8Diagnostic 诊断菜单....................................................................305

21-9USB烧录器特殊用法...............................................................306

21-10USB烧录器注意事项...........................................................307

习题.......................................................................................307

附录............................................................................................309

附录AASCII表..........................................................................309

附录B8051相关IC引脚图............................................................311

附录C8051指令集总整理..................................................................314

附录D8051指令整理(按功能划分)................................................324

附录E8051指令整理(按十六进制排列)..........................................329

附录F8051SFR表与RESET后的初始值.............................................336

附录GSFR特殊功能寄存器整理表....................................................337

附录H如何购买电子元件.............................................................340

附录l如何识别晶体管(三极管)的引脚..............................................342

附录J如何看Data Sheet................................................................345

附录K如何焊接...........................................................................347

附录L如何上网找元件..............................................................349

相关问答

8051 地址译码的方法有?

8051单片机共有7中寻址方式,分别是:1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、变址寻址6、位寻址7、相对寻址8051单片机共有7中寻址方式,分...

送分题(有关 单片机 的,80C51)1. 8051单片机 片内具有__________...

[最佳回答]1:2个外部中断2个内部中断1个串口中断/INT1(外部中断1)2:A3:B4:错5:对6:错保证全对!要求加分!

8051单片机 有多少个接口?

8051一般有40个接口,这里拿我们国产的具有8051核心的芯片STC89C52RC来介绍一下其接口情况。一、芯片简介TC89C52RC芯片是宏晶科技公司生产的STC89系列单片机中...

单片机 - 8051 的程序计数器PC有何作用? 寻址 范围是什么?

程序计数器PC始终指向下一条将要执行的指令地址。寻址范围是0000H~FFFFH。其中0000H~0FFFH为64KB片内和片外公共地址,靠EA来区分。0FFFH~FFFFH为外部程序存储...

8051单片机 内RAM低128字节划分为哪三个部分,有什么作用-ZOL问答

0X00-0X1F为四个通用寄存器区(每个区有8个寄存器),0X20-0X2F为可位寻址空间,0X30-0X7F为直接和间接寻址空间...通用寄存器可分位4个bank(0~3)defaulere...

1.在MCS-51 单片机 外部扩展功能中,它可以提供地址线为()根,数...

[最佳回答]1.在MCS-51单片机外部扩展功能中,它可以提供地址线为(16)根,数据线为(16)根,可寻址的外部数据存储器容量为(64k),可寻址的外部程序存储器容...

8051单片机 有多少io线与外部总线有什么联系?

8051单片机通常具有40个IO线(32个通用IO口和8个双向I/O口),用于与外部设备进行数据输入和输出。这些IO线通过引脚连接到外部电路或器件,以实现与其他设备的通...

说明 8051单片机 内部数据储存区空间分配情况。32个通用寄存器各对应哪些RAM单元?

这256字节被分成两半,低128字节的ram区称为用户数据ram,高128字节为sfr区,sfr区用于保存用户定义的特殊寄存器的数据。为了回答你的第二个问题,我重点说下用...

指令l call a ddr 16能在64k字节范围内调用子程序正确与否?

指令"LCALLA,DDR16"是8051汇编语言中的一种调用子程序的指令。在这个指令中,"L"表示长调用,"CALL"表示调用子程序...

51芯片全称?

51单片机。51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结...

猜你喜欢