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

📄 insert.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;单字节表格的插入算法
FRONT	EQU	40H		;表格首址。
MAX	DATA	30H		;元素个数最大值存放单元。
NUMB	DATA	31H		;已有元素个数存放单元。
I	DATA	32H		;待插入元素的序号存放单元。
X	DATA	33H		;待插入元素的数值存放单元。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	MAX,#10H	;数据设定:最多16个元素
	MOV	NUMB,#0DH	;已经有13个数据
	MOV	DPTR,#DAT	;设置单字节表格
	MOV	R0,#FRONT
	MOV	R2,#16
COPY:	CLR	A
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,COPY
	MOV	I,#0AH		;准备插入位置序号为10
	MOV	X,#5AH		;准备插入的数据为90
	LCALL	INSERT		;调用插入算法
STOP:	LJMP	STOP
DAT:	DB	53H,87H,12H,9AH
	DB	2FH,3CH,0A8H,0BCH
	DB	37H,15H,8EH,0F2H
	DB	0C3H,0,0,0

INSERT:	SETB	C		;计算MAX-NUMB-1
	MOV	A,MAX
	SUBB	A,NUMB		;表格满否?
	JC	INSEND		;表格已满,插入失败。
	MOV	A,#FRONT	;取表格首址。
	ADD	A,I		;加偏移量。
	MOV	R0,A		;得到插入的实际地址。
	MOV	A,NUMB		;插入位置超出范围否?
	SUBB	A,I
	JC	INSEND		;位置不合理,插入失败。
	JZ	INST		;不需要移动元素。
	MOV	R2,A		;保存需要移动元素的个数。
	ADD	A,R0
	MOV	R0,A		;指向新表尾位置。
MOVS:	DEC	R0
	MOV	A,@R0		;取一个元素。
	INC	R0
	MOV	@R0,A		;后移一个位置。
	DEC	R0		;调整指针。
	DJNZ	R2,MOVS		;移完需要移动的元素。
INST:	MOV	A,X		;取待插入元素的数值。
	MOV	@R0,A		;插入到指定位置。
	INC	NUMB		;元素个数加一。
	CLR	C		;插入成功。
INSEND:	RET			;算法结束。
	END


⌨️ 快捷键说明

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