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

📄 notch_60.lst

📁 pic16c6x和pic16c7xxx都可以通用
💻 LST
📖 第 1 页 / 共 5 页
字号:
                                  * 16C5x" from Microchip's Embedded Controller Handbook that have been adapted
                                  * for use with the Bytecraft MPC C Compiler.
                                  *
                                  * Routines are used IIR_FILT.C module written for "Digital Signal Processing
                                  * with the PIC16C74" Application Note.
                                  *
                                  * D. Mostowfi 3/95
                                  *****************************************************************************/

                                  /*
                                  Start of converted MPASM modules:

                                  ;*******************************************************************
                                  ;                 Double Precision Addition & Subtraction
                                  ;
                                  ;*******************************************************************;
                                  ;   Addition :  ACCb(16 bits) + ACCa(16 bits) -> ACCb(16 bits)
                                  ;      (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits )
                                  ;      (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits )
                                  ;      (c) CALL D_add
                                  ;      (d) The result is in location ACCbLO & ACCbHI ( 16 bits )
                                  ;
                                  ;   Performance :
                                  ;               Program Memory  :       07
                                  ;               Clock Cycles    :       08
                                  ;*******************************************************************;
                                  ;   Subtraction : ACCb(16 bits) - ACCa(16 bits) -> ACCb(16 bits)
                                  ;      (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits )
                                  ;      (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits )
                                  ;      (c) CALL D_sub
                                  ;      (d) The result is in location ACCbLO & ACCbHI ( 16 bits )
                                  ;
                                  ;   Performance :
                                  ;               Program Memory  :       14
                                  ;               Clock Cycles    :       17
                                  ;*******************************************************************;
                                  ;
                                  */

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


002B                              char ACCaLO;  //equ     10   changed equ statements to C char variables
002C                              char ACCaHI;  //equ     11
002D                              char ACCbLO;  //equ     12
002E                              char ACCbHI;  //equ     13
                                  ;

                                  #asm            /* start of in-line assembly code */

                        ;        include "mpreg.h"     commented out these
                        ;        org     0             two lines (MPASM specific)

                        ;*******************************************************************
                        ;         Double Precision Subtraction ( ACCb - ACCa -> ACCb )
                        ;
007B 2083               D_sub   call    neg_A2           ; At first negate ACCa; Then add
                        ;
                        ;*******************************************************************
                        ;       Double Precision  Addition ( ACCb + ACCa -> ACCb )
                        ;
007C 082B               D_add   movf    ACCaLO,W
007D 07AD                   addwf   ACCbLO          ;add lsb
007E 1803                   btfsc   STATUS,C        ;add in carry
007F 0AAE                   incf    ACCbHI
0080 082C                   movf    ACCaHI,C
0081 07AE                   addwf   ACCbHI          ;add msb
0082 3400                   retlw   0

0083 09AB               neg_A2  comf    ACCaLO          ; negate ACCa ( -ACCa -> ACCa )
0084 0AAB                   incf    ACCaLO
0085 1903                   btfsc   STATUS,Z
0086 03AC                   decf    ACCaHI
0087 09AC                   comf    ACCaHI
0088 3400                   retlw   0


                        ;*******************************************************************
                        ;                       Double Precision Multiplication
                        ;
                        ;               ( Optimized for Speed : straight Line Code )
                        ;
                        ;*******************************************************************;
                        ;   Multiplication : ACCb(16 bits) * ACCa(16 bits) -> ACCb,ACCc ( 32 bits )
                        ;      (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits )
                        ;      (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits )
                        ;      (c) CALL D_mpy
                        ;      (d) The 32 bit result is in location ( ACCbHI,ACCbLO,ACCcHI,ACCcLO )
                        ;
                        ;   Performance :
                        ;               Program Memory  :       240
                        ;               Clock Cycles    :       233
                        ;
                        ;       Note : The above timing is the worst case timing, when the
                        ;               register ACCb = FFFF. The speed may be improved if
                        ;               the register ACCb contains a number ( out of the two
                        ;               numbers ) with less number of 1s.

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE  7


                        ;
                        ;               The performance specs are for Unsigned arithmetic ( i.e,
                        ;               with "SIGNED equ  FALSE ").

                        ;*******************************************************************;
                        ;

                                  #endasm
                                  //char ACCaLO;  equ     10   Commented out - already defined in Dbl_add
                                  //char ACCaHI;  equ     11
                                  //char ACCbLO;  equ     12
                                  //char ACCbHI;  equ     13
002F                              char ACCcLO;  //equ     14   changed equ statements to C char variables
0030                              char ACCcHI;  //equ     15
0031                              char ACCdLO;  //equ     16
0032                              char ACCdHI;  //equ     17
0033                              char temp;    //equ     18
0034                              char sign;    //equ     19

                                  #asm
                        ;
                        ;        include "mpreg.h"       commented out these
                        ;        org     0               two lines (MPASM specific)
                        ;*******************************************************************
