"); //-->
1、片内RAM初始化子程序
2、片外RAM初始化子程序
3、片外RAM初始化子程序(双字节个单元)
4、内部RAM数据复制程序
5、外部RAM数据复制程序
6、外部RAM数据复制程序
7、外部RAM数据复制到内部RAM程序
8、限幅滤波程序
9、中位值滤波程序
10、N点算术平均滤波
11、N点加权平均滤波
12、一阶加权滞后滤波程序
13、双字节取补程序
14、N节取补程序
15、双字节无符号数加法程序
16、N字节无符号数加法程序
17、双字节无符号数减法程序
18、N字节无符号数减法程序
19、单字节无符号数乘法程序
20、单字节无符号数乘法程序
21、单字节无符号数乘法程序
22、双字节无符号数乘法程序
23、双字节无符号数乘法程序
24、N字节无符号数乘法程序
25、单字节无符号除法程序
26、单字节无符号除法程序
27、双字节无符号除法程序
28、N字节无符号除法程序(组合)
29、N字节无符号除法程序
30、N字节数据左移程序
31、原码有符号双字节减法程序
32、原码有符号双字节加法程序
33、原码有符号双字节乘法程序
34、原码有符号双字节除法程序
35、单字节顺序查找程序
36、单字节顺序查找程序
37、双字节字符串顺序查找程序
38、双字节字符串顺序查找程序
39、N字节字符串顺序查找程序
40、单字节最值查找程序
41、浮点数顺序查找程序
42、浮点数最值查找程序
43、单字节折半查找程序
;片内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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。