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

📄 08ndj.asm

📁 本程序里包含MAX7219 X5045 TLC1549 等应用软件 汇编文件
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	MOV	R3,#0		;键值初始化
KY1_3:	CLR	A
	MOVC	A,@A+DPTR
	CJNE	A,DSRAM,KY1_1	;与设定键值不相等吗?
	SJMP	KY1_2
KY1_1:	INC	R3		;调整键值
	INC	DPTR		;调整键值表指针
	DJNZ	R2,KY1_3
	SJMP	KY5
KY1_2:	MOV	A,R3		;取键值
	JNB	PSW.5,KY2	;不是P2口键吗?
	ADD	A,#8		;调整键值	

KY2:	JB 	20H.3,KY4	;有键按下标志吗?
	MOV 	RKEY,A		;存键值
	SETB 	20H.3		;置有键按下标志
	MOV	TKEY,#10	;4ms*10=40ms
	SJMP 	KY3
KY4:	CJNE 	A,RKEY,KY5	;是抖动吗?
	SJMP 	KY3
KY5:	CLR 	20H.3		;清有键按下标志
KY3:	RET

;-------------TLC5615输出子程序--------------------
DA5615:	CLR	CK5615		;CLK置低
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR	CS5615		;CS有效
	MOV	R0,#DSRAM	;取数据低位单元地址(DSRAM+1,DSRAM)
	MOV	R2,#16		;16位数据
DA_1:	MOV	A,@R0		;串行左移(高位在前,低位在后)
	RLC	A
	MOV	@R0,A
	INC	R0
	MOV	A,@R0
	RLC	A
	MOV	@R0,A
	MOV	DI5615,C	;送出有效数据位
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB	CK5615		;发脉冲
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR	CK5615
	NOP
	NOP
	NOP
	NOP
	DEC	R0		;恢复R0地址
	DJNZ	R2,DA_1
	SETB	CS5615		;退出DA
	NOP
	NOP
	SETB	CK5615
	RET

;-------------DA转换程序---------------
DAZH:	MOV	R6,RAMDA+1
	MOV	R5,RAMDA
	MOV	R2,#2
DAZH1:	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5
	RLC	A
	MOV	R5,A
	DJNZ	R2,DAZH1

	MOV	A,R5
	ANL	A,#0FH	
	MOV	DSRAM+1,A	;存高位
	MOV	A,R6
	ANL	A,#0FCH
	MOV	DSRAM,A		;低位
	LCALL	DA5615		;DA转换
	RET

;---------有关TLC1549芯片子程序---------
CY549:	CLR	CK549		;时钟置低
	MOV	RAMAD,#0	;AD单元清0(RAMAD,RAMAD+1)
	MOV	RAMAD+1,#0
	MOV	R2,#10
	CLR	CS549		;置片选有效
	NOP
	NOP
	NOP
	NOP
	MOV	C,DA549		;取数据
	MOV	A,RAMAD+1
	RLC	A
	MOV	RAMAD+1,A
	MOV	A,RAMAD
	RLC	A
	MOV	RAMAD,A
	DEC	R2
	
C549_1:	SETB	CK549		;发脉冲
	NOP
	NOP
	NOP
	NOP
	CLR	CK549
	NOP
	NOP
	NOP
	NOP
	MOV	C,DA549		;取数据
	MOV	A,RAMAD+1
	RLC	A
	MOV	RAMAD+1,A
	MOV	A,RAMAD
	RLC	A
	MOV	RAMAD,A
	DJNZ	R2,C549_1
	SETB	CK549		;发脉冲
	NOP
	NOP
	NOP
	NOP
	CLR	CK549
	NOP
	NOP
	NOP
	NOP

	SETB	CS549		;置片选无效
	NOP
	NOP
	SETB	CK549
	MOV	A,RAMAD+1	;数据取反
	CPL	A
	MOV	RAMAD+1,A
	MOV	A,RAMAD
	CPL	A
	ANL	A,#03H
	MOV	RAMAD,A	
	RET

;------------采样处理---------------
CYCL:	LCALL	CY549		;采样
CYCL2:	MOV	DSRAM,RAMAD	;存放AD值
	MOV	DSRAM+1,RAMAD+1
	MOV	R2,#40H
CYCL1:	DJNZ	R2,CYCL1	;延时
	LCALL	CY549		;采样
	MOV	A,RAMAD
	CJNE	A,DSRAM,CYCL2	;两次不等吗?
	MOV	A,RAMAD+1
	CJNE	A,DSRAM+1,CYCL2

	JB	20H.5,CYCL3	;不是首次采样吗?
	MOV	R2,#4
	MOV	R0,#30H		;保存AD值
