第九章 计算机控制系统的数据处理
第九章 计算机控制系统的数据处理
9.1 计算法
9.2 查表法
9.3 非线性补偿
9.4 数据极性和字长的预处理
第九章 计算机控制系统的数据处理
和常规的模拟系统相比, 计算机数据处理系统具
有如下优点:
( 1) 可用各种程序代替硬件电路, 甚至完全不
需要硬件 。 从而大大降低系统成本 。
( 2) 能够自动修正各种误差, 提高测量精度 。
( 3) 能够对被测参数进行复杂的计算和处理 。
( 4) 能够实现对传感器和测量装置的监控, 提
高系统的可靠性 。
第九章 计算机控制系统的数据处理
9.1 计算法
计算法就是在已测参数的基础上, 利用各种运算
程序计算出需要的参数 。 用计算法处理数据一般
可按以下步骤进行:
( 1) 根据物理和工程实际求出被测参数的数学
表达式;
( 2) 根据要求的精度, 确定 A/D转换器的位数,
并设计出相应的硬件电路;
( 3) 根据被测参数的数学表达式, 进行相应的
数据处理 。
返回本章首页
第九章 计算机控制系统的数据处理
控制系统主程序和中断服务程序流程框图如图 9-
1和图 9-2所示 。
开 始
中断方式设置
定时器初始化
中断等待
开中断
中断向量设置
扩展I / O 口初始化
开 始
流量计算模块
数字滤波模块
显示模块
流量标度计算变换模块
标度变换模块
数据采集模块
返 回
图
9-
1
主
程
序
流
程
图
图
9-
2
中
断
服
务
程
序
流
程
图
第九章 计算机控制系统的数据处理
流量计算程序流程图如图 9-3所示 。
第九章 计算机控制系统的数据处理
程序清单如下:
...
...
MOV MUL1_L,DATA ; 差压信号 ΔP送 MULT1
INC DATA
MOV MUL1_H,DATA
INC DATA
MOV MUL2_L,DATA ; 绝对压力 P送 MULT2
INC DATA
MOV MUL2_H,DATA
第九章 计算机控制系统的数据处理
ACALL MULTD ; 计算 ΔP× P
MOV DIV1_H,PR_H
MOV DIV1_L,PR_L
INC DATA
MOV DIV2_L,DATA ; 绝对温度 T送 DIV2
INC DATA
MOV DIV2_H,DATA
ACALL DUBDIV ; 计算 ΔP× P/T
MOV S_H,DIV1_H
MOV S_L,DIV1_L
ACALL SORT
MOV MUL1_L,SR
第九章 计算机控制系统的数据处理
MOVMUL1_H,#00H
INC DATA
MOVMUL2_L,DATA
INC DATA
MOV MUL2_H,DATA
ACALL MULTD
MOVRESULT,PR_L
INC RESULT,
MOVRESULT,PR_H
第九章 计算机控制系统的数据处理
程序中用到的双字节的乘法, 除法子程序可参考第三章
中的相关内容 。
开方子程序:
程序入口:被开方数 N存放地址 S_H( 高 8位 ), S_L( 低
8位 ) ;
程序出口:平方根的整数部分存放在 SR单元中 。
SORT:MOV SR,#00H ; 开放结果 I置零
CLR C ; 清进位标志位
LOOP:MOV A,SR ; 求 2× I+1
ADD A,SR
第九章 计算机控制系统的数据处理
MOV R7,#00H
XCH A,R7
ADDCA,#00H
XCH A,R7
ADDCA,#00H
XCH A,R7
MOV R6,A
CLR C ; 求 N-(2× I+1)
第九章 计算机控制系统的数据处理
MOV A,S_L
SUBB A,R6
MOV S_L,A
MOV A,S_H
SUBB A,R7
MOV S_H,A
JC RETU
INC SR ; 开方结果加 1
SJMP LOOP
RETU,RET
返回本节
第九章 计算机控制系统的数据处理
9.2 查表法
9.2.1 顺序查表法
9.2.2 计算查表法
9.2.3 对分查表法
返回本章首页
第九章 计算机控制系统的数据处理
9.2.1 顺序查表法
顺序查表法的步骤如下:
( 1) 设定表格的起始地址 。
( 2) 设定表格的长度 。
( 3) 设定要搜索的关键字 。
( 4) 从表格的第一项开始, 比较
表格数据和关键字, 进行数据搜
索 。
图 9-4 顺序查表法程序流程图
第九章 计算机控制系统的数据处理
图 9-4 顺序查表法程序流程图
开 始
判断是关
键字否?
设定表格初始地址
取下一数据
设定表格长度
设置查找成功标志
检索完全
部数据否?
设置查找失败标志
读第一数据
读关键字
取关键字在
表中的地址
返 回
否
否
是
是
第九章 计算机控制系统的数据处理
顺序查表法程序清单:
SEARCH,MOV R0,TABLE ; 设定表格起始地址
MOV R1,LENGTH ; 设定表格长度
CLR FLAG ; 查找成功标志位清零
LOOP,MOV A,KEY ; 读关键字
XRL A,@R0 ; 比较
JNZ NEXT ; 未查找到关键字, 继续
SETB FLAG ; 查找到关键字, 置位查找成功标志位
MOV A,R0 ; 读出关键字在表中的地址
AJMP RETU ; 退出查找
NEXT,INC R0 ; 指向表格的下一个数据
DJNZ R1,LOOP ; 未检索完全部数据, 继续
RETU,RET ; 退出查找程序, 子程序返回
返回本节
第九章 计算机控制系统的数据处理
9.2.2 计算查表法
计算查表法适用于数据按一定的规律排列, 并且搜索内
容和表格数据地址之间的关系能用公式表示的有序表格 。
下面以实例介绍计算查表法的程序设计 。
设计一巡回检测报警装置, 要求能对 16个通道输入值进
行比较, 当某一通道输入值超过该路的报警值时, 发出
报警信号 。
通道值和报警值的存放地址之间的关系可用下面的公式
表示:
报警值存放地址 =数据表格起始地址 +通道值× 2
第九章 计算机控制系统的数据处理
设通道值 ( 以 16进制表示 ) 存放在 CIRC单元中, 查表后的上限报警
值存放在 UPPER单元中, 下限报警值存放在 LOWER单元中 。
查表程序清单如下:
CLR C ; 进位标志位清零
MOV DPTR,#TAB ; 设置数据表首址
MOV A,CIRC; 读检测通道值
RLC A ; 检测通道值乘 2
MOVC A,@A+DPTR ; 读上限值
MOV UPPER,A ; 保存上限值
INC DPTR
MOVC A,@A+DPTR ; 读下限值
MOV LOWER,A ; 保存下限值
RET
TAB,UPPER0,LOWER0,UPPER1,LOWER1,....,
UPPER15,LOWER15; 报警数据表
返回本节
第九章 计算机控制系统的数据处理
9.2.3 对分查表法
对分查表法的最高
搜索次数 Log2N-1。
和顺序查表法相比,
对分法可以大大减
少查表次数, 提高
检索效率 。
对分查表法的程
序流程图如图 9-5
所示
开 始
对分数> 关
键字否?
读检索关键字
保存检索到
的数据序号
取对分数据
设置数据起点、终点
检索项序号=
对分序号做起点
2
终点起点 ?
到检索范
围边界否?
是关键字否?
对分序号做终点
起点数据=
关键字否?
设置检索
失败标志
返 回
否
否
否
否
是 是
是
是
第九章 计算机控制系统的数据处理
对分查表法程序清单:
MOV BEGIN,#00H ; 设置检索范围起点
MOV END,#DVL ; 设置检索范围终点
MOV KEY,#KEY ; 设置关键字
MOV TIME,#01H ; 置检索次数初值
LOOP,MOV R0,#ADD ; 置数据区起始地址
MOV A,BEGIN ; 取检索范围起点
ADD A,END ; 起点 +终点
CLR C
RRC A ; 除 2
MOV FLAG,A ; 存放对分检索取数序号
CLR C
第九章 计算机控制系统的数据处理
XOR A,2AH ; 判断是否到检索范围边缘
JZ LOOP3 ; 是, 跳转至 LOOP3
MOV A,FLAG
ADD A,R0 ; 形成对分检索取数地址
MOV R0,A
MOV A,@R0 ; 读数
MOV DATA,A ; 保存检索到的数据
CLR C
SUBB A,KEY ; 和关键字比较
JZ LOOP5 ; 相等, 则检索成功
JNC LOOP2 ; 取的数据大, 跳转至 LOOP2
MOV 2AH,FLAG ; 取的数据小, 修改检索范围的起点
第九章 计算机控制系统的数据处理
INC TIME ; 检索次数加 1
SJMP LOOP1 ; 继续检索
LOOP2,MOV A,FLAG ; 取的数据大, 修改检索范围的终点
MOV END,A
INC TIME
SJMP LOOP1 ; 继续检索
LOOP3,MOV R0,#DATA ; 到达检索边缘, 比较是否为关键字
MOV A,@R0
CJNE A,KEY,LOOP4 ; 不是关键字, 跳转至 LOOP4
MOV DATA,A ; 是关键字, 保存
SJMP LOOP5 ; 退出检索程序
LOOP4,MOV A,#0FFH; 不是关键字, 置检索不成功标志
MOV FLAG,A
LOOP5,RET ; 检索程序结束
返回本节
第九章 计算机控制系统的数据处理
9.3 非线性补偿
9.3.1 线性插值法
9.3.2 二次抛物线插值法
返回本章首页
第九章 计算机控制系统的数据处理
9.3.1 线性插值法
1,线性插值原理
2,线性插值的计算机实现
3,线性插值法非线性补偿实例
第九章 计算机控制系统的数据处理
1.线性插值原理
1.线性插值原理
设某传感器输入信号 X和输出信号 Y之间的关系如图 9-6所示 。
图 9-6 传感器的输出特性曲线
Y
Y 0
Y 1
Y i
Y i+1
Y n
X 0
X
X 1 X i X i+1 X n
第九章 计算机控制系统的数据处理
从图 9-6可以看出:
( 1) 曲线斜率变化越小, 替代直线越逼近特性
曲线, 则线性插值法带来的误差就越小 。 因此,
线性插值法适用于斜率变化不大的特性曲线的线
性化 。
( 2) 插值基点取得越多, 替代直线越逼近实际
的曲线, 插值计算的误差就越小 。 因此, 只要插
值基点足够多, 就可以获得足够的精度 。
第九章 计算机控制系统的数据处理
2,线性插值的计算机实现
利用计算机实现线性插值的步骤如下:
( 1) 用实验法测出传感器输出特性曲线, 应尽可能保
证该曲线的精确性;
( 2) 选取插值点, 将绘制好的曲线分段 。
( 3) 计算并存储各相邻插值点间逼近曲线的斜率 Ki;
( 4) 计算 X-Xi;
( 5) 读出 X所在区间的斜率 Ki,计算 Ki( X-Xi) ;
( 6) 计算 。
第九章 计算机控制系统的数据处理
根据以上步骤可以画出计算机实现的线性插值计
算流程图如图 9-7所示。
线性插值程序
读入X 值
计算 X -X i
用查表法找出 X 所在
的区间,并取出 K i
计算 K i ( X -X i )
计算 Y = X i + K i ( X - X i )
结 束
第九章 计算机控制系统的数据处理
3,线性插值法非线性补偿实例
根据热电偶的技术数据可以绘制出输出电压信号
V和温度 T之间的特性曲线, 假设热电偶的输出
特性曲线如图 9-8所示 。
t ( C )
。
t 4
t 3
t 2
t 1
V 1 V 2 V 3 V 4 V i
4
3
2
1
1
?
2
?
3
?
4
?
第九章 计算机控制系统的数据处理
由图 9-8可以看出, 该热电偶的输出特性曲线斜率的变化
不大, 可以采用线性插值法进行非线性补偿 。
选择 4个插值基点 ( V1,T1), ( V2,T2), ( V3,T3),
( V4,T4), 然后写出每段曲线的插值函数表达式, 表
达式如式 ( 9-5) 所示 。
( 9-5)
第九章 计算机控制系统的数据处理
表 9-1 参数存储单元分配表
第九章 计算机控制系统的数据处理
线性插值法非线性补偿程序清单:
MOV FIR_L,54H ; 取热电偶输出电压信号 Vi
MOV FIR_H,55H
MOV SEC_L,44H ; 取 V4
MOV SEC_H,45H
ACALL COMPARE ; 求 Vi-V4
JB FLAG,T5 ; Vi≥V4,转 T5
MOV SEC_L,42H ; 取 V3
MOV SEC_H,43H
ACALL COMPARE ; 求 Vi-V3
JB FLAG,T4 ; Vi≥V3,转 T4
MOV SEC_L,40H ; 取 V2
第九章 计算机控制系统的数据处理
MOV SEC_H,41H
ACALL COMPARE ; 求 Vi-V2
JB FLAG,T3 ; Vi≥V2,转 T3
MOV SEC_L,38H ; 取 V1
MOV SEC_H,39H
ACALL COMPARE ; 求 Vi-V1
JB FLAG,T2 ; Vi≥V1,转 T2
T1,MOV MUL1_L,30H ; 取 K1
MOV MUL1_H,31H
MOV MUL2_L,54H ; 取 Vi
MOV MUL2_H,55H
ACALL MULTD ; 求 K1× Vi
MOV RESU_L,PR_L ; T→ RESU
MOV RESU_H,PR_H
RETU,RET
第九章 计算机控制系统的数据处理
T2,MOV MUL1_L,32H ; 取 K2
MOV MUL1_H,33H
MOV MUL2_L,DIFF_L ; 取 Vi-V1
MOV MUL2_H,DIFF_H
ACALLMULTD ; 求 K2× ( Vi-V1)
CLR C
MOV A,46H ; 求 T1+ K2× ( Vi-V1)
ADDC A,PR_L
MOV RESU_L,A ; T→ RESU
MOV A,47H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
第九章 计算机控制系统的数据处理
T3,MOV MUL1_L,34H ; 取 K3
MOV MUL1_H,35H
MOV MUL2_L,DIFF_L ; 取 Vi-V2
MOV MUL2_H,DIFF_H
ACALLMULTD ; 求 K3× ( Vi-V2)
CLR C
MOV A,48H ; 求 T2+ K3× ( Vi-V2)
ADDC A,PR_L
MOV RESU_L,A ; T→RESU
MOV A,49H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
T4,MOV MUL1_L,36H ; 取 K4
第九章 计算机控制系统的数据处理
MOV MUL1_H,37H
MOV MUL2_L,DIFF_L ; 取 Vi-V3
MOV MUL2_H,DIFF_H
ACALL MULTD ; 求 K4× ( Vi-V3)
CLR C
MOV A,50H ; 求 T3+ K4× ( Vi-V3)
ADDC A,PR_L
MOV RESU_L,A ; T→ RESU
MOV A,51H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
T5,MOV RESU_L,52H ; T→RESU
MOV RESU_H,53H
AJMP RETU
第九章 计算机控制系统的数据处理
比较程序清单:
程序入口:第一数( FIR_L,FIR_H),第二数
( SEC_L,SEC_H)
程序出口:比较标志位 FLAG=0,则第一数 <第二数;
FLAG=1,则第一数 ≥第二数,且第一数与第二数的差存
放在 DIFF_H,DIFF_L单元中。
COMPARE,CLR C ; 清进位标志位
MOV A,FIR_H ; 取第一数的高 8位
SUBB A,SEC_H ; 高 8位相减
JNC NEXT ; 无借位,继续
CLR FLAG ; FIR<SEC,FLAG=0
AJMP RETU_C
第九章 计算机控制系统的数据处理
NEXT,CLR C
MOV DIFF_H,A ; 保存差值高 8位
MOV A,FIR_L ; 取第一数的低 8位
SUBB A,SEC_L ; 低 8位比较
JNC BIG ; FIR≥SEC,转 BIG
CLR FLAG ; FIR<SEC,FLAG=0
AJMP RETU_C
BIG,SETB FLAG ; FIR≥SEC,FLAG=1
MOV DIFF_L,A ; 保存差值低 8位
RETU_C,RET
返回本节
第九章 计算机控制系统的数据处理
9.3.2 二次抛物线插值法
二次抛物线插值法就是通过特性曲线上三点做一条抛物线,
用此抛物线替代特性曲线进行参数计算。由于抛物线比直
线能更好地逼近特性曲线,所以抛物线插值法能够提高非
线性补偿的精度。线性插值法和抛物线插值法补偿精度比
较如图 5-9所示。
X
X X i+1X i
Y
(X 0,Y 0 )
(X 1,Y 1 )
(X 2,Y 2 )
实际的特性曲线
抛物线插值法
形成的逼近曲线
线性插值法形
成的逼近曲线
第九章 计算机控制系统的数据处理
假设系数 M0,M1
和 M2已经求出并
存储到到相应的
内存单元中,根
据上面的讨论可
以画出用抛物线
插值法进行线性
化的程序流程框
图,如图 9-10所
示。
返回本节
二次抛物线程序
读入X 值
计算( X -X 0 )
计算 m 1 ( X -X 0 )
计算( X -X 1 )
计算 ( X - X 0 ) ( X -X 1 )
计算 m 2 ( X -X 0 ) ( X -X 1 )
计算 m 1 ( X -X 0 )+ m 2 ( X - X 0 ) ( X - X 1 )
计算 Y= m 0 + m 1 ( X -X 0 )+ m 2 ( X - X 0 ) ( X - X 1 )
结 束
第九章 计算机控制系统的数据处理
9.4 数据极性和字长的预处理
9.4.1 数据极性的预处理
9.4.2 输入输出数据字长的预处理
返回本章首页
第九章 计算机控制系统的数据处理
9.4.1 数据极性的预处理
1,输入, 输出信号都是双极性的数据预处理
图
9-
11
双
极
性
输
出
预
处
理
程
序
流
程
图
开 始
Y > X?
计算 Δ =Y-X
取采样数据
A R E S U L T
0 0 H A
Δ 补≥8 0 H 否?
Δ ≥8 0 H 否?
Δ + 8 0 H A F F H A
采样数据
为正极否?
求 Δ 补码
计算 Δ =Y-X
Y > X?
返 回
是
是
是
是
否
否
否否
否
是
A RESULT
第九章 计算机控制系统的数据处理
双极性输出预处理程序清单:
PROC_PRE,MOV A,SAMP ; 取采样数据
JNB ACC.7,NEG; 判断采样数据极性, D7=0,
转 NEG
MOV R2,A
MOV A,GIVE ; 取给定信号
CLR C ; 清进位标志位
SUBB A,R2 ; 计算 ?═Y-X
MOV TEMP,A ; 保存偏差值
JNC LOOP3 ; Y≥X,转 LOOP3
CPL A ; Y<X,求偏差值反码
第九章 计算机控制系统的数据处理
INC A ; 反码加 1
MOV TEMP,A ; 保存偏差值的绝对值 ( 补码 )
CLR C
SUBB A,#80H ; 判断较偏差值的绝对值是否大于 80H
JC LOOP3 ; 否, 转 LOOP3
AJMP MAX_N ; 是, 转 MAX_N
NEG,MOV A,GIVE; 取给定信号
CLR C
SUBB A,R2 ; 计算 △ =Y-X
MOV TEMP,A ; 保存偏差值
JNC LOOP1 ; Y≥X,转 LOOP1
ADD A,#80H ; △ ← △ +80H
AJMP LOOP4
LOOP1,MOV TEMP,A ; 保存 △
CLR C
第九章 计算机控制系统的数据处理
SUBB A,#80H ; 判断较偏差值是否大于 80H
JC LOOP2 ; 否, 转 LOOP2
MOV A,#0FFH ; 是, 保存 0FFH到结果单元
AJMP LOOP4
LOOP2,MOV A,TEMP
ADD A,#80H ; △ ← △ +80H
AJMP LOOP4
MAX_N,MOV RESULT,#00H ; 保存 00H到结果单元
AJMP LOOP4
LOOP3,MOV A,TEMP
ADD A,#80H ; △ ← △ +80H
LOOP4,MOV RESULT,A ; 保存偏差值
RET
第九章 计算机控制系统的数据处理
2,输入信号为单极性,输出信号为双极性
系统的数据预处理程序流程图如图 9-12所示 。
开 始
Y > X 否?
计算 Δ =Y-X
读数据Y 和X
A R E S U L T
0 0 H A
Δ ≥8 0 H 否? Δ ≥8 0 H 否?
Δ + 8 0 H A F F H A
返 回
是
是
是
否
否
否
第九章 计算机控制系统的数据处理
程序清单如下:
PROC_PRE,MOV R2,SAMP ; 取采样数据
MOV A,GIVE ; 取给定信号
CLR C ; 清进位标志位
SUBB A,R2 ; 计算 Y-X
MOV TEMP,A ; 保存偏差值
JNC BIG ; Y≥X,转 BIG
CLR C
SUBB A,#80H ; 偏差信号是否大于 80H
JNC LOOP1 ; 不是, 转 LOOP1
MOV A,#00H ; 是, 保存 FFH到结果单元
第九章 计算机控制系统的数据处理
AJMP LOOP2
BIG,SUBB A,#80H ; 偏差信号是否大于 80H
JC LOOP1 ; 不是, 转 LOOP1
MOV A,#0FFH ; 是, 保存 FFH到结果单元
AJMP LOOP2
LOOP1,MOV A,TEMP
ADD A,#80H
LOOP2,MOV RESULT,A
RET
返回本节
第九章 计算机控制系统的数据处理
9.4.2 输入输出数据字长的预处理
1,输入位数大于输出位数
当输入器件精度比输出器件精度高时,如采用 10
位 A/D转换器采样,而把处理后的 10位二进制数
通过 8位 D/A转换器输出,就会出现输入位数大于
输出位数的情况。
在计算机中通过移位的方法实现上述处理过程是
非常容易的 。 设输入值存放在 IN_H和 IN_L内存
单元中, 转换后的输出值存放在 OUT内存单元中 。
则实现该位长变化的程序如下:
第九章 计算机控制系统的数据处理
CLR C ; 清进位标志位
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
CLR C
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
MOV OUT,A ; 保存转换结果
第九章 计算机控制系统的数据处理
带“四舍五入”的位长转换程序如下:
CLR C
ADD IN_L,#02H ; 输入值加 0000000010
ADDC IN_H,#00H
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
CLR C
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
JNB IN_H.0,END_C ; IN_H的 D0=0,无溢出, 转
END_C
DEC A ; IN_H的 D0=1,溢出, 移位结果减 1
END_C,MOV OUT,A ; 保存转换结果
RET
第九章 计算机控制系统的数据处理
2,输出位数大于输入位数
当输入器件精度比输出器件精度低时, 如采用 8
位 A/D转换器采样, 而通过 10位 D/A转换器进行
输出, 就会出现输入位数大于输出位数的情况 。
输出位数大于输入位数的最好的处理方法是:将
8位数左移两位构成 10位数, 10位数的最低两位
用, 0” 填充 。 如:
转换前的 8位输入值,XXXXXXXX;
转换后的 10位输出值,XXXXXXXX00。
返回本节
第九章 计算机控制系统的数据处理
THANK YOU VERY
MUCH !
本章到此结束,
谢谢您的光临!
返回本章首页结束放映
第九章 计算机控制系统的数据处理
9.1 计算法
9.2 查表法
9.3 非线性补偿
9.4 数据极性和字长的预处理
第九章 计算机控制系统的数据处理
和常规的模拟系统相比, 计算机数据处理系统具
有如下优点:
( 1) 可用各种程序代替硬件电路, 甚至完全不
需要硬件 。 从而大大降低系统成本 。
( 2) 能够自动修正各种误差, 提高测量精度 。
( 3) 能够对被测参数进行复杂的计算和处理 。
( 4) 能够实现对传感器和测量装置的监控, 提
高系统的可靠性 。
第九章 计算机控制系统的数据处理
9.1 计算法
计算法就是在已测参数的基础上, 利用各种运算
程序计算出需要的参数 。 用计算法处理数据一般
可按以下步骤进行:
( 1) 根据物理和工程实际求出被测参数的数学
表达式;
( 2) 根据要求的精度, 确定 A/D转换器的位数,
并设计出相应的硬件电路;
( 3) 根据被测参数的数学表达式, 进行相应的
数据处理 。
返回本章首页
第九章 计算机控制系统的数据处理
控制系统主程序和中断服务程序流程框图如图 9-
1和图 9-2所示 。
开 始
中断方式设置
定时器初始化
中断等待
开中断
中断向量设置
扩展I / O 口初始化
开 始
流量计算模块
数字滤波模块
显示模块
流量标度计算变换模块
标度变换模块
数据采集模块
返 回
图
9-
1
主
程
序
流
程
图
图
9-
2
中
断
服
务
程
序
流
程
图
第九章 计算机控制系统的数据处理
流量计算程序流程图如图 9-3所示 。
第九章 计算机控制系统的数据处理
程序清单如下:
...
...
MOV MUL1_L,DATA ; 差压信号 ΔP送 MULT1
INC DATA
MOV MUL1_H,DATA
INC DATA
MOV MUL2_L,DATA ; 绝对压力 P送 MULT2
INC DATA
MOV MUL2_H,DATA
第九章 计算机控制系统的数据处理
ACALL MULTD ; 计算 ΔP× P
MOV DIV1_H,PR_H
MOV DIV1_L,PR_L
INC DATA
MOV DIV2_L,DATA ; 绝对温度 T送 DIV2
INC DATA
MOV DIV2_H,DATA
ACALL DUBDIV ; 计算 ΔP× P/T
MOV S_H,DIV1_H
MOV S_L,DIV1_L
ACALL SORT
MOV MUL1_L,SR
第九章 计算机控制系统的数据处理
MOVMUL1_H,#00H
INC DATA
MOVMUL2_L,DATA
INC DATA
MOV MUL2_H,DATA
ACALL MULTD
MOVRESULT,PR_L
INC RESULT,
MOVRESULT,PR_H
第九章 计算机控制系统的数据处理
程序中用到的双字节的乘法, 除法子程序可参考第三章
中的相关内容 。
开方子程序:
程序入口:被开方数 N存放地址 S_H( 高 8位 ), S_L( 低
8位 ) ;
程序出口:平方根的整数部分存放在 SR单元中 。
SORT:MOV SR,#00H ; 开放结果 I置零
CLR C ; 清进位标志位
LOOP:MOV A,SR ; 求 2× I+1
ADD A,SR
第九章 计算机控制系统的数据处理
MOV R7,#00H
XCH A,R7
ADDCA,#00H
XCH A,R7
ADDCA,#00H
XCH A,R7
MOV R6,A
CLR C ; 求 N-(2× I+1)
第九章 计算机控制系统的数据处理
MOV A,S_L
SUBB A,R6
MOV S_L,A
MOV A,S_H
SUBB A,R7
MOV S_H,A
JC RETU
INC SR ; 开方结果加 1
SJMP LOOP
RETU,RET
返回本节
第九章 计算机控制系统的数据处理
9.2 查表法
9.2.1 顺序查表法
9.2.2 计算查表法
9.2.3 对分查表法
返回本章首页
第九章 计算机控制系统的数据处理
9.2.1 顺序查表法
顺序查表法的步骤如下:
( 1) 设定表格的起始地址 。
( 2) 设定表格的长度 。
( 3) 设定要搜索的关键字 。
( 4) 从表格的第一项开始, 比较
表格数据和关键字, 进行数据搜
索 。
图 9-4 顺序查表法程序流程图
第九章 计算机控制系统的数据处理
图 9-4 顺序查表法程序流程图
开 始
判断是关
键字否?
设定表格初始地址
取下一数据
设定表格长度
设置查找成功标志
检索完全
部数据否?
设置查找失败标志
读第一数据
读关键字
取关键字在
表中的地址
返 回
否
否
是
是
第九章 计算机控制系统的数据处理
顺序查表法程序清单:
SEARCH,MOV R0,TABLE ; 设定表格起始地址
MOV R1,LENGTH ; 设定表格长度
CLR FLAG ; 查找成功标志位清零
LOOP,MOV A,KEY ; 读关键字
XRL A,@R0 ; 比较
JNZ NEXT ; 未查找到关键字, 继续
SETB FLAG ; 查找到关键字, 置位查找成功标志位
MOV A,R0 ; 读出关键字在表中的地址
AJMP RETU ; 退出查找
NEXT,INC R0 ; 指向表格的下一个数据
DJNZ R1,LOOP ; 未检索完全部数据, 继续
RETU,RET ; 退出查找程序, 子程序返回
返回本节
第九章 计算机控制系统的数据处理
9.2.2 计算查表法
计算查表法适用于数据按一定的规律排列, 并且搜索内
容和表格数据地址之间的关系能用公式表示的有序表格 。
下面以实例介绍计算查表法的程序设计 。
设计一巡回检测报警装置, 要求能对 16个通道输入值进
行比较, 当某一通道输入值超过该路的报警值时, 发出
报警信号 。
通道值和报警值的存放地址之间的关系可用下面的公式
表示:
报警值存放地址 =数据表格起始地址 +通道值× 2
第九章 计算机控制系统的数据处理
设通道值 ( 以 16进制表示 ) 存放在 CIRC单元中, 查表后的上限报警
值存放在 UPPER单元中, 下限报警值存放在 LOWER单元中 。
查表程序清单如下:
CLR C ; 进位标志位清零
MOV DPTR,#TAB ; 设置数据表首址
MOV A,CIRC; 读检测通道值
RLC A ; 检测通道值乘 2
MOVC A,@A+DPTR ; 读上限值
MOV UPPER,A ; 保存上限值
INC DPTR
MOVC A,@A+DPTR ; 读下限值
MOV LOWER,A ; 保存下限值
RET
TAB,UPPER0,LOWER0,UPPER1,LOWER1,....,
UPPER15,LOWER15; 报警数据表
返回本节
第九章 计算机控制系统的数据处理
9.2.3 对分查表法
对分查表法的最高
搜索次数 Log2N-1。
和顺序查表法相比,
对分法可以大大减
少查表次数, 提高
检索效率 。
对分查表法的程
序流程图如图 9-5
所示
开 始
对分数> 关
键字否?
读检索关键字
保存检索到
的数据序号
取对分数据
设置数据起点、终点
检索项序号=
对分序号做起点
2
终点起点 ?
到检索范
围边界否?
是关键字否?
对分序号做终点
起点数据=
关键字否?
设置检索
失败标志
返 回
否
否
否
否
是 是
是
是
第九章 计算机控制系统的数据处理
对分查表法程序清单:
MOV BEGIN,#00H ; 设置检索范围起点
MOV END,#DVL ; 设置检索范围终点
MOV KEY,#KEY ; 设置关键字
MOV TIME,#01H ; 置检索次数初值
LOOP,MOV R0,#ADD ; 置数据区起始地址
MOV A,BEGIN ; 取检索范围起点
ADD A,END ; 起点 +终点
CLR C
RRC A ; 除 2
MOV FLAG,A ; 存放对分检索取数序号
CLR C
第九章 计算机控制系统的数据处理
XOR A,2AH ; 判断是否到检索范围边缘
JZ LOOP3 ; 是, 跳转至 LOOP3
MOV A,FLAG
ADD A,R0 ; 形成对分检索取数地址
MOV R0,A
MOV A,@R0 ; 读数
MOV DATA,A ; 保存检索到的数据
CLR C
SUBB A,KEY ; 和关键字比较
JZ LOOP5 ; 相等, 则检索成功
JNC LOOP2 ; 取的数据大, 跳转至 LOOP2
MOV 2AH,FLAG ; 取的数据小, 修改检索范围的起点
第九章 计算机控制系统的数据处理
INC TIME ; 检索次数加 1
SJMP LOOP1 ; 继续检索
LOOP2,MOV A,FLAG ; 取的数据大, 修改检索范围的终点
MOV END,A
INC TIME
SJMP LOOP1 ; 继续检索
LOOP3,MOV R0,#DATA ; 到达检索边缘, 比较是否为关键字
MOV A,@R0
CJNE A,KEY,LOOP4 ; 不是关键字, 跳转至 LOOP4
MOV DATA,A ; 是关键字, 保存
SJMP LOOP5 ; 退出检索程序
LOOP4,MOV A,#0FFH; 不是关键字, 置检索不成功标志
MOV FLAG,A
LOOP5,RET ; 检索程序结束
返回本节
第九章 计算机控制系统的数据处理
9.3 非线性补偿
9.3.1 线性插值法
9.3.2 二次抛物线插值法
返回本章首页
第九章 计算机控制系统的数据处理
9.3.1 线性插值法
1,线性插值原理
2,线性插值的计算机实现
3,线性插值法非线性补偿实例
第九章 计算机控制系统的数据处理
1.线性插值原理
1.线性插值原理
设某传感器输入信号 X和输出信号 Y之间的关系如图 9-6所示 。
图 9-6 传感器的输出特性曲线
Y
Y 0
Y 1
Y i
Y i+1
Y n
X 0
X
X 1 X i X i+1 X n
第九章 计算机控制系统的数据处理
从图 9-6可以看出:
( 1) 曲线斜率变化越小, 替代直线越逼近特性
曲线, 则线性插值法带来的误差就越小 。 因此,
线性插值法适用于斜率变化不大的特性曲线的线
性化 。
( 2) 插值基点取得越多, 替代直线越逼近实际
的曲线, 插值计算的误差就越小 。 因此, 只要插
值基点足够多, 就可以获得足够的精度 。
第九章 计算机控制系统的数据处理
2,线性插值的计算机实现
利用计算机实现线性插值的步骤如下:
( 1) 用实验法测出传感器输出特性曲线, 应尽可能保
证该曲线的精确性;
( 2) 选取插值点, 将绘制好的曲线分段 。
( 3) 计算并存储各相邻插值点间逼近曲线的斜率 Ki;
( 4) 计算 X-Xi;
( 5) 读出 X所在区间的斜率 Ki,计算 Ki( X-Xi) ;
( 6) 计算 。
第九章 计算机控制系统的数据处理
根据以上步骤可以画出计算机实现的线性插值计
算流程图如图 9-7所示。
线性插值程序
读入X 值
计算 X -X i
用查表法找出 X 所在
的区间,并取出 K i
计算 K i ( X -X i )
计算 Y = X i + K i ( X - X i )
结 束
第九章 计算机控制系统的数据处理
3,线性插值法非线性补偿实例
根据热电偶的技术数据可以绘制出输出电压信号
V和温度 T之间的特性曲线, 假设热电偶的输出
特性曲线如图 9-8所示 。
t ( C )
。
t 4
t 3
t 2
t 1
V 1 V 2 V 3 V 4 V i
4
3
2
1
1
?
2
?
3
?
4
?
第九章 计算机控制系统的数据处理
由图 9-8可以看出, 该热电偶的输出特性曲线斜率的变化
不大, 可以采用线性插值法进行非线性补偿 。
选择 4个插值基点 ( V1,T1), ( V2,T2), ( V3,T3),
( V4,T4), 然后写出每段曲线的插值函数表达式, 表
达式如式 ( 9-5) 所示 。
( 9-5)
第九章 计算机控制系统的数据处理
表 9-1 参数存储单元分配表
第九章 计算机控制系统的数据处理
线性插值法非线性补偿程序清单:
MOV FIR_L,54H ; 取热电偶输出电压信号 Vi
MOV FIR_H,55H
MOV SEC_L,44H ; 取 V4
MOV SEC_H,45H
ACALL COMPARE ; 求 Vi-V4
JB FLAG,T5 ; Vi≥V4,转 T5
MOV SEC_L,42H ; 取 V3
MOV SEC_H,43H
ACALL COMPARE ; 求 Vi-V3
JB FLAG,T4 ; Vi≥V3,转 T4
MOV SEC_L,40H ; 取 V2
第九章 计算机控制系统的数据处理
MOV SEC_H,41H
ACALL COMPARE ; 求 Vi-V2
JB FLAG,T3 ; Vi≥V2,转 T3
MOV SEC_L,38H ; 取 V1
MOV SEC_H,39H
ACALL COMPARE ; 求 Vi-V1
JB FLAG,T2 ; Vi≥V1,转 T2
T1,MOV MUL1_L,30H ; 取 K1
MOV MUL1_H,31H
MOV MUL2_L,54H ; 取 Vi
MOV MUL2_H,55H
ACALL MULTD ; 求 K1× Vi
MOV RESU_L,PR_L ; T→ RESU
MOV RESU_H,PR_H
RETU,RET
第九章 计算机控制系统的数据处理
T2,MOV MUL1_L,32H ; 取 K2
MOV MUL1_H,33H
MOV MUL2_L,DIFF_L ; 取 Vi-V1
MOV MUL2_H,DIFF_H
ACALLMULTD ; 求 K2× ( Vi-V1)
CLR C
MOV A,46H ; 求 T1+ K2× ( Vi-V1)
ADDC A,PR_L
MOV RESU_L,A ; T→ RESU
MOV A,47H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
第九章 计算机控制系统的数据处理
T3,MOV MUL1_L,34H ; 取 K3
MOV MUL1_H,35H
MOV MUL2_L,DIFF_L ; 取 Vi-V2
MOV MUL2_H,DIFF_H
ACALLMULTD ; 求 K3× ( Vi-V2)
CLR C
MOV A,48H ; 求 T2+ K3× ( Vi-V2)
ADDC A,PR_L
MOV RESU_L,A ; T→RESU
MOV A,49H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
T4,MOV MUL1_L,36H ; 取 K4
第九章 计算机控制系统的数据处理
MOV MUL1_H,37H
MOV MUL2_L,DIFF_L ; 取 Vi-V3
MOV MUL2_H,DIFF_H
ACALL MULTD ; 求 K4× ( Vi-V3)
CLR C
MOV A,50H ; 求 T3+ K4× ( Vi-V3)
ADDC A,PR_L
MOV RESU_L,A ; T→ RESU
MOV A,51H
ADDC A,PR_H
MOV RESU_H,A
AJMP RETU
T5,MOV RESU_L,52H ; T→RESU
MOV RESU_H,53H
AJMP RETU
第九章 计算机控制系统的数据处理
比较程序清单:
程序入口:第一数( FIR_L,FIR_H),第二数
( SEC_L,SEC_H)
程序出口:比较标志位 FLAG=0,则第一数 <第二数;
FLAG=1,则第一数 ≥第二数,且第一数与第二数的差存
放在 DIFF_H,DIFF_L单元中。
COMPARE,CLR C ; 清进位标志位
MOV A,FIR_H ; 取第一数的高 8位
SUBB A,SEC_H ; 高 8位相减
JNC NEXT ; 无借位,继续
CLR FLAG ; FIR<SEC,FLAG=0
AJMP RETU_C
第九章 计算机控制系统的数据处理
NEXT,CLR C
MOV DIFF_H,A ; 保存差值高 8位
MOV A,FIR_L ; 取第一数的低 8位
SUBB A,SEC_L ; 低 8位比较
JNC BIG ; FIR≥SEC,转 BIG
CLR FLAG ; FIR<SEC,FLAG=0
AJMP RETU_C
BIG,SETB FLAG ; FIR≥SEC,FLAG=1
MOV DIFF_L,A ; 保存差值低 8位
RETU_C,RET
返回本节
第九章 计算机控制系统的数据处理
9.3.2 二次抛物线插值法
二次抛物线插值法就是通过特性曲线上三点做一条抛物线,
用此抛物线替代特性曲线进行参数计算。由于抛物线比直
线能更好地逼近特性曲线,所以抛物线插值法能够提高非
线性补偿的精度。线性插值法和抛物线插值法补偿精度比
较如图 5-9所示。
X
X X i+1X i
Y
(X 0,Y 0 )
(X 1,Y 1 )
(X 2,Y 2 )
实际的特性曲线
抛物线插值法
形成的逼近曲线
线性插值法形
成的逼近曲线
第九章 计算机控制系统的数据处理
假设系数 M0,M1
和 M2已经求出并
存储到到相应的
内存单元中,根
据上面的讨论可
以画出用抛物线
插值法进行线性
化的程序流程框
图,如图 9-10所
示。
返回本节
二次抛物线程序
读入X 值
计算( X -X 0 )
计算 m 1 ( X -X 0 )
计算( X -X 1 )
计算 ( X - X 0 ) ( X -X 1 )
计算 m 2 ( X -X 0 ) ( X -X 1 )
计算 m 1 ( X -X 0 )+ m 2 ( X - X 0 ) ( X - X 1 )
计算 Y= m 0 + m 1 ( X -X 0 )+ m 2 ( X - X 0 ) ( X - X 1 )
结 束
第九章 计算机控制系统的数据处理
9.4 数据极性和字长的预处理
9.4.1 数据极性的预处理
9.4.2 输入输出数据字长的预处理
返回本章首页
第九章 计算机控制系统的数据处理
9.4.1 数据极性的预处理
1,输入, 输出信号都是双极性的数据预处理
图
9-
11
双
极
性
输
出
预
处
理
程
序
流
程
图
开 始
Y > X?
计算 Δ =Y-X
取采样数据
A R E S U L T
0 0 H A
Δ 补≥8 0 H 否?
Δ ≥8 0 H 否?
Δ + 8 0 H A F F H A
采样数据
为正极否?
求 Δ 补码
计算 Δ =Y-X
Y > X?
返 回
是
是
是
是
否
否
否否
否
是
A RESULT
第九章 计算机控制系统的数据处理
双极性输出预处理程序清单:
PROC_PRE,MOV A,SAMP ; 取采样数据
JNB ACC.7,NEG; 判断采样数据极性, D7=0,
转 NEG
MOV R2,A
MOV A,GIVE ; 取给定信号
CLR C ; 清进位标志位
SUBB A,R2 ; 计算 ?═Y-X
MOV TEMP,A ; 保存偏差值
JNC LOOP3 ; Y≥X,转 LOOP3
CPL A ; Y<X,求偏差值反码
第九章 计算机控制系统的数据处理
INC A ; 反码加 1
MOV TEMP,A ; 保存偏差值的绝对值 ( 补码 )
CLR C
SUBB A,#80H ; 判断较偏差值的绝对值是否大于 80H
JC LOOP3 ; 否, 转 LOOP3
AJMP MAX_N ; 是, 转 MAX_N
NEG,MOV A,GIVE; 取给定信号
CLR C
SUBB A,R2 ; 计算 △ =Y-X
MOV TEMP,A ; 保存偏差值
JNC LOOP1 ; Y≥X,转 LOOP1
ADD A,#80H ; △ ← △ +80H
AJMP LOOP4
LOOP1,MOV TEMP,A ; 保存 △
CLR C
第九章 计算机控制系统的数据处理
SUBB A,#80H ; 判断较偏差值是否大于 80H
JC LOOP2 ; 否, 转 LOOP2
MOV A,#0FFH ; 是, 保存 0FFH到结果单元
AJMP LOOP4
LOOP2,MOV A,TEMP
ADD A,#80H ; △ ← △ +80H
AJMP LOOP4
MAX_N,MOV RESULT,#00H ; 保存 00H到结果单元
AJMP LOOP4
LOOP3,MOV A,TEMP
ADD A,#80H ; △ ← △ +80H
LOOP4,MOV RESULT,A ; 保存偏差值
RET
第九章 计算机控制系统的数据处理
2,输入信号为单极性,输出信号为双极性
系统的数据预处理程序流程图如图 9-12所示 。
开 始
Y > X 否?
计算 Δ =Y-X
读数据Y 和X
A R E S U L T
0 0 H A
Δ ≥8 0 H 否? Δ ≥8 0 H 否?
Δ + 8 0 H A F F H A
返 回
是
是
是
否
否
否
第九章 计算机控制系统的数据处理
程序清单如下:
PROC_PRE,MOV R2,SAMP ; 取采样数据
MOV A,GIVE ; 取给定信号
CLR C ; 清进位标志位
SUBB A,R2 ; 计算 Y-X
MOV TEMP,A ; 保存偏差值
JNC BIG ; Y≥X,转 BIG
CLR C
SUBB A,#80H ; 偏差信号是否大于 80H
JNC LOOP1 ; 不是, 转 LOOP1
MOV A,#00H ; 是, 保存 FFH到结果单元
第九章 计算机控制系统的数据处理
AJMP LOOP2
BIG,SUBB A,#80H ; 偏差信号是否大于 80H
JC LOOP1 ; 不是, 转 LOOP1
MOV A,#0FFH ; 是, 保存 FFH到结果单元
AJMP LOOP2
LOOP1,MOV A,TEMP
ADD A,#80H
LOOP2,MOV RESULT,A
RET
返回本节
第九章 计算机控制系统的数据处理
9.4.2 输入输出数据字长的预处理
1,输入位数大于输出位数
当输入器件精度比输出器件精度高时,如采用 10
位 A/D转换器采样,而把处理后的 10位二进制数
通过 8位 D/A转换器输出,就会出现输入位数大于
输出位数的情况。
在计算机中通过移位的方法实现上述处理过程是
非常容易的 。 设输入值存放在 IN_H和 IN_L内存
单元中, 转换后的输出值存放在 OUT内存单元中 。
则实现该位长变化的程序如下:
第九章 计算机控制系统的数据处理
CLR C ; 清进位标志位
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
CLR C
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
MOV OUT,A ; 保存转换结果
第九章 计算机控制系统的数据处理
带“四舍五入”的位长转换程序如下:
CLR C
ADD IN_L,#02H ; 输入值加 0000000010
ADDC IN_H,#00H
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
CLR C
MOV A,IN_H ; 输入值右移一位
RRC A
MOV A,IN_L
RRC A
JNB IN_H.0,END_C ; IN_H的 D0=0,无溢出, 转
END_C
DEC A ; IN_H的 D0=1,溢出, 移位结果减 1
END_C,MOV OUT,A ; 保存转换结果
RET
第九章 计算机控制系统的数据处理
2,输出位数大于输入位数
当输入器件精度比输出器件精度低时, 如采用 8
位 A/D转换器采样, 而通过 10位 D/A转换器进行
输出, 就会出现输入位数大于输出位数的情况 。
输出位数大于输入位数的最好的处理方法是:将
8位数左移两位构成 10位数, 10位数的最低两位
用, 0” 填充 。 如:
转换前的 8位输入值,XXXXXXXX;
转换后的 10位输出值,XXXXXXXX00。
返回本节
第九章 计算机控制系统的数据处理
THANK YOU VERY
MUCH !
本章到此结束,
谢谢您的光临!
返回本章首页结束放映