51单片机寻址方式_第1页
51单片机寻址方式_第2页
51单片机寻址方式_第3页
51单片机寻址方式_第4页
51单片机寻址方式_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、思考题与习题部分参考答案51单片机的寻址方式寻址方式:指定操作数所在单元的方法。在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行 分析。一、立即寻址用“#”作前缀MOV A #20H在这种寻址方式中,指令多是双字节的。立即数就是存放在程序存储 器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。例如: MOV A, #3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能 是把立即数3AH送入累加器A中。MOV DPTR, #8200H在前面学单片机的专用寄存器时,我们已学过, DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组 成。这

2、条指令的意思就是把立即数的高 8位(即82H)送入DPH寄存 器,把立即数的低8位(即00H)送入DPL寄存器。二、直接寻址指令中直接给出操作数的地址。MOV A, 30H;这条指令中操作数就在 30H单元中,也就是30H是 操作数的地址,并非操作数。MOV 30H, DPH在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址 空间以及特殊功能寄存器, 具体的说就是:1、内部数据存储器RAM氐128单元。在指令中是以直接单元地址形 式给出。我们知道低128单元的地址是00H-7FH.在指令中直接以单元地址形 式给出这句话的意思就是这 0-127共128位的任何一位,例如0位是 以0

3、0H这个单元地址形式给出、1位就是以01H单元地址给出、127 位就是以7FH形式给出。2、位寻址区。20H-2FH地址单元。3、特殊功能寄存器。专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。例如下面我们分析的一条指令 MOV IE , #8 5H前面的学习我们已知道,中断允许寄存器 IE的地址是80H,那么 也就是此指令也可以以 MOV 80H, #85H的形式表述。直接寻址是唯一能访问特殊功能寄存器的寻址方式!大家来分析下面几条指令:MOV 65H A;将A的内容送入内部RAM勺65H单兀地址中MOV A direct;将直接地址单元的内容送入 A中MOV direct,d

4、irect;将直接地址单元的内容送直接地址单元MOV IE,#85H;将立即数85H送入中断允许寄存器IE前面我们已学过,数据前面加了 “#”的、表示后面的数是立即数(如 #85H,就表示85H就是一个立即数), 数据前面没有加“ #”号的, 就表示后面的是一个地址地址 (如,MOV 65H A这条指令的65H就是 一个单元地址)。3、寄存器寻址操作数存放在工作寄存器 R0 R7中,或寄存器B中。MOV A R2寄存器寻址的寻址范围是:1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当 前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们 已知道,是由程序状态字 PSV的R

5、S1和RS0来确定的),因此在使 用前常需要通过对PSV的RS1 RS0位的状态设置,来进行对当前工 作寄存器组的选择。2、部分专用寄存器。例如,累加器 A、通用寄存器B、地址寄存器DP TR和进位位C¥寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能 得到操作数。例如:MOV A R0这条指令的意思是把寄存器 R0的内容传送到累加器A中,操作数就在 R0中。INC R3这条指令的意思是把寄存器 R3中的内容加1从前面的学习中我们应可以理解到, 其实寄存器寻址方式就是对由 PSW程序状态字确定的工作寄存器组的 R0-R7进行读/写操作。4、寄存器间接寻址指令中寄存器的内容

6、作为操作数存放的地址,指令中 间接寻址寄存器 前用“表示前缀。寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。A:MCS-51单片机规定工作寄存器的RQ R1做为间接寻址寄存器。用 于寻址内部或外部数据存储器的256个单元。为什么会是256个单元 呢?我们知道,R0或者R1都是一个8位的寄存器,所以它的寻址空 间就是2的八次方=256。例:MOV R0 #30H ;将值30H加载到R0中MOV A , R0;把内部RA观址30H内的值放到累加器 A中MOVX A , R0;把外部RA观址30H内的值放到累加器 A中B:大家想想,如果用D

7、PTR故为间址寄存器,那么它的寻址范围是多少 呢? DPT以一个16位的寄存器,所以它的寻址范围就是 2的十六次 方=65536=64K因用DPTR故为间址寄存器的寻址空间是 64K,所以访 问片外数据存储器时,我们通常就用 DPTRt为间址寄存器。例:MOV DPTR #1234H ;将 DPTF®设为 1234H (16 位)MOVX A , DPTR ;将外部RA贼I/O 地址1234H内的值放 到累加器A中C:在执行PUSH压栈)和POP(出栈)指令时,采用堆栈指针 SP作寄 存器间接寻址。例:PUSH 30H;把内部RA观址30H内的值放到堆栈区中堆栈区是由SP寄存器指定的

