电子开发 | 基础入门 | 电路原理图 | 濮婎垰鑸伴崶鎯х杽娓氾拷 | PLC閸╄櫣顢�   閵嗗﹤顩ч弸婊冩灘濞嗐垺婀扮粩娆欑礉鐠囬攱瀵� Ctrl+D 閹靛濮╅弨鎯版閿涗焦鍔呯拫銏″亶閻ㄥ嫭鏁幐浣碘偓锟�娑撯偓鐠у嘲顒熸稊鐘辩鐠х柉绻樺銉礉閻㈤潧鐡欏鈧崣鎴犲竾濞嗐垼绻嬮幃顭掔磼.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

閳藉懐鏁哥捄顖氬彆瀵繑澧滈崘宀嬬礉閺堚偓閺傛壆澧楅妴濠勬暩鐎涙劗鏁哥捄顖氬彆瀵繗顓哥粻妤€娅掗妴瀣剁礉閻絻鐭鹃崗顒€绱¢弻銉嚄閹靛鍞� 閻絻鐭鹃崗顒€绱$拋锛勭暬閸c劊鈧劗鏁哥€涙劒绮犳稉姘眽閸涙ê绻€婢跺洦澧滈崘灞烩偓锟�
閳藉棗宕勬径鈺侇劅娴兼艾宕熼悧鍥ㄦ簚鐎圭偘绶�100 c鐠囶叀鈻� chm閺嶇厧绱¢妴鍌濈カ閺傛瑥鍞寸€圭顕涚紒鍡礉鐟曞棛娲婃笟瀣摍婢舵熬绱濋崘鍛啇楠炶¥鈧劗鏁哥€涙劒绮犳稉姘眽閸涙ê绻€婢跺洦澧滈崘灞烩偓锟�
搜索: 您现在的位置: 电子开发网 >> 电子开发 >> 单片机 >> 正文

51单片机汇编程序集

作者:佚名    文章来源:本站原创    点击数:3125    更新时间:2008/10/31


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
          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
          INC    B
          SJMP   NDV421
NDV422   :PUSH   B
          MOV    B,#10H
NDV423   :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
          XCH    A,R5
          RLC    A
          XCH    A,R5
          MOV    F0,C
          CLR    C
          SUBB   A,R7
          MOV    R1,A
          MOV    A,R5
          SUBB   A,R6
          JB     F0,NCV424
          JC     NDV425
NCV424   :MOV    R5,A
          MOV    A,R1
          MOV    R2,A
          INC    R4
NDV425   :DJNZ   B,NDV423
          POP    A
          CLR    OV
          JNZ    NDV426
          SETB   OV
NDV426   :XCH    A,R2
          MOV    R7,A
          MOV    A,R5
          MOV    R6,A
          POP    A
          MOV    R1,A
          RET
;N字节无符号除法程序(组合) ([R0]/[R1])=([R0])
;入口    :R0,R1,M,N
;占用资源:ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN
;堆栈需求:4字节
;出口    :R0
;NDIVMN   :MOV    A,M
          CLR    C
          SUBB   A,N
          MOV    NCNT,A
          ADD    A,R0
          MOV    R4,A
          XCH    A,R0
          MOV    R3,A
          MOV    A,R1
          MOV    R5,A
          MOV    R2,#00H
NDVMN1   :MOV    R7,N
          LCALL  NSUBN
          MOV    A,R5
          MOV    R1,A
          JC     NDVMN2
          INC    R2
          SJMP   NDVMN1
NDVMN2   :MOV    R7,N
          LCALL  NADDN
          MOV    A,NCNT
          SWAP   A
          RR     A
          MOV    NCNT,A
NDVMN3   :MOV    A,R3
          MOV    R0,A
          MOV    R7,M
          LCALL  NRLCN
          MOV    F0,C
          MOV    A,R4
          MOV    R0,A
          MOV    A,R5
          MOV    R1,A
          MOV    R7,N
          LCALL  NSUBN
          JB     F0,NDVMN4
          JC     NDVMN5
NDVMN4   :MOV    A,R3
          MOV    R0,A
          INC    @R0
          SJMP   NDVMN6
NDVMN5   :MOV    A,R5
          MOV    R1,A
          MOV    R7,N
          LCALL  NADDN
NDVMN6   :DJNZ   NCNT,NDVMN3
          MOV    A,R4
          MOV    R1,A
          MOV    A,R2
          MOV    @R1,A
          MOV    A,R3
          MOV    R0,A
          RET
