|
|
| | -文章搜索 - 最新文章 - | |
51程序集 |
| 发布时间:2006年4月1日 点击次数:3749 |
| 来源: 作者: |
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 JZ NDV414 SETB OV NDV414 :XCH A,R5 MOV R7,A RET ;双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7 ;入口 :R5,R2,R3,R4,R6,R7 ;占用资源:ACC,B,F0 ;堆栈需求:4字节 ;出口 :(R2),R3,R4,R6,R7,OV NDIV42 :MOV A,R1 PUSH A MOV B,#00H NDV421 :MOV A,R2 CLR C SUBB A,R7 MOV R1,A MOV A,R5 SUBB A,R6 JC NDV422 MOV R5,A MOV A,R1 MOV R2,A |
|
|
|
|
[单片机] 相关文章: [转]单片机应用编程技巧(9)简介:
81. Holtek 和 AT 系列编程有何不同,现有 AT 系列程序如何转为 Holtek ? 答 :从指令集来看, ATMEL 的 AVR 系列是 8 位 RISC 型的单片机,共有 118 条指令,而 HOLTEK 是 63 条指令,要将 AVR 的汇编程序转为 HOLTEK 的汇编需要熟悉两者的汇编指令将 AVR 的程序转译成 HOLTEK 汇编,而不能直接在 HOLTEK 芯片上使用,如果程序是用 C 编写,则大部分应该是可以直接使用的,但数据定义以及寄存器的定义可能需要...... [转]单片机应用编程技巧(8)
[转]单片机应用编程技巧(7)
[转]单片机应用编程技巧(5)
[转]单片机应用编程技巧(6)
基于uPSD3200的人机对话设计
[转]从单片机指针说到黑客程序
电磁兼容
Keil C51开发系统基本知识(二)
Keil C51开发系统基本知识(一) |
|
|
|