📄 ist_filter.asm
字号:
;=====================================================================
; File name : IST_FILTER.asm
; Module Name : FILTER
; Description : 防脉冲平均值滤波器
;
;
; |~~~~~~~~~~~~~~~|
; | |
; IST0 o----> | FILTER |----->o FILTER_RESULT
; (FILTER_Y1-6) | |
; |______________ |
; 2004.9.22
;=====================================================================
.include "f2407.h"
.global FILTER,FILTER_INIT ;function call
.global IST0 ;input
.global FILTER_Y1,FILTER_Y2,FILTER_Y3,FILTER_Y4,FILTER_Y5,FILTER_Y6
.global TEMP,FILTER_RESULT,FILTER_MAX,FILTER_MIN,FILTER_COUNT
;=====================================================================
FILTER_INIT:
;=====================================================================
LDP #DP_DATA
SPLK #0,FILTER_COUNT
SPLK #0,FILTER_RESULT
RET
;=====================================================================
FILTER:
;=====================================================================
SPM 0
SETC SXM
;-----------------------------------------------------------
LDP #DP_DATA
LACC IST0
SACL FILTER_Y1 ;IST0暂存到FILTER_Y1
;-------------
;判断是否10个值都有。
LACC FILTER_COUNT
SUB #4
BCND FILTER_CAL,GT
ADD #5
SACL FILTER_COUNT ;否则加1(已经减6,所以加7)
B END_FILTER
; 计算FILTER_MAX
FILTER_CAL: LACC FILTER_Y1
SACL FILTER_MAX ;Y1最大,ACC=Y1
SUB FILTER_Y2
BCND NEXT1,GT ;FILTER_Y1>FILTER_Y2时跳到NEXT1
LACC FILTER_Y2
SACL FILTER_MAX ;Y2最大,ACC=Y2
NEXT1:
LACC FILTER_MAX
SUB FILTER_Y3
BCND NEXT2,GT ;FILTER_MAX>FILTER_Y3时跳到NEXT2
LACC FILTER_Y3
SACL FILTER_MAX ;Y3最大
NEXT2:
LACC FILTER_MAX
SUB FILTER_Y4
BCND NEXT3,GT ;FILTER_MAX>FILTER_Y4时跳到NEXT3
LACC FILTER_Y4
SACL FILTER_MAX ;Y4最大
; NEXT7:
; LACC FILTER_MAX
; SUB FILTER_Y5
; BCND NEXT8,GT ;FILTER_MAX>FILTER_Y5时跳
; LACC FILTER_Y5
; SACL FILTER_MAX ;Y5最大
;; NEXT8:
; LACC FILTER_MAX
; SUB FILTER_Y6
; BCND NEXT3,GT ;FILTER_MAX>FILTER_Y6时跳
; LACC FILTER_Y6
; SACL FILTER_MAX ;Y6最大
; 计算FILTER_MIN
NEXT3:
LACC FILTER_Y1
SACL FILTER_MIN ;Y1最小
SUB FILTER_Y2
BCND NEXT4,LT ;FILTER_Y2>FILTER_Y1时跳转
LACC FILTER_Y2
SACL FILTER_MIN ;Y2最小
NEXT4:
LACC FILTER_MIN
SUB FILTER_Y3
BCND NEXT5,LT ;FILTER_Y3>FILTER_MIN时跳
LACC FILTER_Y3
SACL FILTER_MIN ;Y3最小
NEXT5:
LACC FILTER_MIN
SUB FILTER_Y4
BCND NEXT6,LT ;FILTER_Y4>FILTER_MIN时跳
LACC FILTER_Y4
SACL FILTER_MIN ;Y4最小
; NEXT9:
; LACC FILTER_MIN
; SUB FILTER_Y5
; BCND NEXT10,LT ;FILTER_Y5>FILTER_MIN时跳
; LACC FILTER_Y5
; SACL FILTER_MIN ;Y5最小
; NEXT10:
; LACC FILTER_MIN
; SUB FILTER_Y6
; BCND NEXT6,LT ;FILTER_Y6>FILTER_MIN时跳
; LACC FILTER_Y6
; SACL FILTER_MIN ;Y6最小
;---------------
NEXT6:
LACC FILTER_Y1
ADD FILTER_Y2
ADD FILTER_Y3
ADD FILTER_Y4
; ADD FILTER_Y5
; ADD FILTER_Y6
SUB FILTER_MAX
SUB FILTER_MIN
; SFR
SFR ;算术右移一位,相当于除2。
SACL FILTER_RESULT ;滤波结果。
;---------------
;把Y值前移。
END_FILTER:
; LACC FILTER_Y5
; SACL FILTER_Y6
; LACC FILTER_Y4
; SACL FILTER_Y5
LACC FILTER_Y3
SACL FILTER_Y4
LACC FILTER_Y2
SACL FILTER_Y3
LACC FILTER_Y1
SACL FILTER_Y2
;---------------------------------------------------------------------------
SPM 0
SETC SXM
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -