?? 51.asm
字號:
;片內RAM初始化子程序
IBCLR :MOV A,R0
MOV R1,A
CLR A
IBC1 :MOV @R1,A
INC R1
DJNZ R7,IBC1
RET
;片外RAM初始化子程序
EBCLR1 :MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
CLR C
EBC11 :MOVX @DPTR,A
INC DPTR
DJNZ R7,EBC11
RET
;片外RAM初始化子程序(雙字節個單元)
EBCLR2 :MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
MOV A,R7
JZ EBC21
INC R6
EBC21 :CLR A
MOVX @DPTR,A
INC DPTR
DJNZ R7,EBC21
DJNZ R6,EBC21
RET
;內部RAM數據復制程序
;入口 :R0,R7
;占用資源:A
;堆棧需求:2字節
;出口 :R1
IBMOV :MOV A,R0
ADD A,R7
MOV R0,A
MOV A,R1
ADD A,R7
MOV R1,A
IBM1 :DEC R0
DEC R1
MOV A,@R0
MOV @R1,A
DJNZ R7,IBM1
RET
;外部RAM數據復制程序
;入口 :ADDPH,ADDPL,R7
;占用資源:ACC
;堆棧需求:2字節
;出口 :R0,R1
EBMOV1 :MOV A,ADDPL
ADD A,R7
MOV DPL,A
CLR A
ADDC A,ADDPH
MOV DPH,A
MOV A,R7
ADD A,R1
XCH A,R0
ADDC A,#00H
MOV P2,A
EBM11 :DEC R0
CJNE R0,#0FFH,EBM12
DEC P2
EBM12 :DEC DPL
MOV A,DPL
CJNE A,#0FFH,EBM13
DEC DPH
EBM13 :MOVX A,@R0
MOVX @DPTR,A
DJNZ R7,EBM11
RET
;外部RAM數據復制程序
;入口 :ADDPH,ADDPL,R6,R7
;占用資源:ACC
;堆棧需求:2字節
;出口 :R0,R1
EBMOV2 :MOV A,ADDPL
ADD A,R7
MOV DPL,A
MOV A,R6
ADDC A,ADDPH
MOV DPH,A
MOV A,R7
ADD A,R1
XCH A,R0
ADDC A,R6
MOV P2,A
MOV A,R7
JZ EBM21
INC R6
EBM21 :DEC R0
CJNE R0,#0FFH,EBM22
DEC P2
EBM22 :DEC DPL
MOV A,DPL
CJNE A,#0FFH,EBM23
DEC DPH
EBM23 :MOVX A,@R0
MOVX @DPTR,A
DJNZ R7,EBM21
DJNZ R6,EBM21
RET
;外部RAM數據復制到內部RAM程序
;入口 :ADDPH,ADDPL,R7
;占用資源:ACC
;堆棧需求:2字節
;出口 :R0
ITEMOV :MOV A,ADDPL
ADD A,R7
MOV DPL,A
MOV A,ADDPH
ADDC A,#00H
MOV DPH,A
MOV A,R0
ADD A,R7
MOV R0,A
ITEM1 :DEC R0
DEC DPL
MOV A,DPL
CJNE A,#0FFH,ITEM2
DEC DPH
ITEM2 :MOVX A,@DPTR
MOV @R0,A
DJNZ R7,ITEM1
RET
;限幅濾波程序
;入口 :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
;雙字節取補程序 /(R3R4)=(R3R4)
;入口 :R3,R4
;占用資源:ACC
;堆棧需求:2字節
;出口 :R3,R4
CMPT :MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
;N節取補程序 /([R0])=([R0])
;入口 :R0,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R0
NCMPTN :MOV B,R0
SETB C
NCPT1 :MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
INC R0
DJNZ R7,NCPT1
MOV R0,B
RET
;雙字節無符號數加法程序 (R3R4+R6R7)=(R3R4)
;入口 :R3,R4,R6,R7
;占用資源:ACC
;堆棧需求:2字節
;出口 :R3,R4,CF
NADD :MOV A,R4
ADD A,R7
MOV R4,A
MOV A,R3
ADDC A,R6
MOV R3,A
RET
;N字節無符號數加法程序 ([R0]+[R1])=([R0])
;入口 :R0,R1,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R0,CF
NADDN :MOV B,R0
CLR C
NADN1 :MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,NADN1
MOV R0,B
RET
;雙字節無符號數減法程序 (R3R4-R6R7)=(R3R4)
;入口 :R3,R4,R6,R7
;占用資源:ACC
;堆棧需求:2字節
;出口 :R3,R4
NSUB :MOV A,R4
CLR C
SUBB A,R7
MOV R4,A
MOV A,R3
SUBB A,R6
MOV R3,A
RET
;N字節無符號數減法程序 ([R0]-[R1])=([R0])
;入口 :R0,R1,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R0,CF
NSUBN :MOV B,R0
MOV R7,N
CLR C
NSUBN1 :MOV A,@R0
SUBB A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R7,NSUBN1
MOV R0,B
RET
;單字節無符號數乘法程序 (R3R4*R7)=(R2R3R4)
;入口 :R3,R4,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R2,R3,R4
NMUL21 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
CLR OV
RET
;單字節無符號數乘法程序 (R2R3R4*R7)=(R5R2R3R4)
;入口 :R2,R3,R4,R6,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R5,R2,R3,R4
NMUL31 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
XCH A,R2
MOV B,R7
MUL AB
ADD A,R2
MOV R2,A
CLR A
ADDC A,B
MOV R5,A
CLR OV
RET
;單字節無符號數乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)
;入口 :R5,R2,R3,R4,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R7,R5,R2,R3,R4
NMUL41 :MOV A,R4
MOV B,R7
MUL AB
MOV R4,A
MOV A,B
XCH A,R3
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
XCH A,R2
MOV B,R7
MUL AB
ADD A,R2
MOV R2,A
CLR A
ADDC A,B
XCH A,R5
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R7,A
CLR OV
RET
;雙字節無符號數乘法程序 (R3R4*R6R7)=(R5R2R3R4)
;入口 :R3,R4,R6,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R5,R2,R3,R4
NMUL22 :MOV A,R4
MOV B,R7
MUL AB
XCH A,R4
MOV R5,B
MOV B,R6
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R2,A
MOV A,R3
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R2
MOV R2,A
CLR A
ADDC A,#00H
XCH A,R3
MOV B,R6
MUL AB
ADD A,R2
MOV R2,A
MOV A,B
ADDC A,R3
XCH A,R5
MOV R3,A
CLR OV
RET
;雙字節無符號數乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4)
;入口 :R2,R3,R4,R6,R7
;占用資源:ACC,B
;堆棧需求:2字節
;出口 :R1,R5,R2,R3,R4
NMUL32 :MOV A,R4
MOV B,R7
MUL AB
XCH A,R4
MOV R5,B
MOV B,R6
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R1,A
MOV A,R3
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R1
MOV R1,A
CLR A
ADDC A,#00H
XCH A,R3
MOV B,R6
MUL AB
ADD A,R1
MOV R1,A
MOV A,B
ADDC A,R3
XCH A,R5
MOV R3,A
MOV A,R2
MOV B,R7
MUL AB
ADD A,R1
MOV R1,A
MOV A,B
ADDC A,R5
MOV R5,A
CLR A
ADDC A,#00H
XCH A,R2
MOV B,R6
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R2
XCH A,R1
MOV R2,A
CLR OV
RET
;N字節無符號數乘法程序 ([R0]*[R1])=([R0])
;入口 :R0,R1,M,N
;占用資源:ACC,B,R2,R5,R6,R7,NCNT
;堆棧需求:2字節
;出口 :R0
NMULMN :MOV A,M
ADD A,R0
MOV R5,A
XCH A,R1
XCH A,R5
ADD A,N
XCH A,R0
MOV R6,A
MOV B,M
MOV NCNT,B
NMLMN1 :DEC R0
DEC R1
CLR A
XCH A,@R1
MOV @R0,A
DJNZ NCNT,NMLMN1
MOV NCNT,B
NMLMN2 :CLR A
XCH A,@R0
MOV R2,A
MOV A,R6
MOV R0,A
MOV A,R5
MOV R1,A
MOV R7,N
CLR C
NMLMN3 :MOV A,R2
MOV B,@R1
INC R1
MUL AB
ADDC A,@R0
MOV @R0,A
INC R0
MOV A,B
ADDC A,@R0
MOV @R0,A
DJNZ R7,NMLMN3
INC R0
INC R6
DJNZ NCNT,NMLMN2
MOV A,R0
CLR C
SUBB A,M
SUBB A,N
MOV R0,A
RET
;單字節無符號除法程序 (R2R3R4/R7)=(R2)R3R4 余數R7
;入口 :R2,R3,R4,R7
;占用資源:ACC,B,F0
;堆棧需求:3字節
;出口 :(R2),R3,R4,R7,OV
NDIV31 :MOV A,R2
MOV B,R7
DIV AB
PUSH A
MOV R2,B
MOV B,#10H
NDV311 :CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C
CLR C
SUBB A,R7
JB F0,NDV312
JC NDV313
NDV312 :MOV R2,A
INC R4
NDV313 :DJNZ B,NDV311
POP A
CLR OV
JZ NDV314
SETB OV
NDV314 :XCH A,R2
MOV R7,A
RET
;單字節無符號除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余數R7
;入口 :R2,R3,R4,R7
;占用資源:ACC,B,F0
;堆棧需求:3字節
;出口 :(R5),R2,R3,R4,R7,OV
NDIV41 :MOV A,R5
MOV B,R7
DIV AB
PUSH A
MOV R5,B
MOV B,#18H
NDV411 :CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R5
RLC A
MOV R5,A
MOV F0,C
CLR C
SUBB A,R7
JB F0,NDV412
JC NDV413
NDV412 :MOV R5,A
INC R4
NDV413 :DJNZ B,NDV411
POP A
CLR OV
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -