⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speed.asm

📁 用单片机设计的测速表源程序
💻 ASM
字号:
;**************************************************
;    平凡单片机工作室
;  http://www.mcustudio.com
;    Copyright 2003 pingfan's McuStudio
;    All rights Reserved
;作者:周坚   
;测速实验,在DSB-1A上实现
;**************************************************
	
;	$INCLUDE (REG52.INC)
	DISPBUF	EQU	59H 	;显示缓冲区从5AH开始
	SecCoun	EQU	58H
	SpCoun	EQU	56H	;速度计时器单元57H和58H,高位在前(57H单元中)
	Count	EQU	55H;	显示时的计数器
	SpCalc	bit	00h	;要求计算速度的标志,该位为1则主程序进行速度计算,然后清该位
	Hidden	EQU	16	;消隐码
	
	ORG	0000H
	AJMP	START
	ORG	1BH
	JMP	TIMER1		;定时中断1入口

	ORG	30H
START:	MOV	SP,#5FH		;设置堆栈
	MOV	P1,#0FFH
	MOV	P0,#0FFH
	MOV	P2,#0FFH	;初始化,所有显示器、LED灭
	MOV	TMOD,#00010101B	;定时器T1工作于方式1,定时器0工作方式1,计数器
	MOV	TH1,#HIGH(65536-3686)
	MOV	TL1,#LOW(65536-3686)
	SETB	TR1
	SETB	ET1		;开定时器1中断
	SETB	EA

LOOP:	JNB	SpCalc,LOOP	;如果未要求计算,转本身循环

;标号: MULD    功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节
	MOV	R2,SpCoun
	MOV	R3,SpCoun+1
	MOV	R6,#0
	MOV	R7,#5		;测得的数值是每秒计数值,转为分(每一转测12次,故乘5而非60)
	CALL	MULD

SEND:	MOV	SBUF,R2
SLP1:	JBC	TI,SN1		;是否送完?
	AJMP	SLP1
SN1:	MOV	SBUF,R3
SLP2:	JBC	TI,SN2
	AJMP	SLP2
SN2:	MOV	SBUF,R4
SLP3:	JBC	TI,SN3
	AJMP	SLP3
SN3:	MOV	SBUF,R5
SLP4:	JBC	TI,SN4
	AJMP	SLP4
SN4:
;标号: HB2   功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7    堆栈需求:  2字节
	MOV	A,R4
	MOV	R6,A
	MOV	A,R5
	MOV	R7,A	;将乘得的结果送R6R7准备转换,这里结果不可能超过2字节
	CALL	HB2

	MOV	DISPBUF,R3	;最高位
	
	MOV	A,R4		;
	ANL	A,#0F0H		;去掉低4位
	SWAP	A		;将高4位切换到低4位
	MOV	DISPBUF+1,A

	MOV	A,R4
	ANL	A,#0FH
	MOV	DISPBUF+2,A
	
	MOV	A,R5
	ANL	A,#0F0H
	SWAP	A
	MOV	DISPBUF+3,A
	
	MOV	A,R5
	ANL	A,#0FH
	MOV	DISPBUF+4,A
	
	CLR	SpCalc		;清计算标志
	JMP	LOOP
	
;主程序到此结束
TIMER1:	PUSH	ACC		;ACC入栈
	PUSH	PSW		;PSW入栈
	SETB	RS0		;工作区1
	JNB	TR0,SETTR0	;如果T0未运行,则开启T0
	JMP	GO1
SETTR0:
	SETB	TR0
GO1:	
	INC	SecCoun		;秒计数器加1
	MOV	A,SecCoun
	CJNE	A,#251,Go2	;如果未到1s则转(每到1S停1次,故数值为251)
	CLR	TR0		;1s到了,则停止T0的运行
	MOV	SpCoun,TH0
	MOV	SpCoun+1,TL0	;读取计数值
	CLR	A
	MOV	TH0,A
	MOV	TL0,A		;清计数器
	SETB	SpCalc		;要求主程序计算速度
	MOV	SecCoun,#0	;清秒计数器
