?? 11-1.asm
字號(hào):
;(1)程序判斷濾波法
MOV A,30H ;讀取當(dāng)前采樣值
CLR C ;清除進(jìn)位位
SUBB A,3lH ;求當(dāng)前采樣值和上次采樣值的差值
JNC LP1 ;如果當(dāng)前采樣值大于或等于上次采樣值,則跳轉(zhuǎn)
CPL A
ADD 01H ;如果當(dāng)前值小于上次采樣值
LP1:CLR C
CJNE A,01H LP3 ;當(dāng)前采樣值與上次采樣值的差值大于最大偏差值
LP2:MOV 32H,30H ;保存本次采樣遭
AJMP RET1
LP3:JC LP2 ;當(dāng)前采樣值與上一次采樣值的差值小于最大偏差值
MOV 32H,31H ;如果當(dāng)前采樣值與上一次采樣值的差值大于最大偏差值
;那么使用上一次的值
RET1:RET
;(2)中值濾波法
CAL: MOV R3,#04H ;存外循環(huán)次數(shù)
CAL1: MOV A,R3 ;內(nèi)循環(huán)次數(shù)
MOV R2,A
MOV R0,#40H ;數(shù)據(jù)首地址送給R0
MOV Rl,#4lH ;數(shù)據(jù)次地址送給Rl
CAL2: MOV A,@Rl
CLR C
SUBB A,@R0 ;相鄰兩個(gè)單元的數(shù)值相減
JNC CAL3 ;如果R1中的值大于R0中的值,不交換
MOV A,@R0 ;如果R1中的值小于R0中的值,交換
XCH A,@R1
MOV @R0,A
CAL3: INC R0 ;數(shù)據(jù)指針加1
INC R1
DJNZ R2,CAL2
DJNZ R3,CAL1
CLR C
MOV A,#04H
RRC A
ADD A,#30H ;計(jì)算中值地址
MOV R0,A
MOV 70H,@R0 ;存放濾波值
RET
;(3)算術(shù)平均值濾波法
FILTER: MOV R2,#04 ;設(shè)置累加次數(shù)
MOV R0,#40H ;采樣值首地址
CLR A
MOV R6,A ;清累加單元
MOV R7,A
LPl: MOV A,R6
ADD A,@R0
MOV R6,A
INC R0
MOV A,R7
ADDC A,@R0
MOV R7,A
INC R0
DJNZ R2,LPl
MOV 40H,R6 ;被除數(shù)
MOV 4lH,R7
MOV 44H,#N ;除數(shù)
MOV 45H,#00H
LCALL DIVl6 ;求平均值
MOV 50H,40H ;存濾波值
NOV 51H,41H
RET
DIV: CLR A ;雙字節(jié)除法
MOV 42H,A ;清余數(shù)單元
MOV 43H,A
MOV R2,#10H ;置移位次數(shù)
LP2: CLR C
MOV R3,#04H
MOV R0,#40H ;被除數(shù)地址
LP3: MOV A,@R0 ;被除數(shù)單元,余數(shù)單元左移一次
RLC A
MOV @R0,A
INC R0
DJNZ R3,LP3
MOV R0,#42H ;余數(shù)單元 - 除數(shù)
MOV R1,#44H
MOV A,@R0
CLR C
SUBB A,@R1
MOV 48H,A ;存差值低字節(jié)
INC R0
INC R1
MOV A,@R0
SUBB A,@R1
MOV 49H,A ;存差值高字節(jié)
JC LP4 ;不夠減則繼續(xù)左移
MOV R0,#42H ;夠減時(shí)差值取代原來的余數(shù)
MOV R1,#48H
MOV A,@R1
MOV @R0,A
INC R0
INC R1
MOV A,@R1
NIV @R0,A
INC 40H ;被除數(shù)單元加1
LP4:
DJNZ R2,LP2 ;移位次數(shù)不到,繼續(xù)執(zhí)行
RET
;(4)遞推平均濾波法
MOV R2,#N-l ;采樣個(gè)數(shù)
MOV R0,#32H ;隊(duì)列單元首地址
MOV R1,#33H
LP:
MOV A,R0 ;移動(dòng)低字節(jié)
DEC R0
DEC R0
MOV @Rn,A
MOV A,R0 ;修改低字節(jié)地址
ADD A,#04H
MOV R0,A
MOV A,@R1 ;移動(dòng)高字節(jié)
DEC R1
DEC R1
MOV @R1,A
MOV A,R1 ;修改高字節(jié)地址
ADD A,#04H
MOV R1,A
DJNZ R2,LP
MOV @R0,2EH ;存新的采樣值
MOV @R1,2FH
ACALL FILTER ;求算術(shù)平均值
RET
;(5)防脈沖干擾平均值濾波法
FILTER:
CLR A
MOV R2,A ;最大值初始值
MOV R3,A
MOV R6,A
MOV R7,A
MOV R5,#1FH
MOV R0,#04H
FIL1:
LCALL GETAD
MOV R1,A
ADD A,R7
MOV R7,A
MOV A,B
ADDC A,R6
MOV R6,A
CLR C
MOV A,R3
SUBB A,R1
MOV A,R2
SUBB A,B
JNC FIL2
MOV A,R1
MOV R3,A
MOV R2,B
FIL2:
CLR C
MOV A,R1
SUBB A,R5
MOV A,B
SUBB A,R4
JNC FIL3
MOV A,R1
MOV R5,A
MOV R4,B
FIL3:
DJNZ R0,F(xiàn)IL1
CLR C
MOV A,R6
SUBB A,R2
MOV R6,A
MOV A,R7
SUBB A,R3
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
MOV A,R7
SUBB A,R5
CLR C
RRC A
MOV R7,A
MOV A,R6
RRC A
MOV R6,A
RET
;(6) 一階滯后濾波法
FILTER: MOV R0,#DATA1
MOV R1,#DATA2
CLR C ;0.5Yn-1→R2和R3中
INC R0
MOV A,@R0
RRC A
MOV R3,A
DEC R0
MOV A,@R0
RRC A
MOV R2,A
MOV A,@R0
ADD A,@R1
MOV R6,A
INC R0
INC R1
MOV A,@R0
ADDC A,@R1
RRC A
MOV R7,A
MOV A,R6
RRC A
MOV R6,A
CLR C
MOV A,R7
RRC A
MOV R7,A
MOV A,R6
RRC A
ADD A,R2
MOV R2,A
MOV A,R7
ADDC A,R3
MOV R3,A
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -