📄 notch_60.lst
字号:
* 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 + -