0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)的匯編程序庫

Wildesbeast ? 來源:單片機(jī)教程網(wǎng) ? 作者:單片機(jī)教程網(wǎng) ? 2020-12-06 17:31 ? 次閱讀

下面是一些51單片機(jī)匯編語言編程常用到的子程序代碼

1、片內(nèi)RAM初始化子程序

2、片外RAM初始化子程序

3、片外RAM初始化子程序(雙字節(jié)個單元)

4、內(nèi)部RAM數(shù)據(jù)復(fù)制程序

5、外部RAM數(shù)據(jù)復(fù)制程序

6、外部RAM數(shù)據(jù)復(fù)制程序

7、外部RAM數(shù)據(jù)復(fù)制到內(nèi)部RAM程序

8、限幅濾波程序

9、中位值濾波程序

10、N點算術(shù)平均濾波

11、N點加權(quán)平均濾波

12、一階加權(quán)滯后濾波程序

13、雙字節(jié)取補(bǔ)程序

14、N節(jié)取補(bǔ)程序

15、雙字節(jié)無符號數(shù)加法程序

16、N字節(jié)無符號數(shù)加法程序

17、雙字節(jié)無符號數(shù)減法程序

18、N字節(jié)無符號數(shù)減法程序

19、單字節(jié)無符號數(shù)乘法程序

20、單字節(jié)無符號數(shù)乘法程序

21、單字節(jié)無符號數(shù)乘法程序

22、雙字節(jié)無符號數(shù)乘法程序

23、雙字節(jié)無符號數(shù)乘法程序

24、N字節(jié)無符號數(shù)乘法程序

25、單字節(jié)無符號除法程序

26、單字節(jié)無符號除法程序

27、雙字節(jié)無符號除法程序

28、N字節(jié)無符號除法程序(組合)

29、N字節(jié)無符號除法程序

30、N字節(jié)數(shù)據(jù)左移程序

31、原碼有符號雙字節(jié)減法程序

32、原碼有符號雙字節(jié)加法程序

33、原碼有符號雙字節(jié)乘法程序

34、原碼有符號雙字節(jié)除法程序

35、單字節(jié)順序查找程序

36、單字節(jié)順序查找程序

37、雙字節(jié)字符串順序查找程序

38、雙字節(jié)字符串順序查找程序

39、N字節(jié)字符串順序查找程序

40、單字節(jié)最值查找程序

41、浮點數(shù)順序查找程序

42、浮點數(shù)最值查找程序

43、單字節(jié)折半查找程序

;片內(nèi)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初始化子程序(雙字節(jié)個單元)

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

;內(nèi)部RAM數(shù)據(jù)復(fù)制程序

;入口 :R0,R7

;占用資源:A

;堆棧需求:2字節(jié)

;出口 :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數(shù)據(jù)復(fù)制程序

;入口 :ADDPH,ADDPL,R7

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :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數(shù)據(jù)復(fù)制程序

;入口 :ADDPH,ADDPL,R6,R7

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :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數(shù)據(jù)復(fù)制到內(nèi)部RAM程序

;入口 :ADDPH,ADDPL,R7

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :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字節(jié)

;出口 :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字節(jié)

;出口 :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點算術(shù)平均濾波

;入口 :ADDPH,ADDPL,N

;占用資源:B,R3,R4

;堆棧需求:2字節(jié)

;出口 :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點加權(quán)平均濾波

;入口 :ADDPH,ADDPL,N

;占用資源:B,R3,R4

;堆棧需求:2字節(jié)

;出口 :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

;一階加權(quán)滯后濾波程序

;入口 :A,DELTY

;占用資源:B,R3,R4

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)T1

INC R3

FT1 :MOV A,R3

MOV DELTY,A

RET

BQTAB :DB 80H,80H

;雙字節(jié)取補(bǔ)程序 /(R3R4)=(R3R4)