Go2:	
	INC	COUNT       ;用于显示的计数器
	MOV	A,COUNT
	CLR	C
	SUBB	A,#6
	JZ	N1
	JMP	N2
N1:	MOV	COUNT,#0
N2:	MOV	A,#DISPBUF
	ADD	A,COUNT	
	MOV	R0,A		;指向当前要显示的显示缓冲区
	MOV	A,@R0		;取第一个待显示数
	MOV	DPTR,#DISPTAB	;字形表首地址
	MOVC	A,@A+DPTR 	;取字形码
	MOV	P0,A		;将字形码送P0位(段口)
	MOV	A,COUNT
	MOV	DPTR,#BitTab	;字位表首地址
	MOVC	A,@A+DPTR
	ORL	P2,#11111100B
	ANL	P2,A
	MOV	TH1,#HIGH(65536-3686) 
	MOV	TL1,#LOW(65536-3686)
	POP	PSW
	POP	ACC
	RETI


BitTab:	DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH
DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH


;以下数学运算程序
BCDA:	MOV	A,R7
	MOV	R2,A
	ADD	A,R0
	MOV	R0,A
	MOV	A,R2
	ADD	A,R1
	MOV	R1,A
	CLR	C
BCD1:	DEC	R0
	DEC	R1
	MOV	A,@R0
	ADDC	A,@R1
	DA	A
	MOV	@R0,A
	DJNZ	R2,BCD1
	RET
BCDB:	LCALL	NEG1
	LCALL	BCDA
	CPL	C
	MOV	F0,C
	LCALL	NEG1
	MOV	C,F0
	RET
NEG1:	MOV	A,R0
	XCH	A,R1
	XCH	A,R0
	LCALL	NEG
	MOV	A,R0
	XCH	A,R1
	XCH	A,R0
	RET
NEG:	MOV	A,R7
	DEC	A
	MOV	R2,A
	MOV	A,R0
	MOV	R3,A
NEG0:	CLR	C
	MOV	A,#99H
	SUBB	A,@R0
	MOV	@R0,A
	INC	R0
	DJNZ	R2,NEG0
	MOV	A,#9AH
	SUBB	A,@R0
	MOV	@R0,A
	MOV	A,R3
	MOV	R0,A
	RET
BRLN:	MOV	A,R7
   	MOV	R2,A
	ADD	A,R0
	MOV	R0,A
	MOV	R3,#0
BRL1:	DEC	R0
	MOV	A,@R0
	SWAP	A
	MOV	@R0,A
	MOV	A,R3
	XCHD	A,@R0
	MOV	R3,A
	DJNZ	R2,BRL1
	RET
MULD:	MOV	A,R3
	MOV	B,R7
	MUL	AB
	MOV	R4,B
	MOV	R5,A
	MOV	A,R3
	MOV	B,R6
	MUL	AB
	ADD	A,R4
	MOV	R4,A
	CLR	A
	ADDC	A,B
	MOV	R3,A
	MOV	A,R2
	MOV	B,R7
	MUL	AB
	ADD	A,R4
	MOV	R4,A
	MOV	A,R3
	ADDC	A,B
	MOV	R3,A
	CLR	A
	RLC	A
	XCH	A,R2
	MOV	B,R6
	MUL	AB
	ADD	A,R3
	MOV	R3,A
	MOV	A,R2
	ADDC	A,B
	MOV	R2,A
	RET
MUL2:	MOV	A,R3
	MOV	B,A
	MUL	AB
	MOV	R4,B
	MOV	R5,A
	MOV	A,R2
	MOV	B,A
	MUL	AB
	XCH	A,R3
	XCH	A,B
	XCH	A,R2
	MUL	AB
	CLR	C
	RLC	A
	XCH	A,B
	RLC	A
	JNC	MU20
	INC	R2
MU20:	XCH	A,B
	ADD	A,R4
	MOV	R4,A
	MOV	A,R3
	ADDC	A,B
	MOV	R3,A
	CLR	A
	ADDC	A,R2
	MOV	R2,A
	RET
DIVD:	CLR	C
	MOV	A,R3
	SUBB	A,R7
	MOV	A,R2
	SUBB	A,R6
	JC	DVD1
	SETB	OV
	RET