;N字节无符号除法程序(集成) ([R0]/R[1])=([R0])
;入口    :R0,R1,M,N
;占用资源:ACC,R2,R3,R4,R5,R7,F0
;堆栈需求:2字节
;出口    :R0
NDIVMN   :MOV    A,M
          CLR    C
          SUBB   A,N
          MOV    B,A
          ADD    A,R0
          MOV    R4,A
          XCH    A,R0
          MOV    R3,A
          MOV    A,R1
          MOV    R5,A
          MOV    R2,#00H
NDVMN1   :MOV    R7,N
          CLR    C
NDVMN2   :MOV    A,@R0
          SUBB   A,@R1
          MOV    @R0,A
          INC    R0
          INC    R1
          DJNZ   R7,NDVMN2
          MOV    A,R4
          MOV    R0,A
          MOV    A,R5
          MOV    R1,A
          JC     NDVMN3
          INC    R2
          SJMP   NDVMN1
NDVMN3   :MOV    R7,N
          CLR    C
NDVMN4   :MOV    A,@R0
          ADDC   A,@R1
          MOV    @R0,A
          INC    R0
          INC    R1
          DJNZ   R7,NDVMN4
          MOV    A,#08H
          MUL    AB
          MOV    B,A
NDVMN5   :MOV    A,R3
          MOV    R0,A
          MOV    R7,M
          CLR    C
NDVMN6   :MOV    A,@R0
          RLC    A
          MOV    @R0,A
          INC    R0
          DJNZ   R7,NDVMN6
          MOV    F0,C
          MOV    A,R4
          MOV    R0,A
          MOV    A,R5
          MOV    R1,A
          MOV    R7,N
          CLR    C
NDVMN7   :MOV    A,@R0
          SUBB   A,@R1
          MOV    @R0,A
          INC    R0
          INC    R1
          DJNZ   R7,NDVMN7
          JB     F0,NDVMNB
          JC     NDVMN8
NDVMNB   :MOV    A,R3
          MOV    R0,A
          INC    @R0
          SJMP   NDVMNA
NDVMN8   :MOV    R7,N
          MOV    A,R4
          MOV    R0,A
          MOV    A,R5
          MOV    R1,A
          CLR    C
NDVMN9   :MOV    A,@R0
          ADDC   A,@R1
          MOV    @R0,A
          INC    R0
          INC    R1
          DJNZ   R7,NDVMN9
NDVMNA   :DJNZ   B,NDVMN5
          MOV    A,M
          CLR    C
          SUBB   A,N
          ADD    A,R3
          MOV    R1,A
          MOV    A,R2
          MOV    @R1,A
          MOV    A,R3
          MOV    R0,A
          RET
;N字节数据左移程序 RLC([R0])=(CF[R0])
;入口    :R0,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R0,CF
NRLCN    :MOV    B,R0
          CLR    C
NRLN1    :MOV    A,@R0
          RLC    A
          MOV    @R0,A
          INC    R0
          DJNZ   R7,NRLN1
          MOV    R0,B
          RET
;原码有符号双字节减法程序 (R3R4-R6R7)=R3R4
;入口    :R3,R4,R6,R7
;占用资源:ACC,DADD
;堆栈需求:6字节
;出口    :R3,R4,OV
DSUB     :MOV    A,R6
          CPL    ACC.7
          MOV    R6,A
          LCALL  DADD
          RET
;原码有符号双字节加法程序 (R3R4+R6R7)=R3R4
;入口    :R3,R4,R6,R7
;占用资源:ACC,SR0,NADD,NSUB,CMPT
;堆栈需求:4字节
;出口    :R3,R4,OV
DADD     :MOV    A,R3
          MOV    C,ACC.7
          MOV    SR0,C
          XRL    A,R6
          MOV    C,ACC.7
          MOV    A,R3
          CLR    ACC.7
          MOV    R3,A
          MOV    A,R6
          CLR    ACC.7
          MOV    R6,A
          JC     DAB2
          LCALL  NADD
          MOV    A,R3
          JB     ACC.7,DABE
DAB1     :MOV    C,SR0
          MOV    ACC.7,C
          MOV    R3,A
          CLR    OV
          RET
DABE     :SETB   OV
          RET
DAB2     :LCALL  NSUB
          MOV    A,R3
          JNB    ACC.7,DAB1
          LCALL  CMPT
          CPL    SR0
          SJMP   DAB1
