 ORG 0000H          ;定位 
 AJMP START         ;跳转到主程序
 ORG 000BH          ;定位
 AJMP TIME0
 ORG 001BH          ;定位
 AJMP TIME1
 ORG 0100H          ;定位
 START:
;内存数据定义
BitCnt data 21h ; 数据位计数器
ByteCnt data 22h ; 数据字节计数器
;Command data 23h ; 命令字节地址
Command data 3Fh ; 命令字节地址
SSS	DATA	24H ;显示用 时
SSF	DATA	25H ;显示用 分
SSM	DATA	2CH ;秒,自动调整时间用
XSMZT	DATA	2DH ;计数用,显示秒
SSMM	DATA	2EH ;秒,显示秒用
NZS	DATA	26H ;闹钟用 时
NZF	DATA	27H ;闹钟用 分
NZZT	DATA	28H ;闹钟暂停
FHL	DATA	29H ;长时间不操作返回
FHH	DATA	2AH ;长时间不操作返回
KMKM	DATA	2BH ;每天加减的秒数
XSP	DATA	2FH ;显示屏类型(1,2)
RcvDat DATA 30H ; 接收数据缓冲区
XmtDat DATA 40H ; 发送数据缓冲区
;端口位定义
IO_DATA	bit P3.0 ; 数据传送总线
SCLK	bit P3.1 ; 时钟控制总线
RST	bit P3.7 ; 复位总线
D1	BIT	P3.0
D2	BIT	P3.1
D3	BIT	P3.2
D4	BIT	P3.3
NZ	BIT	P3.4	;闹钟
SW	BIT	P3.5
SWJ	BIT	P1.7
 ZSMS	EQU	R6 ;进入置数模式,  01B(1)---进入置时间小时,10B(2)--进入置时间分钟,11B(3)--置闹钟小时,100B(4)--进入置闹钟分钟,101B(5)置闹钟开关,110B(6)设置时间快慢
 
 X1302	EQU	20H.0 ;需要写1302标志，1－－要写
 NPS	EQU	20H.1 ;扫描段时小时显示判断  1-不显示
 NPF	EQU	20H.2 ;扫描段时分钟时显示判断  1-不显示
 MSS	EQU	20H.3 ;秒闪位   0---亮秒灯
 NZK	EQU	20H.4 ;闹钟开   , 1--开闹钟
 KMTZ	EQU	20H.5 ;快慢是否调整过, 1---已调整过了
 XSMWEI	EQU	20H.6 ;显示秒位,1---显示秒
 X1302SJ EQU	20H.7 ;1302不写当前时间(未改变时间),1---写;0--不写
 
 ZTSJW	EQU	23H.0 ;自动调整时间 + or -  0---减  1--加
 ;TEMP_1	EQU	23H.1 ;临时调试1
 MOV	23H,#00H
;=========================
;D1---段1(最高位),D2,D3,D4
;R0,R1--读写1302
;R2--延时使用
;R3---秒闪计时
;R4---闹钟闹计时
;R5-供时显示闪烁用记200ms
;R6--进入置数模式,  01B(1)---进入置时间小时,10B(2)--进入置时间分钟,11B(3)--置闹钟小时,100B(4)--进入置闹钟分钟,101B(5)置闹钟开关,110B(6)设置时间快慢
;R7--要显示的段
;=========================
MOV SP,#60H  ;设置堆栈
MOV	XSMZT,#0H
MOV	SSM,#0FFH
MOV	20H,#00H
MOV	2BH,#00H
MOV	ZSMS,#00H
MOV	FHL,#0FFH
MOV	FHH,#3
MOV	R3,#80
MOV	R4,#01H
MOV	R5,#5
MOV	R7,#4
MOV	P1,#0FFH
MOV	P3,#0FFH
CLR	RST
 MOV      TMOD,#00010001B;定时/计数器0 ;工作于方式1 ;定时器1,工作于方式1
 SETB	EA      ;中断总允许
 SETB	ET0	;中断0允许
 SETB	ET1
  MOV	TH0,#0ECH
  MOV	TL0,#07CH	;定时器0--5ms
  MOV	TH1,#03CH
  MOV	TL1,#0B0H       ;50MS
