51系列单片机寻址方式所谓寻址方式就是单片机指令中提供的操作数的形式。也就是寻找操作数或操作数所在地址的方式。在51系列单片机中,存放数据的存储器空间有4种:内部RAM、特殊功能寄存器SFR、外部RAM和程序存储器ROM。其中,内部RAM和SFR统一编址,外部RAM和程序存储器是分开编址的。为了区别指令中操作数所处的地址空间,对于不同存存储器的数据操作,采用不同的寻址方式。1 立即数寻址 指令中直接给出操作数的寻址方式称为立即数寻址。在51系列单片机指令系统中,立即数用前面加“#”号的8位数表示(#data,如#30H)或16位数(#data16,如#2052H)表示。举例说明立即数寻址方式,以传送指令为例。例:MOV A, #80H ;80H——>A MOV DPTR, #2000H ;2000H——>DPTR2 直接寻址指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。寻址对象为:1内部数据存储器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名称表示。下面举例说明。例:MOV A, 25H ;内部RAM的(25H)——>A MOV P0, #45H ;45H——>P0 ,P0为直接寻址的SFR MOV 30H,20H ;内部RAM的(20H)——>(30H)3 寄存器寻址以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。通用寄存器包括:A、B、DPTR、R0~R7。其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其它指令中为直接寻址。A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC)。直接寻址和寄存器寻址的差别在于,直接寻址是操作数所在的字节地址(占一个字节),寄存器寻址是寄存器编码出现在指令码中。寄存器寻址速度比直接寻址要快。除上面所指的几个寄存器外,其它特殊功能寄存器一律为直接寻址。例:MOV A, R0 ;R0——>A,R0为寄存器寻址 MUL AB ;A×B——>BA,A,B为寄存器寻址 MOV B, R0 ;R0——>B,R0为寄存器寻址,B为直接寻址 PUSH ACC ;A的内容入栈,A为直接寻址 ADD A, ACC ;A为寄存器寻址,ACC为直接寻址4 寄存器间接寻址以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。而外部数据存储器最大可达64K,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8