DVD1:	MOV	B,#10H
DVD2:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	XCH	A,R2
	RLC	A
	XCH	A,R2
	MOV	F0,C
	CLR	C
	SUBB	A,R7
	MOV	R1,A
	MOV	A,R2
	SUBB	A,R6
	ANL	C,/F0
	JC	DVD3
	MOV	R2,A
	MOV	A,R1
	MOV	R3,A
	INC	R5
DVD3:	DJNZ	B,DVD2
	MOV	A,R4
	MOV	R2,A
	MOV	A,R5
	MOV	R3,A
	CLR	OV
	RET
D457:	CLR	C
	MOV	A,R4
	SUBB	A,R7
	JC	DV50
	SETB	OV
	RET
DV50:	MOV	R6,#8
DV51:	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	F0,C
	CLR	C
	SUBB	A,R7
	ANL	C,/F0
	JC	DV52
	MOV	R4,A
DV52:	CPL	C
	MOV	A,R3
	RLC	A
	MOV	R3,A
	DJNZ	R6,DV51
	MOV	A,R4
	ADD	A,R4
	JC	DV53
	SUBB	A,R7
	JC	DV54
DV53:	INC	R3
DV54:	CLR	OV
	RET
DV31:	CLR	C
	MOV	A,R3
	SUBB	A,R7
	JC	DV30
	SETB	OV
	RET
DV30:	MOV	R2,#10H
DM23:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	F0,C
	CLR	C
	SUBB	A,R7
	ANL	C,/F0
	JC	DM24
	MOV	R3,A
	INC	R5
DM24:	DJNZ	R2,DM23
	MOV	A,R3
	ADD	A,R3
	JC	DM25
	SUBB	A,R7
	JC	DM26
DM25:	INC	R5
	MOV	A,R5
	JNZ	DM26
	INC	R4
DM26:	CLR	OV
	RET
MULS:	MOV	R4,#0
	MOV	R5,#0
	LCALL	MDS
	LCALL	MULD
	SJMP	MDSE
DIVS:	LCALL	MDS
	PUSH	PSW
	LCALL	DIVD
	JNB	OV,DVS1
	POP	ACC
	RET
DVS1:	POP	PSW
	MOV	R4,#0
	MOV	R5,#0
MDSE:	JB	F0,MDS2
	CLR	OV
	RET
MDS:	CLR	F0
	MOV	A,R6
	JNB	ACC.7,MDS1
	CPL	F0
	XCH	A,R7
	CPL	A
	ADD	A,#1
	XCH	A,R7
	CPL	A
	ADDC	A,#0
	MOV	R6,A
MDS1:	MOV	A,R2
	JNB	ACC.7,MDS3
	CPL	F0
MDS2:	MOV	A,R5
	CPL	A
	ADD	A,#1
	MOV	R5,A
	MOV	A,R4
	CPL	A
	ADDC	A,#0
	MOV	R4,A
	MOV	A,R3
	CPL	A
	ADDC	A,#0
	MOV	R3,A
	MOV	A,R2
	CPL	A
	ADDC	A,#0
	MOV	R2,A
MDS3:	CLR	OV
	RET
SH2:	MOV	A,R2
	ORL	A,R3
	JNZ	SH20
	RET
SH20:	MOV	R7,#0
	MOV	A,R2
SH22:	ANL	A,#0C0H
	JNZ	SQRH
	CLR	C
	MOV	A,R3
	RLC	A
	MOV	F0,C
	CLR	C
	RLC	A
	MOV	R3,A
	MOV	A,R2
	MOV	ACC.7,C
	MOV	C,F0
	RLC	A
	RLC	A
	MOV	R2,A
	INC	R7
	SJMP	SH22
SH4:	MOV	A,R2
	ORL	A,R3
	ORL	A,R4
	ORL	A,R5
	JNZ	SH40
	RET
SH40:	MOV	R7,#0
	MOV	A,R2
SH41:	ANL	A,#0C0H
	JNZ	SQRH
	MOV	R6,#2
SH42:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DJNZ	R6,SH42
	INC	R7
	SJMP	SH41