CYCL7:	MOV	@R0,RAMAD
	INC	R0
	MOV	@R0,RAMAD+1
	INC	R0
	DJNZ	R2,CYCL7
	SETB	20H.5		;置非首次采样标志
	SJMP	CYCL4
CYCL3:	MOV	R2,#6
	MOV	R0,#37H		;移出旧AD,存放新AD
	MOV	R1,#35H
CYCL8:	MOV	A,@R1
	MOV	@R0,A
	DEC	R0
	DEC	R1
	DJNZ	R2,CYCL8
	MOV	31H,RAMAD+1
	MOV	30H,RAMAD

CYCL4:	MOV	DSRAM,#0	;求新的AD累加和->DSRAM,DARAM+1
	MOV	DSRAM+1,#0
	MOV	R2,#4
	MOV	R0,#37H
CYCL5:	MOV	A,@R0
	ADD	A,DSRAM+1
	MOV	DSRAM+1,A
	DEC	R0
	MOV	A,@R0
	ADDC	A,DSRAM
	MOV	DSRAM,A
	DEC	R0
	DJNZ	R2,CYCL5
	CLR	C		;除2
	MOV	A,DSRAM
	RRC	A
	MOV	DSRAM,A
	MOV	A,DSRAM+1
	RRC	A
	MOV	DSRAM+1,A
	CLR	C		;除4
	MOV	A,DSRAM
	RRC	A
	MOV	DSRAM,A
	MOV	A,DSRAM+1
	RRC	A
	MOV	DSRAM+1,A
	
	MOV	R0,DSRAM	;求现在值
	MOV	R1,DSRAM+1
	MOV	R2,#CN1		;取比例系数
	MOV	R3,#CN2
	LCALL	MML
	MOV	XZRAM,R4	;存现在值
	MOV	XZRAM+1,R5
	JNB	D25,CYCL6	;无显现在值指示吗?
	LCALL	XXZZ		;显现在值
	
;------------比较处理-------------
CYCL6:	MOV	RLED1,#0	;指示灯D1-D24状态清0
	MOV	RLED2,#0	
	MOV	RLED3,#0
	CLR	21H.4		;清不控制标志

	CALL	BJCX		;调比较大小子程序(u=|现在值-设定值|)
	JB	PSW.5,DCL	;有负标志吗?
	LJMP	NCL		;转浓处理

;-----淡处理
DCL:	SETB	OUT7		;关闭过浓输出
	JB	D31,DCL1	;是手动吗?
	SETB	OUT3		;关闭给水输出
	CLR	D30		;灭给水指示
DCL1:	CJNE	R2,#0,DCL2	;高位不为0吗?(过淡)
	CJNE	R3,#5,DCL11
DCL111:	LJMP	ZCCL		;=5,则转正常处理	
DCL11:	JC	DCL111		;<5吗?
	CJNE	R3,#10,DCL12
	SJMP	DCL3		;=10
DCL12:	JC	DCL3		;<10吗?	
	CJNE	R3,#20,DCL13
	SJMP	DCL4		;=15
DCL13:	JC	DCL4		;<15吗?	
	CJNE	R3,#30,DCL14
	SJMP	DCL5		;=20
DCL14:	JC	DCL5		;<20吗?
	CJNE	R3,#40,DCL15
	SJMP	DCL6		;=25
DCL15:	JC	DCL6		;<25吗?
	CJNE	R3,#50,DCL16
	SJMP	DCL7		;=30
DCL16:	JC	DCL7		;<30吗?

DCL2:	SETB	D23		;点亮D24,D23(u<-30)
	SETB	D24
	JB	D31,DCL21	;是手动吗?
	CLR	OUT4		;开启排水输出
	SETB	D29		;点亮排水指示
	SETB	21H.4		;置不控制标志
DCL21:	SJMP	ADBJ91

DCL3:	SETB	D13		;点亮D14,D13(-10<=u<-5)
	SETB	D14
	SETB    21H.6     
	SETB	OUT4		;清排水输出
	CLR	D29		;清排水显示
	SETB	OUT3		;清给水输出
	CLR	D30		;清给水显示
	MOV	22H,#0		;清DA标志
	MOV	23H,#0
ADBJ61:	SETB	OUT6		;清过淡输出
	LJMP	ADBJ42          ;+++++++++++++++++++++++

