查表程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

查表程序设计

在单片机应用系统中,查表程序使用频繁。利用它能避免进行复杂的运算或转换过程,广泛应用于显示、打印字符的转换以及数据补偿、计算、转换等程序中。

查表就是根据自变量x的值,在表中查找y,使y=f(x)。x和y可以是各种类型的数据。表的结构也是多种多样的。表格可以放在程序存储器中,也可以存放在数据存储器中。一般情况下,对自变量x是有变化规律的数据,可以根据这一规律形成地址,对应的y则存放于该地址单元中;对x是没有变化规律的数据,在表中存放x及其对应的y值。前者形成的表格是有序的,后者形成的表格可以是无序的。

例1将l位十六进制数转换为ASCII码。

解: 在前面的例子中,我们介绍了将ASCII码转换为十六进数的程序,本例是其逆变换。这里采用查表的方法完成十六进制数到ASCII码的转换。

建立一个表格,首先确定表格的首地址,在相对于表首的地址单元中存放ASCII码。设十六进制存放在R0中,转换结果存放在R1中。程序为:

ORG 0300H

MOV A, R0

ANL A, #0FH ;屏蔽高位

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV R1,A

ORG 0380H

TAB: DB ‘01234567’

DB ‘89ABCDEF’

END

例2 在一个单片机测温装置中,已知电压和温度之间是非线性关系。在校正过程中,电压值取连续的10位二进制数,测量这些电压值对应温度最多可达1024个。用这些校正数据建立一个表格。以电压为相对地址,这样就可以根据测得的不同电压值求出被测温度。

解: 设电压测量值X放在R2、R 3中(10位二进制数占两个字节),求出的温度仍放R2、R3中(也是双字节数)。与X值的对应的温度放在地址为2X加表格的首地址的单元中。程序为:

MOV DPTR, #TAB

MOV A, R3

CLR C

RLC A ;X*2

MOV R3, A

XCH A, R2

RLC A

XCH A, R2

ADD A, DPL ;加表首地址

MOV DPL, A

MOV A, DPH

ADDC A, R2

MOV DPH, A

CLR A

INC DPTR

MOVC A, @A+DPTR

MOV R3, A

RET

TAB: DW

例3通过一个键盘输入一组命令,完成不同的功能。

解: 设从键盘输入的命令字符为‘A’、‘D’、‘E’、‘L’、‘M’、‘X’、‘Z’七种,当键入不同的命令字符时转向不同的处理程序,对应的处理程序的入口标号为XA、XD、XE、XL、XM、XX、XZ。由于输入的字符之间很难找到什么规律,建立表格时将字符和其对应的处理程序的地址一同存入。查表时先查找字符,其后就是处理程序的入口地址。表格以0为结束标志。

入口条件为:命令字符放在A中。程序:

LTB: MOV DPTR, #TAB

MOV B, A

LOOP: CLR A

MOVC A, @A+DPTR

JZ LEND

INC DPTR

CJNZ A, B, LNF

CLR A

MOVC A, @A+DPTR ;取出入口地址第一个字节

MOV B, A

INC DPTR

CLR A

MOVC A, @A+DPTR

MOV DPL, A

MOV DPH, B

CLR A

JMP @A+DPTR ;转向相应处理程序

LNF: INC DPTR

INC DPTR ;继续查

SJMP LOOP

LEND: (查不到处理程序)

TAB: DB ‘A’

DW XA

DB ‘D’

DW XD

DB ‘E’

DW XE

DB ‘L’

DW XL

DB ‘M’

DW XM

DB ‘X’

DW XX

DB ‘Z’

DW XZ

DB 0 ;表格结束标志

相关文档
最新文档