SQRH:	MOV	A,R2
	ADD	A,#57H
	JC	SQR2
	ADD	A,#45H
	JC	SQR1
	ADD	A,#24H
	MOV	B,#0E3H
	MOV	R4,#80H
	SJMP	SQR3
SQR1:	MOV	B,#0B2H
	MOV	R4,#0A0H
	SJMP	SQR3
SQR2:	MOV	B,#8DH
	MOV	R4,#0D0H
SQR3:	MUL	AB
	MOV	A,B
	ADD	A,R4
	MOV	R4,A
	MOV	B,A
	MUL	AB
	XCH	A,R3
	CLR	C
	SUBB	A,R3
	MOV	R3,A
	MOV	A,R2
	SUBB	A,B
	MOV	R2,A
SQR4:	SETB	C
	MOV	A,R4
	RLC	A
	MOV	R6,A
	CLR	A
	RLC	A
	MOV	R5,A
	MOV	A,R3
	SUBB	A,R6
	MOV	B,A
	MOV	A,R2
	SUBB	A,R5
	JC	SQR5
	INC	R4
	MOV	R2,A
	MOV	R3,B
	SJMP	SQR4
SQR5:	MOV	A,R4
	XCH	A,R2
	RRC	A
	MOV	F0,C
	MOV	A,R3
	MOV	R5,A
	MOV	R4,#8
SQR6:	CLR	C
	MOV	A,R3
	RLC	A
	MOV	R3,A
	CLR	C
	MOV	A,R5
	SUBB	A,R2
	JB	F0,SQR7
	JC	SQR8
SQR7:	MOV	R5,A
	INC	R3
SQR8:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	F0,C
	DJNZ	R4,SQR6
	MOV	A,R7
	JZ	SQRE
SQR9:	CLR	C
	MOV	A,R2
	RRC	A
	MOV	R2,A
	MOV	A,R3
	RRC	A
	MOV	R3,A
	DJNZ	R7,SQR9
SQRE:	RET
HASC:	MOV	B,A
	LCALL	HAS1
	XCH	A,B
	SWAP	A
HAS1:	ANL	A,#0FH
	ADD	A,#90H
	DA	A
	ADDC	A,#40H
	DA	A
	RET
ASCH:	CLR	C
	SUBB	A,#30H
	JNB	ACC.4,ASH1
	SUBB	A,#7
ASH1:	RET
HBCD:	MOV	B,#100
	DIV	AB
	MOV	R3,A
	MOV	A,#10
	XCH	A,B
	DIV	AB
	SWAP	A
	ORL	A,B
	RET
HB2:	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R2,#10H
HB3:	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5
	ADDC	A,R5
	DA	A
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	MOV	R3,A
	DJNZ	R2,HB3
	RET
HBD:	MOV	B,#100
	MUL	AB
	RLC	A
	CLR	A
	ADDC	A,B
	MOV	B,#10
	DIV	AB
	SWAP	A
	ADD	A,B
	DA	A
	RET
HBD2:	MOV	R4,#4
HBD3:	MOV	A,R3
	MOV	B,#10
	MUL	AB
	MOV	R3,A
	MOV	R5,B
	MOV	A,R2
	MOV	B,#10
	MUL	AB
	ADD	A,R5
	MOV	R2,A
	CLR	A
	ADDC	A,B
	PUSH	ACC
	DJNZ	R4,HBD3
	POP	ACC
	MOV	R3,A
	POP	ACC
	SWAP	A
	ORL	A,R3
	MOV	R3,A
	POP	ACC
	MOV	R2,A
	POP	ACC
	SWAP	A
	ORL	A,R2
	MOV	R2,A
	RET
BCDH:	MOV	B,#10H
	DIV	AB
	MOV	R4,B
	MOV	B,#10
	MUL	AB
	ADD	A,R4
	RET
BH2:	MOV	A,R3
	LCALL	BCDH
	MOV	R3,A
	MOV	A,R2
	LCALL	BCDH
	MOV	B,#100
	MUL	AB
	ADD	A,R3
	MOV	R3,A
	CLR	A
	ADDC	A,B
	MOV	R2,A
	RET
