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

📄 math.lst

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 LST
📖 第 1 页 / 共 4 页
字号:
  892:	  02AC	D0 0C		               pop     0CH
  893:	  02AE	D0 0B		               pop     0BH
  894:	  02B0	D0 0A		               pop     0AH
  895:	  02B2	D0 09		               pop     09
  896:	  02B4	D0 08		               pop     08
  897:	  02B6	22		               ret
  898:
  899:
  900:				;====================================================================
  901:				; subroutine MULDIV
  902:				; 16-Bit x 16-Bit to 32-Bit Product Signed Multiply followed by
  903:				; 32-Bit / 16-Bit to 32-Bit Quotient & remainder signed Divide
  904:				; 2's Complement Format
  905:				;
  906:				; input:    r1, r0 = multiplicand X
  907:				;           r3, r2 = multiplier Y
  908:				;           r5, r4 = divisor Z
  909:				;
  910:				; output:   r3, r2, r1, r0 = quotient Q of division Q = (X x Y) / Z
  911:				;           r7, r6, r5, r4 = remainder
  912:				;           Carry C is set if Z = 0, i.e. divide by 0 attempted
  913:				;
  914:				; calls:    UMUL16, UDIV32, Cr0r1, Cr2r3, Cr4r5, Mr0r3
  915:				;
  916:				; alters:   acc, flags, Bits 21H & 22H
  917:				;====================================================================
  918:
  919:	  02B7	53 D0 E7	MULDIV:        anl     PSW, #0E7H      ; Register Bank 0
  920:	  02BA	EC		               mov     a, r4           ; get divisor high byte
  921:	  02BB	4D		               orl     a, r5           ; OR with low byte
  922:	  02BC	70 02		               jnz     muld_OK         ; divisor OK if not 0
  923:	  02BE	D3		               setb    C               ; else, overflow
  924:	  02BF	22		               ret
  925:
  926:	  02C0	12 00 1A	muld_OK:       lcall   Cr0r1           ; 2's comp -> Mag/Sign
  927:	  02C3	12 00 2E	               lcall   Cr2r3           ; 2's comp -> Mag/Sign
  928:	  02C6	12 01 4C	               lcall   UMUL16
  929:	  02C9	20 21 0B	               jb      21H, divn1      ; test X sign
  930:	  02CC	12 00 42	divn:          lcall   Cr4r5           ; 2's comp -> Mag/Sign
  931:	  02CF	12 02 1F	               lcall   UDIV32
  932:	  02D2	12 00 9A	               lcall   Mr0r3           ; Mag/Sign -> 2's Comp
  933:	  02D5	C3		               clr     C               ; divisor is not 0
  934:	  02D6	22		               ret
  935:
  936:	  02D7	10 22 F2	divn1:         jbc     22H, divn       ; test Y sign
  937:	  02DA	D2 22		               setb    22H
  938:	  02DC	80 EE		               sjmp    divn
  939:

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 18



 Line  I  Addr  Code            Source

  940:
  941:				;====================================================================
  942:				; subroutine MACD16
  943:				; 16-Bit x 16-Bit to 32-Bit Product signed Multiply-Accumulate
  944:				; with table data and data move.
  945:				; y(n) = x(n)*h0 + x(n-1)*h1 + x(n-2)*h2 + ......
  946:				; Note: Assumes shared program/data space. i.e. PSEN and RD are OR-ed
  947:				; together on the board.
  948:				; 2's Complement format
  949:				;
  950:				; input:    B = No. of 16-bit data items in tables (max 63)
  951:				;           DPTR --> New Input data (e.g. from ADC)
  952:				;           DPTR+2 --> Base of Data Table (x)
  953:				;           DPTR+128 --> Base of Multiplier Table (h)
  954:				;
  955:				; output:   r7, r6, r5, r4 = 32-bit accumulated result
  956:				;
  957:				; calls:    MUL16
  958:				;
  959:				; alters:   acc, flags, Bits 21H & 22H
  960:				;====================================================================
  961:
  962:	  02DE	53 D0 E7	MACD16:        anl    PSW, #0E7H
  963:	  02E1	7C 00		               mov    r4, #0           ; Clear Accumulator
  964:	  02E3	7D 00		               mov    r5, #0
  965:	  02E5	7E 00		               mov    r6, #0
  966:	  02E7	7F 00		               mov    r7, #0
  967:
  968:	  02E9	E0		               movx   a, @DPTR
  969:	  02EA	C0 E0		               push   acc              ; Save XNEWL
  970:	  02EC	A3		               inc    DPTR
  971:	  02ED	E0		               movx   a, @DPTR
  972:	  02EE	C0 E0		               push   acc              ; Save XNEWH
  973:	  02F0	A3		               inc    DPTR
  974:
  975:	  02F1	E0		Macd1:         movx   a, @DPTR         ; Get x(n)L
  976:	  02F2	F8		               mov    r0, a
  977:	  02F3	C0 E0		               push   acc              ; Save x(n)L
  978:	  02F5	74 80		               mov    a, #80H
  979:	  02F7	93		               movc   a, @a+DPTR       ; Get h(n)L
  980:	  02F8	FA		               mov    r2, a
  981:	  02F9	A3		               inc    DPTR
  982:	  02FA	E0		               movx   a, @DPTR         ; Get x(n)H
  983:	  02FB	F9		               mov    r1, a
  984:	  02FC	C0 E0		               push   acc              ; Save x(n)H
  985:	  02FE	74 80		               mov    a, #80H
  986:	  0300	93		               movc   a, @a+DPTR       ; Get h(n)H
  987:	  0301	FB		               mov    r3, a
  988:	  0302	12 01 43	               lcall  MUL16+3          ; Do Multiply...
  989:	  0305	EC		               mov    A, r4            ; then Accumulate..
  990:	  0306	28		               add    A, r0
  991:	  0307	FC		               mov    r4, A
  992:	  0308	ED		               mov    A, r5
  993:	  0309	39		               addc   A, r1
  994:	  030A	FD		               mov    r5, A
  995:	  030B	EE		               mov    A, r6

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 19



 Line  I  Addr  Code            Source

  996:	  030C	3A		               addc   A, r2
  997:	  030D	FE		               mov    r6, A
  998:	  030E	EF		               mov    A, r7
  999:	  030F	3B		               addc   A, r3
 1000:	  0310	FF		               mov    r7, A
 1001:	  0311	D0 01		               pop    01               ; Now move x data
 1002:	  0313	D0 00		               pop    00
 1003:	  0315	D0 03		               pop    03
 1004:	  0317	D0 02		               pop    02
 1005:	  0319	C0 00		               push   00
 1006:	  031B	C0 01		               push   01
 1007:	  031D	EB		               mov    a, r3            ; Move up x(n)H
 1008:	  031E	F0		               movx   @DPTR, a
 1009:	  031F	74 FF		               mov    a, #0FFH
 1010:	  0321	25 82		               add    a, dpl
 1011:	  0323	F5 82		               mov    dpl, a
 1012:	  0325	74 FF		               mov    a, #0FFH
 1013:	  0327	35 83		               addc   a, dph
 1014:	  0329	F5 83		               mov    dph, a
 1015:	  032B	EA		               mov    a, r2            ; Move up x(n)L
 1016:	  032C	F0		               movx   @DPTR, a
 1017:	  032D	A3		               inc    DPTR
 1018:	  032E	A3		               inc    DPTR
 1019:	  032F	D5 F0 BF	               djnz   b, Macd1         ; Whole table processed?
 1020:	  0332	15 81		               dec    SP
 1021:	  0334	15 81		               dec    SP
 1022:	  0336	22		               ret
 1023:
 1024:
 1025:				;==================================================================
 1026:				; subroutine DELAY
 1027:				;
 1028:				; input:    r0, r1, r2 = delay loop constants, r0 = coarse loop
 1029:				;==================================================================
 1030:
 1031:	  0337	C0 82		DELAY:         push   dpl
 1032:	  0339	C0 83		               push   dph
 1033:	  033B	89 82		               mov    dpl, r1
 1034:	  033D	8A 83		               mov    dph, r2
 1035:	  033F	A9 82		Delay1:        mov    r1, dpl
 1036:	  0341	AA 83		Delay2:        mov    r2, dph
 1037:	  0343	DA FE		               djnz   r2, $
 1038:	  0345	D9 FA		               djnz   r1, Delay2
 1039:	  0347	D8 F6		               djnz   r0, Delay1
 1040:	  0349	D0 83		               pop    dph
 1041:	  034B	D0 82		               pop    dpl
 1042:	  034D	22		               ret
 1043:
 1044:
 1045:				end
 1046:






ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 20



                     register banks used:  ---

                     no errors




ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 21





	       L I S T   O F   S Y M B O L S
	       =============================


SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
??ASEM_51			  NUMBER    8051
??VERSION			  NUMBER    0130
AC				  BIT	      D6
ACC				  DATA	      E0
ADD16				  CODE	    00C4	 313
ADD32				  CODE	    00D0	 337
B				  DATA	      F0
C0A				  CODE	    0021	  76
C1A				  CODE	    0035	 105
C2A				  CODE	    005D	 163
C3A				  CODE	    0049	 134
CONV816				  CODE	    00BA	 291
CR0				  CODE	    0000	  23
CR0A				  CODE	    0007	  28
CR0R1				  CODE	    001A	  71
CR0R3				  CODE	    0056	 158
CR1				  CODE	    000D	  47
CR1A				  CODE	    0014	  52
CR2R3				  CODE	    002E	 100
CR4R5				  CODE	    0042	 129
CY				  BIT	      D7
DELAY				  CODE	    0337	1031
DELAY1				  CODE	    033F	1035
DELAY2				  CODE	    0341	1036
DIV16				  CODE	    01B7	 672
DIV32				  CODE	    020C	 770
DIV32_OK			  CODE	    0215	 777
DIV8				  CODE	    019F	 624
DIVN				  CODE	    02CC	 930
DIVN1				  CODE	    02D7	 936
DIV_1				  CODE	    01FA	 735
DIV_321				  CODE	    027F	 863
DIV_LOOP			  CODE	    01DD	 710
DIV_LP32			  CODE	    0242	 816
DIV_OK				  CODE	    01C0	 679
DPH				  DATA	      83
DPL				  DATA	      82
EA				  BIT	      AF
ES				  BIT	      AC
ET0				  BIT	      A9
ET1				  BIT	      AB
EX0				  BIT	      A8
EX1				  BIT	      AA
EXTI0				  CODE	    0003
EXTI1				  CODE	    0013
F0				  BIT	      D5
IE				  DATA	      A8
IE0				  BIT	      89
IE1				  BIT	      8B
INT0				  BIT	      B2

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 22



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
INT1				  BIT	      B3
IP				  DATA	      B8
IT0				  BIT	      88
IT1				  BIT	      8A
MAC16				  CODE	    018B	 590
MACD1				  CODE	    02F1	 975
MACD16				  CODE	    02DE	 962
MR0				  CODE	    0074	 196
MR0A				  CODE	    007F	 203
MR0B				  CODE	    007B	 200
MR0R1				  CODE	    0084	 223
MR0R1A				  CODE	    008F	 230
MR0R1B				  CODE	    008B	 227
MR0R3				  CODE	    009A	 254
MR0R3A				  CODE	    00A5	 261
MR0R3B				  CODE	    00A1	 258
MUL16				  CODE	    0140	 510
MUL8				  CODE	    0102	 425
MUL816				  CODE	    011A	 470
MULDIV				  CODE	    02B7	 919
MULD_OK				  CODE	    02C0	 926
OV				  BIT	      D2
P				  BIT	      D0
P0				  DATA	      80
P1				  DATA	      90
P2				  DATA	      A0
P3				  DATA	      B0
PCON				  DATA	      87
POS				  CODE	    00C1	 296
PS				  BIT	      BC
PSW				  DATA	      D0
PT0				  BIT	      B9
PT1				  BIT	      BB
PX0				  BIT	      B8
PX1				  BIT	      BA
RB8				  BIT	      9A
RD				  BIT	      B7
REN				  BIT	      9C
RESET				  CODE	    0000
RI				  BIT	      98
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
SBUF				  DATA	      99
SCON				  DATA	      98
SINT				  CODE	    0023
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
SUB16				  CODE	    00E2	 367
SUB32				  CODE	    00EF	 392
T0				  BIT	      B4
T1				  BIT	      B5
TB8				  BIT	      9B
TCON				  DATA	      88

ASEM-51 V1.3                                        Copyright (c) 2002 by W.W. Heinz                                         PAGE 23



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
TF0				  BIT	      8D
TF1				  BIT	      8F
TH0				  DATA	      8C
TH1				  DATA	      8D
TI				  BIT	      99
TIMER0				  CODE	    000B
TIMER1				  CODE	    001B
TL0				  DATA	      8A
TL1				  DATA	      8B
TMOD				  DATA	      89
TR0				  BIT	      8C
TR1				  BIT	      8E
TXD				  BIT	      B1
UDIV16				  CODE	    01D6	 706
UDIV32				  CODE	    021F	 798
UDIV8				  CODE	    01AB	 645
UMUL16				  CODE	    014C	 530
UMUL8				  CODE	    010E	 445
WR				  BIT	      B6

⌨️ 快捷键说明

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