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

📄 notch_60.lst

📁 pic16c6x和pic16c7xxx都可以通用
💻 LST
📖 第 1 页 / 共 5 页
字号:
                            mulMac
024A 0CB2  0CB1  03 
011C27  2800  082B  
012A 07AD  1803  AE 
010A2C  082C  07AE  
012F 0CAE  0CAD  B0 
010C31  0CAF  
                            mulMac
0266 0CB2  0CB1  03 
011C35  2800  082B  
0138 07AD  1803  AE 
010A3A  082C  07AE  
013D 0CAE  0CAD  B0 
010C3F  0CAF  
                            mulMac
0282 0CB2  0CB1  03 
011C43  2800  082B  
0146 07AD  1803  AE 
010A48  082C  07AE  

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE 10


014B 0CAE  0CAD  B0 
010C4D  0CAF  
                            mulMac
029E 0CB2  0CB1  03 
011C51  2800  082B  
0154 07AD  1803  AE 
010A56  082C  07AE  
0159 0CAE  0CAD  B0 
010C5B  0CAF  
                            mulMac
02BA 0CB2  0CB1  03 
011C5F  2800  082B  
0162 07AD  1803  AE 
010A64  082C  07AE  
0167 0CAE  0CAD  B0 
010C69  0CAF  
                        ;
                            .IF    SIGNED
016B 1FB4                   btfss   sign,7
016C 3400                   retlw   0
016D 09AF                   comf    ACCcLO          ; negate ACCa ( -ACCa -> ACCa )
016E 0AAF                   incf    ACCcLO
016F 1903                   btfsc   STATUS,Z
0170 03B0                   decf    ACCcHI
0171 09B0                   comf    ACCcHI
0172 1903                   btfsc   STATUS,Z
0173 09AD               neg_B   comf    ACCbLO          ; negate ACCb
0174 0AAD                   incf    ACCbLO
0175 1903                   btfsc   STATUS,Z
0176 03AE                   decf    ACCbHI
0177 09AE                   comf    ACCbHI
0178 3400                   retlw   0
                            .ELSE
                            retlw   0
                            .ENDIF
                        ;
                        ;*******************************************************************
                        ;
0179 3016               setup   movlw   16             ; for 16 shifts
017A 00B3                   movwf   temp
017B 082E                   movf    ACCbHI,W          ;move ACCb to ACCd
017C 00B2                   movwf   ACCdHI
017D 082D                   movf    ACCbLO,W
017E 00B1                   movwf   ACCdLO
017F 01AE                   clrf    ACCbHI
0180 01AD                   clrf    ACCbLO
0181 3400                   retlw   0
                        ;
                        ;*******************************************************************
                        ;
0182 09AB               neg_A   comf    ACCaLO          ; negate ACCa ( -ACCa -> ACCa )
0183 0AAB                   incf    ACCaLO
0184 1903                   btfsc   STATUS,Z
0185 03AC                   decf    ACCaHI
0186 09AC                   comf    ACCaHI

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE 11


0187 3400                   retlw   0
                        ;
                        ;*******************************************************************
                        ;  Assemble this section only if Signed Arithmetic Needed
                        ;
                             .IF    SIGNED
                        ;
0188 082C               S_SIGN  movf    ACCaHI,W
0189 062E                   xorwf   ACCbHI,W
018A 00B4                   movwf   sign
018B 1FAE                   btfss   ACCbHI,7        ; if MSB set go & negate ACCb
018C 2992                   goto    chek_A
                        ;
018D 09AD                   comf    ACCbLO          ; negate ACCb
018E 0AAD                   incf    ACCbLO
018F 1903                   btfsc   STATUS,Z
0190 03AE                   decf    ACCbHI
0191 09AE                   comf    ACCbHI
                        ;
0192 1FAC               chek_A  btfss   ACCaHI,7        ; if MSB set go & negate ACCa
0193 3400                   retlw   0
0194 2982                   goto    neg_A
                        ;
                             .ENDIF

                                  #endasm

0035                              bits            x_n;            /* input sample x(n) */
0036                              unsigned long   y_n;            /* output sample y(n) */
003A                              unsigned long   x_n_1;          /* x(n-1) */
003C                              unsigned long   x_n_2;          /* x(n-2) */
003E                              unsigned long   y_n_1;          /* y(n-1) */
0040                              unsigned long   y_n_2;          /* y(n-2) */

0042                              char            rmndr_h;        /* high byte of remainder from multiplies */
0043                              char            rmndr_l;        /* low byte of remainder from multiplies */

