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

📄 insert.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;线性插值算法应用实例。
	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	A,#27H	;假设A/D转换结果是27H。
	LCALL	INSERT	;用线性插值算法求对应物理量的精确值。
	NOP		;结果在R2R3中( 2569H )。
	NOP
	MOV	A,#83H	;假设A/D转换结果是83H。
	LCALL	INSERT	;用线性插值算法求对应物理量的精确值。
	NOP		;结果在R2R3中( 32D2H )。
	NOP
	MOV	A,#0DEH	;假设A/D转换结果是0DEH。
	LCALL	INSERT	;用线性插值算法求对应物理量的精确值。
	NOP		;结果在R2R3中( 4166H )。
	NOP
STOP:	LJMP	STOP

INSERT:	MOV	DPTR,#LIST;指向表格首址。
	MOV	B,A	;保持A/D转换结果。
	ANL	A,#0FH	;取第四位,得到区间内偏移量(x-x0)。
	MOV	R7,A	;保持偏移量。
	MOV	A,B	;取A/D转换结果。
	SWAP	A	;取高四位。
	ANL	A,#0FH	;得到区间起始节点的序号。
	CLR	C
	RLC	A	;每个节点为两个字节。
	ADD	A,DPL	;计算起始节点的地址。
	MOV	DPL,A
	JNC	INSE
	INC	DPH
INSE:	CLR	A	;读区间取起始节点对应的y0,存放在R2R3中。
	MOVC	A,@A+DPTR
	MOV	R2,A
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	R3,A
	MOV	A,#2	;读取区间末端节点对应的y1,存放在R4R5中。
	MOVC	A,@A+DPTR
	MOV	R4,A
	MOV	A,#3
	MOVC	A,@A+DPTR
	CLR	C	;计算区间增量(y1 -y0),存放在R4R5中。
	SUBB	A,R3
	MOV	R5,A
	MOV	A,R4
	SUBB	A,R2
	MOV	R4,A
	MOV	A,R5	;计算(y1 -y0)×(x -x0),存放在R4R5R6中。
	MOV	B,R7
	MUL	AB
	MOV	R5,B
	MOV	R6,A
	MOV	A,R4
	MOV	B,R7
	MUL	AB
	ADD	A,R5
	MOV	R5,A
	CLR	A
	ADDC	A,B
	SWAP	A	;用高低四位交换组合完成除于10H的算法。
	MOV	R4,A	;R4R5R6÷(x1 -x0),存放在R4R5中。
	MOV	A,R5
	SWAP	A
	MOV	R5,A
	ANL	A,#0FH
	ORL	A,R4
	MOV	R4,A
	MOV	A,R5
	ANL	A,#0F0H
	MOV	R5,A
	MOV	A,R6
	SWAP	A
	ANL	A,#0FH
	ORL	A,R5
	ADD	A,R3	;加上y0,得到最后计算结果,存放在R2R3中。
	MOV	R3,A
	MOV	A,R4
	ADDC	A,R2
	MOV	R2,A
	RET

LIST:	DB	20H,00H		;表格,包含17个双字节数据。
	DB	22H,36H
	DB	24H,6FH
	DB	26H,0ACH
	DB	28H,0F0H
	DB	2BH,3CH
	DB	2DH,91H
	DB	2FH,0F1H
	DB	32H,5CH
	DB	34H,0D3H
	DB	37H,55H
	DB	39H,0E2H
	DB	3CH,78H
	DB	3FH,16H
	DB	41H,0BBH
	DB	44H,64H
	DB	47H,10H
	END

⌨️ 快捷键说明

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