;Write_Enable:
MOV Command,#8Eh ;命令字节为8E
MOV ByteCnt,#1 ;单字节传送模式
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#00h ;数据内容为0 写入允许
ACALL Send_Byte ;调用写入数据子程序 

;单字节读出cc单元的内容
MOV Command,#0CDh ; 命令字节为CDh 空DS1302判断 55h为不空
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	A,RcvDat
CJNE A,#055H,N55

;单字节读出秒单元的内容
MOV Command,#81h ; 命令字节为81h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	A,RcvDat
;判断时钟是否停止,如果停止,就写入初始值
 JNB	ACC.7,CC1

N55:

 ;多字节写  (写入20 年5 月27 日星期三14 时59 分59 秒)
MOV Command,#0BEh ;命令字节为BEh
MOV ByteCnt,#8 ;多字节写入模式此模块为8 个
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#59h ;秒单元
MOV XmtDat+1,#59h ;分单元
MOV XmtDat+2,#14h ;时单元
MOV XmtDat+3,#27h ;日期单元
MOV XmtDat+4,#05h ;月单元
MOV XmtDat+5,#03h ;星期单元
MOV XmtDat+6,#20H ;年单元
MOV XmtDat+7,#00H ;
ACALL Send_Byte ;调用写入数据子程序

;RAM操作
 ;多字节写
MOV Command,#0FEh ;命令字节为FEh
MOV ByteCnt,#31 ;多字节写入模式此模块为31 个
MOV R0,#XmtDat ;数据地址覆给R0
MOV XmtDat,#12h ;NZS
MOV XmtDat+1,#00h ;NZF
MOV XmtDat+2,#00h ;NZK
MOV XmtDat+3,#00h ;KMKM
MOV XmtDat+4,#02h ;XSP
MOV XmtDat+5,#00h ;ztsjw
MOV XmtDat+6,#55H ;CC单元
ACALL Send_Byte ;调用写入数据子程序

CC1:

;单字节读出分单元的内容
MOV Command,#83h ; 命令字节为83h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
 MOV	SSF,RcvDat   ;--------------------------------------
 ;单字节读出时单元的内容
MOV Command,#85h ; 命令字节为85h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
 MOV	SSS,RcvDat   ;--------------------------------------
 MOV Command,#0C1h ; 命令字节为C0h RAM0
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	NZS,RcvDat   ;--------------------------------------

MOV Command,#0C3h ; 命令字节为C3h RAM1
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	NZF,RcvDat   ;--------------------------------------

MOV Command,#0C5h ; 命令字节为C5h RAM2
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	A,RcvDat   ;--------------------------------------
RRC	A
 MOV	NZK,C
 
MOV Command,#0C7h ; 命令字节为C7h RAM3
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	KMKM,RcvDat   ;--------------------------------------

MOV Command,#0C9h ; 命令字节为C9h RAM4
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	XSP,RcvDat   ;--------------------------------------

MOV Command,#0CBh ; 命令字节为Cbh RAM5
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	23H,RcvDat   ;--------------------------------------

MOV	A,KMKM
CJNE	A,#0FFH,QW11
	MOV	KMKM,#00H
QW11:
MOV	A,XSP
CJNE	A,#0FFH,QW1
	MOV	XSP,#01H
	
QW1:SETB	TR0
SETB	TR1
 LOOP: 
 JB	SW,LQQ         ;若为1，说明为干扰信号，退出
 MOV 	R2,#24 
 ACALL	DELAY
 JB	SW,LQQ ;约53ms
 JNB	SW,$  ;等待松开
