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

📄 温湿度读取及报警多机通信差拨号自动复位3.asm

📁 温湿度控制器(485通讯),开关量输出.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	ORG	00H
	LJMP	PROG
	ORG	000BH
	LJMP	TIME_0_SRV
	ORG	0013H
	LJMP	INT_1_SRV
	ORG	0023H
	LJMP	SE485
	ORG	040H
PROG:	MOV	TMOD,#21H	;定时器工作方式
	MOV	TH1,#0FDH
	MOV	TL1,#0FDH
	MOV	TH0,#0DCH
	MOV	TL0,#00H
	MOV	SCON,#0F0H
	MOV	PCON,#00H
	MOV	IP,#00000000B	;定义中断优先级,串口中断优先
	CLR	RS0
	CLR	RS1	;选择寄存器地址
	CLR	P3.7	;通信初始化,P3.7=0时串口在接受状态
	SETB	P3.3	;湿度输入口初始化
	SETB	0AH
	SETB	0BH
	SETB	0CH
	NOP	;ATML89C51与DS18B20的通信端口---P3.6.
	MOV	A,#35	;初始温度上限35
	MOV	26H,A	
	MOV	A,#05	;初始温度下限5
	MOV	25H,A	
	MOV	A,#02H
	MOV	2AH,A	;报警撤警之差H
	MOV	29H,A	;报警撤警之差L	
	MOV	A,#01H
	MOV	2CH,A	;设备通讯地址默认1
	MOV	A,#0FFH
	MOV	P1,A
	MOV	A,#00H
	MOV	54H,A	;采集湿度频率低位十六进制中间量
	MOV	55H,A	;采集湿度频率高位十六进制中间量
	MOV	56H,A	;定时器溢出次数最大100次
	MOV	57H,A	;保存湿度频率低位十六进制54H中来
	MOV	58H,A	;保存湿度频率高位十六进制55H中来
	MOV	59H,A	;低频低位
	MOV	5AH,A	;低频高位
	MOV	5BH,A	;高频低位
	MOV	5CH,A	;高频高位
	MOV	5DH,A	;子程序湿度小数
	MOV	5EH,A	;子程序湿度整数在10内相对的
	MOV	60H,A	;湿度小数
	MOV	61H,A	;湿度整数,加权后
	MOV	62H,A	;BCD后湿度小数
	MOV	63H,A	;BCD后湿度十位个位
	MOV	64H,A	;BCD后湿度百位	
	MOV	A,#10	;湿度下限
	MOV	65H,A
	MOV	A,#80	;湿度上限
	MOV	66H,A
	MOV	A,#05
	MOV	67H,A	;湿度下限报警撤警之差
	MOV	68H,A	;湿度上限报警撤警之差
	MOV	69H,#0FFH
	MOV	6AH,#0FFH	
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH	;当程序进入设置时,开始69H6AH计数,计数完成会自动退出设置。
	MOV	A,#00H
	MOV	40H,A	;电话号码位1
	MOV	41H,A	;电话号码位2
	MOV	42H,A	;电话号码位3
	MOV	43H,A	;电话号码位4
	MOV	44H,A	;电话号码位5
	MOV	45H,A	;电话号码位6
	MOV	46H,A	;电话号码位7
	MOV	47H,A	;电话号码位8
	MOV	48H,A	;电话号码位9
	MOV	49H,A	;电话号码位10
	MOV	4AH,A	;电话号码位11
	MOV	4BH,A	;电话号码位12
	MOV	4CH,A
	MOV	R0,A
	MOV	R1,A
	MOV	R2,A
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R6,A
	MOV	R7,A
	MOV	30H,A
	MOV	31H,A
	MOV	32H,A
	MOV	33H,A
	;08H=1,温度过100.
	;09H=1,温度零下.
	;0AH=1.P1.5按钮松.
	;0BH=1,P1.3按钮松.
	;0CH=1,P1.4按钮松.
	;0FH=1,BCD子程序处理出的数是负数
	SETB	IT1	;外部中断触发方式,跳变
	MOV	IE,#10010110B
	;中断允许
	SETB	TR0	;启动定时器1
	SETB	TR1	;启动定时器1