DCL4:	SETB	D15		;点亮D16,D15(-15<=u<-10)
	SETB	D16
	SJMP	ADBJ61

DCL5:	SETB	D17		;点亮D18,D17(-20<=u<-15)
	SETB	D18
	SJMP	ADBJ61

DCL6:	SETB	D19		;点亮D20,D19(-25<=u<-20)
	SETB	D20
	LJMP    ADBJB3	
ADBJ91:	JNB	D27,ADBJ92	;无声音标志吗?
	CLR	OUT6		;置过淡输出
ADBJ92:	LJMP	ADBJB1

DCL7:	SETB	D21		;点亮D22,D21(-30<=u<-25)
	SETB	D22
	SJMP	ADBJ91

;-----浓处理
NCL:	SETB	OUT6		;关闭过淡输出
	JB	D31,NCL1	;是手动吗?
	SETB	OUT4		;关闭排水输出
	CLR	D29		;灭排水指示
NCL1:	CJNE	R2,#0,NCL2	;高位不为0吗?(过浓)
	CJNE	R3,#5,NCL11
NCL111:	LJMP	ZCCL		;=5,则转正常处理	
NCL11:	JC	NCL111		;<5吗?
	CJNE	R3,#10,NCL12
	SJMP	NCL3		;=10
NCL12:	JC	NCL3		;<10吗?	
	CJNE	R3,#20,NCL13
	SJMP	NCL4		;=15
NCL13:	JC	NCL4		;<15吗?	
	CJNE	R3,#30,NCL14
	SJMP	NCL5		;=20
NCL14:	JC	NCL5		;<20吗?
	CJNE	R3,#40,NCL15
	SJMP	NCL6		;=25
NCL15:	JC	NCL6		;<25吗?
	CJNE	R3,#50,NCL16
	SJMP	NCL7		;=30
NCL16:	JC	NCL7		;<30吗?

NCL2:	SETB	D1		;点亮D2,D1(u>30)
	SETB	D2
	JB	D31,NCL21	;是手动吗?
	CLR	OUT3		;开启给水输出
	SETB	D30		;点亮给水指示
	SETB	21H.4		;置不控制标志
NCL21:	SJMP	ADBJB1

NCL3:	SETB	D11		;点亮D12,D11(5<u<=10)
	SETB	D12
	SETB    21H.6           ;
	SETB	OUT4		;清排水输出
	CLR	D29		;清排水显示
	SETB	OUT3		;清给水输出
	CLR	D30		;清给水显示
	MOV	22H,#0		;清DA标志
	MOV	23H,#0
	SJMP	ADBJ41

NCL4:	SETB	D9		;点亮D10,D9(10<u<=15)
	SETB	D10
ADBJ41:	SETB	OUT7		;清过浓输出
ADBJ42:	SETB	OUT2		;清烧饼控制
	SETB	OUT5		;清蜂鸣输出
	LJMP	ADBJD

NCL5:	SETB	D7		;;点亮D8,D7(15<u<=20)
	SETB	D8
	SJMP	ADBJ41

NCL6:	SETB	D5		;点亮D6,D5(20<u<=25)
	SETB	D6
	SJMP    ADBJB3          	
ADBJB1:	JNB	D27,ADBJB2	;无声音标志吗?
	CLR	OUT7		;置过浓输出
ADBJB2:	CLR	OUT2		;置烧饼控制
	JNB	D28,ADBJB3	;无蜂鸣标志吗?
	CLR	OUT5		;置蜂鸣输出
ADBJB3:	SJMP	ADBJD

NCL7:	SETB	D3		;点亮D4,D3(25<u<=30)
	SETB	D4
	SJMP	ADBJB1
		
;----正常处理
ZCCL:	SETB	D12		;点亮D13,D12(-5<=u<=5)
	SETB	D13
	MOV	22H,#0		;清DA标志
	MOV	23H,#0
	JB	D31,ZCCL1	;是手动吗?
	SETB	OUT4		;清排水输出
	CLR	D29		;清排水显示
	SETB	OUT3		;清给水输出
	CLR	D30		;清给水显示
	SETB	21H.4		;置不控制标志
ZCCL1:	SETB	OUT6		;清过淡输出
	SJMP	ADBJ41
ADBJD:	LCALL	LAMP		;指示灯更新

	JB	21H.3,DACL	;有DA正常转换标志吗?
	LJMP	EDCL

