单片机系列第八讲 单片机寻址方式与指令系统
通过前面的学习,我们已经了解了单片机内部的结构,并且也已经知道,要控制单片机,让它为我们干学,要用指令,我们已学了几条指令,但很零散,从现在开始,我们将要系统地学习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单片机的指令系统、内部结...