;原码有符号双字节乘法程序 (R3R4*R6R7)=(R5R2R3R4)
;入口    :R3,R4,R6,R7
;占用资源:ACC,SR0,NMUL22
;堆栈需求:4字节
;出口    :R5,R2,R3,R4
IMUL     :MOV    A,R3
          XRL    A,R6
          MOV    C,ACC.7
          MOV    SR0,C
          MOV    A,R3
          CLR    ACC.7
          MOV    R3,A
          MOV    A,R6
          CLR    ACC.7
          MOV    R6,A
          LCALL  NMUL22
          MOV    A,R5
          MOV    C,SR0
          MOV    ACC.7,C
          MOV    R5,A
          RET
;原码有符号双字节除法程序 (R5R2R3R4/R6R7)=(R3R4) 余数(R6R7)
;入口    :R5,R2,R3,R4
;占用资源:ACC,SR0,NDIV42
;堆栈需求:6字节
;出口    :R3,R4,R6,R7,OV
IDIV     :MOV    A,R5
          XRL    A,R6
          MOV    C,ACC.7
          MOV    SR0,C
          MOV    A,R5
          CLR    ACC.7
          MOV    R5,A
          MOV    A,R6
          CLR    ACC.7
          MOV    R6,A
          LCALL  NDIV42
          MOV    A,R3
          JB     ACC.7,IDIVE
          JB     OV,IDIVE
          MOV    C,SR0
          MOV    ACC.7,C
          MOV    R3,A
          RET
IDIVE    :SETB   OV
          RET
 
;单字节顺序查找程序
;入口    :R0,R1,A,R7
;占用资源:B
;堆栈需求:2字节
;出口    :R0,R1,A
FINDB1   :MOV    B,A
          MOV    DPL,R1
          MOV    DPH,R0
FINDB11  :MOVX   A,@DPTR
          CJNE   A,B,FINDB12
          MOV    R1,DPL
          MOV    R0,DPH
          CLR    A
          RET
FINDB12  :INC    DPTR
          DJNZ   R7,FINDB11
          MOV    A,#0FFH
          RET
;单字节顺序查找程序
;入口    :R0,R1,A,R6,R7
;占用资源:B
;堆栈需求:2字节
;出口    :R0,R1,A
FINDB2   :MOV    B,A
          MOV    DPL,R1
          MOV    DPH,R0
          MOV    A,R7
          JZ     FINDB21
          INC    R6
FINDB21  :MOVX   A,@DPTR
          CJNE   A,B,FINDB22
          MOV    R1,DPL
          MOV    R0,DPH
          CLR    A
          RET
FINDB22  :INC    DPTR
          DJNZ   R7,FINDB21
          DJNZ   R6,FINDB21
          MOV    A,#0FFH
          RET
;双字节字符串顺序查找程序
;入口    :R0,R1,R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R0,R1,A
FINDS1   :MOV    DPL,R1
          MOV    DPH,R0
FINDS11  :MOVX   A,@DPTR
          INC    DPTR
          CLR    C
          SUBB   A,R4
          JNZ    FINDS12
          MOVX   A,@DPTR
          SUBB   A,R3
          JNZ    FINDS12
          MOV    A,DPL
          CLR    C
          SUBB   A,#01H
          MOV    R1,A
          MOV    A,DPH
          SUBB   A,#00H
          MOV    R0,A
          CLR    A
          RET
FINDS12  :DJNZ   R7,FINDS11
          MOV    A,#0FFH
          RET
;双字节字符串顺序查找程序
;入口    :R0,R1,R3,R4,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R0,R1,A
FINDS2   :MOV    DPL,R1
          MOV    DPH,R0
          MOV    A,R7
          JZ     FINDS21
          INC    R6
FINDS21  :MOVX   A,@DPTR
          INC    DPTR
          CLR    C
          SUBB   A,R4
          JNZ    FINDS22
          MOVX   A,@DPTR
          SUBB   A,R3
          JNZ    FINDS22
          MOV    A,DPL
          CLR    C
          SUBB   A,#01H
          MOV    R1,A
          MOV    A,DPH
          SUBB   A,#00H
          MOV    R0,A
          CLR    A
          RET
FINDS22  :DJNZ   R7,FINDS21
          DJNZ   R6,FINDS21
          MOV    A,#0FFH
          RET
