产品概述

单片机 查表法 跟电师傅学单片机(9):单片机四种寻址方式图文新解

小编 2024-11-25 产品概述 23 0

跟电师傅学单片机(9):单片机四种寻址方式图文新解

头条号:电工人家,专门请电师傅讲解单片机应用技术,倾力奉献,机会难得,力求做到图文并茂、通俗易懂。欢迎电工电子爱好者关注和阅读,留言讨论,共同学习与提高,分享和普及电知识。

课前一语:每个成功者,都要穿越不为人知的黑暗。强者不是没眼泪,只能是含着眼泪向前跑。虽然泪水和汗水的化学成分相似,但前者只能为我们换来同情,后者却可以为我们赢得成功。

单片机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”:说明只能到程序存储器中去取数,不能到数据存储器里取数。

六:相对寻址方式

相对寻址示意图

单片机相对寻址和前面5种寻址方式不同,前面5种寻址方式都是找操作数。

相对寻址不是找操作数,不需要是个具体的数据。

是以PC的内容作为基础地址,加上指令中给定的偏移量作为转移地址,它只适用于双字节转移指令。称为单片机相对寻址方式。

例如:

SJMP 03H;

SJMP:跳转,转移。

单片机PC指针下正在指向2003H,本来是一步一步的往下执行。如果想直接跳到2006H处去取指令,就要加上差值03H。

当前PC值与目的PC值的相对差(相对偏移量),现在程序运行的当前地址和将要执行指令的地址之前的差值:

2006H-2003H=03H

将要执行指令的地址:

PC+03H=2003H+03H=2006H

七:位寻址方式

单片机位寻址只有16个单元可以位寻址:从20H~2FH,请看下图:

单片机位寻址地址表

位寻址示意图

在单片机位寻址区内,单片机CPU不仅具有字节寻址能力,而且还可以对16个单元中每一位(一共有128个位)进行寻址。称为位寻址。

例如:

SETB 3DH;将单片机位寻址区的27H单元的D5位:3DH置1。

51单片机用汇编语言的查表法控制任意LED闪烁

51单片机用汇编语言的查表法控制任意LED闪烁主要步骤:

访问ROM指令--查表指令

MOVC A,@A+DPTR

使用该指令时要事先设置:

(1)表格地址指针,并对地址指针赋初值;

(2)查表计数器,并对计数器赋初值。

(3)设置表格

代码如下:

START: MOV DPTR,#TAB ;表格首地址

MOV R7,#8 ;查表次数(或表格中的数据个数)

LOOP1: CLR A

MOVC A,@A+DPTR ;查表

MOV P1,A

LCALL DELAY ;调用延时子程序

INC DPTR ;表格地址指针加1

DJNZ R7,LOOP1

TAB: DB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH ;表格

DELAY: MOV R5, #20 ;延时子程序

D1: MOV R6, #20

D2: MOV R7, #248

DJNZ R7, $

DJNZ R6, D2

DJNZ R5, D1

RET

END

相关问答

什么是 单片机 查表法

先说第一个问题:比如用查表法将结果保存到变量i中,查表变量为x,则i=table[x],记住C语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02...

单片机 C语言如何 查表 (将静态的表写在程序存储器中)?

c语言中用CODE修饰就是把大数组存于程序存储中,运行中不能修改,相当于常量c语言中用CODE修饰就是把大数组存于程序存储中,运行中不能修改,相当于常量

pic16f73 单片机查表 方式(汇编的)?

跟51的完全不一样,PIC单片机没有专用的查表指令。一般都是用RETLW指令来做查表,思路是利用子程序带值返回的这一方式来实现。具体是在主程序中先取出表数据地...

【跪求】 单片机 编程:利用 查表 发求1~9的平方值?

假设数据在R2中,求出平方后,仍然放在R2。程序如下:MOVA,R2MOVDPTR,#TABMOVCA,@A+DPTRMOVR2,ARETTAB:DB0,1,4,9,...

单片机查表 指令movc什么意思?

查表指令:MOVCA,@A+DPTR不是单独使用的,在1000H处,应该有个DB伪指令,如下:DB0,1,4,9,16,25...它在ROM中,顺序存放了一系列的“平方”数据。MOVCA,@A+DP...

单片机 填空求助1.MCS-51系列单片机为()位单片机.2.8051单片...

[最佳回答]1.MCS-51系列单片机为(8)位单片机.2.8051单片机有两种复位方式,既上电复位和手动复位.复位后SP=(07H),PC=(0000H),PSW=(00H),P0=(F...

单片机 和ARM有什么区别?

欢迎大家关注狗哥,学习更多单片机干货1、单片机指单芯片上集成了控制器、存储器以及如定时器、SPI、IIC等外部设备于一体的片上系统,可以用来执行复杂的功能,...

【新手学习 单片机 的疑问,关于dptr和keil的memoryC:0x0000与D...

[最佳回答]那么dptr的内容是怎么来的呢,是固化在rom中的吗,用它查表,可以不连续随便查吗,比如ASCIIAB:DB'4123068796ABCDEF',具体是怎么操作的呢,能详细说....

比如音乐的数据表,频率表都是怎么得到的?

一首音乐是许多不同的音符组成的,而每个音符对应着不同的频率,这样我们利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来说,产生不同的频...

51 单片机 能读出程序存储器内容的指令有哪些(编汇语言)?

你问的是读ROM?51读ROM又叫查表读,也就是MOVCA,@A+DPTR或MOVCA,@A+PC两种,如果是读RAM,有MOV和MOVX,MOV是内部RAM读取,MOVX是外部RAM...

猜你喜欢