START:	CLR	A
	MOV	20,A
	MOV	21,A
	MOV	22,A
	MOV	23,A
	MOV	24,A
	MOV	27,A
	MOV	28,A
	CLR	EA
	CLR	TR0
	LCALL	RST18B20	;调用复位子程序.
	MOV	A,#0CCH	;跳过DS18B20的命令.DS18B20必须有ROM操作命令.
	LCALL	WIDS18B20	;调用写子程序.
	JNB	F0,START	;F1是写子程序反馈的一个参数,F0=1说明存在DS18B20
	MOV	A,#44H	;温度变换命令.
	LCALL	WIDS18B20	;调用写子程序.
	LCALL	RST18B20	;A调用复位子程序.
	MOV	A,#0CCH	;B跳过DS18B20的命令.DS18B20必须有ROM操作命令.
	LCALL	WIDS18B20	;调用写子程序.
	MOV	A,#0BEH	;C读暂存器命令.
	LCALL	WIDS18B20	;调用写子程序.
	LCALL	RDDS18B20	;调用读子程序.
	MOV	R6,A	;低位存入R6.
	MOV	23H,A	;备份数据
	LCALL	RDDS18B20
	MOV	R7,A	;高位存入R7.
	MOV	24H,A	;备份数据
	MOV	A,24H
	ANL	A,#00000111B
	RL	A
	RL	A
	RL	A
	RL	A
	MOV	R0,A
	MOV	A,23H
	ANL	A,#11110000B
	RR	A
	RR	A
	RR	A
	RR	A
	ADD	A,R0
	MOV	2BH,A	;带符号的十六进制实际温度的整数部分值
	SETB	EA
	SETB	TR0
	LCALL	ZWDS18B20	;计算温度值.温度十位个位放于20H中(BCD码),百位在28H中(BCD码)。位08为1则温度百位数不为0。
	;小数部分放于22H中.
	;09H为1时,实时温度零下
	;27H是实际温度十六进制数据存放点
	LCALL	SD_SJ_CL	;湿度数据处理
	LCALL	DISPLAY1	;调用显示子程序.
	LCALL	DISPLAY2
	LCALL	SHEZHI
	LCALL	BAOJING
	;	MOV	C,P1.4
	;	JC	NO_PHONE
	;MOV	C,P1.3
	;JC	NO_PHONE
	;LCALL	TELNUM
NO_PHONE:	LJMP	START
INT_1_SRV:	CLR	EA	;外部中断频率加一	55H54H
	PUSH	PSW	
	PUSH	A
	CLR	C
	MOV	A,54H
	ADDC	A,#01H
	MOV	54H,A
	JNC	OVER_SD
	MOV	A,55H
	ADD	A,#01H
	MOV	55H,A
OVER_SD:	CLR	C
	POP	A
	POP	PSW
	SETB	EA
	RETI
TIME_0_SRV:	CLR	ET0	;计满1秒则保存频率58H57H
	CLR	TR0
	PUSH	PSW	
	PUSH	DPH
	PUSH	DPL
	PUSH	A
	CLR	C
	MOV	A,56H
	ADD	A,#01H	;次数加1
	CJNE	A,#100,CJ_SAVE
	MOV	A,55H
	MOV	58H,A
	MOV	A,54H
	MOV	57H,A
	CLR	A
	MOV	54H,A
	MOV	55H,A
CJ_SAVE:	MOV	56H,A	;保存次数
	CLR	C
	POP	A
	POP	DPL
	POP	DPH
	POP	PSW
	MOV	TH0,#0DCH
	MOV	TL0,#00H
	SETB	TR0
	SETB	ET0
	RETI
RST18B20:	SETB	P3.6
	CLR	P3.6
	MOV	R1,#6
LP11:	MOV	R0,#50
LP1:	DJNZ	R0,LP1	;复位时间600US左右.1+1*6+2*50*6+2*6=619
	DJNZ	R1,LP11
	SETB	P3.6	;释放总线,改为输入.
	MOV	R0,#30