0002                    SIGNED  equ     1               ; Set This To 'TRUE' if the routines
                        ;                               ; for Multiplication & Division needs
                        ;                               ; to be assembled as Signed Integer
                        ;                               ; Routines. If 'FALSE' the above two
                        ;                               ; routines ( D_mpy & D_div ) use
                        ;                               ; unsigned arithmetic.
                        ;*******************************************************************
                        ;       multiplication macro
                        ;
                         .MACRO mulMac                  ; changed macro to conform to MPC macro
                        ;        LOCAL   NO_ADD         ; language - declaration is different
                        ;                               ; and macro labels are preceded by "/"

                            rrf     ACCdHI          ; rotate d right
                            rrf     ACCdLO
                            btfss   STATUS,C        ; need to add?
                            goto    \NO_ADD         ; no addition necessary
                            movf    ACCaLO,W        ; Addition ( ACCb + ACCa -> ACCb )
                            addwf   ACCbLO          ; add lsb
                            btfsc   STATUS,C        ; add in carry
                            incf    ACCbHI
                            movf    ACCaHI,W
                            addwf   ACCbHI          ;add msb
                        \NO_ADD rrf     ACCbHI
                            rrf     ACCbLO
                            rrf     ACCcHI
                            rrf     ACCcLO
                        ;
                            .ENDM                   ; end of modified macro
                        ;
                        ;*******************************************************************;

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE  8


                        ;               Double Precision Multiply ( 16x16 -> 32 )
                        ;         ( ACCb*ACCa -> ACCb,ACCc ) : 32 bit output with high word
                        ;  in ACCb ( ACCbHI,ACCbLO ) and low word in ACCc ( ACCcHI,ACCcLO ).
                        ;
                        D_mpyF                          ;results in ACCb(16 msb's) and ACCc(16 lsb's)
                        ;
                             .IF   SIGNED
0089 2188                    CALL    S_SIGN
                             .ENDIF
                        ;
008A 2179                   call    setup
                        ;
                        ; use the mulMac macro 16 times
                        ;
                            mulMac
0116 0CB2  0CB1  03 
001C8D  2800  082B  
0090 07AD  1803  AE 
000A92  082C  07AE  
0095 0CAE  0CAD  B0 
000C97  0CAF  
                            mulMac
0132 0CB2  0CB1  03 
001C9B  2800  082B  
009E 07AD  1803  AE 
000AA0  082C  07AE  
00A3 0CAE  0CAD  B0 
000CA5  0CAF  
                            mulMac
014E 0CB2  0CB1  03 
001CA9  2800  082B  
00AC 07AD  1803  AE 
000AAE  082C  07AE  
00B1 0CAE  0CAD  B0 
000CB3  0CAF  
                            mulMac
016A 0CB2  0CB1  03 
001CB7  2800  082B  
00BA 07AD  1803  AE 
000ABC  082C  07AE  
00BF 0CAE  0CAD  B0 
000CC1  0CAF  
                            mulMac
0186 0CB2  0CB1  03 
001CC5  2800  082B  
00C8 07AD  1803  AE 
000ACA  082C  07AE  
00CD 0CAE  0CAD  B0 
000CCF  0CAF  
                            mulMac
01A2 0CB2  0CB1  03 
001CD3  2800  082B  
00D6 07AD  1803  AE 
000AD8  082C  07AE  
00DB 0CAE  0CAD  B0 

MPC "C" COMPILER BC.193 22-Aug-1995                                     PAGE  9


000CDD  0CAF  
                            mulMac
01BE 0CB2  0CB1  03 
001CE1  2800  082B  
00E4 07AD  1803  AE 
000AE6  082C  07AE  
00E9 0CAE  0CAD  B0 
000CEB  0CAF  
                            mulMac
01DA 0CB2  0CB1  03 
001CEF  2800  082B  
00F2 07AD  1803  AE 
000AF4  082C  07AE  
00F7 0CAE  0CAD  B0 
000CF9  0CAF  
                            mulMac
01F6 0CB2  0CB1  03 
001CFD  2800  082B  
0100 07AD  1803  AE 
010A02  082C  07AE  
0105 0CAE  0CAD  B0 
010C07  0CAF  
                            mulMac
0212 0CB2  0CB1  03 
011C0B  2800  082B  
010E 07AD  1803  AE 
010A10  082C  07AE  
0113 0CAE  0CAD  B0 
010C15  0CAF  
                            mulMac
022E 0CB2  0CB1  03 
011C19  2800  082B  
011C 07AD  1803  AE 
010A1E  082C  07AE  
0121 0CAE  0CAD  B0 
010C23  0CAF  

⌨️ 快捷键说明

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