;N字节字符串顺序查找程序
;入口    :ADDPH,ADDPL,R0,R6,R7,N
;占用资源:ACC,B,R2,NCNT
;堆栈需求:2字节
;出口    :ADDPH,ADDPL,A
FINDN    :MOV    A,R0
          MOV    R2,A
          MOV    A,ADDPL
          MOV    DPL,A
          MOV    A,ADDPH
          MOV    DPH,A
          MOV    A,R7
          JZ     FINDN1
          INC    R6
FINDN1   :MOV    A,R2
          MOV    R0,A
          MOV    A,N
          MOV    NCNT,A
FINDN2   :MOVX   A,@DPTR
          CLR    C
          SUBB   A,@R0
          JNZ    FINDN3
          INC    DPTR
          INC    R0
          DJNZ   NCNT,FINDN2
          MOV    A,DPL
          CLR    C
          SUBB   A,N
          MOV    ADDPL,A
          MOV    A,DPH
          SUBB   A,#00H
          MOV    ADDPH,A
          CLR    A
          RET
FINDN3   :CLR    C
          MOV    A,R0
          SUBB   A,R2
          JNZ    FINDN4
          INC    DPTR
FINDN4   :DJNZ   R7,FINDN1
          DJNZ   R6,FINDN1
          MOV    A,#0FFH
          RET
;单字节最值查找程序
;入口    :R0,R1,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R0(最大值),R1(最小值),R2,R3,R4,R5
FMAMIB   :MOV    DPL,R1
          MOV    DPH,R0
          MOVX   A,@DPTR
          MOV    R0,A
          MOV    R1,A
          MOV    A,DPL
          MOV    R3,A
          MOV    R5,A
          MOV    A,DPH
          MOV    R2,A
          MOV    R4,A
          MOV    A,R7
          JZ     FMMB1
          INC    R6
FMMB1    :MOVX   A,@DPTR
          MOV    B,A
          SETB   C
          SUBB   A,R0
          JC     FMMB2
          MOV    R0,B
          MOV    R3,DPL
          MOV    R2,DPH
          SJMP   FMMB3
FMMB2    :MOV    A,B
          CLR    C
          SUBB   A,R1
          JNC    FMMB3
          MOV    R1,B
          MOV    R5,DPL
          MOV    R4,DPH
FMMB3    :INC    DPTR
          DJNZ   R7,FMMB1
          DJNZ   R6,FMMB1
          RET
;浮点数顺序查找程序
;入口    :R0,R1,R2,R3,R4,R6,R7
;占用资源:B,NCNT,FCMP
;堆栈需求:2字节
;出口    :R0,R1,A
FINDF    :MOV    DPL,R1
          MOV    DPH,R0
          MOV    A,R7
          MOV    B,A
          MOV    NCNT,R6
          JZ     FINDF1
          INC    NCNT
FINDF1   :MOVX   A,@DPTR
          INC    DPTR
          MOV    R5,A
          MOVX   A,@DPTR
          INC    DPTR
          MOV    R6,A
          MOVX   A,@DPTR
          INC    DPTR
          MOV    R7,A
          LCALL  FCMP
          JNZ    FINDF2
          MOV    A,DPL
          CLR    C
          SUBB   A,#03H
          MOV    R1,A
          MOV    A,DPH
          SUBB   A,#00H
          MOV    R0,A
          CLR    A
          RET
FINDF2   :DJNZ   B,FINDF1
          DJNZ   NCNT,FINDF1
          MOV    A,#0FFH
          RET
;浮点数最值查找程序
;入口    :ADDPH,ADDPL,R6,R7
;占用资源:ACC,B,NCNT,ITEMOV,EBMOV,MOVB,MOVR1,FCMP
;堆栈需求:5字节
;出口    :[R0](最大值),[R1](最小值),R2,R3,R4,R5
FMAMIF   :MOV    A,ADDPL
          MOV    R3,A
          MOV    R5,A
          MOV    DPL,A
          MOV    A,ADDPH
          MOV    R2,A
          MOV    R4,A
          MOV    DPH,A
          MOV    B,R7
          MOV    R7,#03H
          LCALL  ITEMOV
          MOV    R7,#03H
          LCALL  IBMOV
          MOV    A,B
          JZ     FMMF1
          INC    NCNT
FMMF1    :PUSH   B
          MOVX   A,@DPTR
          INC    DPTR
          MOV    R2,A
          MOVX   A,@DPTR
          INC    DPTR
          MOV    R3,A
          MOVX   A,@DPTR
          INC    DPTR
          MOV    R4,A
          LCALL  MOVR1
          LCALL  FCMP
          JNC    FMMF2
          MOV    A,R0
          XCH    A,R1
          MOV    R0,A
          LCALL  MOVB
          MOV    R5,DPL
          MOV    R4,DPH
          MOV    A,R0
          XCH    A,R1
          MOV    R0,A
          SJMP   FMMF3