IN12:	DJNZ	R0,IN12	;等待60US=2*30+1
	MOV	R0,#15
LP2:	JNB	P3.6,LP3
	DJNZ	R0,LP2	;在30US之内出现的低电平都能被捕捉到.4*8=32US
	CLR	F0
	LJMP	LP5	;初始化失败,重来
	MOV	R0,#60
LP3:	SETB	F0
	MOV	R0,#0FAH
LP4:	DJNZ	R0,LP4	;DS18B20应答最少480US2*240,即从置位到可以发命令至少需480US的反应时间.
LP5:	SETB	P3.6
	RET
RDDS18B20:	MOV	R2,#08H
	CLR	A
LOOP:	CLR	C
	SETB	P3.6
	NOP	
	NOP	;等2US
	CLR	P3.6
	NOP	
	NOP	;等2US
	SETB	P3.6
	MOV	R3,#4H
SELF1:	DJNZ	R3,SELF1	;等8US
	MOV	C,P3.6
	RRC	A
	MOV	R0,#30
SELF2:	DJNZ	R0,SELF2	;保证读过程持续60US
	DJNZ	R2,LOOP
	RET
WIDS18B20:	MOV	R2,#8H	;写八位数字.
	CLR	C
WR1:	CLR	P3.6
	MOV	R0,#8
SELF3:	DJNZ	R0,SELF3	;等16US
	RRC	A
	MOV	P3.6,C
	MOV	R0,#30
SELF4:	DJNZ	R0,SELF4	;保证写过程持续60US
	SETB	P3.6
	NOP
	NOP
	DJNZ	R2,WR1
	SETB	P3.6
	RET
ZWDS18B20:	MOV	A,R7
	ANL	A,#11111000B
	CJNE	A,#1111000B,LINGSHANG
LINGXIA:	SETB	09H	;09H位为1则零下
	MOV	A,R7
	CPL	A
	INC	A
	MOV	R7,A	;取反,加1,放回
	MOV	A,R6
	CPL	A
	INC	A
	MOV	R6,A	;取反,加1,放回
	LJMP	ZWDS1
LINGSHANG:	CLR	09H	;09H位为0则零上
ZWDS1:	MOV	A,R7
	ANL	A,#00000111B
	MOV	R0,#4H
LOOP1:	RL	A
	DJNZ	R0,LOOP1
	MOV	R7,A
	MOV	A,R6
	ANL	A,#11110000B
	MOV	R0,#4H
LOOP2:	RR	A
	DJNZ	R0,LOOP2
	ADD	A,R7
	MOV	27H,A	;实时温度十六进制数据存放点
	MOV	R1,A
	LCALL	BCD	;二进制转十进制BCD码,返回的数据在R5(高位)、R4中
	MOV	A,R5
	MOV	28H,A	;实时温度百位BCD存放
	JZ	BW_S_00
	SETB	08H	;如超过100度,则08H置1
	LJMP	BW_S_11
BW_S_00:	CLR	08H
BW_S_11:	MOV	A,R4
	MOV	20H,A	;实时温度个位十位BCD存放
	CLR	C
	MOV	A,R6
	ANL	A,#00001111B
	CJNE	A,#0000B,NEXT1
	MOV	A,#0
NEXT1:	CJNE	A,#0001B,NEXT2
	MOV	A,#0
	LJMP	NEXT16
NEXT2:	CJNE	A,#0010B,NEXT3
	MOV	A,#1
	LJMP	NEXT16
NEXT3:	CJNE	A,#0011B,NEXT4
	MOV	A,#2
	LJMP	NEXT16	
NEXT4:	CJNE	A,#0100B,NEXT5	
	MOV	A,#3	
	LJMP	NEXT16	
NEXT5:	CJNE	A,#0101B,NEXT6	
	MOV	A,#3	
	LJMP	NEXT16	
NEXT6:	CJNE	A,#0110B,NEXT7	
	MOV	A,#4	
	LJMP	NEXT16	
