MOVC A,@A+DPTR。这条指令是单片机查表指令,DPTR是首地址,A寄存器,指令的意思就是将DPTR的地址加上累加器A存的偏移量,形成的新地址中的数取出给A。
其他类似指令:
MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
扩展资料
单片机基本功能:
1、8位数据总线,16位地址总线的CPU。
2、具有布尔处理能力和位处理能力。
3、采用哈佛结构,程序存储器与数据存储器地址空间各自独立,便于程序设计。
4、相同地址的64KB程序存储器和64KB数据存储器。
5、0-8KB片内程序存储器(8031无,8051有4KB,8052有8KB,89C55有20KB)。
6、128字节片内数据存储器(8051有256字节)。
7、32根双向并可以按位寻址的I/O线。
参考资料来源:百度百科-单片机
最常用于查表:比如你在程序中放了一个表:
TAB:DB 0C0H,0F9H,0A4H
DB 0B0H,099H,092H
DB 082H,0F8H,080H
DB 090H
如果你想查询表的第三个数据,就可以这样编程:
MOV DPTR,TAB
MOV A,#02H ;A称为偏移量
MOVC A,@DPTR+A
这样就能读到第三个数据了
将A中的值,加上DPTR里的值,访问程序段中这个地址的值,取出来送给A。
DPTR一般放数组的首地址,然后A放偏移值,最初A为0,访问A+DPTR地址的值后,再将偏移值加1,再继续访问。
问题1:这条指令是汇编语言专用的查表指令,要查的表是一个顺序表,它以DPTR为表中数据的首地址,A中事先存储数据相对于表首地址的地址偏移量,最大不能超过255,通过调整A值可以查询表中指定位置的数据。这条指令执行完毕后,A中存储的是查询到的数据。简单的说:给DPTR赋表的首地址值,给A数据的偏移量,得到的查询结果放在A中。
这段指令是用与串口发送的。在调用这段子程序之前,在A中存储了要发送的数据的偏移量,然后查表、发送。
问题2:指令格式就是这么规定的没有任何其他的含义。
问题3:带有#开头的表示的是取#号后面变量的物理地址。在这段程序中,就是取标号TABLE的对应的地址,也就是第一个数据0C0H的地址。顺便说一下,第一个数据的地址偏移量是0.
mov dptr,#tab 才行啊