51单片机汇编程序集.docx
《51单片机汇编程序集.docx》由会员分享,可在线阅读,更多相关《51单片机汇编程序集.docx(40页珍藏版)》请在冰豆网上搜索。
51单片机汇编程序集
51单片机汇编程序集
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:
MOVA,R0
MOVR1,A
CLRA
IBC1:
MOV@R1,A
INCR1
DJNZR7,IBC1
RET
;片外RAM初始化子程序
EBCLR1:
MOVA,ADDPL
MOVDPL,A
MOVA,ADDPH
MOVDPH,A
CLRC
EBC11:
MOVX@DPTR,A
INCDPTR
DJNZR7,EBC11
RET
;片外RAM初始化子程序(双字节个单元)
EBCLR2:
MOVA,ADDPL
MOVDPL,A
MOVA,ADDPH
MOVDPH,A
MOVA,R7
JZEBC21
INCR6EBC21:
CLRA
MOVX@DPTR,A
INCDPTR
DJNZR7,EBC21
DJNZR6,EBC21
RET
;内部RAM数据复制程序
;入口:
R0,R7
;占用资源:
A
;堆栈需求:
2字节
;出口:
R1
IBMOV:
MOVA,R0
ADDA,R7
MOVR0,A
MOVA,R1
ADDA,R7
MOVR1,AIBM1:
DECR0
DECR1
MOVA,@R0
MOV@R1,A
DJNZR7,IBM1
RET
;外部RAM数据复制程序
;入口:
ADDPH,ADDPL,R7;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R0,R1
EBMOV1:
MOVA,ADDPL
ADDA,R7
MOVDPL,A
CLRA
ADDCA,ADDPH
MOVDPH,A
MOVA,R7
ADDA,R1
XCHA,R0
ADDCA,#00H
MOVP2,AEBM11:
DECR0
CJNER0,#0FFH,EBM12
DECP2EBM12:
DECDPL
MOVA,DPL
CJNEA,#0FFH,EBM13
DECDPHEBM13:
MOVXA,@R0
MOVX@DPTR,A
DJNZR7,EBM11
RET
;外部RAM数据复制程序
;入口:
ADDPH,ADDPL,R6,R7;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R0,R1
EBMOV2:
MOVA,ADDPL
ADDA,R7
MOVDPL,A
MOVA,R6
ADDCA,ADDPH
MOVDPH,A
MOVA,R7
ADDA,R1
XCHA,R0
ADDCA,R6
MOVP2,A
MOVA,R7
JZEBM21
INCR6EBM21:
DECR0
CJNER0,#0FFH,EBM22
DECP2EBM22:
DECDPL
MOVA,DPL
CJNEA,#0FFH,EBM23
DECDPHEBM23:
MOVXA,@R0
MOVX@DPTR,A
DJNZR7,EBM21
DJNZR6,EBM21
RET
;外部RAM数据复制到内部RAM程序
;入口:
ADDPH,ADDPL,R7;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R0
ITEMOV:
MOVA,ADDPL
ADDA,R7
MOVDPL,A
MOVA,ADDPH
ADDCA,#00H
MOVDPH,A
MOVA,R0
ADDA,R7
MOVR0,AITEM1:
DECR0
DECDPL
MOVA,DPL
CJNEA,#0FFH,ITEM2
DECDPHITEM2:
MOVXA,@DPTR
MOV@R0,A
DJNZR7,ITEM1
RET
;限幅滤波程序
;入口:
A,SDAT,DELTY;占用资源:
B
;堆栈需求:
2字节
;出口:
A
JUGFILT:
MOVB,A
CLRC
SUBBA,SDAT
JNCJUGFT1
CPLA
INCA
JUGFT1:
SETBA
SUBBA,#DELTY
JNCJUGFT3
MOVA,SDAT
RET
JUGFT3:
MOVA,B
MOVSDAT,A
RET
;中位值滤波程序
;入口:
ADDPH,ADDPL,N;占用资源:
ESELSORT
;堆栈需求:
4字节
;出口:
A
MEDFILT:
LCALLESELSORT
MOVA,N
CLRC
RRCA
ADDA,ADDPL
MOVDPL,A
MOVA,ADDPH
MOVDPH,A
JNCMEDFT1
INCDPHMEDFT1:
MOVXA,@DPTR
RET
;N点算术平均滤波
;入口:
ADDPH,ADDPL,N;占用资源:
B,R3,R4
;堆栈需求:
2字节
;出口:
A
AVFILT:
MOVA,ADDPL
MOVDPL,A
MOVA,ADDPH
MOVDPH,A
CLRA
MOVR3,A
MOVR4,A
MOVR7,NAVFT1:
MOVXA,@DPTR
INCDPTR
ADDA,R4
MOVR4,A
JNCAVFT2
INCR3AVFT2:
DJNZR7,AVFT1
MOVR7,N
MOVR2,#00H
LCALLNDIV31
MOVA,R4
RET
;N点加权平均滤波
;入口:
ADDPH,ADDPL,N;占用资源:
B,R3,R4
;堆栈需求:
2字节
;出口:
A
QAVFILT:
CLRA
MOVR3,A
MOVR4,A
MOVR7,N
MOVP2,ADDPH
MOVR1,ADDPL
MOVDPTR,#QAVTABQAVFT1:
MOVCA,@A+DPTR
MOVB,A
MOVXA,@R1
INCDPTR
INCR1
MULAB
ADDA,R4
MOVR4,A
MOVA,B
ADDCA,R3
MOVR3,A
DJNZR7,QAVFT1
MOVA,R4
JNBACC.7,QAVFT2
INCR3QAVFT2:
MOVA,R3
RET
QAVTAB:
DB
;一阶加权滞后滤波程序
;入口:
A,DELTY
;占用资源:
B,R3,R4
;堆栈需求:
2字节
;出口:
A
BQFILT:
MOVB,A
CLRA
MOVDPTR,#ABTAB
MOVCA,@A+DPTR
MULAB
MOVR4,A
MOVR3,B
MOVA,#01H
MOVCA,@A+DPTR
MOVB,DELTY
MULAB
ADDA,R4
MOVR4,A
MOVA,B
ADDCA,R3
MOVR3,A
MOVA,R4
JNBACC.7,FT1
INCR3FT1:
MOVA,R3
MOVDELTY,A
RET
BQTAB:
DB80H,80H
;双字节取补程序/(R3R4)=(R3R4);入口:
R3,R4
;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R3,R4
CMPT:
MOVA,R4
CPLA
ADDA,#01H
MOVR4,A
MOVA,R3
CPLA
ADDCA,#00H
MOVR3,A
RET
;N节取补程序/([R0])=([R0]);入口:
R0,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R0
NCMPTN:
MOVB,R0
SETBCNCPT1:
MOVA,@R0
CPLA
ADDCA,#00H
MOV@R0,A
INCR0
DJNZR7,NCPT1
MOVR0,B
RET
;双字节无符号数加法程序(R3R4+R6R7)=(R3R4)
;入口:
R3,R4,R6,R7;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R3,R4,CF
NADD:
MOVA,R4
ADDA,R7
MOVR4,A
MOVA,R3
ADDCA,R6
MOVR3,A
RET
;N字节无符号数加法程序([R0]+[R1])=([R0])
;入口:
R0,R1,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R0,CF
NADDN:
MOVB,R0
CLRCNADN1:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR7,NADN1
MOVR0,B
RET
;双字节无符号数减法程序(R3R4-R6R7)=(R3R4)
;入口:
R3,R4,R6,R7;占用资源:
ACC
;堆栈需求:
2字节
;出口:
R3,R4
NSUB:
MOVA,R4
CLRC
SUBBA,R7
MOVR4,A
MOVA,R3
SUBBA,R6
MOVR3,A
RET
;N字节无符号数减法程序([R0]-[R1])=([R0])
;入口:
R0,R1,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R0,CF
NSUBN:
MOVB,R0
MOVR7,N
CLRCNSUBN1:
MOVA,@R0
SUBBA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR7,NSUBN1
MOVR0,B
RET
;单字节无符号数乘法程序(R3R4*R7)=(R2R3R4)
;入口:
R3,R4,R7
;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R2,R3,R4
NMUL21:
MOVA,R4
MOVB,R7
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,R7
MULAB
ADDA,R3
MOVR3,A
CLRA
ADDCA,B
MOVR2,A
CLROV
RET
;单字节无符号数乘法程序(R2R3R4*R7)=(R5R2R3R4)
;入口:
R2,R3,R4,R6,R7;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R5,R2,R3,R4NMUL31:
MOVA,R4
MOVB,R7
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,R7
MULAB
ADDA,R3
MOVR3,A
CLRA
ADDCA,B
XCHA,R2
MOVB,R7
MULAB
ADDA,R2
MOVR2,A
CLRA
ADDCA,B
MOVR5,A
CLROV
RET
;单字节无符号数乘法程序(R5R2R3R4*R7)=(R7R5R2R3R4)
;入口:
R5,R2,R3,R4,R7;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R7,R5,R2,R3,R4NMUL41:
MOVA,R4
MOVB,R7
MULAB
MOVR4,A
MOVA,B
XCHA,R3
MOVB,R7
MULAB
ADDA,R3
MOVR3,A
CLRA
ADDCA,B
XCHA,R2
MOVB,R7
MULAB
ADDA,R2
MOVR2,A
CLRA
ADDCA,B
XCHA,R5
MOVB,R7
MULAB
ADDA,R5
MOVR5,A
CLRA
ADDCA,B
MOVR7,A
CLROV
RET
;双字节无符号数乘法程序(R3R4*R6R7)=(R5R2R3R4)
;入口:
R3,R4,R6,R7;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R5,R2,R3,R4NMUL22:
MOVA,R4
MOVB,R7
MULAB
XCHA,R4
MOVR5,B
MOVB,R6
MULAB
ADDA,R5
MOVR5,A
CLRA
ADDCA,B
MOVR2,A
MOVA,R3
MOVB,R7
MULAB
ADDA,R5
MOVR5,A
MOVA,B
ADDCA,R2
MOVR2,A
CLRA
ADDCA,#00H
XCHA,R3
MOVB,R6
MULAB
ADDA,R2
MOVR2,A
MOVA,B
ADDCA,R3
XCHA,R5
MOVR3,A
CLROV
RET
;双字节无符号数乘法程序(R2R3R4*R6R7)=(R1R5R2R3R4)
;入口:
R2,R3,R4,R6,R7;占用资源:
ACC,B
;堆栈需求:
2字节
;出口:
R1,R5,R2,R3,R4NMUL32:
MOVA,R4
MOVB,R7
MULAB
XCHA,R4
MOVR5,B
MOVB,R6
MULAB
ADDA,R5
MOVR5,A
CLRA
ADDCA,B
MOVR1,A
MOVA,R3
MOVB,R7
MULAB
ADDA,R5
MOVR5,A
MOVA,B
ADDCA,R1
MOVR1,A
CLRA
ADDCA,#00H
XCHA,R3
MOVB,R6
MULAB
ADDA,R1
MOVR1,A
MOVA,B
ADDCA,R3
XCHA,R5
MOVR3,A
MOVA,R2
MOVB,R7
MULAB
ADDA,R1
MOVR1,A
MOVA,B
ADDCA,R5
MOVR5,A
CLRA
ADDCA,#00H
XCHA,R2
MOVB,R6
MULAB
ADDA,R5
MOVR5,A
MOVA,B
ADDCA,R2
XCHA,R1
MOVR2,A
CLROV
RET
;N字节无符号数乘法程序([R0]*[R1])=([R0])
;入口:
R0,R1,M,N
;占用资源:
ACC,B,R2,R5,R6,R7,NCNT
;堆栈需求:
2字节
;出口:
R0
NMULMN:
MOVA,M
ADDA,R0
MOVR5,A
XCHA,R1
XCHA,R5
ADDA,N
XCHA,R0
MOVR6,A
MOVB,M
MOVNCNT,BNMLMN1:
DECR0
DECR1
CLRA
XCHA,@R1
MOV@R0,A
DJNZNCNT,NMLMN1
MOVNCNT,BNMLMN2:
CLRA
XCHA,@R0
MOVR2,A
MOVA,R6
MOVR0,A
MOVA,R5
MOVR1,A
MOVR7,N
CLRCNMLMN3:
MOVA,R2
MOVB,@R1
INCR1
MULAB
ADDCA,@R0
MOV@R0,A
INCR0
MOVA,B
ADDCA,@R0
MOV@R0,A
DJNZR7,NMLMN3
INCR0
INCR6
DJNZNCNT,NMLMN2
MOVA,R0
CLRC
SUBBA,M
SUBBA,N
MOVR0,A
RET
;单字节无符号除法程序(R2R3R4/R7)=(R2)R3R4余数R7;入口:
R2,R3,R4,R7;占用资源:
ACC,B,F0
;堆栈需求:
3字节
;出口:
(R2),R3,R4,R7,OVNDIV31:
MOVA,R2
MOVB,R7
DIVAB
PUSHA
MOVR2,B
MOVB,#10HNDV311:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVA,R2
RLCA
MOVR2,A
MOVF0,C
CLRC
SUBBA,R7
JBF0,NDV312
JCNDV313NDV312:
MOVR2,A
INCR4NDV313:
DJNZB,NDV311
POPA
CLROV
JZNDV314
SETBOV
NDV314:
XCHA,R2
MOVR7,A
RET
;单字节无符号除法程序(R5R2R3R4/R7)=(R5)R2R3R4余数R7
;入口:
R2,R3,R4,R7;占用资源:
ACC,B,F0
;堆栈需求:
3字节
;出口:
(R5),R2,R3,R4,R7,OVNDIV41:
MOVA,R5
MOVB,R7
DIVAB
PUSHA
MOVR5,B
MOVB,#18HNDV411:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVA,R2
RLCA
MOVR2,A
MOVA,R5
RLCA
MOVR5,A
MOVF0,C
CLRC
SUBBA,R7
JBF0,NDV412
JCNDV413NDV412:
MOVR5,A
INCR4NDV413:
DJNZB,NDV411
POPA
CLROV
JZNDV414
SETBOVNDV414:
XCHA,R5
MOVR7,A
RET
;双字节无符号除法程序(R5R2R3R4/R6R7)=(R2)R3R4余数R6R7
;入口:
R5,R2,R3,R4,R6,R7;占用资源:
ACC,B,F0
;堆栈需求:
4字节
;出口:
(R2),R3,R4,R6,R7,OVNDIV42:
MOVA,R1
PUSHA
MOVB,#00HNDV421:
MOVA,R2
CLRC
SUBBA,R7
MOVR1,A
MOVA,R5
SUBBA,R6
JCNDV422
MOVR5,A
MOVA,R1
MOVR2,A
INCB
SJMPNDV421NDV422:
PUSHB
MOVB,#10HNDV423:
CLRC
MOVA,R4
RLCA
MOVR4,A
MOVA,R3
RLCA
MOVR3,A
MOVA,R2
RLCA
MOVR2,A
XCHA,R5
RLCA
XCHA,R5
MOVF0,C
CLRC
SUBBA,R7
MOVR1,A
MOVA,R5
SUBBA,R6
JBF0,NCV424
JCNDV425NCV424:
MOVR5,A
MOVA,R1
MOVR2,A
INCR4NDV425:
DJNZB,NDV423
POPA
CLROV
JNZNDV426
SETBOVNDV426:
XCHA,R2
MOVR7,A
MOVA,R5
MOVR6,A
POPA
MOVR1,A
RET
;N字节无符号除法程序(组合)([R0]/[R1])=([R0])
;入口:
R0,R1,M,N
;占用资源:
ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN
;堆栈需求:
4字节
;出口:
R0
;NDIVMN:
MOVA,M
CLRC
SUBBA,N
MOVNCNT,A
ADDA,R0
MOVR4,A
XCHA,R0
MOVR3,A
MOVA,R1
MOVR5,A
MOVR2,#00HNDVMN1:
MOVR7,N
LCALLNSUBN
MOVA,R5
MOVR1,A
JCNDVMN2
INCR2
SJMPNDVMN1NDVMN2:
MOVR7,N
LCALLNADDN
MOVA,NCNT
SWAPA
RRA
MOVNCNT,ANDVMN3:
MOVA,R3
MOVR0,A
MOVR7,M
LCALLNRLCN
MOVF0,C
MOVA,R4