单片机 查表程序设计

单片机 查表程序设计,第1张

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

----

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

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

生成多项式:G(X)=X^8+X^2+X+1转化为100000111 =0x1070

#define POLY(0x1070U <<3)

u8 crc8(u16 data)

{

int i

for(i = 0i <8i++) {

if (data &0x8000)

data = data ^ POLY

data = data <<1

}

return (u8)(data >>8)

}

是否可以解决您的问题?

查表对号输出品名

DATAS SEGMENT运行准确

MESS1 db 0dh,0ah,'Input the stock number: $'

TABLE db '05','. Excavators'

db '08','. . .Lifters'

db '09','. . .Presses'

db '12','. . . Valves'

db '23','. Processors'

db '27','. . . .Pumps'

MESS2 DB 0dh,0ah,'Not in table!$'

mess3 db 0dh,0ah,'Continue (Enter to end)? $'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

begin:lea dx,MESS1

mov ah,09输出提示信息

int 21h

call input

mov bl,al

call input

mov ah,al

mov al,bl

lea si,table

mov cx,6

comp:cmp ax,[si]

jz found

add si,14

loop comp

lea dx,MESS2未找到!

mov ah,09

int 21h

jmp exit

found:cld

mov cx,12

inc si

inc si

here:lodsb

mov ah,0eh

int 10h显示相应品名

loop here

lea dx,mess3是否继续?

mov ah,09

int 21h

mov ah,0

int 16h

cmp al,0dh

jnz begin

exit:

mov ah,4ch

int 21h

input:mov ah,0

int 16h

cmp al,'0'

jb input

cmp al,'9'

ja input

mov ah,0eh

int 10h

ret

CODES ENDS

END START


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

原文地址:https://www.54852.com/yw/11162127.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存