MCS-51单片机查表程序的问题?

2024-12-15 15:32:48
推荐回答(3个)
回答1:

MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL A ;理解这句
MOV P0,A

MOV DPTR,#TAB 这句是将TAB处的内容的地址移入DPTR寄存器(51单片机中唯一的一个16位的)
MOVC A,@A+DPTR 这句将(A寄存器中的内容+DPTR)中的地址处的数据移入A
比如此时 A=0,DPTR=300,这时就将300+0寄存器里的数据移到A
如果A=2,DPTR=300,这时就将(300+2)寄存器里的数据移到A
CPL A ; A求反,
MOV P0,A 将A的值移入P0口,用数码管等显示出来结果

回答2:

MOV DPTR,#TAB
把TAB表的首地(存0c0h的单元地址,下一个地址就存0f9h)址放进指针DPTR
MOVC A,@A+DPTR
累加器A的值加DPTR作为一个数并看成地址
将这个地址中的数赋值给累加器A
如果执行这句前累加器内容为0那么运行后A中就会存这个表格的第一个值;为2同样会变成第三个值@间接寻址的说明,后面的A+DPTR的结果作为地址进行查找就能找到你的表格

回答3:

MOV A,@R1 ;得到#TAB的偏移量
MOV DPTR,#TAB ;将tab的地址送给dptr
MOVC A,@A+DPTR ;将TAB的地址值加上A中的值后得到取值地址并送入A
CPL A ;求反(假设A为80H时执行此句后A的结果为7fH)
MOV P0,A ;将A中的值送到P0口
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;
例1234:db 0 1 2 .................... 第N个