BHD:	MOV	R2,#8
BHD0:	ADD	A,ACC
	DA	A
	XCH	A,R3
	RLC	A
	XCH	A,R3
	DJNZ	R2,BHD0
	ADD	A,#0B0H
	JNC	BHD1
	INC	R3
BHD1:	MOV	A,R3
	RET
BHD2:	MOV	R6,#10H
BHD3:	MOV	A,R5
	ADD	A,R5
	DA	A
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DJNZ	R6,BHD3
	MOV	A,R4
	ADD	A,#0B0H
	JNC	BHD4
	INC	R3
	MOV	A,R3
	JNZ	BHD4
	INC	R2
BHD4:	RET
MM:	MOV	B,R7
	MOVX	A,@DPTR
	MOV	R6,A
	MOV	R7,A
	MOV	A,DPL
	MOV	R3,A
	MOV	R5,A
	MOV	A,DPH
	MOV	R2,A
	MOV	R4,A
	MOV	A,B
	DEC	A
	JZ	MME
	MOV	R1,A
	PUSH	DPL
	PUSH	DPH
MM1:	INC	DPTR
	MOVX	A,@DPTR
	MOV	B,A
	SETB	C
	SUBB	A,R6
	JC	MM2
	MOV	R6,B
	MOV	R2,DPH
	MOV	R3,DPL
	SJMP	MM3
MM2:	MOV	A,B
	CLR	C
	SUBB	A,R7
	JNC	MM3
	MOV	R7,B
	MOV	R4,DPH
	MOV	R5,DPL
MM3:	DJNZ	R1,MM1
	POP	DPH
	POP	DPL
MME:	RET
MMS:	MOV	B,R7
	MOVX	A,@DPTR
	MOV	R6,A
	MOV	R7,A
	MOV	A,DPL
	MOV	R3,A
	MOV	R5,A
	MOV	A,DPH
	MOV	R2,A
	MOV	R4,A
	MOV	A,B
	DEC	A
	JZ	MMSE
	MOV	R1,A
	PUSH	DPL
	PUSH	DPH
MMS1:	INC	DPTR
	MOVX	A,@DPTR
	MOV	B,A
	SETB	C
	SUBB	A,R6
	JZ	MMS4
	JNB	OV,MMS2
	CPL	ACC.7
MMS2:	JB	ACC.7,MMS4
	MOV	R6,B
	MOV	R2,DPH
	MOV	R3,DPL
	SJMP	MMS7
MMS4:	MOV	A,B
	CLR	C
	SUBB	A,R7
	JNB	OV,MMS6
	CPL	ACC.7
MMS6:	JNB	ACC.7,MMS7
	MOV	R7,B
	MOV	R4,DPH
	MOV	R5,DPL
MMS7:	DJNZ	R1,MMS1
	POP	DPH
	POP	DPL
MMSE:	RET
FDS1:	MOV	B,A
	MOV	R2,#0
	MOV	A,R7
	MOV	R6,A
FD11:	MOV	A,R2
	MOVC	A,@A+DPTR
	CJNE	A,B,FD12
	CLR	OV
	MOV	A,R2
	RET
FD12:	INC	R2
	DJNZ	R6,FD11
	SETB	OV
	RET
FDS2:	MOV	A,R7
	MOV	R6,A
	MOV	R2,#0
FD21:	CLR	A
	MOVC	A,@A+DPTR
	XRL	A,R4
	JNZ	FD22
	MOV	A,#1
	MOVC	A,@A+DPTR
	XRL	A,R5
	JNZ	FD22
	CLR	OV
	MOV	A,R2
	RET
FD22:	INC	DPTR
	INC	DPTR
	INC	R2
	DJNZ	R6,FD21
	SETB	OV
	RET
FDD1:	MOV	B,A
	MOV	R2,#0
	MOV	A,R7
	DEC	A
	MOV	R3,A
FD61:	CLR	C
	MOV	A,R3
	SUBB	A,R2
	JC	FD69
	RRC	A
	ADD	A,R2
	MOV	R4,A
	MOVC	A,@A+DPTR
	CJNE	A,B,FD65
	CLR	OV
	MOV	A,R4
	RET