FMMF2    :MOV    A,R0
          XCH    A,R1
          MOV    R0,A
          LCALL  MOVR1
          LCALL  FCMP
          MOV    A,R0
          XCH    A,R1
          MOV    R0,A
          JZ     FMMF3
          JC     FMMF3
          LCALL  MOVB
          MOV    R3,DPL
          MOV    R2,DPH
FMMF3    :POP    B
          DJNZ   B,FMMF1
          DJNZ   NCNT,FMMF1
          RET

;单字节折半查找程序
;入口    :A,R0,R1,R6,R7
;占用资源:B,R2
;堆栈需求:2字节
;出口    :R0,R1
SEARCHB  :MOV    B,A
          MOV    A,R1
          ADD    A,R7
          MOV    R7,A
          MOV    A,R0
          ADDC   A,R6
          MOV    R6,A
          MOV    A,R7
          SUBB   A,#01H
          MOV    R7,A
          JNC    SECH1
          DEC    R6
SECH1    :MOV    A,R7
          CLR    C
          SUBB   A,R1
          MOV    A,R6
          SUBB   A,R0
          JNC    SECH2
          MOV    A,#0FFH
          RET
SECH2    :MOV    A,R7
          ADD    A,R1
          MOV    R2,A
          MOV    A,R6
          ADDC   A,R0
          RRC    A
          MOV    DPH,A
          MOV    A,R2
          RRC    A
          MOV    DPL,A
          MOVX   A,@DPTR
          CLR    C
          SUBB   A,B
          JNC    SECH3
          INC    DPTR
          MOV    R0,DPH
          MOV    R1,DPL
          SJMP   SECH1
SECH3    :JZ     SECH5
          MOV    A,DPL
          SUBB   A,#01H
          MOV    R7,A
          JNC    SECH4
          MOV    R6,DPH
          DEC    R6
SECH4    :SJMP   SECH1
SECH5    :MOV    R0,DPH
          MOV    R1,DPL
          CLR    A
          RET


Tags:单片机编程,单片机汇编语言,语法  
责任编辑:admin
相关文章列表
没有相关文章
请文明参与讨论,禁止漫骂攻击,不要恶意评论、违禁词语。 昵称:
1分 2分 3分 4分 5分

还可以输入 200 个字
[ 查看全部 ] 网友评论
    没有任何评论