; 	JB	ZSMS,TKS    ;处理sw键
	CJNE	ZSMS,#0,TKS1
 		;SETB	ZSMS	
 		MOV	ZSMS,#1
 		AJMP	QQT
 	TKS1:
 	CJNE	ZSMS,#1,TKS2
 		MOV	ZSMS,#2
 		AJMP	QQT
 	TKS2:
 	CJNE	ZSMS,#2,TKS3
 		MOV	ZSMS,#3
 		AJMP	QQT
 	TKS3:
 	CJNE	ZSMS,#3,TKS4
 		MOV	ZSMS,#4
 		AJMP	QQT
 	TKS4:
 	CJNE	ZSMS,#4,TKS4a
 		MOV	ZSMS,#5
 		AJMP	QQT
 	TKS4a:
 	CJNE	ZSMS,#5,TKS4B
 		MOV	ZSMS,#6
 		AJMP	QQT
 		
 	TKS4B:
 	CJNE	ZSMS,#6,TKS5
 		MOV	ZSMS,#7
 		AJMP	QQT
 	TKS5:
 	CJNE	ZSMS,#7,TKS6
 		MOV	ZSMS,#0
 		
 		CLR	NPS
 		CLR	NPF
 		SETB	X1302
 	TKS6:	AJMP	QQT
 LQQ:
 ;JNB	ZSMS,QQT
 CJNE	ZSMS,#0,TKS61
 AJMP	QQT
 TKS61:JB	SWJ,TKS6         ;若为1，说明为干扰信号，退出
 	MOV 	R2,#24
 	ACALL	DELAY  ;约52ms
 	JB	SWJ,QQT1  
 	JNB	SWJ,$  ;等待松开
 		;处理swj
 		CJNE	ZSMS,#1,TKSS1
 			SETB	X1302SJ
 			INC	SSS
 			MOV	A,SSS
 			CJNE	A,#00AH,PD12
 			MOV	SSS,#010H
 			AJMP	QQT
 			PD12:
 			CJNE	A,#01AH,PD13
 			MOV	SSS,#020H
 			AJMP	QQT
 			PD13:
 			CJNE	A,#024H,PD14
 			MOV	SSS,#00H
 			PD14:
 			AJMP	QQT
 		TKSS1:
 		CJNE	ZSMS,#2,TKSS2
 			SETB	X1302SJ
 			INC	SSF
 			MOV	A,SSF
 			ANL	A,#0FH
 			CJNE	A,#0AH,PD131
 			MOV	A,SSF
 			ADD	A,#06H
 			MOV	SSF,A
 			PD131:
 			CJNE	A,#060H,QQT
 			MOV	SSF,#00H
 			AJMP	QQT
 		
 		TKSS2:
 		CJNE	ZSMS,#3,TKSS3
 			INC	NZS
 			MOV	A,NZS
 			CJNE	A,#00AH,PD122
 			MOV	NZS,#010H
 			AJMP	QQT
 			PD122:
 			CJNE	A,#01AH,PD132
 			MOV	NZS,#020H
 			AJMP	QQT
 			PD132:
 			CJNE	A,#024H,PD142
 			MOV	NZS,#00H
 			PD142:
 		QQT1:	AJMP	QQT
 		TKSS3:
 		CJNE	ZSMS,#4,TKSS4
 			INC	NZF
 			MOV	A,NZF
 			ANL	A,#0FH
 			CJNE	A,#0AH,PD1313
 			MOV	A,NZF
 			ADD	A,#06H
 			MOV	NZF,A
 			PD1313:
 			CJNE	A,#060H,QQT
 			MOV	NZF,#00H
 			AJMP	QQT
 		TKSS4:
 		CJNE	ZSMS,#5,TKSS5
 			CPL	NZK
 			AJMP	QQT
 		TKSS5:
 		CJNE	ZSMS,#6,TKSS5A  ;快慢时间调整
 			INC	KMKM
 			MOV	A,KMKM
 			ANL	A,#0FH
 			CJNE	A,#0AH,KMKM11
 			MOV	A,KMKM
 			ADD	A,#06H
 			MOV	KMKM,A
 			KMKM11:
 			JB	KMKM.5,QINGLING
 			CJNE	A,#019H,QQT  ;到19;每天调整的最大秒数
 			QINGLING:
 			MOV	KMKM,#00H
 			CPL	ZTSJW
 			AJMP	QQT
 		TKSS5A:
 		CJNE	ZSMS,#7,QQT  ;显示屏类型设置
 			INC	XSP
 			MOV	A,XSP
 			CJNE	A,#3,QQT
 			MOV	XSP,#1
 			AJMP	QQT
 			
 QQT:AJMP LOOP
 
 
 TIME0:
 MOV	TL0,#078H	;定时器0--5ms
 MOV	TH0,#0ECH
 PUSH	ACC
 PUSH	PSW
 SETB	D1
 SETB	D2
 SETB	D3
 SETB	D4
 MOV	P1,#0FFH
 
 JNB	X1302,ZACA1A1  ;写入调整后的时间
	MOV	A,SSM
	CJNE	A,#0FFH,YLD1 ;如果秒是ff就不写,自动调整时间用
	AJMP	YLD
	YLD1:
	MOV Command,#80h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV XmtDat,SSM ;数据内容
	ACALL Send_Byte ;调用写入数据子程序
	
	MOV	SSM,#0FFH
	AJMP	YLD
	
	ZACA1A1:
	AJMP	ZACA
	
	
	YLD:
	JNB	X1302SJ,TYLD
	CLR	X1302SJ
	MOV Command,#84h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV XmtDat,SSS ;数据内容
	ACALL Send_Byte ;调用写入数据子程序
	
	MOV Command,#82h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV XmtDat,SSF ;数据内容
	ACALL Send_Byte ;调用写入数据子程序
	
	TYLD:
	
	MOV Command,#0C0h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV	A,NZS
	ANL	A,#03FH
	MOV XmtDat,A ;数据内容
	ACALL Send_Byte ;调用写入数据子程序
	
	MOV Command,#0C2h ; 命令字节为82h
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV	A,NZF
	ANL	A,#07FH
	MOV XmtDat,A ;数据内容
	ACALL Send_Byte ;调用写入数据子程序

	MOV Command,#0C4h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV	A,#00H
	MOV	C,NZK
	RLC	A
	MOV XmtDat,A ;数据内容
	ACALL Send_Byte ;调用写入数据子程序
	
	MOV Command,#0C6h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	MOV	A,KMKM
	MOV XmtDat,A ;数据内容为
	ACALL Send_Byte ;调用写入数据子程序  KMKM
	
	MOV Command,#0C8h ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	;MOV	A,XSP
	MOV XmtDat,XSP ;数据内容为
	ACALL Send_Byte ;调用写入数据子程序  XSP
	
	MOV Command,#0CAh ; 命令字节
	MOV ByteCnt,#1 ; 单字节传送模式
	MOV R0,#XmtDat ;数据地址覆给R0
	;MOV	A,XSP
	MOV XmtDat,23H ;数据内容为
	ACALL Send_Byte ;调用写入数据子程序  ztsjw
	
	CLR	X1302
	
	 SETB	D1
 	 SETB	D2
	
 ZACA:
 CJNE	ZSMS,#0,ZACA2  ;置时间
 AJMP	ZACA1
  ZACA2:
  	DJNZ	R5,ZACA1
 	MOV	R5,#40
 	
 	CJNE	ZSMS,#1,LAA
 	CPL	NPS
 	CLR	NPF
 	AJMP	ZACA1
 	LAA:
 	CJNE	ZSMS,#2,LAA1
 	CPL	NPF
 	CLR	NPS
 	AJMP	ZACA1
 	LAA1:
 	CJNE	ZSMS,#3,LAA2
 	CPL	NPS
 	SETB		NPF
 	AJMP	ZACA1
 	LAA2:
 	CJNE	ZSMS,#4,LAA3
 	CPL	NPF
 	SETB	NPS
 	AJMP	ZACA1
 	LAA3:
 	CLR	NPF
 	CLR	NPS
 	;CJNE	ZSMS,#5,ZACA1
 	
 ZACA1:
 	DJNZ	R3,EOE
 	CPL	MSS
 	MOV	R3,#100  ;500MS
 ;调整时间 时不进入下面
 CJNE	ZSMS,#0,EOE
 AJMP	Q9Q
 EOE:
 AJMP	XSD4	
 Q9Q:
 	;读1302 约500ms读一次
 	;单字节读出分单元的内容
