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

📄 chengxu.asm

📁 水泥窑自动配料系统
💻 ASM
字号:
目录
一 数据采样与处理………………………………………………………………1
二 键盘接口………………………………………………………………………8




一 数据采样与处理
;采样模拟信号
PR?ADC	SEGMENT	CODE
	RSEG	PR?ADC
	
ADCN:	MOV	R7,#0		;通道号初始化
	MOV	R0,#CYN		;#CYN(采样值存放首地址44H~47H,四字节,十六进制)
ADC1:	MOV	R1,#ADADR	;#ADADR(A/D的通道号地址低字节50H)
	MOV	A,R7		;通道号
	MOVX	@R1,A
	MOV	R6,#10
ADC2:	DJNZ	R6,ADC2		;延时
	INC	R1		;A/D的数据口地址低字节51H
ADC3:	MOVX	A,@R1
	JB	ACC.7,ADC3	;转换结束吗?
	MOVX	A,@R1
	ANL	A,#0FH		;取12位
	MOV	R2,A
	DEC	R1
	MOVX	A,@R1
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	ADD	A,R3
	MOV	R3,A
	DEC	R0
	MOV	A,@R0
	ADDC	A,R2
	RRC	A		;算术平均滤波
	MOV	@R0,A
	INC	R0
	MOV	A,R3
	RRC	A
	MOV	@R0,A
	INC	R0
	INC	R7
	CJNE	R7,#2,ADC1
	MOV	R0,#CYN		;计算两个毛重值
	MOV	R1,#MZN		;#MZN(毛重,四字节58H,BCD码,Kg)
	MOV	B,LC1		;LC1(生料量程代码存放单元25H,单字节,十六进制)
	LCALL	CYTOKG
	MOV	R0,#CYN+2
	MOV	R1,#MZN+2
	MOV	B,LC2
	LCALL	CYTOKG
	MOV	R0,#CYN		;计算两个净重值
	MOV	R1,#JZN		;JZN(静重存放单元5CH,四字节,BCD码,Kg)
	MOV	R2,PZN		;PZN(皮重存放单元48H,四字节,十六进制)
	MOV	R3,PZN+1
	MOV	B,LC1
	LCALL	JZTOKG
	MOV	R0,#CYN+2
	MOV	R1,#JZN+2
	MOV	R2,PZN+2
	MOV	R3,PZN+3
	MOV	B,LC2
JZTOKG:	INC	R0		;计算净重值
	MOV	A,@R0
	CLR	C
	SUBB	A,R3		;减去皮重
	MOV	R5,A
	DEC	R0
	MOV	A,@R0
	SUBB	A,R2
	MOV	R4,A
	JNC	CYTOKG0
	CLR	A		;净重值不为负值
	MOV	R6,A
	MOV	R7,A
	SJMP	CYTOKG9

;采样值转换为重量(采样值在[R0]中,量程代码在B中,重量结果在[R1]中)
CYTOKG:	MOV	A,@R0
	MOV	R4,A
	INC	R0
	MOV	A,@R0
	MOV	R5,A
CYTOKG0:MOV	A,B		;量程代码
	JNZ	CTOK0
	LCALL	X3		;量程1400:乘3
	MOV	B,#3		;除8
	SJMP	CYTOKG2
CTOK0:	CJNE	A,#1,CYTOKG1
	MOV	B,#2		;除4
	SJMP	CYTOKG2
CYTOKG1:CJNE	A,#2,CYTOKG2
	LCALL	X3		;量程650:乘3
	MOV	B,#4		;除16
CYTOKG2:MOV	A,B
	CJNE	A,#4,CYTOKG3
	LCALL	CTOK4
	SJMP	CYTOKG8
CYTOKG3:CJNE	A,#5,CYTOKG4
	LCALL	CTOK4
	MOV	B,#1
	SJMP	CYTOKG6
CYTOKG4:CJNE	A,#6,CYTOKG5
	LCALL	CTOK4
	MOV	B,#2
	SJMP	CYTOKG6
CYTOKG5:CJNE	A,#7,CYTOKG6
	MOV	A,R5
	RLC	A
	MOV	A,R4
	RLC	A
	MOV	R5,A
	CLR	A
	RLC	A
	MOV	R4,A
	SJMP	CYTOKG8
CYTOKG6:CLR	C
	MOV	A,R4
	RRC	A
	MOV	R4,A
	MOV	A,R5
	RRC	A
	MOV	R5,A
	DJNZ	B,CYTOKG2
CYTOKG8:LCALL	HBCD
CYTOKG9:MOV	A,R6		;保存结果
	MOV	@R1,A
	INC	R1
	MOV	A,R7
	MOV	@R1,A
	RET

CTOK4:	MOV	A,R4
	SWAP	A
	ANL	A,#0FH
	XCH	A,R4
	SWAP	A
	ANL	A,#0F0H
	XCH	A,R5
	SWAP	A
	ANL	A,#0FH
	ORL	A,R5
	MOV	R5,A
	RET

X3:	MOV	A,R5		;R4R5×3
	MOV	B,#3
	MUL	AB
	MOV	R5,A
	MOV	A,B
	XCH	A,R4
	MOV	B,#3
	MUL	AB
	ADD	A,R4
	MOV	R4,A
	RET