NEXT7:	CJNE	A,#0111B,NEXT8	
	MOV	A,#4	
	LJMP	NEXT16	
NEXT8:	CJNE	A,#1000B,NEXT9	
	MOV	A,#5	
	LJMP	NEXT16	
NEXT9:	CJNE	A,#1001B,NEXT10	
	MOV	A,#5	
	LJMP	NEXT16	
NEXT10:	CJNE	A,#1010B,NEXT11	
	MOV	A,#6	
	LJMP	NEXT16	
NEXT11:	CJNE	A,#1011B,NEXT12	
	MOV	A,#7	
	LJMP	NEXT16	
NEXT12:	CJNE	A,#1100B,NEXT13	
	MOV	A,#8	
	LJMP	NEXT16	
NEXT13:	CJNE	A,#1101B,NEXT14	
	MOV	A,#8	
	LJMP	NEXT16	
NEXT14:	CJNE	A,#1110B,NEXT15	
	MOV	A,#9	
	LJMP	NEXT16	
NEXT15:	CJNE	A,#1111B,NEXT16	
	MOV	A,#9	
NEXT16:	MOV	22H,A	;温度小数部分,十进制一位。	
	RET	
DISPLAY1:	SETB	P2.7	;温度部分显示
	CLR	P2.6	
	CLR	P2.5	
	MOV	A,22H	
	MOV	DPTR,#DATA1	
	MOVC	A,@A+DPTR	
	ORL	A,#10000000B	;可以不写,这是小数点位	
	MOV	P0,A	;小数一位	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
	SETB	P2.7	
	CLR	P2.6	
	SETB	P2.5	
	MOV	A,20H	
	ANL	A,#0FH	
	MOV	DPTR,#DATA1	
	MOVC	A,@A+DPTR	
	ANL	A,#01111111B	;显示小数点,个位	
	MOV	P0,A	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
	MOV	A,20H	
	ANL	A,#0F0H	
	RR	A	
	RR	A	
	RR	A	
	RR	A	
	JZ	PSS1	;如果十位上数字为0且百位也为0,则不用显示,跳过.	
	LJMP	CON1	
PSS1:	JNB	08H,PSS2	
CON1:	MOV	DPTR,#DATA1	
	MOVC	A,@A+DPTR	
	MOV	P0,A	;十位数	
	SETB	P2.7	
	SETB	P2.6	
	CLR	P2.5	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
PSS2:	JNB	08H,BAIWEI0	;08H位为1则过100度,百位显示1	
	SETB	P2.7	
	SETB	P2.6	
	SETB	P2.5	
	MOV	A,28H	
	MOV	P0,A	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
	LJMP	BAIWEI1	
BAIWEI0:	JNB	09H,BAIWEI1	
	SETB	P2.7	
	SETB	P2.6	
	SETB	P2.5	
	MOV	P0,#10111111B	;如09H位为1则百位显示负号	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
BAIWEI1:	RET	
DELAY1:	MOV	6BH,R0	;
	MOV	6CH,R1	;保存一下
	MOV	R0,#30	
WAIT1:	MOV	R1,#20	
WAIT2:	DJNZ	R1,WAIT2	
	DJNZ	R0,WAIT1
	MOV	R0,6BH
	MOV	R1,6CH	
	RET
SHEZHI:	JNB	P1.5,HW_SHEZHIX	
	SETB	0AH
	RET	
HW_SHEZHIX:	CLR	0AH
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
HW_SHEZHI:	JNB	P1.5,HW_1	;P1.5为1时将0AH置位	
	SETB	0AH	
HW_1:	JNB	P1.3,HW_2	
	SETB	0BH	;P1.3为1时将0BH置位	
HW_2:	JNB	P1.4,HW_3	
	SETB	0CH	;P1.4为1时将0CH置位	
HW_3:	JNB	P1.2,HW_4	
	SETB	0DH	;P1.2为1时将0DH置位	
