51单片机的寻址方式
- 格式:doc
- 大小:43.00 KB
- 文档页数:7
51单片机寻址方式在单片机的世界里,寻址方式就像是寻找宝藏的地图和指南。
对于51 单片机而言,掌握好寻址方式是深入理解其工作原理和进行有效编程的关键。
51 单片机的寻址方式主要包括立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址这七种。
首先来聊聊立即寻址。
在立即寻址中,操作数直接包含在指令中。
这就好比你已经知道了宝藏的确切位置,指令中给出的就是这个确切的“位置”。
比如“MOV A,50H”这条指令,其中“50H”就是立即数,单片机直接使用这个数进行操作,速度快,效率高。
直接寻址是另一种常见的方式。
它直接给出操作数所在的存储单元地址。
就像是告诉你宝藏在哪个房间,你直接去那个房间就能找到。
例如“MOV A,50H”,这里的“50H”表示的是内部数据存储器的地址,单片机通过这个地址去获取数据。
寄存器寻址则是通过指定寄存器来获取操作数。
寄存器就像是你的贴身口袋,数据就在里面,取用方便。
比如“MOV A,R0”,这里就是把寄存器 R0 中的内容送到累加器 A 中。
寄存器间接寻址稍微有点复杂。
它是通过寄存器中的内容作为地址,再去寻找操作数。
这有点像通过一个中间人告诉你宝藏的位置。
比如“MOV A,@R0”,先看 R0 中的值,把这个值当作地址,然后从这个地址中取出数据送到 A 中。
变址寻址则在访问程序存储器中的数据表格时非常有用。
它通过基址寄存器(DPTR 或 PC)与变址寄存器(A)的相加来得到操作数的地址。
可以想象成你从一个起点出发,根据特定的变化规则找到最终的目标。
相对寻址常用于跳转指令。
它是基于当前程序计数器(PC)的值加上一个相对偏移量来确定目标地址。
这就像你在一条路上,根据当前位置和一个相对距离来找到下一个要去的地方。
最后是位寻址。
在 51 单片机中,有一部分存储单元可以按位进行操作。
这就像是能够精确地找到宝藏箱子上的特定锁扣。
比如“SETB20H0”,就是把内部数据存储器 20H 单元的第 0 位设置为 1。
51 单片机片内256 字节数据存储器的结构划分以及对应的寻址方式1. 引言1.1 概述在现代电子技术的快速发展下,单片机已经成为各种电子设备中必不可少的核心控制部件之一。
而51单片机作为最常用的单片机之一,其内部结构和功能一直备受关注。
本文将主要探讨51单片机中的一个重要组成部分——256字节数据存储器,介绍其结构划分以及对应的寻址方式。
1.2 文章结构本文总共包含五个部分。
首先是引言部分,介绍文章的概述、结构和目的。
第二部分将详细阐述51单片机中256字节数据存储器的结构划分,强调其在整个单片机系统中的重要性。
第三部分将着重介绍对应于256字节数据存储器的寻址方式,包括直接寻址方式、间接寻址方式和寄存器间接寻址方式等。
第四部分将通过具体实例来探讨256字节数据存储器在不同应用场景下的使用方法和优化方案。
最后一部分是结论和展望,在对前文进行总结基础上,提出未来研究方向和发展建议。
1.3 目的本文旨在深入探讨51单片机中256字节数据存储器的结构划分和对应的寻址方式,通过具体实例的分析,揭示其在不同应用场景下的优势和应用方法。
希望通过本文的研究和讨论,读者能够更好地理解和应用256字节数据存储器,为单片机系统设计提供有益的参考和指导。
2. 51单片机片内256字节数据存储器的结构划分2.1 片内数据存储器的重要性在嵌入式系统设计中,片内数据存储器是非常重要的组成部分。
它用于存储程序指令、变量数据以及其他运行时需要使用的临时数据。
片内数据存储器的规模和结构会直接影响到系统性能和资源利用率。
2.2 51单片机中的256字节数据存储器概述51单片机是一款广泛应用于各种电子设备中的经典单片机。
其中包含了一个256字节大小的片内数据存储器,用于存储程序指令和变量数据。
这256字节数据存储器可以被划分为不同的区域,每个区域有不同的功能和使用方式。
下面将介绍这些区域以及其对应功能。
2.3 256字节数据存储器的物理结构划分在51单片机中,256字节数据存储器可以被划分为以下几个区域:1) SFR(特殊功能寄存器)区域:这个区域占据了部分地址空间,用于保存各种特殊功能寄存器的值。
单片机的几种寻址方式
寻址就是寻找指令中操作数或操作数所在的地址。
所谓寻址方式,就是如何找到存放操作数的地址,把操作数提取出来的方法。
通常指源操作数的寻址方式。
MCS-51 系列单片机寻址方式共有七种:寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。
1、寄存器寻址
寄存器寻址是指操作数存放在某一寄存器中,指令中给出寄存器名,就能得到操作数。
寄存器可以使用寄存器组R0~R7 中某一个或其它寄存器(A,B,DPTR 等)。
例如:
MOV A,R0 ;(R0 )→A
MOV P1,A ;(A)→P1
ADD A, R0 ;(A)+(R0) →A。
51系列单⽚机的寻址⽅式AT89C51单⽚机能直接认识和执⾏的机器指令有255条,有7种寻址⽅式,即⽴即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。
1. 直接寻址:指令中直接给出参与操作的数据的地址,该地址⼀般⽤direct表⽰。
汇编指令:MOV A,direct该指令的功能是将⽚内RAM地址direct单元中的内容(参与操作的数据)传送到累加器A中,双字节指令。
2. ⽴即寻址:指令中直接给出参与操作的数据,称⽴即数,⽤data表⽰。
在汇编语⾔中,为标明⽴即数,为data加前缀”#”。
⽴即数可以是8位和16位⼆进制数,分别⽤#data和#data16表⽰。
汇编语⾔指令:MOV A,#data该指令将⽴即数data传送到累加器A中,双字节指令。
3. 寄存器寻址:参与操作的数据存放在寄存器中,汇编指令中直接以寄存器名来表⽰参与操作的数据地址,寄存器包括⼯作寄存器R0~R7、累加器A、AB、数据指针DPTR和位运算寄存器C。
汇编语⾔指令:MOV A,Rn ;n=0~7该指令将Rn中的内容传送到累加器A中,单字节指令。
4. 寄存器间接寻址:寄存器间接寻址为⼆次寻址,第⼀次寻址得到寄存器的内容为(Ri)或(DPTR),第⼆次寻址是将第⼀次寻址得到的寄存器内容作为地址,并在其中存、取参与操作的数据。
汇编语⾔中,寄存器前缀@是寄存器间接寻址的标志,有@Ri、@DPTR等。
汇编语⾔指令:MOV A,@Ri ;i=0、1该指令是将Ri中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。
5. 变址寻址:间接寻址由两个寄存器提供。
若由A、PC提供,在汇编语⾔指令中寻址地址表⽰为@A+PC;若由A和DPTR提供,在汇编语⾔指令中寻址地址为@A+DPTR。
其中,PC或DPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位⽆符号加法。
若变址寄存器A中内容加基址寄存器DPTR(或PC)中内容时,低8位有进位,则该进位直接加到⾼位,不影响进位标志。
MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结20__-08-2920:34:02|分类:エ程|标签:|字号大中小订阅MCS-51单片机指令系统共使用7中寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址等。
寻址方式定义操作数存放(1)通用寄存器R0~R7;寄存器于寄存器中,(2)部分专用寄存器,例如累加器A、寄存器B以寻址指令中给出数据指针DPTR等名寄存器存放操作数的(1)内部RAM中的低128地址单元,地址范围为内存单元地址00H~FFH;直接寻址直接写在指令中立即数操作数直接寻址写在指令中(2)专用寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
源操作数为立即数,立即数前面必须加“#”号,以区别立即数和直接地址(1)内部RAM的低128字节。
对内部RAM的低128字节单元的间接寻址,只能使用R0或R1做间将存放操作接寻址寄存器,其通过形式为@Ri(i=0或1);MOVP1,#55HMOVDPTR,#20__HMOVR1,20HMOVA,P1CLRAMOVP1,R4MOVA,R1寻址区域指令举例数的内存单元(2)外部RAM的64K字节。
对外部RAM的64KMOVA,@R0寄存器的地址放在寄字节的间接寻址,使用DPTR作间接寻址寄存器,MOVXA,@DPTR间接寻址存器中,指令其形式为@DPTR;MOVXA,@R0中只给出该寄(3)外部RAM的低256字节。
外部RAM的低256存器字节是一个特殊的寻址区,除了可以使用DPTR作间接寻址寄存器外,还可以使用R0或R1作间接寻址寄存器将基寄存器变址寻址与变址寄存器的内容相(1)变址寻址是专门针对程序存储器的寻址方式,所以只能对程序存储器进行寻址,寻址范围为64K字节;MOVCA,@A+PC加,结果作为操作数的地址(2)变址寻址指令只有2条:MOVCA,@A+PCMOVCA,@A+DPTR将程序计数器PC的当前内容与指令相对寻址中的操作数相加,其结果作为跳转指令的转移地址(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,每个单元包括8个位,共按位进行的位寻址操作(2)特殊功能寄存器SFR中的11个寄存器可以位寻址,包括83个位计128个位,位地址为00H~7FH;MOVC,0D0HMOVC,0DOH.0MOVC,PMOVC,PSW.0专门为改变程序执行方向而设置的SJMP54H扩展阅读:课题MCS-51型单片机的寻址方式广告灯设计软件部分课题MCS-51型单片机的寻址方式授课方式:讲授教学目的:1.让学生了解汇编语言指令的格式;2.让学生掌握单片机指令的7种寻址方式。
51单片机的寻址方式学习汇编程序设计,要先了解CPU的各种寻址法,才能有效的掌握各个命令的用途,寻址法是命令运算码找操作数的方法。
指令的寻址方式 MOV P1,#0FFH这条指令,第一个词MOV是命令动词,也就是决定做什么事情的,MOV是MOVE少写了一个E,所以就是“传递”,这就是指令,规定做什么事情,数据传递必须要有一个“源”也就是你要送什么数,必须要有一个“目的”,也就是你这个数要送到什么地方去,显然在上面那条指令中,要送的数(源)就是0FFH,而要送达的地方(目的地)就是P1这个寄存器。
寻址方式:指定操作数所在单元的方法。
注意:源操作数、目的操作数都有各自的寻址方式。
掌握指令的7种寻址方式的作用以及不同寻址方式所查询的存储空间及范围,对于常用的指令,能够给出指令的寻址方式。
在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
立即寻址所要找的操作数是一二进制数或十进制数,出现在指令中,用“#”作前缀MOV A,#20H在这种寻址方式中,指令多是双字节的,一般第一个字节是操作码,第二个字节是操作数。
该操作数直接参与操作,所以又称立即数,有“#”号表示。
立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。
例如:MOV A,#3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。
MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存器组成。
这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。
这里也特别说明一下:在80C51单片机的指令系统中,仅有一条指令的操作数是16位的立即数,其功能是向地址指针DPTR传送16位的地址,即把立即数的高8位送入DPH,低8位送入DPL。
直接寻址指令中直接给出操作数的地址。
MOV A,30HMOV 30H,DPH直接寻址方式是指在指令中操作数直接以单元地址的形式给出,也就是在这种寻址方式中,操作数项给出的是参加运算的操作数的地址,而不是操作数。
例如:MOV A,30H这条指令中操作数就在30H单元中,也就是30H是操作数的地址,并非操作数。
在80C51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器以及位地址空间,具体的说就是:1、内部数据存储器RAM低128单元。
在指令中是以直接单元地址形式给出。
我们知道低128单元的地址是00H-7FH。
在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、127位就是以7FH形式给出。
2、位寻址区。
20H-2FH地址单元。
3、特殊功能寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是这条指令可以以MOV IE,#85H 的形式表述,也可以MOV 80H,#85H的形式表述。
关于数据存储器RAM的内部情况,请查看我们课程的第十二课。
直接寻址是唯一能访问特殊功能寄存器的寻址方式!大家来分析下面几条指令:MOV 65H,A ;将A的内容送入内部RAM的65H单元地址中MOV A,direct ;将直接地址单元的内容送入A中MOV direct,direct;将直接地址单元的内容送直接地址单元MOV IE,#85H ;将立即数85H送入中断允许寄存器IE前面我们已学过,数据前面加了“#”的,表示后面的数是立即数(如#85H,就表示85H就是一个立即数),数据前面没有加“#”号的,就表示后面的是一个地址地址(如,MOV 65H,A这条指令的65H就是一个单元地址)。
寄存器寻址操作数存放在工作寄存器R0 ~ R7中,或寄存器B中。
MOV A,R2寄存器寻址的寻址范围是:1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。
2、部份专用寄存器。
例如,累加器A、通用寄存器B、地址寄存器DPTR和进位位CY。
寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能得到操作数。
例如:MOV A,R0这条指令的意思是把寄存器R0的内容传送到累加器A中,操作数就在R0中。
INC R3这条指令的意思是把寄存器R3中的内容加1从前面的学习中我产应可以理解到,其实寄存器寻址方式就是对由PSW程序状态字确定的工作寄存器组的R0-R7进行读/写操作。
寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,指令中间接寻址寄存器前用“@”表示前缀。
举“两个抽屉,两把钥匙”的例子。
MOV R0,#30HMOV A,@R0MOV A,#20HMOV R1,#40HMOV @R1,A寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
MCS-51单片机规定工作寄存器的R0、R1做为间接寻址寄存器。
用于寻址内部或外部数据存储器的256个单元。
为什么会是256个单元呢?我们知道,R0或者R1都是一个8位的寄存器,所以它的寻址空间就是2的八次方=256。
例:MOV R0,#30H ;将值30H加载到R0中MOV A,@R0 ;把内部RAM地址30H内的值放到累加器A中MOVX A,@R0 ;把外部RAM地址30H内的值放到累加器A中大家想想,如果用DPTR做为间址寄存器,那么它的寻址范围是多少呢?DPTR是一个16位的寄存器,所以它的寻址范围就是2的十六次方=65536=64K。
因用DPTR做为间址寄存器的寻址空间是64K,所以访问片外数据存储器时,我们通常就用DPTR做为间址寄存器。
例:MOV DPTR,#1234H ;将DPTR值设为1234H(16位)MOVX A,@DPTR ;将外部RAM或I/O地址1234H内的值放到累加器A中在执行PUSH(压栈)和POP(出栈)指令时,采用堆栈指针SP作寄存器间接寻址。
例:PUSH 30H ;把内部RAM地址30H内的值放到堆栈区中堆栈区是由SP寄存器指定的,如果执行上面这条命令前,SP为60H,命令执行后会把内部RAM地址30H内的值放到RAM的61H内。
那么做为寄存器间接寻址用的寄存器主要有哪些呢?我们前面提到的有四个,R0、R1、DPTR、SP寄存器间接寻址范围总结:1、内部RAM低128单元。
对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。
2、外部RAM 64KB。
对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。
外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。
例如MOVX A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。
堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。
寄存器间接寻址方式不可以访问特殊功能寄存器!!寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址我寄存器间接寻址的区别,在寄存器间接寻址方式式中,寄存器的名称前面加前缀标志“@”。
基址寄存器加变址寄存器的变址寻址操作数地址 = 变地址 + 基地址基地址寄存器 DPTR 或 PC变址寄存器 @A该寻址方式常用于访问程序存储器,查表。
MOV A,@A + DPTR这种寻址方式以程序计数器PC或DPTR为基址寄存器,累加器A为变址寄存器,变址寻址时,把两者的内容相加,所得到的结果作为操作数的地址。
这种方式常用于访问程序存储器ROM中的数据表格,即查表操作。
变址寻址只能读出程序内存入的值,而不能写入,也就是说变址寻址这种方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式。
例:MOVC A,@A+DPTR这条指令的功能是把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A假若指令执行前A=54H,DPTR=3F21H,则这条指令变址寻址形成的操作数地址就是54H+3F21H=3F75H。
如果3F75H单元中的内容是7FH,则执行这条指令后,累加器A中的内容就是7FH。
变址寻址的指令只有三条,分别如下:JMP @A+DPTRMOVC A,@A+DPTRMOVC A,@A+PC第一条指令JMP @A+DPTR这是一条无条件转移指令,这条指令的意思就是DPTR加上累加器A的内容做为一个16位的地址,执行JMP这条指令是,程序就转移到A+DPTR指定的地址去执行。
第二、三条指令MOVC A,@A+DPTR和MOVC A,@A+PC指令这两条指令的通常用于查表操作,功能完全一样,但使用起来却有一定的差别,现详细说明如下。
我们知道,PC是程序指针,是十六位的。
DPTR是一个16位的数据指针寄存器,按理,它们的寻址范围都应是64K。
我们在学习特殊功能寄存器时已知道,程序计数器PC是始终跟踪着程序的执行的。
也就是说,PC的值是随程序的执行情况自动改变的,我们不可以随便的给PC赋值。
而DPTR是一个数据指针,我们就可以给空上数据指针DPTR进行赋值。
我们再看指令MOVC A,@A+PC这条指令的意思是将PC的值与累加器A的值相加作为一个地址,而PC是固定的,累加器A是一个8位的寄存器,它的寻址范围是256个地址单元。
讲到这里,大家应可明白,MOVC A,@A+PC这条指令的寻址范围其实就是只能在当前指令下256个地址单元。
所在,这在我们实际应用中,可能就会有一个问题,如果我们需要查询的数据表在256个地址单元之内,则可以用MOVC A,@A+PC这条指令进行查表操作,如果超过了256个单元,则不能用这条指令进行查表操作。
刚才我们已说到,DPTR是一个数据指针,这个数据指针我们可以给它赋值操作的。
通过赋值操作。
我们可以使MOVC A,@A+DPTR这条指令的寻址范围达到64K。
这就是这两条指令在实际应用当中要注意的问题。
变址寻址方式是MCS-51单片机所独有的一种寻址方式。
位寻址80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。