HBCD:	CLR	A		;十六进制R4R5转换为十进制R6R7
	MOV	R6,A
	MOV	R7,A
	MOV	R2,#10H		;2字节,16位
HBCD1:	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R7
	ADDC	A,R7
	DA	A
	MOV	R7,A
	MOV	A,R6
	ADDC	A,R6
	DA	A
	MOV	R6,A
	DJNZ	R2,HBCD1
	RET

;配方和落差数据格式转换
CHGPF:	CLR	PFYX		;标志初始化
	MOV	R0,#PFN
	MOV	R1,#PFHN
	MOV	B,LC1
	LCALL	KGTOCY
	MOV	R0,#PFN+2
	MOV	R1,#PFHN+2
	MOV	B,LC2
	LCALL	KGTOCY
	MOV	R0,#LCAN
	MOV	R1,#LCN
	MOV	B,LC1
	LCALL	KGTOCY
	MOV	R0,#LCAN+2
	MOV	R1,#LCN+2
	MOV	B,LC2
	LCALL	KGTOCY
	MOV	A,PFN		;生料配方数据不能为零
	ORL	A,PFN+1
	JZ	CHGPFE
	MOV	A,PFHN		;生料配方数据不能接近或超过量程
	ADD	A,#0F1H
	JC	CHGPFE
	MOV	A,LCN		;生料落差数据不能超过量程的四分之一
	ADD	A,#0FCH
	JC	CHGPFE
	MOV	A,PFN+2		;焦粉配方数据不能为零
	ORL	A,PFN+3
	JZ	CHGPFE
	MOV	A,PFHN+2	;焦粉配方数据不能接近或超过量程
	ADD	A,#0F1H
	JC	CHGPFE
	MOV	A,LCN+2		;焦粉落差数据不能超过量程的四分之一
	ADD	A,#0FCH
	JC	CHGPFE
CHGPF2:	SETB	PFYX		;配方有效
CHGPFE:	RET


;重量转换为采样值(重量在[R0]中,量程代码在B中,采样值结果在[R1]中)
KGTOCY:	PUSH	B
	MOV	A,@R0
	MOV	R4,A
	INC	R0
	MOV	A,@R0
	MOV	R5,A
	LCALL	BCDH2		;
	POP	B		;量程代码
	PUSH	B
	MOV	A,B
	JNZ	KGTOCY0
	MOV	B,#3		;乘8
	SJMP	KGTOCY2
KGTOCY0:CJNE	A,#1,KGTOCY1
	MOV	B,#2		;乘4
	SJMP	KGTOCY2
KGTOCY1:CJNE	A,#2,KGTOCY2
	MOV	B,#4		;乘16
KGTOCY2:MOV	A,B
	CJNE	A,#4,KGTOCY3
	LCALL	KTOC4
	SJMP	KGTOCY7
KGTOCY3:CJNE	A,#5,KGTOCY4
	LCALL	KTOC4
	MOV	B,#1
	SJMP	KGTOCY6
KGTOCY4:CJNE	A,#6,KGTOCY5
	LCALL	KTOC4
	MOV	B,#2
	SJMP	KGTOCY6
KGTOCY5:CJNE	A,#7,KGTOCY6
	MOV	A,R4
	RRC	A
	MOV	A,R5
	RRC	A
	MOV	R4,A
	CLR	A
	RRC	A
	MOV	R5,A
	SJMP	KGTOCY7
KGTOCY6:CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	DJNZ	B,KGTOCY2
KGTOCY7:POP	ACC
	JNZ	KGTOCY8
	LCALL	D3
	SJMP	KGTOCY9
KGTOCY8:CJNE	A,#2,KGTOCY9
	LCALL	D3
KGTOCY9:MOV	A,R4		;保存结果
	MOV	@R1,A
	INC	R1
	MOV	A,R5
	MOV	@R1,A
	RET

KTOC4:	MOV	A,R5
	SWAP	A
	ANL	A,#0F0H
	XCH	A,R5
	SWAP	A
	ANL	A,#0FH
	XCH	A,R4
	SWAP	A
	ANL	A,#0F0H
	ORL	A,R4
	MOV	R4,A
	RET

;R4R5/3-->R4R5
D3:	MOV	A,R5
	MOV	R3,A
	MOV	A,R4
	MOV	R2,A
	MOV	B,#85
	MUL	AB
	MOV	R4,B
	MOV	R5,A
	MOV	A,R2
	ADD	A,R3
	MOV	R3,A
	JNC	D33
	MOV	A,#85
	LCALL	D34
	INC	R3
D33:	MOV	A,R3
	MOV	B,#3
	DIV	AB
D34:	ADD	A,R5
	MOV	R5,A
	JNC	D35
	INC	R4
D35:	RET

;BCD(R4R5)-->HEX(R4R5)
BCDH2:	MOV	A,R5
	LCALL	BCDH
	MOV	R5,A
	MOV	A,R4
	LCALL	BCDH
	MOV	B,#100
	MUL	AB
	ADD	A,R5
	MOV	R5,A
	CLR	A
	ADDC	A,B
	MOV	R4,A
	RET