HW_4:	MOV	R1,26H	
	LCALL	DISPLAY2H	;显示高温设置值	
	SETB	P2.7	;H标志位显示	
	SETB	P2.6	
	SETB	P2.5	
	MOV	A,#10001001B	;显示H,HIGH	
	MOV	P0,A	
	LCALL	DELAY1	
	MOV	P0,#0FFH	
	JNB	0AH,HW_G1	
	CLR	0AH	;键按下没复位无效	
	JB	P1.5,HW_G1	;P1.5=0且0AH=1则切换到低温设置	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	LJMP	LW_SHEZHI	
HW_G1:	JB	P1.3,HW_G2	
	JNB	0BH,HW_G2	
	CLR	0BH	;键按下没复位无效	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	MOV	A,26H	
	JZ	HW_G2	;下限为0	
	DEC	A	;设置值减1	
	MOV	26H,A	
HW_G2:	JB	P1.4,HW_G3	
	JNB	0CH,HW_G3	
	CLR	0CH	;键按下没复位无效	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	MOV	A,26H	
	CJNE	A,#7DH	,HW_ADD1	;上限为125	
	LJMP	HW_G3
HW_ADD1:	JNC	HW_G3	
	INC	A	;设置值加1	
	MOV	26H,A	
HW_G3:	JNB	0DH,HW_G4	
	CLR	0AH	;键按下没复位无效
	JB	P1.2,HW_G4	
	RET	
HW_G4:	MOV	A,69H
	JZ	NEXT_6AH_1
	DEC	69H
	LJMP	HW_SHEZHI_CIRCLE
NEXT_6AH_1:	MOV	A,6AH
	JZ	NEXT_6BH_1
	DEC	6AH
	LJMP	HW_SHEZHI_CIRCLE
NEXT_6BH_1:	MOV	A,6BH
	JZ	NEXT_6CH_1
	DEC	6BH
	LJMP	HW_SHEZHI_CIRCLE
NEXT_6CH_1:	MOV	A,6CH
	JZ	NEXT_RET_1
	DEC	6CH
	LJMP	HW_SHEZHI_CIRCLE
NEXT_RET_1:	RET
HW_SHEZHI_CIRCLE:	LJMP	HW_SHEZHI	
LW_SHEZHI:	JNB	P1.5,LW_1	;P1.5为1时将0AH置位	
	SETB	0AH	
LW_1:	JNB	P1.3,LW_2	
	SETB	0BH	;P1.3为1时将0BH置位	
LW_2:	JNB	P1.4,LW_3	
	SETB	0CH	;P1.4为1时将0CH置位	
LW_3:	MOV	R1,25H	
	LCALL	DISPLAY2H	;显示低温设置值	
	SETB	P2.7	;L标志位显示	
	SETB	P2.6	
	SETB	P2.5	
	MOV	A,#11000111B	;显示L,LOW	
	MOV	P0,A	
	LCALL	DELAY1	
	MOV	P0,#0FFH
	MOV	A,25H
	MOV	C,ACC.7
	JNC	N_FUHAO
	SETB	P2.7	;负号显示	
	SETB	P2.6	
	CLR	P2.5	
	MOV	A,#10111111B	;显示L,LOW	
	MOV	P0,A	
	LCALL	DELAY1	
	MOV	P0,#0FFH
N_FUHAO:	JNB	0AH,LW_G1	
	CLR	0AH	;键按下没复位无效	
	JB	P1.5,LW_G1	;P1.5=0且0AH=1则切换到CHA设置	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	LJMP	CHA_H_WD	
LW_G1:	JB	P1.3,LW_G2	
	JNB	0BH,LW_G2	
	CLR	0BH	;键按下没复位无效
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH	
	MOV	A,25H
	CJNE	A,#11001001B,JIAN1	;下限为-55	
	LJMP	LW_G2
JIAN1:	DEC	A	;设置值减1	
	MOV	25H,A	
	CLR	A
LW_G2:	JB	P1.4,LW_G3	
	JNB	0CH,LW_G3	
	CLR	0CH	;键按下没复位无效
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH	
	MOV	A,25H	
	MOV	C,ACC.7
	JC	DO_ADD_1	;C为1表示当前数为负,加1
	CJNE	A,#63H	,LW_ADD1	;上限为99,如果为正则进一步判断是否过99	
	LJMP	LW_G3