閻㈤潧鐡欏鈧崣鎴犵秹閿涙碍鐪归梿鍡欐偅閸氬牆鎮囩猾鑽ゆ暩鐎涙劕鍩楁担婊€绗岄悽浣冪熅閸ュ墽娈戠純鎴犵彲閿涘lc瀹搞儲甯堕幎鈧張锟�,濡紕鏁搁弫鎵暩閻儴鐦�,閸楁洜澧栭張绡岲A缁涘鐡戦敍浣藉疮閽€鍐暩鐠侯垰娴樼純鎴犵彲缁儳宕曢敍灞艰礋瀹搞儳鈻肩敮鍫濆灡闁姳鐜崐绗衡偓鍌涱偨鏉╁骸鍙у▔銊ヤ簳娣団€冲彆娴兼褰块敍姘辨暩鐎涙劕绱戦崣鎴犵秹閿涳拷
最新推荐
鐠у嫭鏋¢崠鍛瑓鏉烇拷
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂備礁鎲¢妵鐐电矆娓氣偓婵″灚寰勭仦绋夸壕婵炴垵纾槐鎵磼閸欐ê宓嗙€规洩绻濆鎾偐瀹割喗姣堥梻浣告惈閻楀棝骞栭锔藉仾闁告洦鍓涢悷褰掓煥閻曞倹瀚�100 c闂佽崵濮村ù鍕箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]濠电偞鍨堕幐鎼佀囩€圭姰浜圭紒鈧悜鐫犻梺璇插閸愯崵绱撳鍗炲К闁告洦鍓涢々鐑芥偣閹帒濡介柛鈺佸€垮鍫曟倻閸℃浠у┑鐐叉-閺侇煝-TR
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM324闂佸搫顦弲婊堝礉閺嶎厼妫橀柨鐕傛嫹4~20mA闂佸搫顦遍崕鎴﹀箯閿燂拷1~5V闂備焦鐪归崹褰掓倶濮樿京鐭堥柨鐕傛嫹
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]LM386濠碉紕鍋涘﹢杈╁垝椤栫偞鍊垫い鎺嶇劍婵挳鏌熼幑鎰靛殭妞ゆ柨锕弻娑滅疀閹垮啫鍓跺銈冨劜閹瑰洤顕i妸鈺佺畾鐟滃绂嶉敐澶嬬厱闁挎繂鍟俊濂告偨椤栥倖瀚�
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]936闂備胶绮敮鎺楁晝閵堝牄浜归柟缁㈠枟閸嬨劌霉閿濆懎鏆熼柣鏂挎嚇閺屾稑螣閻撳孩鐏侀梺璇″枛閿曨亜鐣烽崼鏇熸櫢闁跨噦鎷�
 [闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬螖閿曚焦纭堕柕鍫亰閺岋繝宕掗敂钘夘伓]闂佺儵鍓濈敮鎺楀箠鎼淬劍鏅柟閭﹀厴閺嬫牠鏌曡箛銉х?闁靛牊鎸抽幃褰掓偖鐎涙ê顏�+婵犵數鍋為幐鎾疾濞戞埃鍋撻惂鍛婂+闂備胶顢婄紙浼村磿閹绢噮鏁嗛柣鏂垮悑閸庡秹鏌涢弴銊ヤ簻缂佲偓閿燂拷
 [闂傚倷绶¢崑鍛潩閵娾晛鏋侀柕鍫濐槹閸嬨劑姊婚崼鐔恒€掗柟钘夌Ч閹鎷呴悷鎵槰濡炪倖鎸搁幉鈥翅缚椤忓牜鏁嶆繛鍡樺姦閸嬶拷]S7-200PLC闂備焦鐪归崝宀€鈧凹浜為幐鎺楀閵堝棗鍓抽梺缁樻⒐濡叉帡骞忛鈷氬綊鎮崨顔碱伓 S7_2
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]S7-200闂佸湱鍘ч悺銊╁箰婵犳艾鍑犻柛鎰ㄦ櫇椤╃兘鎮规担鍛婅础缂佲偓閸曨垱鐓曢煫鍥风悼閸樻粎绱掗幉瀣,STEP7
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]ModbusPoll闂備礁鎲$划宀勵敆閻栧獛busSalve闂備胶枪妤犲繘骞忛敓锟�
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]STEP7婵犵妲呴崹顏堝礈濠靛牃鍋撳顓犳噰闁哄苯鐭佺粻娑㈠棘鐠恒劍鈻屽┑鐐差嚟婵即宕愰弴鐘哄С闁跨噦鎷� Smart_
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modbus闂佽崵濮撮鍛村疮閹惰姤鍎婃い鏍ㄧ矊閸ㄦ繈鏌涢幘妤€鍊荤憴锟� v1.024 缂傚倸鍊风欢銈夊箯閿燂拷
 [闂佸搫顦遍崕鎰板垂椤栨埃鏋庨柕蹇嬪灮鐏忕敻鏌ㄩ悤鍌涘]Modscan32闂備礁鎲$划宀勵敆閻栧獛sim32,modb
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]89c51闂備胶枪缁绘劙藝闁秵鍋熸繛鎴欏灩濡﹢姊洪锝囶灱闂傚棗缍婇弻锝夘敂閸℃鐝㈢紓浣介哺閻涱槝otues
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]濠电偞鍨堕幐绋棵洪妶澶婄濡わ絽鍟崒銊╂煕閻愭潙袨otues濠电偛顕慨鎯р枖閺囩儑鑰块柨娑樺閻瑩鎮楅敐搴濈敖缁炬澘绉电换婵婎槼闁告梹顨婇幃銉╂晸閿燂拷
 [闂備焦妞垮鈧紒鎻掝煼閹矂鎮欓鍌ゆ祫闁荤姵浜介崝宥夊春閸岀偞鍋eù锝囨嚀缁€鍐┿亜閹垮嫭瀚�]51闂備礁鎲¢〃鍡椕哄⿰鍕珷闁哄稁鍘肩€氬鏌涘┑鍡楊仼闁秆冿功缁辨帞鈧綀鍩栫€氾拷 protues濠电偛顕慨鎯р枖閺囩儑鑰块柨鐕傛嫹
閺堚偓閺傜増鏋冪粩锟�
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
返回顶部
刷新页面
下到页底
晶体管查询