300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MCS-51单片机寻址方式详解

MCS-51单片机寻址方式详解

时间:2021-11-06 22:41:33

相关推荐

MCS-51单片机寻址方式详解

寻址方式

寻址空间

对程序存储器,片外数据存储器都是以字节为单位寻址的。而对片内数据存储器,有些存储单元既可以字节为单位寻址,又可以位为单位寻址。位地址空间包括特殊功能寄存器SFR中能被8整除的寄存器地址中的88个位地址。格式如下:

特殊功能寄存器:(MSB:最高有效位–Most S Bit)

A(ACC) -> E0HB -> F0HPSW:程序状态字 -> D0HSP:堆栈指针 ->DPTR:数据指针(由DPH和DPL组成,DPH是高位,DPL是低位)->P0P3:P0口锁存器P3口锁存器 ->IP:中断优先级控制寄存器 ->IE:中断允许级控制寄存器 ->TMOD:定时器/计数器方式控制寄存器(Time MOD) ->TCON:定时器/计数器控制寄存器(Time CON)->TH0:定时器/~0(高字节)->TL0 ->TH1 ->TL1 ->SCON:串行口控制寄存器SBUF:串行口数据缓冲器PCON:电源控制寄存器(Power CON)

一共有22个特殊功能寄存器,其中有11个特殊功能寄存器由于字节地址正好能被8整除,所以既可以按字节寻址,又可以按位寻址,不带括号。剩余的11个寄存器只能按字节地址进行寻址。

位地址空间还包括片内数据存储器地址20H~2FH区间内的128个位地址字节地址和位地址对应如下:

符号注释

Rn:当前选中的工作寄存器组R0R7(n=07)。它在RAM中的地址由PSW中的R0和R1决定【RAM有四个工作寄存器区,刚好由0,1决定】Ri:当前选中的工作寄存器组中可以作为地址指针的两个工作寄存器R0,R1。片内的地址通过计算可得。# data:8位立即数。其中"#"是立即寻址符,符号后面的数是立即数。# data 16:16位立即数direct :8位片内RAM(包括SFR)的直接地址。addr 11:11位目的地址addr 16:16位目的地址rel:相对地址,用于相对转移指令,书写源程序时,rel一般用符号表示,汇编程序自动计算rel的偏移量。bit:片内RAM或SFR的直接寻址位地址@:寄存器间接寻址符/:位操作命令中,表示对该为先取反再参与操作,但不影响该原位原值

立即寻址

MOV A,#45H ;MOV DPTR,#DATA;机器代码 74(PC) 45

直接寻址

由指令直接给出参加操作的数的字节地址。由于操作数地址只能以8位数指定。所以直接寻址方式只能在SFR和RAM的低128字节地址空间进行寻址

MOV A,45H;该指令中,直接给出了操作数的地址45H,实际参加的数就在45H单元中。

注意:指令助记符中的direct是操作数所在的存储单元地址,由2位16进制数表示。当直接地址为SFR中某个寄存器的地址时,direct既可以用SFR的实际地址,也可以用SFR的名字符号(通常使用后者),有利于增强程序的可读性。

PUSH DPH;机器码:C0 83PUSH 83H;机器码:C0 83;利用直接寻址的方式访问累加器A的时候,应该用ACC(或0EH)表示累加器A,以免与寄存器寻址混淆。PUSH A;错误PUSH ACC;正确

寄存器寻址

寄存器寻址是由指令指出某一个寄存器的内容为操作数。在寄存器寻址方式的指令中,寄存器用寄存器名来表示。对选定的工作寄存器区中的R0~R7、累加器A,B,DPTR以及进位CY中的数进行操作,当前工作寄存器组的选择,由PSW的RS1和RS2来指定。

MOV A,R3;将R3中的数给累加器A;;机器代码 EB;指令操作码为EBH,其二进制形式为11101011,即操作码的低三位为011,表示工作寄存器R1~R3的地址.;流程图如图

执行结果:累加器A中的内容为58H,R3(13H)中的内容不变

寄存器间接寻址

这种寻址方式中,指令操作数所指定的寄存器中存放的是操作数的地址,而不是操作数本身。在MSC-51中,可以作为寄存器间接寻址有工作寄存器R0、R1和堆栈指示器SP以及数据指针DPTR

当寻址片内RAM低于128或者片外低于256字节时,可以使用R0或R1。采用DPTR作为间接地址寄存器,可以寻址片外64K的数据存储器。

例如:

MOV A,@R0;机器代码:11100110;设工作寄存器为第0组,R0中存放5EH,它为片内RAM的一个存储单元,其中的内容是78H.执行指令后,再将78H传送给累加器A.

注意:在使用@R0,@R1对片外RAM的0000H~00FFH单元进行寻址的时候,应该先将P2口置为0输出

变址寻址(基址寄存器+变址寄存器间接寻址)

变址寻址方式以PC或DPTR作为基址寄存器,存放操作数的基本地址。累加器A为变址寄存器,存放被寻址操作数地址相对于基地址的偏移量,该偏移量为1字节无符号数。操作数的有效地址为:

有效地址=基址寄存器PC(或DPTR)+A 表现为A=PC+A

MOVC A,@A+DPTR;机器代码:93;设累加器A=47H,DPTR=2000H,(2047H)=5CH,该指令是将操作数的有效地址2047H单元中的内容传送给累加器A.指令执行后,A=5CH

相对寻址

相对地址是仅用于相对转移指令的一种寻址方式。这种寻址方式是要寻找指令地址,而不是数,即寻找下一条要执行指令的地址。相对寻址的有效地址为:

D=PC+rel

式子中,rel是相对地址。相对地址的机器码称为偏移量disp,rel=disp+b。若转移指令为二字节,则b=2,若转移指令为三字节,则b=3。

偏移量为一字节二进制补码数,取值为-128~+127。对应的相对地址取值范围容易计算。

JC 18H;机器代码:40 16(18-2);这是一个二字节指令,它是以进位标志CY为条件的相对转移指令。若CY等于0,则不转移,PC=PC=2,顺序往下执行;若CY等于1,则以PC当前内容(+2)与机器代码的第二字节数相加,结果得到转移指令的目的地址PC.

位寻址

位寻址仅用于位操作指令的一种寻址方式,它是指对片内RAM位寻址区和某些可以位寻址的特殊功能寄存器(11个)进行位操作的寻址。在进行位操作时,首先借助于进位标志CY作为位操作累加器。当位地址与直接寻址中的字节地址形式完全一样的时候,主要有操作码加以区分。

SETB 3AH;RAM可寻址区内位地址3AH是片内RAM中27H单元中的第二位。若设(27H)=00H,执行SETB操作后,第二项的值置为1,变为00000100B,此时(27H)=04H.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。