求出一段连续地址中的最大值和最小值
时间:2025-04-20
时间:2025-04-20
network1
LD SM0.0
MOVW 0, #MAX:LW6
AENO
MOVW 0, #MIN:LW8
network2
LD SM0.0
MOVD #Startadd:LD0, AC1
+D +2, AC1
network3
LD SM0.0
LPS
AW>= *AC1, *#Startadd:*LD0
MOVW *AC1, #MAX:LW6
AENO
MOVW *#Startadd:*LD0, #MIN:LW8
LPP
AW< *AC1, *#Startadd:*LD0
MOVW *#Startadd:*LD0, #MAX:LW6
AENO
MOVW *AC1, #MIN:LW8
network4
LD SM0.0
MOVW #Datalen:LW4, LW12
-I 1, LW12
network5
LD SM0.0
FOR #temp_i:LW10, 1, LW12
network6
LD SM0.0
LPS
AW>= *AC1, #MAX:LW6
MOVW *AC1, #MAX:LW6
LPP
AW< *AC1, #MIN:LW8
MOVW *AC1, #MIN:LW8
network7
LD SM0.0
+D 2, AC1
network8
NEXT
以上是我以前项目中写子程序,可以直接转换为LAD查看。功能就是求出一段连续地址中的最大值和最小值。注意for循环长度,太长有可能超时。
平均值程序很好写,就是累加之后再除一下。
这类程序都是逻辑非常简单的,建议楼主如果有时间的话还是自己写。
程序要求:先中值,随后进行“数据窗口平移”和“算术平均值”滤波。
“中值法””就是对采样得到的多个数据进行去掉最大值和最小值而取用中间数值的滤波方法。
“数据窗口平移法”是保证系统所处理的数据始终都是固定个数的最新数据,每当得到一个新数据就同时剔除一个较早的数据。本文取的数据窗口个数是8。
主程序
LD SM0.1
CALL SBR_0
LD SM0.0
CALL SBR_1
子程序SBR_0
//定于采样次数(次数×采样时间=平均值输出时间)
LD SM0.0
MOVW +10, VW0
//采样值存储器清零
LD SM0.0
FILL +0, VW2, 11
//这些都是对应的地址清零
LD SM0.0
MOVD +0, VD200
MOVD +0, VD204
MOVD +0, VD208
MOVD +0, VD212
MOVD +0, VD216
MOVD +0, VD308
MOVD +0, VD224
子程序SBR_2
//调出模拟信号
LD SM0.0
MOVW AIW0, VW200
//定义采样时间
LD SM0.0
AN T37
TON T37, 1
//将模拟量值存入表格
LD T37
ATT VW200, VW0
//将值转化为实数
LD SM0.0
ITD VW200, VD204
DTR VD204, VD208
MOVW VW2, VW300
//求采样和
LD T37
+R VD208, VD212
//采样次数到,求平均值,采样和前去采样第一次值 LDW> VW300, +9
ITD VW300, VD216
DTR VD216, VD220
MOVR VD212, VD224
/R VD220, VD224
FIFO VW0, VW306
ITD VW306, VD308
DTR VD308, VD312
-R VD312, VD212
//转换为整数输出
LD SM0.0
ROUND VD224, VD228
DTI VD228, VW232
上一篇:煤矿综合防灭火措施
下一篇:《再别康桥》说课稿1