头条号:电工人家,专门请电师傅讲解单片机应用技术,倾力奉献,机会难得,力求做到图文并茂、通俗易懂。欢迎电工电子爱好者关注和阅读,留言讨论,共同学习与提高,分享和普及电知识。课前一语:每个成功者,都要穿越不为人知的黑暗。强者不是没眼泪,只能是含着眼泪向前跑。虽然泪水和汗水的化学成分相似,但前者只能为我们换来同情,后者却可以为我们赢得成功。单片机80C51提供了七种寻址方式,前面已经讲了三种,现将余下的四种介绍如下: 四:寄存器间接寻址方式寄存器间接寻址示意图 单片机指令中的寄存器里面的内容作为操作数的地址,通过地址找到操作数。即操作数是通过寄存器间接得到的,就是要转个弯才能找到操作数。因此称为寄存器间接寻址。指令中的寄存器前面加“@”显著标志。 通过“1”号箱间接找信的地址“2”号箱,找到“2”号箱才能拿到放在里面的信。 通过寄存器“R0”间接找到操作数的地址3AH,找到地址3AH才能找到放在里面操作数65H。 3AH只是个地址,65H才是操作数哦! 例如: MOV A,@R0;将寄存器R0里面的内容3AH作为一个地址,根据这个地址找到单元中存放的内容65H送到累加器A。 注意: 单片机寄存器间接寻址只能用以下3种寄存器:R0,R1,DPTR。其它的不具备间接寻址功能。 五:变址寻址方式变址寻址示意图 基址+变址寻址方式是以DPTR或PC作为基址寄存器(16位寄存器),以累加器A(8位寄存器)作为变址寄存器,并以两者相加形成的新16位地址作为操作数的地址。指令中的寄存器前面加“@”显著标志。 例 如: 单片机查表指令:查找关键数据 MOVC A,@DPTR+A;把DPTR和A相加作为新的16位地址0302H,根据这个地址得到程序存储器内的内容(操作数)88H送回累加器A中。 MOVC A,@A+PC;以PC作为基址寄存器,以累加器A作为变址寄存器,并以两者相加形成的新16位地址作为操作数的地址。根据这个地址找到操作数送回累加器A。 注意: MOV指令中加了1个“C”:说明只能到程序存储器中去取数,不能到数据存储器里取数。 六:相对寻址方式相对寻址示意图
相对寻址不是找操作数,不需要是个具体的数据。 是以PC的内容作为基础地址,加上指令中给定的偏移量作为转移地址,它只适用于双字节转移指令。称为单片机相对寻址方式。 例如: SJMP 03H; SJMP:跳转,转移。 单片机PC指针下正在指向2003H,本来是一步一步的往下执行。如果想直接跳到2006H处去取指令,就要加上差值03H。 当前PC值与目的PC值的相对差(相对偏移量),现在程序运行的当前地址和将要执行指令的地址之前的差值: 2006H-2003H=03H 将要执行指令的地址: PC+03H=2003H+03H=2006H 七:位寻址方式单片机位寻址只有16个单元可以位寻址:从20H~2FH,请看下图: 单片机位寻址地址表 位寻址示意图
例如: SETB 3DH;将单片机位寻址区的27H单元的D5位:3DH置1。 |
|