c8051f单片机汇编语言,51单片机的汇编程序库

下面是一些51单片机汇编语言编程常用到的子程序代码库

9eacd4938c5326896dce195824e94023.png

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

/----------------------------------------------------------------------------- // F35x_ADC0_Buffered.c //----------------------------------------------------------------------------- // Copyright 2004 Silicon Laboratories, Inc. // // AUTH: BD / PC / BW // LMOD: BW 15 JUL 2004 // DATE: 06 APR 2004 // // This program demonstrates taking measurements using the 24-bit ADC on the // C8051F350/51 devices. // // Input pin configuration shown in ADC0_Init(). // // For a Noise measurement, connect AIN0 and AIN1 to AGND at the terminal // block. Set "USE_FLOAT" to '1', "PRINT_STATISTICS" to '1', // "PRINT_SAMPLES" to '0', and "PRINT_VOLTAGES" to '0'. // // This software configures the ADC to use an external VREF. Therefore, // on the 'F350 target board, J13 and J14 should have their shorting blocks // installed. // // The standard deviation (Sigma) of a sample set is equivalent to the // effective RMS noise of the conversion system. "Sigma", when converted // to Volts, is equivalent to the input-referred noise floor of the // sampling system. // // Typical values of Sigma from the C8051F350 rev B target board with // AIN0 and AIN1 grounded at the terminal block are around 9 to 11 LSBs // in bipolar mode. For a DC measurement, this is equivalent to a Signal- // to-Noise ratio of about 117dB, or about 20 bits of effective dynamic // range. // // 117dB = 20 log10 ( 11 / 2^23) // 20 bits = 117dB / 6dB/bit // // Another parameter of note for integrating converters is the number of // Noise-Free bits. For a Gaussian-distributed noise floor, this number // can be obtained by multiplying Sigma by 6, evaluating the number of // bits required to contain the result, and subtracting this number of // bits from the 24 available bits, as follows: // // 10 LSBs * 6 = 60 LSBs, which can be contained in 6 bits. Noise-free // resolution is 24bits - 6 bits = 18 bits. // // Refer to 'F350 datasheet tables "ADC0 Electrical Characteristics" and // "Absolute Maximum Ratings" for the MIN/MAX voltage range on input pins. // // If using the eval version of the Keil compiler, set "USE_FLOAT" to '0' // and calculate the standard deviation by taking the square root // of "variance". // // Target: C8051F35x // // Tool chain: KEIL C51 // // v1.0 PC 26 MAY 2004 // Initial Revision (Adapted from 'F350 Temp Sensor Demo) // // set USE_FLOAT to '0' to use EVAL version of Keil compiler
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值