00D2                              #define A1_H    0xd2            /* filter coefficients */
0008                              #define A1_L    0x08            /* for 60Hz notch filter */
0011                              #define A2_H    0x11            /* Fs= 1kHz */
0071                              #define A2_L    0x71
0018                              #define B0_H    0x18
00BB                              #define B0_L    0xbb
00D2                              #define B1_H    0xd2
0008                              #define B1_L    0x08
0018                              #define B2_H    0x18
00B9                              #define B2_L    0xb9


                                  /******************************************************************************
                                  * Filter initialization - clears all taps in memory.
                                  *
                                  * usage:
                                  *       - call init_filter()
                                  *         use at program initialization

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE 12


                                  ******************************************************************************/
                                  void init_filter(){

                                  #asm

0195 01B6                       clrf      y_n           ; clear output value
0196 01B7                       clrf      y_n+1         ;
0197 01BE                       clrf      y_n_1           ; and all filter "taps"
0198 01BF                       clrf      y_n_1+1         ;
0199 01C0                       clrf      y_n_2           ;
019A 01C1                       clrf      y_n_2+1         ;
019B 01BA                       clrf      x_n_1           ;
019C 01BB                       clrf      x_n_1+1         ;
019D 01BC                       clrf      x_n_2           ;
019E 01BD                       clrf      x_n_2+1         ;

                                  #endasm

019F 0008    RETURN               }


                                  /******************************************************************************
                                  * Assembly language subroutines for main filter() function
                                  ******************************************************************************/
                                  #asm

                        ;
                        ; Add Remainder subroutine - adds remainder from multiplies to ACCc
                        ;

                        add_rmndr:
01A0 1FB4                       btfss     sign,7          ; check if number is negative
01A1 29AD                       goto      add_r_start     ; go to add_r_start if not
01A2 09AF                       comf      ACCcLO          ; if so, negate number in ACC
01A3 0AAF                       incf      ACCcLO          ;
01A4 1903                       btfsc     STATUS,Z        ;
01A5 03B0                       decf      ACCcHI          ;
01A6 09B0                       comf      ACCcHI          ;
01A7 1903                       btfsc     STATUS,Z        ;
01A8 09AD                       comf      ACCbLO          ;
01A9 0AAD                       incf      ACCbLO          ;
01AA 1903                       btfsc     STATUS,Z        ;
01AB 03AE                       decf      ACCbHI          ;
01AC 09AE                       comf      ACCbHI          ;

                        add_r_start:
01AD 0843                       movf      rmndr_l,W       ;  get low byte of remainder
01AE 07AF                       addwf     ACCcLO          ;  and add to ACCcLO
01AF 1803                       btfsc     STATUS,C        ;  check for overflow
01B0 0AB0                       incf      ACCcHI          ;  if overflow, increment ACCcHI
01B1 0842                       movf      rmndr_h,W       ;  get high byte of remainder
01B2 07B0                       addwf     ACCcHI          ;  and add to ACCcHI
01B3 1803                       btfsc     STATUS,C        ;  check for overflow
01B4 0AAD                       incf      ACCbLO          ;  if overflow, increment ACCbLO


MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE 13


01B5 1FB4                       btfss     sign,7          ; check if result negative
01B6 29C2                       goto      add_r_done      ; if not, go to add_r_done
01B7 09AF                       comf      ACCcLO          ; if so, negate result
01B8 0AAF                       incf      ACCcLO          ;
01B9 1903                       btfsc     STATUS,Z        ;
01BA 03B0                       decf      ACCcHI          ;
01BB 09B0                       comf      ACCcHI          ;
01BC 1903                       btfsc     STATUS,Z        ;
01BD 09AD                       comf      ACCbLO          ;
01BE 0AAD                       incf      ACCbLO          ;
01BF 1903                       btfsc     STATUS,Z        ;
01C0 03AE                       decf      ACCbHI          ;
01C1 09AE                       comf      ACCbHI          ;

                        add_r_done:                     ;
01C2 3400                       retlw     0               ; done

                        ;
                        ; Decimal Adjust Subroutine - used after each Q15 multiply to convert Q30 result
                        ; to Q15 number

                        dec_adjust:
01C3 13B4                       bcf       sign,7          ; clear sign
01C4 1FAE                       btfss     ACCbHI,7        ; test if number is negative
01C5 29D2                       goto      adjust          ; go to adjust if not
01C6 17B4                       bsf       sign,7          ; set sign if negative

01C7 09AF                       comf      ACCcLO          ; and negate number
01C8 0AAF                       incf      ACCcLO
01C9 1903                       btfsc     STATUS,Z
01CA 03B0                       decf      ACCcHI
01CB 09B0                       comf      ACCcHI
01CC 1903                       btfsc     STATUS,Z
01CD 09AD                       comf      ACCbLO
01CE 0AAD                       incf      ACCbLO
01CF 1903                       btfsc     STATUS,Z
01D0 03AE                       decf      ACCbHI
01D1 09AE                       comf      ACCbHI

                        adjust:
01D2 0DB0                       rlf       ACCcHI          ; rotate ACC left 1 bit
01D3 0DAD                       rlf       ACCbLO          ;
01D4 0DAE                       rlf       ACCbHI          ;

01D5 1FB4                       btfss     sign,7          ; check if result should be negative
01D6 29DC                       goto      adj_done        ; if not, done
01D7 09AD                       comf      ACCbLO          ; if result negative, negate ACC
01D8 0AAD                       incf      ACCbLO
01D9 1903                       btfsc     STATUS,Z
01DA 03AE                       decf      ACCbHI
01DB 09AE                       comf      ACCbHI

                        adj_done:
01DC 3400                       retlw     0               ; done



⌨️ 快捷键说明

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