;----DA处理
DACL:	JNB	D24,DACL1	;不是'+100'吗?
	JB	23H.6,EDCL1	;有'+100'标志吗?
	MOV	22H,#00000111B		;清DA标志
	MOV	23H,#10000000B
	MOV	RTEMP,#100
	SETB	23H.6		;置'+100'标志
	SJMP	EDDA1

DACL1:	JNB	D22,DACL2	;不是'+50'吗?
	JB	23H.7,EDCL1	;有'+50'标志吗?
	MOV	22H,#00000111B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#50
	SETB	23H.7		;置'+50'标志
	SJMP	EDDA1

DACL2:	JNB	D20,DACL3	;不是'+20'吗?
	JB	22H.0,EDCL1	;有'+20'标志吗?
	MOV	22H,#00000011B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#20
	SETB	22H.0		;置'+20'标志
	SJMP	EDDA1

DACL3:	JNB	D18,DACL4	;不是'+10'吗?
	JB	22H.1,EDCL1	;有'+10'标志吗?
	MOV	22H,#00000011B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#10
	SETB	22H.1		;置'+10'标志
	SJMP	EDDA1

DACL4:	JNB	D16,DACL5	;不是'+5'吗?
	JB	22H.2,EDCL1	;有'+5'标志吗?
	MOV	22H,#0		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#5
	SETB	22H.2		;置'+5'标志

EDDA1:	MOV	A,RAMDA+1	;执行加法
	ADD	A,RTEMP
	MOV	RAMDA+1,A
	MOV	A,RAMDA
	ADDC	A,#0
	MOV	RAMDA,A
	CJNE	A,#02H,EDDA11
EDDA11:	JC	EDCL2
	MOV	RAMDA,#01H
	MOV	RAMDA+1,#0FFH
EDCL2:	LCALL	DAZH		;DA转换
EDCL1:	SJMP	EDCL

DACL5:	JNB	D9,DACL6	;不是'-5'吗?
	JB	22H.3,EDCL	;有'-5'标志吗?
	MOV	22H,#0		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#5
	SETB	22H.3		;置'-5'标志
	SJMP	EDDA2

DACL6:	JNB	D7,DACL7	;不是'-10'吗?
	JB	22H.4,EDCL	;有'-10'标志吗?
	MOV	22H,#00001000B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#10
	SETB	22H.4		;置'-10'标志
	SJMP	EDDA2

DACL7:	JNB	D5,DACL8	;不是'-20'吗?
	JB	22H.5,EDCL	;有'-20'标志吗?
	MOV	22H,#00011000B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#20
	SETB	22H.5		;置'-20'标志
	SJMP	EDDA2

DACL8:	JNB	D3,DACL9	;不是'-50'吗?
	JB	22H.6,EDCL	;有'-50'标志吗?
	MOV	22H,#00111000B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#50
	SETB	22H.6		;置'-50'标志
	SJMP	EDDA2

DACL9:	JNB	D1,DACLA	;不是'-100'吗?
	JB	22H.7,EDCL	;有'-100'标志吗?
	MOV	22H,#01111000B		;清DA标志
	MOV	23H,#0
	MOV	RTEMP,#100
	SETB	22H.7		;置'-100'标志

EDDA2:	CLR	C		;执行减法
	MOV	A,RAMDA+1	
	SUBB	A,RTEMP
	MOV	RAMDA+1,A
	MOV	A,RAMDA
	SUBB	A,#0
	MOV	RAMDA,A
	JNC	EDDA21
	MOV	RAMDA,#0
	MOV	RAMDA+1,#0
EDDA21:	SJMP	EDCL2

DACLA:	MOV	22H,#0		;清DA标志
	MOV	23H,#0	

EDCL:	CLR	20H.6		;清采样标志
	RET

;--------------调比较子程序1-----------------
BJCX:	CLR	PSW.5		;清负标志
	CLR	C		;求|现在值-设定值|->R2R3
	MOV	A,XZRAM+1	;取现在值
	SUBB	A,SDRAM2+1	;减设定值
	MOV	R3,A
	MOV	A,XZRAM
	SUBB	A,SDRAM2
	MOV	R2,A
	JNC	BJCX1		;现在值>=设定值吗?

	SETB	PSW.5		;置负标志
	CLR	C		;求绝对值
	MOV	A,#0
	SUBB	A,R3
	MOV	R3,A
	MOV	A,#0
	SUBB	A,R2
	MOV	R2,A
BJCX1:	RET	

⌨️ 快捷键说明

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