📄 ist_filter(old).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
.global FILTER_Y5,FILTER_Y6,FILTER_Y7,FILTER_Y8,FILTER_Y9,FILTER_Y10
.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 #10
BCND FILTER_CAL,GT
ADD #11
SACL FILTER_COUNT ;否则加1(已经减10,所以加11)
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 NEXT7,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 NEXT11,GT ;FILTER_MAX>FILTER_Y6时跳
LACC FILTER_Y6
SACL FILTER_MAX ;Y6最大
NEXT11:
LACC FILTER_MAX
SUB FILTER_Y7
BCND NEXT12,GT
LACC FILTER_Y7
SACL FILTER_MAX
NEXT12:
LACC FILTER_MAX
SUB FILTER_Y8
BCND NEXT13,GT
LACC FILTER_Y8
SACL FILTER_MAX
NEXT13:
LACC FILTER_MAX
SUB FILTER_Y9
BCND NEXT14,GT
LACC FILTER_Y9
SACL FILTER_MAX
NEXT14:
LACC FILTER_MAX
SUB FILTER_Y10
BCND NEXT3,GT
LACC FILTER_Y10
SACL FILTER_MAX
; 计算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 NEXT9,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 NEXT15,LT ;FILTER_Y6>FILTER_MIN时跳
LACC FILTER_Y6
SACL FILTER_MIN ;Y6最小
NEXT15:
LACC FILTER_MIN
SUB FILTER_Y7
BCND NEXT16,LT
LACC FILTER_Y7
SACL FILTER_MIN
NEXT16:
LACC FILTER_MIN
SUB FILTER_Y8
BCND NEXT17,LT
LACC FILTER_Y8
SACL FILTER_MIN
NEXT17:
LACC FILTER_MIN
SUB FILTER_Y9
BCND NEXT18,LT
LACC FILTER_Y9
SACL FILTER_MIN
NEXT18:
LACC FILTER_MIN
SUB FILTER_Y10
BCND NEXT6,LT
LACC FILTER_Y10
SACL FILTER_MIN
;---------------
NEXT6:
LACC FILTER_Y1
ADD FILTER_Y2
ADD FILTER_Y3
ADD FILTER_Y4
ADD FILTER_Y5
ADD FILTER_Y6
ADD FILTER_Y7
ADD FILTER_Y8
ADD FILTER_Y9
ADD FILTER_Y10
SUB FILTER_MAX
SUB FILTER_MIN
SFR
SFR
SFR ;算术右移一位,相当于除2。
SACL FILTER_RESULT ;滤波结果。
;---------------
;把Y值前移。
END_FILTER: LACC FILTER_Y9
SACL FILTER_Y10
LACC FILTER_Y8
SACL FILTER_Y9
LACC FILTER_Y7
SACL FILTER_Y8
LACC FILTER_Y6
SACL FILTER_Y7
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 + -