;入口 :R3,R4

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :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節(jié)取補(bǔ)程序 /([R0])=([R0])

;入口 :R0,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;雙字節(jié)無符號數(shù)加法程序 (R3R4+R6R7)=(R3R4)

;入口 :R3,R4,R6,R7

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :R3,R4,CF

NADD :MOV A,R4

ADD A,R7

MOV R4,A

MOV A,R3

ADDC A,R6

MOV R3,A

RET

;N字節(jié)無符號數(shù)加法程序 ([R0]+[R1])=([R0])

;入口 :R0,R1,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;雙字節(jié)無符號數(shù)減法程序 (R3R4-R6R7)=(R3R4)

;入口 :R3,R4,R6,R7

;占用資源:ACC

;堆棧需求:2字節(jié)

;出口 :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字節(jié)無符號數(shù)減法程序 ([R0]-[R1])=([R0])

;入口 :R0,R1,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;單字節(jié)無符號數(shù)乘法程序 (R3R4*R7)=(R2R3R4)

;入口 :R3,R4,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;單字節(jié)無符號數(shù)乘法程序 (R2R3R4*R7)=(R5R2R3R4)

;入口 :R2,R3,R4,R6,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;單字節(jié)無符號數(shù)乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)

;入口 :R5,R2,R3,R4,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;雙字節(jié)無符號數(shù)乘法程序 (R3R4*R6R7)=(R5R2R3R4)

;入口 :R3,R4,R6,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;雙字節(jié)無符號數(shù)乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4)

;入口 :R2,R3,R4,R6,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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字節(jié)無符號數(shù)乘法程序 ([R0]*[R1])=([R0])

;入口 :R0,R1,M,N

;占用資源:ACC,B,R2,R5,R6,R7,NCNT

;堆棧需求:2字節(jié)

;出口 :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

;單字節(jié)無符號除法程序 (R2R3R4/R7)=(R2)R3R4 余數(shù)R7

;入口 :R2,R3,R4,R7

;占用資源:ACC,B,F(xiàn)0

;堆棧需求:3字節(jié)

;出口 :(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

;單字節(jié)無符號除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余數(shù)R7

;入口 :R2,R3,R4,R7

;占用資源:ACC,B,F(xiàn)0

;堆棧需求:3字節(jié)

;出口 :(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

;雙字節(jié)無符號除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余數(shù)R6R7

;入口 :R5,R2,R3,R4,R6,R7

;占用資源:ACC,B,F(xiàn)0

;堆棧需求:4字節(jié)

;出口 :(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字節(jié)無符號除法程序(組合) ([R0]/[R1])=([R0])

;入口 :R0,R1,M,N

;占用資源:ACC,R2,R3,R4,R5,R7,NCNT,F(xiàn)0,NADDN,NSUBBN,NRLCN

;堆棧需求:4字節(jié)

;出口 :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字節(jié)無符號除法程序(集成) ([R0]/R[1])=([R0])

;入口 :R0,R1,M,N

;占用資源:ACC,R2,R3,R4,R5,R7,F(xiàn)0

;堆棧需求:2字節(jié)

;出口 :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字節(jié)數(shù)據(jù)左移程序 RLC([R0])=(CF[R0])

;入口 :R0,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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

;原碼有符號雙字節(jié)減法程序 (R3R4-R6R7)=R3R4

;入口 :R3,R4,R6,R7

;占用資源:ACC,DADD

;堆棧需求:6字節(jié)

;出口 :R3,R4,OV

DSUB :MOV A,R6

CPL ACC.7

MOV R6,A

LCALL DADD

RET

;原碼有符號雙字節(jié)加法程序 (R3R4+R6R7)=R3R4

;入口 :R3,R4,R6,R7

;占用資源:ACC,SR0,NADD,NSUB,CMPT

;堆棧需求:4字節(jié)

;出口 :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

;原碼有符號雙字節(jié)乘法程序 (R3R4*R6R7)=(R5R2R3R4)

;入口 :R3,R4,R6,R7

;占用資源:ACC,SR0,NMUL22

;堆棧需求:4字節(jié)

;出口 :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

;原碼有符號雙字節(jié)除法程序 (R5R2R3R4/R6R7)=(R3R4) 余數(shù)(R6R7)

;入口 :R5,R2,R3,R4

;占用資源:ACC,SR0,NDIV42

;堆棧需求:6字節(jié)

;出口 :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

;單字節(jié)順序查找程序

;入口 :R0,R1,A,R7

;占用資源:B

;堆棧需求:2字節(jié)

;出口 :R0,R1,A

FINDB1 :MOV B,A

MOV DPL,R1

MOV DPH,R0

FINDB11 :MOVX A,@DPTR

CJNE A,B,F(xiàn)INDB12

MOV R1,DPL

MOV R0,DPH

CLR A

RET

FINDB12 :INC DPTR

DJNZ R7,F(xiàn)INDB11

MOV A,#0FFH

RET

;單字節(jié)順序查找程序

;入口 :R0,R1,A,R6,R7

;占用資源:B

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)INDB22

MOV R1,DPL

MOV R0,DPH

CLR A

RET

FINDB22 :INC DPTR

DJNZ R7,F(xiàn)INDB21

DJNZ R6,F(xiàn)INDB21

MOV A,#0FFH

RET

;雙字節(jié)字符串順序查找程序

;入口 :R0,R1,R3,R4,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)INDS11

MOV A,#0FFH

RET

;雙字節(jié)字符串順序查找程序

;入口 :R0,R1,R3,R4,R6,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)INDS21