MOV Command,#83h ; 命令字节为83h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
 MOV	SSF,RcvDat   ;--------------------------------------
 ANL	SSF,#07FH
 ;单字节读出时单元的内容
MOV Command,#85h ; 命令字节为85h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
 MOV	SSS,RcvDat   ;--------------------------------------
 ANL	SSS,#03FH

;单字节读出秒单元的内容
MOV Command,#81h ; 命令字节为81h
MOV ByteCnt,#1 ; 单字节传送模式
MOV R1,#RcvDat; 数据地址覆给R1
ACALL Receive_Byte; 调用读出数据子程序
MOV	A,RcvDat
ANL	A,#07FH
MOV	SSMM,A

 ;============开始快慢调整 ZTSJW=1加时间  =0减时间
MOV	A,KMKM
CJNE	A,#00H,KMBEG
	AJMP	KMEND
KMBEG:
JB	KMTZ,KMEND1
MOV	A,SSS
CJNE	A,#03H,KMEND1 ;每天3:59: 29/30开始调整,4:0写回KMTZ的状态
MOV	A,SSF
CJNE	A,#59H,KMEND1
MOV	A,SSMM

JB	ZTSJW,JIAZTSJW

CJNE	A,#029H,KMEND1
SUBB	A,KMKM
AJMP	X120319
JIAZTSJW:
CJNE	A,#030H,KMEND1
ADD	A,KMKM