LW_ADD1:	;JNC	LW_G3	
DO_ADD_1:	CLR	C
	INC	A	;设置值加1	
	MOV	25H,A	
LW_G3:	JB	P1.2,LW_G4	
	RET	
LW_G4:	MOV	A,69H
	JZ	LW_J_1_6AH_YN
	DEC	69H
	LJMP	LW_SHEZHI_CIRCLE
LW_J_1_6AH_YN:	MOV	A,6AH
	JNZ	LW_J_1_6AH
	MOV	A,6BH
	JNZ	CIRCLE_2_2
	RET
CIRCLE_2_2:	DEC	6BH
	LJMP	LW_SHEZHI_CIRCLE
LW_J_1_6AH:	DEC	6AH
LW_SHEZHI_CIRCLE:	LJMP	LW_SHEZHI
CHA_H_WD:	JNB	P1.5,CHA_H_1	;P1.5为1时将0AH置位	
	SETB	0AH	
CHA_H_1:	JNB	P1.3,CHA_H_2	
	SETB	0BH	;P1.3为1时将0BH置位	
CHA_H_2:	JNB	P1.4,CHA_H_3	
	SETB	0CH	;P1.4为1时将0CH置位	
CHA_H_3:	MOV	R1,2AH	
	LCALL	DISPLAY_CHA	;显示上限报警撤警之差2AH中	
	SETB	P2.7	;H标志位显示	
	SETB	P2.6	
	SETB	P2.5	
	MOV	A,#10001001B	;显示H	
	MOV	P0,A	
	LCALL	DELAY1
	MOV	P0,#0FFH
	SETB	P2.7	;C标志位显示	
	SETB	P2.6	
	CLR	P2.5	
	MOV	A,#11000110B	;显示C	
	MOV	P0,A	
	LCALL	DELAY1
	MOV	P0,#0FFH
	JNB	0AH,CHA_H_G1	
	CLR	0AH	;键按下没复位无效	
	JB	P1.5,CHA_H_G1	;P1.2=0且0AH=1则切换到其它设置	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	LJMP	CHA_L_WD	
CHA_H_G1:	JB	P1.3,CHA_H_G2	
	JNB	0BH,CHA_H_G2	
	CLR	0BH	;键按下没复位无效	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	MOV	A,2AH	
	JZ	CHA_H_G2	;下限为0	
	DEC	A	;设置值减1	
	MOV	2AH,A	
CHA_H_G2:	JB	P1.4,CHA_H_G3	
	JNB	0CH,CHA_H_G3	
	CLR	0CH	;键按下没复位无效	
	MOV	69H,#0FFH
	MOV	6AH,#0FFH
	MOV	6BH,#0FFH
	MOV	6CH,#0FFH
	MOV	A,2AH	
	CJNE	A,#08H	,CHA_H_ADD1	;上限为8	
	LJMP	CHA_H_G3
CHA_H_ADD1:	JNC	CHA_H_G3	
	INC	A	;设置值加1	
	MOV	2AH,A	
CHA_H_G3:	JB	P1.2,CHA_H_G4	
	RET	
CHA_H_G4:	MOV	A,69H
	JZ	CHAH_J_1_6AH_YN
	DEC	69H
	LJMP	CHAH_SHEZHI_CIRCLE
CHAH_J_1_6AH_YN:	MOV	A,6AH
	JNZ	CHAH_J_1_6AH
	MOV	A,6BH
	JNZ	CIRCLE_2_3
	RET
CIRCLE_2_3:	DEC	6BH
	LJMP	CHAH_SHEZHI_CIRCLE
CHAH_J_1_6AH:	DEC	6AH
CHAH_SHEZHI_CIRCLE:	LJMP	CHA_H_WD
CHA_L_WD:	JNB	P1.5,CHA_L_1	;P1.2为1时将0AH置位	
	SETB	0AH	

⌨️ 快捷键说明

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