DJNZ R6,F(xiàn)INDS21

MOV A,#0FFH

RET

;N字節(jié)字符串順序查找程序

;入口 :ADDPH,ADDPL,R0,R6,R7,N

;占用資源:ACC,B,R2,NCNT

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)INDN2

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,F(xiàn)INDN1

DJNZ R6,F(xiàn)INDN1

MOV A,#0FFH

RET

;單字節(jié)最值查找程序

;入口 :R0,R1,R6,R7

;占用資源:ACC,B

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)MMB1

DJNZ R6,F(xiàn)MMB1

RET

;浮點數(shù)順序查找程序

;入口 :R0,R1,R2,R3,R4,R6,R7

;占用資源:B,NCNT,F(xiàn)CMP

;堆棧需求:2字節(jié)

;出口 :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,F(xiàn)INDF1

DJNZ NCNT,F(xiàn)INDF1

MOV A,#0FFH

RET

;浮點數(shù)最值查找程序

;入口 :ADDPH,ADDPL,R6,R7

;占用資源:ACC,B,NCNT,ITEMOV,EBMOV,MOVB,MOVR1,F(xiàn)CMP

;堆棧需求:5字節(jié)

;出口 :[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,F(xiàn)MMF1

DJNZ NCNT,F(xiàn)MMF1

RET

;單字節(jié)折半查找程序

;入口 :A,R0,R1,R6,R7

;占用資源:B,R2

;堆棧需求:2字節(jié)

;出口 :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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1344

    瀏覽量

    114210
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    272

    文章

    5689

    瀏覽量

    122132
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3719

    瀏覽量

    80355
收藏 人收藏

    評論

    相關(guān)推薦

    pic單片機(jī)匯編程序實例

    以下是一個簡單的PIC單片機(jī)匯編程序示例,這個程序將實現(xiàn)一個LED閃爍的功能。 首先,我們需要了解PIC單片機(jī)的結(jié)構(gòu)和指令集。PIC單片機(jī)
    的頭像 發(fā)表于 12-14 11:01 ?1396次閱讀

    單片機(jī)匯編語言程序庫

    單片機(jī)匯編語言程序庫內(nèi)容有運算子程序,通訊子程序,擴(kuò)展接口程序,中斷服務(wù)子
    發(fā)表于 01-19 22:39 ?83次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>匯編</b>語言<b class='flag-5'>程序庫</b>

    匯編程序中靈活運用TSRs的程序庫

    匯編程序中靈活運用TSRs的程序庫
    發(fā)表于 02-24 14:43 ?2次下載

    PIC單片機(jī)控制時鐘芯片DS1302匯編程序

    PIC單片機(jī)控制時鐘芯片DS1302匯編程序
    發(fā)表于 05-24 09:56 ?1724次閱讀

    EMC系列單片機(jī)匯編程序

    本文提供的EMC系列單片機(jī)匯編程序,希望對你學(xué)習(xí)有所幫助!
    發(fā)表于 06-03 15:32 ?33次下載

    51單片機(jī)匯編程序

    51單片機(jī)匯編程序包。
    發(fā)表于 01-06 14:12 ?16次下載

    51單片機(jī)LCD1602匯編程序詳細(xì)資料免費下載

    1602匯編程序,51單片機(jī)匯編程序,僅需修改引腳定義即可。晶振大小12M,程序測試完全正確。內(nèi)部包含寫數(shù)據(jù)、寫命令(包括讀忙和不讀忙)、初
    發(fā)表于 08-24 15:24 ?24次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>LCD1602<b class='flag-5'>匯編程序</b>詳細(xì)資料免費下載

    51單片機(jī)匯編程序有哪些?51單片機(jī)匯編程序集詳細(xì)資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)匯編程序有哪些?51單片機(jī)匯編程序集詳細(xì)資料免費下載。
    發(fā)表于 09-06 16:31 ?55次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>匯編程序</b>有哪些?<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>匯編程序</b>集詳細(xì)資料免費下載

    51單片機(jī)音樂盒梁祝的proteus匯編程序和電路圖免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)音樂盒梁祝的proteus匯編程序和電路圖免費下載。
    發(fā)表于 02-28 15:51 ?32次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>音樂盒梁祝的proteus<b class='flag-5'>匯編程序</b>和電路圖免費下載

    51單片機(jī)內(nèi)部各個模塊的匯編程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)內(nèi)部各個模塊的匯編程序免費下載包括了:
    發(fā)表于 08-27 17:29 ?8次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>內(nèi)部各個模塊的<b class='flag-5'>匯編程序</b>免費下載

    使用51單片機(jī)控制數(shù)碼管的匯編程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)控制數(shù)碼管的匯編程序免費下載。
    發(fā)表于 08-14 17:32 ?11次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>控制數(shù)碼管的<b class='flag-5'>匯編程序</b>免費下載

    使用51單片機(jī)點亮全部LED的匯編程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)點亮全部LED的匯編程序免費下載。
    發(fā)表于 07-04 17:41 ?2次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>點亮全部LED的<b class='flag-5'>匯編程序</b>免費下載

    DS18B20和51單片機(jī)連接的匯編程序免費下載

    匯編程序僅適合單個DS18B20和51單片機(jī)的連接,晶振為12MHZ左右
    的頭像 發(fā)表于 09-06 10:52 ?4466次閱讀

    單片機(jī)入門匯編程序--直流電機(jī)的單片機(jī)控制

    單片機(jī)入門匯編程序--直流電機(jī)的單片機(jī)控制(15kvaups電源技術(shù)協(xié)議)-該文檔為單片機(jī)入門匯編程序--直流電機(jī)的
    發(fā)表于 09-22 14:37 ?38次下載
    <b class='flag-5'>單片機(jī)</b>入門<b class='flag-5'>匯編程序</b>--直流電機(jī)的<b class='flag-5'>單片機(jī)</b>控制

    51單片機(jī)匯編程序,溫度報警項目

    51單片機(jī)匯編程序,溫度報警項目
    發(fā)表于 11-21 12:36 ?19次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>匯編程序</b>,溫度報警項目