理论教育 单片机原理及接口技术|查表程序设计|提高计算效率

单片机原理及接口技术|查表程序设计|提高计算效率

时间:2023-11-05 理论教育 版权反馈
【摘要】:查表程序是设计中经常遇到的,对于一些复杂参数的计算,不仅程序长,难于计算,而且要耗费大量时间。所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中。因此查表程序比直接计算简单得多,尤其是对非数值计算的处理上。3)执行查表指令MOVC A,@A+DPTR进行读数,查表结果送回累加器A。解如果按照求阶乘的运算,程序设计将非常繁琐,需要连续做n-1次乘法。

单片机原理及接口技术|查表程序设计|提高计算效率

查表程序是设计中经常遇到的,对于一些复杂参数的计算,不仅程序长,难于计算,而且要耗费大量时间。尤其是一些非线性参数,用一般算术运算解决是十分困难的。它涉及到对数、指数、三角函数以及积分和微分运算。对于这样一些运算,用汇编语言编程都比较复杂,有些甚至无法建立数学模型,如果采用查表法解决就容易多了。

所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中。这时自变量值为单元地址,相应的函数值为该地址单元中的内容。而查表就是根据给定的自变量x,在表格中查找y,使y=f(x)。因此查表程序比直接计算简单得多,尤其是对非数值计算的处理上。利用查表法可完成数据运算、数据转换和数据补偿等工作,并具有编程简单,执行速度快,适合实时控制等优点。

编程时可以方便地利用伪指令DB或DW把表格的数据存入程序存储器ROM中。在MCS-51指令系统中有两条查表指令:

MOVC A,@A+DPTR

MOVC A,@A+PC

使用DPTR作为基地址查表比较简单,可通过3步操作来完成:

1)将所查表格的首地址存入DPTR数据指针寄存器中。

2)将所查表格的项数(即在表中的位置是第几项)送累加器A。

3)执行查表指令MOVC A,@A+DPTR进行读数,查表结果送回累加器A。

对于较短的表格,装入DPTR的表格首地址在整个查表过程中是不变的,但对于较长的表格(项数超过256)或进行较复杂的数据处理时,需要对DPTR的内容进行一些变换,有时需将DPTR拆开成DPH和DPL,然后用标准算术指令进行计算或修改。

若使用PC作为基地址查表,则操作有所不同,也可分为3步:

1)将所查表格的项数送累加器A,在MOVC A,@A+PC指令之前需要先写一条加法指令,即ADD A,#data,data的值待定;

2)计算从MOVC A,@A+PC指令执行后的地址到所查表的首地址之间的距离(以字节数表示),用这个计算结果取代上述加法指令中的data,作为A的调整量;(www.daowen.com)

3)执行查表指令MOVC A,@A+PC进行查表,查表结果送回累加器A。

【例4-13】 一个十六进制数存放在HEX单元的低四位,将其转换成ASCII码并送回HEX单元。

解 十六进制0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H,ASCII码表格的首地址为ASCTAB。

程序清单如下:

在这个程序中,查表指令MOVC A,@A+PC到表格首地址有两条指令,占用3个地址空间,故变址调整为3。

【例4-14】 求y=n!(n=0,1,2,…,9)的值。

解 如果按照求阶乘的运算,程序设计将非常繁琐,需要连续做n-1次乘法。但如果将函数值列成表格,如表4-1所示,不难看出,每个n值所对应的y值在表格中的地址可按下面的公式计算出来:

y地址=函数表首地址+n×3

因而可采用计算查表法,对每一个n值,首先按上述公式计算出对应的y的地址,然后从该单元中取出y值即可。

表4-1 例4-14数据表

设n值存放在TEP单元,表的首地址为TAB,用MOVC A,@A+DPTR指令查表取出y值存入R4R3R2中。

程序清单如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