⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcs51 滤波程序asm.txt

📁 单片机的数字滤波程序,看看大家有没有用?
💻 TXT
字号:
;限幅滤波程序
;入口    :A,SDAT,DELTY
;占用资源:B
;堆栈需求:2字节
;出口    :A

JUGFILT  :MOV    B,A
          CLR    C
          SUBB   A,SDAT
          JNC    JUGFT1
          CPL    A
          INC    A
JUGFT1   :SETB   A
          SUBB   A,#DELTY
          JNC    JUGFT3
          MOV    A,SDAT
          RET
JUGFT3   :MOV    A,B
          MOV    SDAT,A    
          RET

;中位值滤波程序
;入口    :ADDPH,ADDPL,N
;占用资源:ESELSORT
;堆栈需求:4字节
;出口    :A

MEDFILT  :LCALL  ESELSORT
          MOV    A,N
          CLR    C
          RRC    A
          ADD    A,ADDPL
          MOV    DPL,A
          MOV    A,ADDPH
          MOV    DPH,A
          JNC    MEDFT1
          INC    DPH
MEDFT1   :MOVX   A,@DPTR
          RET

;N点算术平均滤波
;入口    :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口    :A

AVFILT   :MOV    A,ADDPL
          MOV    DPL,A
          MOV    A,ADDPH
          MOV    DPH,A
          CLR    A
          MOV    R3,A
          MOV    R4,A
          MOV    R7,N
AVFT1    :MOVX   A,@DPTR
          INC    DPTR
          ADD    A,R4
          MOV    R4,A
          JNC    AVFT2
          INC    R3
AVFT2    :DJNZ   R7,AVFT1
          MOV    R7,N
          MOV    R2,#00H
          LCALL  NDIV31
          MOV    A,R4
          RET

;N点加权平均滤波
;入口    :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口    :A

QAVFILT  :CLR    A
          MOV    R3,A
          MOV    R4,A
          MOV    R7,N
          MOV    P2,ADDPH
          MOV    R1,ADDPL
          MOV    DPTR,#QAVTAB
QAVFT1   :MOVC   A,@A+DPTR
          MOV    B,A
          MOVX   A,@R1
          INC    DPTR
          INC    R1
          MUL    AB
          ADD    A,R4
          MOV    R4,A
          MOV    A,B
          ADDC   A,R3
          MOV    R3,A
          DJNZ   R7,QAVFT1
          MOV    A,R4
          JNB    ACC.7,QAVFT2
          INC    R3
QAVFT2   :MOV    A,R3
          RET
QAVTAB   :DB

;一阶加权滞后滤波程序
;入口    :A,DELTY
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口    :A

BQFILT   :MOV    B,A
          CLR    A
          MOV    DPTR,#ABTAB
          MOVC   A,@A+DPTR
          MUL    AB
          MOV    R4,A
          MOV    R3,B
          MOV    A,#01H
          MOVC   A,@A+DPTR
          MOV    B,DELTY
          MUL    AB
          ADD    A,R4
          MOV    R4,A
          MOV    A,B
          ADDC   A,R3
          MOV    R3,A
          MOV    A,R4
          JNB    ACC.7,FT1
          INC    R3
FT1      :MOV    A,R3
          MOV    DELTY,A
          RET
BQTAB    :DB     80H,80H


限幅滤波程序

设在顺序采样时刻T1、T2、T3所采集的数据分别为Y1、Y2、Y3,则当

∣Y2-Y1∣≤△y,则Y2作为采样值;

∣Y2-Y1∣>△y, 则保留Y2,但不作为采样值,继续采样得Y3;

如果∣Y3-Y2∣≤△y,则Y3作为采样值;

∣Y3-Y2∣>△y, 则取作为采样值。

程序 

PUSH    PSW      ;保护现场

       PUSH    A 

       CLR       C    ;进位标志位清零

       MOV     DATA,DATA2         

       MOV     A,DATA1

       SUBB    A,DATA ;求Yn-1 -Yn

       JNC       COMPARE  ;如果Yn-1 -Yn≥0,转COMPARE

       CPL       A    ;如果Yn-1 -Yn<0, 求补      

       INC       A    

COMPARE:  CLR       C

       SUBB    A,LIMIT       ;│Yn-Yn-1│和△y比较

       JC   OVER    ;如果│Yn-Yn-1│≤△y,DATA2→DATA

       MOV     DATA,DATA1      ;如果│Yn-Yn-1│>△y,DATA1→DATA

OVER:   POP       A    ;恢复现场 

       POP       PSW

       RET       ;返回


算术平均滤波

算术平均滤波

所谓算术平均滤波就是把n个采样值相加,然后取其算术平均值作为本次有效的采样信号

PUSH  PSW   ;现场保护 

      PUSH  A

      MOV   FLAG,#00H    ;进位位清零

      MOV   R0,DATA  ;设置数据存储区首址

      MOV   R7,#08H   ;设置采样数据个数

      CLR    A   ;清累加器

LOOP: ADD   A,@R0     ;两数相加

      JNC     NEXT ;无进位,转NEXT

      INC     FLAG ;有进位,进位位加1

NEXT: INC     R0 ;数据指针加1

      DJNZ  R7, LOOP ;未加完,继续加

      MOV   R7,#03H   ;设置循环次数



DIVIDE:    MOV   TEMP,A    ;保存累加器中的内容

      MOV   A,FLAG   ;累加结果除2

      CLR    C 

      RRC   A

      MOV   FLAG,A 

      MOV   A,TEMP 

      RRC   A 

      DJNZ  R7,DIVIDE     ;未结束,继续执行 

      MOV   SAMP,A   ;保存结果至SAMP中

      POP    A   ;恢复现场

      POP    PSW 

      RET 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -