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线。
参考资料来源:百度百科-单片机
地址dptr+a 里的数送到a
一般dptr里放的是表格的首地址,常用的如数码管显示的字码表。
数码管0~9的段控制码放在一个表格内,当a为0 时,movc a @dptr+a 将1 个字码即0 的段控码送a,。当a为1 时,dptr+1的数送a,即送1的段控码。。。。
dptr是个指针寄存器。“movc a,@dptr+a” 就是把累加器的数据与dptr的数据相加然后再把结果放回累加器a。
dptr可以用来存储表头地址等,通常用于查表等,例如:下面是一段显示子程序
MOV DPTR,#TAB ;将表头地址#TAB 存入DPTR
{
.....动态扫描程序/详细代码略.....
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
.....
}
;--------------------七段led共阳数码管.表头起始地址
TAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH
END
movc a,@(a+dptr)
这种表示方式你就应该明白了
功能:
将程序存储器中位于(dptr+a)地址中的数据读出,存放到寄存器a中。
最常用于查表:比如你在程序中放了一个表:
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
这样就能读到第三个数据了