X120319:
MOV	SSM,A
SETB	KMTZ
SETB	X1302

KMEND1:
MOV	A,SSS
CJNE	A,#04H,KMTZ1A
MOV	A,SSF
CJNE	A,#00H,KMTZ1A
CLR	KMTZ

KMTZ1A:
;============结束

KMEND:
 SETB	D1
 SETB	D2
 JNB	XSMWEI,XSD4
 MOV	SSS,#0DH
 MOV	SSF,SSMM
 
 XSD4: CJNE	R7,#1,XSD3            ;最高位
   	CJNE	ZSMS,#7,BKLA
  		MOV	A,#0DH ;不显示
  		AJMP	X4
  	BKLA:
 	CJNE	ZSMS,#6,AAA1
 		JB	ZTSJW,X123191401
 		MOV	A,#0EH
 		AJMP	X4
 		X123191401:
 		MOV	A,#0FH
 		AJMP	X4
 	AAA1:CJNE	ZSMS,#5,XSSJ1
 		MOV	A,#0AH
 		AJMP	X4
 	XSSJ1:CJNE	ZSMS,#3,XSSJ2
 		MOV	A,NZS
 		AJMP	XSSJJS
 	XSSJ2:MOV	A,SSS
 	
 	XSSJJS:ANL	A,#030H
 	SWAP	A
 	CJNE	A,#00H,X4;不为0去X4,(小时高位0时不显示)
 	MOV	A,#0DH ;不显示
 	;不显示
 	;AJMP	XSD0
 	X4:
 	MOV	DPTR,#TABLE
        MOVC	A,@A+DPTR
       ; JB	ZSMS,TA4
       CJNE	ZSMS,#0,TA4
        ;JB	MSS,TA4
        ;CPL	ACC.7
       	JNB	NZK,TA4 ;闹钟开判断,(开--高位小数点灯亮)
       	JB	MSS,TA4
       	CLR	ACC.7
       	TA4:
       	JB	NPS,XSD0T
       	MOV	P1,A
       	CLR	D1
       	XSD0T:AJMP	XSD0
 XSD3: CJNE	R7,#2,XSD2  
 	CJNE	ZSMS,#7,BKLA1
  		MOV	A,#0DH ;不显示
  		AJMP	X43
  	BKLA1:
 	CJNE	ZSMS,#6,AAA2
 	MOV	A,#0DH ;不显示
 	AJMP	X43
 	AAA2:CJNE	ZSMS,#5,XSSJ11
 		JB	NZK,DSAS
 			MOV	A,#0BH
 			AJMP	X43
 			DSAS:
 			MOV	A,#0CH
 			AJMP	X43
 	XSSJ11:CJNE	ZSMS,#3,XSSJ21
 		MOV	A,NZS
 		AJMP	XSSJJS1
 	XSSJ21:MOV	A,SSS
 	
 	XSSJJS1:
 	ANL	A,#00FH
 	X43:
       	MOV	DPTR,#TABLE
        MOVC	A,@A+DPTR
        ;JB	ZSMS,TA3
        CJNE	ZSMS,#0,TA3
        MOV	R0,XSP
        CJNE	R0,#1,TA3 ;显示屏类型判断(1---第二位为秒闪)
        JB	MSS,TA3
        CLR	ACC.7
       	TA3:
       	JB	NPS,XSD0T1
       	MOV	P1,A
       	CLR	D2
       	XSD0T1:AJMP	XSD0
 XSD2: CJNE	R7,#3,XSD1
 	
 	CJNE	ZSMS,#7,BKLA2
  		MOV	A,#0DH ;不显示
  		AJMP	X42
  	BKLA2:
 	
 	CJNE	ZSMS,#6,AAAA3
 	MOV	A,KMKM
 	ANL	A,#0F0H
 	SWAP	A
 	AJMP	X42
 	AAAA3:CJNE	ZSMS,#5,XSSJ12
 		JB	NZK,DSAS2
 			MOV	A,#0BH
 			AJMP	X42
 			DSAS2:
 			MOV	A,#0DH
 			AJMP	X42
 	XSSJ12:CJNE	ZSMS,#4,XSSJ22
 		MOV	A,NZF
 		AJMP	XSSJJS2
 	XSSJ22:MOV	A,SSF
 	
 	XSSJJS2:
  	ANL	A,#070H
 	SWAP	A
 	X42:
       	MOV	DPTR,#TABLE
        MOVC	A,@A+DPTR
        ;JB	ZSMS,TA2
        CJNE	ZSMS,#0,TA2
        MOV	R0,XSP
        CJNE	R0,#2,TA2  ;;显示屏类型判断(2---第3位为秒闪)
        JB	MSS,TA2
        CLR	ACC.7
       	TA2:
       	JB	NPF,XSD0T2
       	MOV	P1,A
       	CLR	D3
       	XSD0T2:AJMP	XSD0
 XSD1: CJNE	R7,#4,XSD0
 		CJNE	ZSMS,#7,BKLA3
  		MOV	A,XSP 
  		AJMP	X431
  	BKLA3:
 	CJNE	ZSMS,#6,AAAA4
 	MOV	A,KMKM
 	ANL	A,#0FH
 	AJMP	X431
 	AAAA4:
 	CJNE	ZSMS,#5,XSSJ111
 		MOV	A,#0DH
 		AJMP	X431
 	XSSJ111:CJNE	ZSMS,#4,XSSJ211
 		MOV	A,NZF
 		AJMP	XSSJJS11
 	XSSJ211:MOV	A,SSF
 	XSSJJS11:
 	ANL	A,#00FH
 	X431:
 	ANL	A,#00FH
       	MOV	DPTR,#TABLE
        MOVC	A,@A+DPTR
        ;JB	ZSMS,TA1
        CJNE	ZSMS,#0,TA1
        MOV	R0,XSP
        CJNE	R0,#2,TA1  ;;显示屏类型判断(2---第4位为秒闪)
        JB	MSS,TA1
        CLR	ACC.7
       	TA1:
       	JB	NPF,XSD0
       	MOV	P1,A
       	CLR	D4
 XSD0:
 ;CPL	TEMP_1
 ;JB	TEMP_1,QEND
 DJNZ	R7,QEND
 MOV	R7,#4
 QEND:
 POP	PSW
 POP	ACC
 RETI
 
 TIME1:
 PUSH	ACC
 PUSH	PSW
 MOV	TH1,#015H
 MOV	TL1,#0A0H       ;65MS
 CJNE	ZSMS,#0,QUEND11;进入时间调整离开
 JNB	NZK,QUEND1 ;判断闹钟开 ,1--开
 MOV	A,SSS
 CJNE	A,NZS,QUEND1
 MOV	A,SSF
 CJNE	A,NZF,Q3  ;判断时间
 	MOV	A,NZZT
 	CJNE	A,NZF,Q4
 	AJMP	QUEND1
 	Q4:JNB	MSS,Q1
 	JNB	SWJ,QUEND2;按下SWJ按停止闹 	
 	Q1:DJNZ	R4,QUEND
 	MOV	R4,#2
 	CPL	NZ
 	AJMP	QUEND
 QUEND2:
 	MOV	NZZT,NZF
 	AJMP	QUEND1
 Q3:
 	MOV	NZZT,#0FFH
 QUEND1:
 	JNB	MSS,QUEND11
 	JB	SWJ,ZJZJ1
 	INC	XSMZT
 	MOV	A,XSMZT
 	CJNE	A,#3,QUEND11
 	DEC	XSMZT
 	SETB	XSMWEI
 	AJMP	QUEND11
 	ZJZJ1:MOV	XSMZT,#0H
 	CLR	XSMWEI
 QUEND11:
 SETB	NZ
 MOV	R4,#1
 QUEND:
 DJNZ	FHL,DE1
 MOV	FHL,#0FFH
 DJNZ	FHH,DE1
 MOV	FHH,#3
 MOV	ZSMS,#00H
 CLR	NPS
 CLR	NPF