BCDH:	MOV	B,#10H
	DIV	AB
	MOV	R2,B
	MOV	B,#10
	MUL	AB
	ADD	A,R2
	RET
	END
二 键盘接口
;与键盘相关的子程序
PR?KEY	SEGMENT	CODE
	RSEG	PR?KEY

INITKEY:MOV	R2,#0		;清键盘缓冲区
	MOV	P2,#0FFH	;指向键盘地址的高字节
	MOV	R1,#KEYDAT	;#KEYDAT(键盘数据口低字节9EH)
CLRKEY:	MOVX	A,@R1
	DJNZ	R2,CLRKEY
	RET

;读键模块
INKEY:	MOV	R1,#KEYZT	;键盘状态口,KEYZT(键盘状态口低字节9CH)
	MOVX	A,@R1
	JB	ACC.0,INKEY1
	MOV	A,#0FFH		;未按键
	RET
INKEY1:	MOV	R1,#KEYDAT	;键盘数据口
	MOVX	A,@R1
	JB	ACC.7,INKEY	;无效码,重新读键
	MOV	DPTR,#KCOD
	MOV	B,A
	MOV	R2,#0FFH
INKEY2:	INC	R2
	MOV	A,R2
	MOVC	A,@A+DPTR
	CJNE	A,#0FFH,INKEY3
	RET
INKEY3:	CJNE	A,B,INKEY2
	MOV	A,R2
	RET
KCOD:	DB	0BH,02H,03H,04,05H	;0,1,2,3,4
	DB	06H,07H,08H,09H,0AH	;5,6,7,8,9
	DB	1CH,01H,48H,50H,4BH,4DH	;回车(0AH),Esc(0BH),上(0CH),下(0DH),左(0EH),右(0FH)
	DB	39H,3BH,3CH,3DH,3EH,3FH	;Pass(10H),F1(11H),F2(12H),F3(13H),F4(14H),F5(15H)
	DB	40H,41H,42H,0FH,0EH,0FFH;F6(16H),F7(17H),F8(18H),Tab(19H),Back(1AH)

;"上"键
UP:	MOV	A,XXH
	ADD	A,GBYMAX
	DEC	A
	MOV	B,GBYMAX
	DIV	AB
	MOV	XXH,B
	RET

;"下"键
DOWN:	MOV	A,XXH
	INC	A
	MOV	B,GBYMAX
	DIV	AB
	MOV	XXH,B
	RET

;"左"键
LEFT:	MOV	A,XXV
	ADD	A,GBXMAX
	DEC	A
	MOV	B,GBXMAX
	DIV	AB
	MOV	XXV,B
	RET

;"右"键
RIGHT:	MOV	A,XXV
	INC	A
	MOV	B,GBXMAX
	DIV	AB
	MOV	XXV,B
	RET

;初始化输入状态
ININIT:	CLR	A
	MOV	INBUF,A
	MOV	INBUF+1,A
	MOV	INBUF+2,A
	MOV	INBUF+3,A
	SETB	INP
	RET

;更新配方数据
SAVEPF:	MOV	A,INBUF
	SWAP	A
	ORL	A,INBUF+1
	MOV	R2,A
	MOV	A,INBUF+2
	SWAP	A
	ORL	A,INBUF+3
	MOV	R3,A
	MOV	A,XXH
	JNZ	SAVELC
	MOV	A,XXV
	RL	A
	ADD	A,#PFN
	MOV	R0,A
	MOV	A,R2
	MOV	@R0,A
	MOV	A,R3
	INC	R0
	MOV	@R0,A
	RET
SAVELC:	MOV	A,XXV
	RL	A
	ADD	A,#LCAN
	MOV	R0,A
	MOV	A,R2
	MOV	@R0,A
	INC	R0
	MOV	A,R3
	MOV	@R0,A
	RET	

SAVETJ:	MOV	A,XXH
	ADD	A,#TIMES
	MOV	R0,A
	MOV	A,INBUF+2
	MOV	B,#10
	MUL	AB
	ADD	A,INBUF+3
	MOV	R2,A
	MOV	A,INBUF+1
	MOV	B,#100
	MUL	AB
	ADD	A,R2
	MOV	@R0,A
	RET

;更任务数据
SAVERW:	MOV	A,INBUF
	SWAP	A
	ORL	A,INBUF+1
	MOV	R2,A
	MOV	A,INBUF+2
	SWAP	A
	ORL	A,INBUF+3
	MOV	R3,A
	MOV	A,XXH
	JNZ	SAVEDS
	MOV	R0,#RWCS
	MOV	R1,#RWDS
	CLR	RWBZ		;任务次数
	SJMP	SAVEE
SAVEDS:	MOV	R0,#RWDS
	MOV	R1,#RWCS
	SETB	RWBZ		;任务吨数
SAVEE:	MOV	A,R2
	MOV	@R0,A
	INC	R0
	MOV	A,R3
	MOV	@R0,A
	MOV	A,#0DDH
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
	RET

	END
 

⌨️ 快捷键说明

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