8、,如果执行上面这条命令前,SP为60H,命令执行后会把内部 RA观址30H内的值放到RAM勺61H内。那么做为寄存器间接寻址用的寄存器主要有哪些呢?我们前面提到的有四个,RQ R1、DPTR SP寄存器间接寻址范围总结:A、内部RAM氐128单元。对内部RAM氐128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为 Ri(i=0或1)。B、外部RAM 64KB对外部RAM64K曲间接寻址,应使用 DPTR间址寻址寄存器,其形式为 DPTR例如MOVX A DPTR其功能是把DPT做旨定的外部RAM勺单元的内容 送入累加器A中。外部RAM勺低256单元是一个特殊的寻址区,除可以用DPT

9、R乍间址寄 存器寻址外,还可以用R0或R1作间址寄存器寻址。例如MOVX A R0这条指令的意思是,把 R0指定的外部RAMI元 的内容送入累加器A。G堆栈操作指令(PUS怦日POP也应算作是寄存器间接寻址,即以 堆栈指针SP作间址寄存器的间接寻址方式。寄存器间接寻址方式不可以访问特殊功能寄存器! !寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址 和寄存器间接寻址的区别,在寄存器间接寻址方式中,寄存器的名称 前面加前缀标志“ 。5、基址寄存器加变址寄存器的变址寻址MOV A A + DPTR操作数地址=变地址+基地址基地址寄存器DPTR或PC; 变址寄存器A该寻址方式常用于访问程

10、序存储器,查表。这种寻址方式以程序计数器 PC或DPTF基址寄存器,累加器A为变 址寄存器,变址寻址时,把两者的内容相加,所得到的结果作为操作 数的地址。这种方式常用于访问程序存储器 ROM的数据表格,即查 表操作。变址寻址只能读出程序内存入的值,而不能写入,也就是说变址寻址 这种方式只能对程序存储器进行寻址,或者说它是专门针对程序存储 器的寻址方式。例:MOVC A A+DPTR这条指令的功能是把DPTF A的内容相加,再把所得到的程序存储器 地址单元的内容送A。假若指令执行前A=54H DPTR=3F21H则这条指 令变址寻址形成的操作数地址就是 54H+3F21H=3F75H如果3F75

11、H单元中的内容是7FH则执行这条指令后,累加器 A中的内容就是7FK变址寻址的指令只有三条,分别如下:JMP A+DPTRMOVC A, A+DPTRMOVC A, A+PC第一条指令JMP A+DPTR这是一条无条件转移指令,这条指令的意思就是DPT。口上累加器A的内容做为一个16位的地址,执行JMP条指令是,程序就转移到A +DPTRt定的地址去执行。第二、三条指令 MOVC A A+DPTR MOVC A A+PCf令这两条指令的通常用于查表操作,功能完全一样,但使用起来却有一定的差别,现详细说明如下:我们知道,PC是程序指针,是十六位的。DPT睡一个16位的数据指 针寄存器,按理,它们

12、的寻址范围都应是 64K。我们在学习特殊功能 寄存器时已知道,程序计数器 PC是始终跟踪着程序的执行的。也就 是说,PC的值是随程序的执行情况白动改变的,我们不可以随便的给PC赋值。而DPT睡一个数据指针,我们就可以给空的数据指针 DPTR 进行赋值。我们再看指令MOVC A, A+P瓯条指令的意思是将PC 的值与累加器A的值相加作为一个地址,而 PC是固定的,累加器A 是一个8位的寄存器,它的寻址范围是256个地址单元。讲到这里, 大家应可明白,MOVC A, A+PCt条指令的寻址范围其实就是只能 在当前指令下256个地址单元。所在,这在我们实际应用中,可能就 会有一个问题,如果我们需要查

13、询的数据表在256个地址单元之内,则可以用MOVC A, A+P成条指令进行查表操作,如果超过了 256 个单元,则不能用这条指令进行查表操作。刚才我们已说到,DPT睡一个数据指针,这个数据指针我们可以给它赋值操作的。通过赋值操 作。我们可以使MOVC A, A+DPTR条指令的寻址范围达到 64K。 这就是这两条指令在实际应用当中要注意的问题 。变址寻址方式是MCS-5伸片机所独有的一种寻址方式。6、位寻址 80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应 的位寻址方式。所谓位寻址,就是对内部 RAhM可位寻址的特殊功能 寄存器SFR内的某个位,直接加以置位为1或复位为0。位

14、寻址的范围,也就是哪些部份可以进行位寻址:A、我们在学习51单片机的存储器结构时,我们已知道在单片机的内 部数据存储器RAM勺低128单元中有一个区域叫位寻址区。 它的单元 地址是20H-2FK共有16个单元,一个单元是8位,所以位寻址区共 有128位。这128位都单独有一个位地址,其位地址的名字就是 00H -7FH。这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学 习中00H 01H。7FH等等,所表示的都是一个字节(或者叫单 元地址),而在这里,这些数据都变成了位地址。我们在指令中,或 者在程序中如何来区分它是一个单元地址还是一个位地址呢?这个问 题,也就是我们现在正在研究的

15、位寻址的一个重要问题。其实,区分 这些数据是位地址还是单元地址,我们都有相应的指令形式的。这个 问题我们在后面的指令系统学习中再加以论述。B、对专用寄存器位寻址。这里要说明一下,不是所有的专用寄存器都 可以位寻址的。具体哪些专用寄存器可以哪些专用寄存器不可以,请9思考题与习题部分参考答案大家回头去看看我们前面关于专用寄存器的相关文章。一般来说,地址单元可以被8整除的专用寄存器,通常都可以进行位寻址,当然并不是全部,大家在应用当中应引起注意。(后面有详细介绍)7、相对寻址把指令中给定的地址偏移量与本指令所在单兀地址(PC内容)相加得到真正有效的操作数所存放的地址。举“李同学20岁,张同学比李同学

16、大3岁”的例子。JC 60H ;设(PC = 2000H ,则当C = 1时,转移的目的地址=(PQ + 2 + 60H专用寄存器的位寻址表示方法:卜面我们以程序状态字PSV#进行说明D7D6D5D4D3D2D1D0CYACF0RS1RS0OVP1、 直接使用位地址表示:看上表,PSW的第五位地址是D5,所以可以表示为D5HMOV C, D5H2、位名称表示:表示该位的名称,例如PSW的位5是F0,所以可以用F0表示MOV C, F03、 单元(字节)地址加位表示:D0H单元位5,表示为DOH.5MOV C,D0H.54、专用寄存器符号加位表示:例如PSW.5MOV C,PSW.5这四种方法实

17、现的功能都是相同的,只是表述的方式不同而已。例题:1.说明下列指令中源操作数采用的寻址方式。MOV R5 R7答案:寄存器寻址方式MOV A 55H直接寻址方式MOV A # 55H立即寻址方式JMP A+DPTR变址寻址方式MOV 30H C位寻址方式MOV A R0间接寻址方式MOVX A,R0间接寻址方式改错题请判断下列的MCS-51单片机指令的书写格式是否有错,若有,请 说明错误原因。MOV R0 R3答案:间址寄存器不能使用R2R7。MOVC A R0+DPTR变址寻址方式中的间址寄存器不可使用 R0,只可使用AADD R0 R1运算指令中目的操作数必须为累加器 A,不可为RCLMU

18、L A R0乘法指令中的乘数应在B寄存器中,即乘法指令只可使用 AB寄存器组合。MCS51单片机指令系统与汇编语言程序设计1. 8051单片机的指令系统有何特点?解:8051的指令系统由111条指令组成。如果按字节数分类,有 49条单字节指令46条双字 节指令和16条三字节指令,以单字节指令为主;如果按照指令执行时间分类,有 64条单周 期指令、45条双周期指令和2条四周期指令,以单周期指令为主。8051的指令系统具有以下特点:(1) 存储效率高、执行速度快,可以进行直接地址到直接地址的数据传送, 能把一个并行 I/O 口中的内容传送到内部 RAM单元中而不必经过累加器 A或工作寄存器 Rn。

19、这样可以大 大提高传送速度和缓解累加器 A的瓶颈效应。(2) 用变址寻址方式访问程序存储器中的表格,将程序存储器单元中的固定常数或表格字 节内容传送到累加器 A中。这为编成翻译算法提供了方便。(3) 在算术运算指令中设有乘法和除法指令(4) 指令系统中一些对I/O 口进行操作的指令具有“读修改写”的功能。这一功能指:在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2度入内部,进行修改、改变,然后重新写到锁存器中去。这种类型指令包含所有的逻辑操作和位操作指令。(5) 8051单片机内部有一个布尔处理器,对为地址空间具有丰富的位操作指令。布尔操作类指令有17条,包括布尔传送指令、

20、布尔状态控制指令、布尔逻辑操作指令、布尔条件转 移指令。2. 8051单片机指令系统按功能可分为几类?具有几种寻址方式?它们的寻址范围如何?解:MCS-51单片机指令系统按功能可分为5类:(1) 数据传送指令(2) 算术运算指令(3) 逻辑运算和移位指令(4) 控制转移指令(5) 位操作指令MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表:寻址方式使用的变量寻址范围立即寻址程序存储命直接寻址内部RAM低128个字七; 特殊功能寄存器SFR寄存器寻址R0R7; A、B、DPTR、C寄存器间接寻址R0、R1、SP内部RAM、堆栈指针SPR0、R1、DPTR外部RAM变址寻址A

21、+PC、A+DPTR程序存储命相对寻址PC+偏移量程序存储命位寻址内部RAM低128B位寻址区 可位寻址的特殊功能寄存器位3. 访问特殊功能寄存器和外部数据存储器应采用哪种寻址方式?解:访问特殊功能寄存器,应采用直接寻址、位寻址方式。访问外部数据存储器,应采用寄存器间接寻址方式。在0255B范围内,可用寄存器 RQ R1间接寻址:MOVX A , R0 或 MOVX A, R1MOVX R0, A 或 MOVX R1 , A在064KB范围内,可用16位寄存器DPTR'可接寻址:MOVX A , DPTRMOVX DPTR , A4. “DA A”指令的作用是什么?怎样使用?解:这条指

22、令是在进行 BCD码加法运算时,跟在“ ADD ”和“ ADDC ”指令之后,用来对 BCD码的加法运算结果自动进行修正的,使其仍为BCD码表达形式。在计算机中,遇到十进制调整指令时, 中间结果的修正是由 ALU硬件中的十进制修正电路自 动进行的。用户不必考虑何时该加 “6 ”,使用时只需在上述加法指令后面紧跟一条“DA A指令即可。5.片内RAM 20H2FH 单元中的128个位地址与直接地址 00H7FH形式完全相同,如何在 指令中区分出位寻址操作和直接寻址操作?解:虽然内部RAM位寻址区的位地址范围 00H7FH与低128个单元的单元地址范围 00H7FH形式完全相同,但是在应用中可以通

23、过指令的类型区分单元地址和位地址。位寻址的操作只适用于下列位指令,而直接寻址操作对这些指令是无效的。MOV C , bitMOV bit , CCLR bitSETB bitCPL bitANL C , bitANLC , /bitJB bit, relJNB bit, rel 6. 8051单片机指令系统中有长跳转 LJMP,长调用LCALL指令,为何还没有设置了绝对跳 转AJMP,绝对调用ACALL指令?在实际使用是应怎样考虑?解:在实际应用中,可从寻址范围和指令长度两个方面来选择长跳转指令LJMP和短跳转指令AJMP、长调用指令 LCALL和短调用指令 ACALL 。长跳转LJMP在64

24、KB范围内转移,而短跳转AJMP只能在2KB空间转移。长调用LCALL 调用位于64KB程序空间的子程序,而短调用ACALL调用位于2KB程序空间范围的子程序。 AJMP、ACALL指令代码长度为2个字节;LJMP、LCALL指令代码长度为3个字节。7. SJMP, AJMP和LJMP指令在功能上有何不同?解:指令的转移范围不同。SJMP是256B范围内的相对转移指令,AJMP是2KB范围内的无条件短跳转指令,LJMP 是64KB范围内的无条件长跳转指令。8. MOVC A , DPTR 与 MOVX A , DPTR 指令有何不同?解:指令的转移范围不同。SJMP是256B范围内的相对转移指

25、令,AJMP是2KB范围内的无条件短跳转指令,LJMP 是64KB范围内的无条件长跳转指令。9. 在 “MOVC A , A+DPTR” 和 “ MOVC A , A+PC ”中,分别使用了 DPTR 和 PC 作基址,请问这两个基址代表什么地址?使用中有何不同?解:使用A+DPTR基址变址寻址时,DPTR为常数且是表格的首地址,A为从表格首址到 被访问字节地址的偏移量。使用A+PC基址变址寻址时,PC仍是下条指令首地址, 而A则是从下条指令首地址到 常数表格中的被访问字节的偏移量。10.设片内RAM中的(40H ) =50H ,写出执行下列程序段后寄存器 A和R0,以及片内RAM 中50H和

26、51H单元的内容为何值?MOV A, 40HMOV R0, AMOV A, #00MOV R0, AMOV A, #30HMOV 51H, AMOV 52H, #70H解:结果为:(A) = 30H(R0) =50H(50H) = 00H(51H) = 30H11.设堆栈指针(SP) =60H ,片内RAM 中的(30H) =24H , (31H)= 10H。执行卜列程序段后,61H , 62H, 30H,31H,DPTR及SP中的内容将有何变化?解:结果为:(61H)=24H(62H)=10H(30H)=00H(31H)=0FFHDPTR=2410HSP=60H12.在8051的片内 RAM

27、 中,已知(20H) =30H , (30H) =40H , (40H)=50H , (50H) =55H。分析下面各条指令,说明源操作数的寻址方式,分析按顺序执行各条指令后的结果。MOV A, 40HMOV R0, AMOV P1, #0F0HMOV R0, 20HMOV 50H, R0MOV A , R0MOV P2, P1解:指令源操作数的寻址方式执行指令后的结果MOV A,40H直接寻址(A)=50HMOV R0,A寄存器寻址(R0)=50HMOV P1,#80H立即寻址(P1)=80HMOV R0,20H寄存器间接寻址(50H)=30HMOV DPTR,#2000H立即寻址(DPTR

28、)=2000HMOV 40H,30H直接寻址(40H)=40HMOV R0,30H直接寻址(R0)=40HMOV D0H,R0直接寻址(D0H)=40H17思考题与习题部分参考答案立即寻址寄存器间接寻址寄存器寻址(10H)=10H(A)=50H(P2)=80HMOV 10H,#10HMOV A,R0MOV P2,P113.完成以下的数据传送过程。(1) R1的内容传送到 R0。(2) 片外 RAM 20H 单元的内容送 R0。(3) 片外 RAM 20H 单元的内容送片内 RAM 20H(4) 片外RAM 1000H单元的内容送片内 RAM 20H(5) 片外 RAM 20H 单元的内容送 R

29、0。(6) 片外 RAM 2000H 单元的内容送片内 RAM 20H(7) 片外 RAM 20H 单元的内容送片外 RAM 20H解:(1) R1的内容传送到R0 ;MOVA, R1MOVR0,A(2)片外 RAM 20H 单元内容送 R0 ;MOVDPTR,#0020HMOVXA,DPTRMOVR0,A(3)片外 RAM 20H 单元的内容送片内 RAM 20H 单元;MOVDPTR,#0020HMOVXA,DPTRMOV20H,A(4)片外 RAM 1000H 单元的内容送片内RAM 20H 单元;MOV DPTR,#1000HMOVXA,DPTRMOV20H,A(5)ROM 2000H

30、 单元的内容送 R0单元;MOVA,#00HMOV DPTR, #2000HMOVCA, A+DPTRMOVR0H,A(6)ROM 2000H 单元的内容送片内 RAM 20H 单元;MOVA,#00HMOV DPTR, #2000HMOVCA, A+DPTRMOV20H, A(7)ROM 2000H 单元的内容送片外 RAM 20H 单元。MOVDPTR,#2000HMOVCA, A+DPTRMOVDPTR,#0020HMOVXDPTR,A14. 设有两个 4位BCD码,分别存放在片内 RAM 的23H , 22H单元和33H , 32H单元中, 求它们的和,并送入 43H , 42H单元中

31、去。(以上均为低位字节,高位在高字节) 。解:ORG 0000HLJMP STARTORG 0030HSTART: MOV A , 22HADD A , 32H DA AMOV 42H , AMOV A , 23HADDC A , 33HDA AMOV 43H , A SJMP $ END15. 编程将片内 RAM 的40H60H单元中内容送到片外 RAM 以3000H开始的单元中。解:ORG 0000HLJMP MAINORG 0030HMAIN : MOV R7 , #20HMOV R1 , #40HMOV DPTR , #3000HLOOP : MOV A , R1MOVX DPTR ,

32、 AINC R1INC DPTRDJNZ R7 , LOOPSJMP $ END16. 编程计算片内 RAM区30H37H的8个单元中数的算术平均值,结果存在3AH单元中。解:ORG 0000HLJMP MAINORG 0030HMAIN : MOV R0 , #30HMOV R1 , #00HMOV R2 , #00HMOV R3 , #07HLP2 :MOV A , R0ADD A , R2 MOV R2 , A JNC LP1 INC R1 LP1 :INC R0DJNZ R3 , LP2MOV R3 , #03HLP3 :CLR CMOV A , R1 RRC AMOV R1 , A MOV A , R2 RRC A MOV R2 , A DJNZ R3 , LP3 MOV 3AH , R2 SJMP $ END17.编写计算下式的程序, 设乘积的结果均小于和2002H单元中,结果存于 2000H单元中。(A+B* (A+B ) +10若Y= (A+B ) * (A+B )(A+B ) * (A+B ) -10解:255, A , B值分别存放在片外 RAM 的2001H(A+B ) * (A+B ) 10若(A+B ) * (A+B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论