DE1: POP	PSW
 POP	ACC
 RETI
 
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H,0C0H,08EH,0C8H,0FFH,0BFH,0B9H

;********************************************************************************************
;发送数据程序
;名称:Send_Byte
;描述:发送ByteCnt 个字节给被控器DS1302
;命令字节地址在Command 中
;所发送数据的字节数在ByteCnt 中发送的数据在XmtDat 缓冲区中
;********************************************************************************************
Send_Byte:
CLR RST ;复位引脚为低电平所有数据传送终止
NOP
NOP
CLR SCLK; 清时钟总线
NOP
NOP
SETB RST ;复位引脚为高电平逻辑控制有效
NOP
NOP
MOV A,Command; 准备发送命令字节
MOV BitCnt,#08h; 传送位数为8
S_Byte0:
RRC A; 将最低位传送给进位位C
MOV IO_DATA,C; 位传送至数据总线
NOP
NOP
SETB SCLK; 时钟上升沿发送数据有效
NOP
CLR SCLK; 清时钟总线
DJNZ BitCnt,S_Byte0; 位传送未完毕则继续
NOP
NOP
S_Byte1:; 准备发送数据
MOV A,@R0; 传送数据过程与传送命令相同
MOV BitCnt,#08h
S_Byte2:
RRC A
MOV IO_DATA,C
NOP
NOP
SETB SCLK
NOP
NOP
CLR SCLK
DJNZ BitCnt,S_Byte2
INC R0; 发送数据的内存地址加1
DJNZ ByteCnt,S_Byte1; 字节传送未完毕则继续
NOP
NOP
CLR RST; 逻辑操作完毕清RST
RET
;***************************************************************************************
;接收数据程序;
;名称:Receive_Byte
;描述:从被控器DS1302 接收ByteCnt 个字节数据
;命令字节地址在Command 中
;所接收数据的字节数在ByteCnt 中接收的数据在RcvDat 缓冲区中
;***********************************************************************************
Receive_Byte:
CLR RST ;复位引脚为低电平所有数据传送终止
NOP
NOP
CLR SCLK; 清时钟总线
NOP
NOP
SETB RST ;复位引脚为高电平逻辑控制有效
MOV A,Command; 准备发送命令字节
MOV BitCnt,#08h; 传送位数为8
R_Byte0:
RRC A; 将最低位传送给进位位C
MOV IO_DATA,C; 位传送至数据总线
NOP
NOP
SETB SCLK; 时钟上升沿发送数据有效
NOP
CLR SCLK; 清时钟总线
DJNZ BitCnt,R_Byte0; 位传送未完毕则继续
NOP
NOP
R_Byte1:; 准备接收数据
CLR A; 清类加器
CLR C; 清进位位C
MOV BitCnt,#08h; 接收位数为8
R_Byte2:
NOP
NOP
MOV C,IO_DATA; 数据总线上的数据传送给C
RRC A; 从最低位接收数据
SETB SCLK; 时钟总线置高
NOP
NOP
CLR SCLK; 时钟下降沿接收数据有效
DJNZ BitCnt,R_Byte2; 位接收未完毕则继续
MOV @R1,A; 接收到的完整数据字节放入接收内存缓冲区
INC R1; 接收数据的内存地址加1
DJNZ ByteCnt,R_Byte1; 字节接收未完毕则继续
NOP
NOP
CLR RST; 逻辑操作完毕清RST
RET
;=============================================================================================
DELAY:
	PUSH 02H                                ;将R2中的值推入堆笺      
LP1:   PUSH 02H                                ;将R2中的值推入堆笺     
LP2:   PUSH 02H                                ;将R2中的值推入堆笺     
LP3:   DJNZ R2,LP3                             ;若R2－1不为0，跳转到LP3 
       POP 02H                                 ;将堆笺中值弹出到R2中 
       DJNZ R2,LP2                             ;若R2－1不为0，跳转到LP2 
       POP 02H                                 ;将堆笺中值弹出到R2中 
       DJNZ R2,LP1                             ;若R2－1不为0，跳转到LP1 
       POP 02H                                 ;将堆笺中值弹出到R2中 
       DJNZ R2,DELAY 
      ;NOP                         ;若R2－1不为0，跳转到DELAY 
      RET    
END

