
0100H、0200H表示的都是51单片机程序存贮器里面的地址,51单片机可寻址最大64k程序存贮器、最大64k内存。程序存贮器和内存不是统一编址。
PC时程序计数器,主要是记录单片机在ROM的执行位置,一般单片机可以访问64K的地址,也就是需要16位的字宽
单片机编址是16进制,看看编程器里怎样表示的。
ORG 0100H 表示程序从这里开始执行
DPTR是一个16位的寄存器,对这个数据寄存器赋值时,对于寄存器寻址方式,我们是把它拆分为高八位,低八位来访问的
由于它是16位,所以我们可以用它来访问64K的ROM空间,也可以访问64K的外表RAM空间
ORG 0200H 表示存放数据的地址从这里开始,这个地址是程序存贮器地址,不可以在运行中改变。
SQU是查表子程序的编号,主程序调用这段查表程序需 LCALL SQU,这时候单片机的pc指向0101h,单片机从0101h开始执行指令 。
ORG 0000H
MOV DPTR,#TABLE
MOV R2,A (暂存A中原来的参数)
MOVC A,@A+DPTR ;到表头地址加A中的偏移量处取数
MOV R0,A (把取来的第一个数放在R0中)
XCH A,R2 (把原暂存的A值和和才取的数进行交换存贮)
INC A (因是二字节的这准备取下一个字节的数)
MOVC A,@A+DPTR
MOV R1,A (把取的第二个字放在的R1中)
SJMP $
ORG 2000H
TABLE: DW 0,1,4,9,16,25,36,49,64,81,100,121,144,169
DW
196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900
END
PIC系列单片机的查表程序可以利用子程序带值返回的特点来实现。
具体是在主程序中先取出表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据返回到主程序。
x data 30h
y data 31h
org 0000h
mov dptr,#tab ;取表首地址
mov a,x ;把x赋给累加器a(可以理解为偏移量为x)
movc a,@a+dptr ;查表指令,把对应的地址的值放到a中 --如果x=0,则对应的表的第0个值,如果x=1,则对应的表的第1个值
mov y,a ;把查表结果放到y
sjmp $
;以下这个表存放的就是0到15的平方的值
tab:db 00h,01h,04h,09h,10h,19h,24h,31h
; 0 1 4 9 16 25 36 49
db 40h,51h,64h,79h,90h,0A9,0c4h,0e1h
; 64 81 100 121 144 1313 1414 1515
以上就是关于单片机 查表法全部的内容,包括:单片机 查表法、51单片机 汇编语言 常用数据处理程序设计 查表送寄存器、PIC 的单片机如何实现查表功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)