王有一
摘 要:介绍在汇编语言中进行非线性处理的编程技术。
关键词:非线性处理;结构化程序设计;单片机
单片机结构的测量仪表,经常需要对测量变量进行非线性处理。比如,工业测量中经常使用的热电阻感温元件的电阻(电压)与温度的关系就是非线性的。计算机对这类测量变量进行工程值转换时,通常是将它们的电压/电流信号值及对应工程值的非线性列表(表1)存入计算机中,然后,当检测该变量时,通过查表比较,换算出对应的工程值。当然,查表换算所需的分段转换斜率也应存入计算机。
查表法用高级程序语言很容易处理,但在汇编语言中实现却比较困难。我们注意到,MCS-51单片机指令系统虽然没有单独的比较指令,但设计了多条比较转移指令,它们既有比较功能,又能根据比较结果控制程序转移。特别是CJNEA,direct,rel指令,具有A和direct两个可变参数的单元,可以说是这类指令中功能最强的指令。将测量信号的A/D转换值放入直接地址单元direct,累加器A用来依次取查表值,就可以很方便地实现查表比较,我们设计查表循环结构就以该指令为核心来实现。
对程序的数据结构进行合理设计,也可以大大简化和优化程序。为了便于读取表值,可在程序初始化时,就将Xi表值从外部存储器读入8031片内RAM工作区,并使其地址码与Yi表对应,这样可以共用一个地址指针。如图1所示。Xi/Yi表各包含16个参数,由于查表时读取Xi的操作最频繁,将Xi表调入片内RAM无疑会提高程序的运行效率。
为了提高计算精度,我们在外部存储器中除保存转换表外,还存储了Xi+1-Xi的差值,没有直接使用转换斜率Ki。
在此数据结构的基础上,该程序流程图设计如图2。
入口:被测信号经数字滤波后的计数值→RAM6AH单元
出口:经过非线性转换的工程值→RAM6BH单元该程序清单如下:
可以在仪表面板设置一个“参数设定”键,用于输入和保存转换表的参数。保存参数的外部存储器可以选用6264RAM。目前各种非易失存储器芯片已获得广泛应用,其中DS1225芯片与6264完全兼容,它自带锂电池,保存数据的有效期为10年。将转换表存储在该芯片中就更加方便实用,同时DSl225还可用于保存历史数据。
参考文献
[1]孙涵芳,徐爱卿.MCS-51/96系列单片机原理及应用[M].北京:北京航空航天出版社,1988.
摘自 仪表技术
|