FD65:	JC	FD68
	MOV	A,R4
	DEC	A
	MOV	R3,A
	SJMP	FD61
FD68:	MOV	A,R4
	INC	A
	MOV	R2,A
	SJMP	FD61
FD69:	SETB	OV
	RET
FDD2:	MOV	R2,#0
	MOV	A,R7
	DEC	A
	MOV	R3,A
	MOV	R6,DPH
	MOV	R7,DPL
FD81:	CLR	C
	MOV	A,R3
	SUBB	A,R2
	JC	FD89
	RRC	A
	ADD	A,R2
	MOV	R1,A
	MOV	DPH,R6
	CLR	C
	RLC	A
	JNC	FD82
	INC	DPH
FD82:	ADD	A,R7
	MOV	DPL,A
	JNC	FD83
	INC	DPH
FD83:	CLR	A
	MOVC	A,@A+DPTR
	MOV	B,R4
	CJNE	A,B,FD84
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	B,R5
	CJNE	A,B,FD84
	MOV	A,R1
	CLR	OV
	RET
FD84:	JC	FD86
	MOV	A,R1
	DEC	A
	MOV	R3,A
	SJMP	FD81
FD86:	MOV	A,R1
	INC	A
	MOV	R2,A
	SJMP	FD81
FD89:	MOV	DPH,R6
	MOV	DPL,R7
	SETB	OV
	RET
DDM1:	MOV	A,R7
	MOV	R2,A
	PUSH	DPH
	PUSH	DPL
	CLR	A
	MOV	R4,A
	MOV	R5,A
DM11:	MOVX	A,@DPTR
	ADD	A,R5
	MOV	R5,A
	JNC	DM12
	INC	R4
DM12:	INC	DPTR
	DJNZ	R2,DM11
	LCALL	D457
	MOV	A,R3
	POP	DPL
	POP	DPH
	RET
DDM2:	MOV	A,R7
	MOV	R2,A
	PUSH	DPL
	PUSH	DPH
	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
DM20:	MOVX	A,@DPTR
	MOV	B,A
	INC	DPTR
	MOVX	A,@DPTR
	INC	DPTR
	ADD	A,R5
	MOV	R5,A
	MOV	A,B
	ADDC	A,R4
	MOV	R4,A
	JNC	DM21
	INC	R3
DM21:	DJNZ	R2,DM20
	POP	DPH
	POP	DPL
	LJMP	DV31
XR1:	MOV	R4,DPH
	MOV	R5,DPL
	MOV	A,R7
	JZ	XR10
	INC	R6
XR10:	MOV	B,#0
XR11:	MOVX	A,@DPTR
	XRL	B,A
	INC	DPTR
	DJNZ	R7,XR11
	DJNZ	R6,XR11
	MOV	DPH,R4
	MOV	DPL,R5
	MOV	A,B
	RET
XR2:	MOV	R4,DPH
	MOV	R5,DPL
	MOV	A,R7
	JZ	XR20
	INC	R6
XR20:	CLR	A
	MOV	R2,A
	MOV	R3,A
XR21:	MOVX	A,@DPTR
	XRL	A,R2
	MOV	R2,A
	INC	DPTR
	MOVX	A,@DPTR
	XRL	A,R3
	MOV	R3,A
	INC	DPTR
	DJNZ	R7,XR21
	DJNZ	R6,XR21
	MOV	DPH,R4
	MOV	DPL,R5
	RET
SORT:	MOV	A,R7
	MOV	R5,A
SRT1:	CLR	F0
	MOV	A,R5
	DEC	A
	MOV	R5,A
	MOV	R2,A
	JZ	SRT5
	MOV	A,R0
	MOV	R6,A
SRT2:	MOV	A,@R0
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	MOV	R4,A
	CLR	C
	SUBB	A,R3
	JNC	SRT4
	SETB	F0
	MOV	A,R3
	MOV	@R0,A
	DEC	R0
	MOV	A,R4
	MOV	@R0,A
	INC	R0
SRT4:	DJNZ	R2,SRT2
	MOV	A,R6
	MOV	R0,A
	JB	F0,SRT1
SRT5:	RET
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -