单片机查表程序编写 急!

单片机查表程序编写 急!,第1张

org 0000h

mov 30h, #1

mov 31h, #3

mov 32h, #5

mov 33h, #7

mov 34h, #9

mov 35h, #2

mov 36h, #4

mov 37h, #6

mov 38h, #8

mov 39h, #10

call SQRT

sjmp $

查表法求平方的程序如下。

SQRT:

MOV R0, #30H

MOV R1, #40H

MOV R2, #10

LOOP:

MOV A, @R0

ADD A, #S_TAB - ($ + 4)

MOVC A, @A + PC

MOV @R1, A

INC R0

INC R1

DJNZ R2, LOOP

RET

S_TAB:

DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

LTB2:

-------------------下面是R2R3乘以2

MOV A, R3

CLR C

RLC A

MOV R3, A

XCH A, R2

RLC A

XCH R2, A

------------------下面是表首地址加上R2R3

MOV DPTR, #TAB2

ADD A, DPL (R2R3)+(DPTR)→(DPTR)

MOV DPL, A

MOV A, DPH

ADDC A, R2

MOV DPH, A

------------------下面是查表,查出两个字节

CLR A

MOVC A, @A + DPTR

MOV R2,A

CLR A

INC DPTR

MOVC A, @A + DPTR

MOV R3,A

RET

----

这个程序,是根据两个字节的数据来查表,查出的,也是两个字节。

如果先弄懂了一个字节的查表程序,看这个程序,也就没有什么难的了。

16和7是查表指令时的PC与数据表格之间的字节数

MOV A ,@R0 取R0指向的地址中的数据到A

ANL A,#0FH ;高四位清零

ADD A,#16 ;加16

MOVC A, @A+PC ;查表,表的首地址为绝对地址PC+A

MOVC A,@A+PC就需要1个字节啊

查表指令距离表首地址的长度是字节数

用DPTR的汇编程序:

ORG 0100H

MOV 30H,#12H

MOV 31H,#34H

MOV 32H,#56H

MOV 33H,#78H

LCALL SUBRTE

ORG 1000H

SUBRTE: MOV R0,#30H ;置地址指针R0初值

MOV R1,#40H ;置地址指针R1初值

MOV R2,#4 ;置字节数

LOOP:MOV A,@R0 ;取16进制数

ANL A,#0FH ;屏蔽高4位

MOV DPTR,#TABLE ;

MOVC A,@A+DPTR;查表低4位转换为ASCⅡ码

MOV @R1,A ;送结果

INC R1;修改指针

MOV A,@R0;从新取16进制数

SWAP A;高4位与低4位互换

ANL A,#0FH ;取高4位

ADD A,#7

MOVC A,@A+PC ;查表高4位转换为ASCⅡ码

MOV @R1,A

INC R0

INC R1

DJNZ R2,LOOP

DEC R1

RET

TABLE: DB '012345678'

DB '9ABCDEF'

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11897124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存