.INCLUDE	"..\APPNOTES\1200DEF.INC"
;============================================================================
.DEF	HL=R1
.DEF	HR=R2
.DEF	ML=R3
.DEF	MR=R4

.DEF	B1_H=R5
.DEF	B1_M=R6

.DEF	B2_H=R7
.DEF	B2_M=R8

.DEF	IND_H=R9
.DEF	IND_M=R10

.DEF	CORR1=R16
.DEF	CORR2=R17
.DEF	SECOND=R18
.DEF	MINUTE=R19
.DEF	HOUR=R20

.DEF	TEMP=R21
.DEF	TMR_TEMP=R22
.DEF	A=R23

.DEF	DSP_N=R24
.DEF	DSP_SH=R25

.DEF	BIN=R26
.DEF	BCD=R27

.DEF	MODE=R28
	.EQU	H_M=0
	.EQU	M_S=1
	.EQU	BELL1=2
	.EQU	BELL2=3

.DEF	STACK=R29
.DEF	DEL1=R21	;TEMP
.DEF	DEL2=R31
;============================================================================
.EQU	TMR_CONST=2
.EQU	COEF_CORR1=8	;244
.EQU	COEF_CORR2=31	;244

.EQU	NUM0=0B10111011	;0B11011101
.EQU	NUM1=0B10000010	;0B01000001
.EQU	NUM2=0B00111110	;0B01111100
.EQU	NUM3=0B10101110	;0B01110101
.EQU	NUM4=0B10000111	;0B11100001
.EQU	NUM5=0B10101101	;0B10110101
.EQU	NUM6=0B10111101	;0B10111101
.EQU	NUM7=0B10100010	;0B01000101
.EQU	NUM8=0B10111111	;0B11111101
.EQU	NUM9=0B10101111	;0B11110101
;============================================================================
.MACRO	DELAY
	LDI	DEL1,255	
DEL_M1:
	LDI	DEL2,255
DEL_M2:
	DEC	DEL2
	BRNE	DEL_M2
	DEC	DEL1
	BRNE	DEL_M1
.ENDM
;============================================================================
	.ORG	0
	RJMP	RESET
	.ORG	2
TMR_0:
	IN	STACK,0x3F
	;бпелъ
	DEC	CORR1
	BRNE	NO_CH_TIME
	LDI	CORR1,COEF_CORR1

	DEC	CORR2
	BRNE	NO_CH_TIME
	LDI	CORR2,COEF_CORR2
	
	INC	SECOND
	CPI	SECOND,60
	BRNE	NO_CH_TIME
	LDI	SECOND,0

	INC	MINUTE
	CPI	MINUTE,60
	BRNE	NO_CH_TIME
	LDI	MINUTE,0

	CPI	MODE,0		;
	BREQ	MODE_NORM	;
	LDI	MODE,0		;
MODE_NORM:	

	INC	HOUR
	CPI	HOUR,24
	BRNE	NO_CH_TIME
	LDI	HOUR,0
NO_CH_TIME:
	;опенапюгнбюмхъ дкъ хмдхйюжхх
	CPI	MODE,0
	BRNE	NO_M0
	MOV	IND_H,HOUR
	MOV	IND_M,MINUTE
	RJMP	DECODE_NOW
NO_M0:
	CPI	MODE,1
	BRNE	NO_M1
	MOV	IND_H,MINUTE
	MOV	IND_M,SECOND
	RJMP	DECODE_NOW
NO_M1:
	CPI	MODE,2
	BRNE	NO_M2
	MOV	IND_H,B1_H
	MOV	IND_M,B1_M

	RJMP	DECODE_NOW
NO_M2:
	MOV	IND_H,B2_H
	MOV	IND_M,B2_M


DECODE_NOW:
	MOV	BIN,IND_H
	RCALL	BIN2BCD8
	MOV	TMR_TEMP,BIN

	MOV	BCD,TMR_TEMP
	CBR	BCD,0B11110000
	RCALL	BCD7
	MOV	HR,BCD
	
	MOV	BCD,TMR_TEMP
	SWAP	BCD
	CBR	BCD,0B11110000
	RCALL	BCD7
	MOV	HL,BCD
	;======================
	MOV	BIN,IND_M
	RCALL	BIN2BCD8
	MOV	TMR_TEMP,BIN

	MOV	BCD,TMR_TEMP
	CBR	BCD,0B11110000
	RCALL	BCD7
	MOV	MR,BCD
	
	MOV	BCD,TMR_TEMP
	SWAP	BCD
	CBR	BCD,0B11110000
	RCALL	BCD7
	MOV	ML,BCD

	;пецемепюжхъ
	LDI	DSP_SH,255
	CLC
	MOV	TMR_TEMP,DSP_N
SH_MAKE:
	ROL	DSP_SH
	SEC
	DEC	TMR_TEMP
	BRNE	SH_MAKE
	
	LDI	TMR_TEMP,0
	OUT	PORTB,TMR_TEMP
	
	SBR	DSP_SH,0B11110000
	OUT	PORTD,DSP_SH

	MOV	ZL,DSP_N
	LD	TMR_TEMP,Z

	BRBC	6,NO_ACTIVE_RING	
	SBR	TMR_TEMP,0B01000000
NO_ACTIVE_RING:
	OUT	PORTB,TMR_TEMP	

	INC	DSP_N
	CPI	DSP_N,5
	BRNE	DSP_OK
	LDI	DSP_N,1
DSP_OK:	
	LDI	TMR_TEMP,TMR_CONST
	OUT	TCNT0,TMR_TEMP
	OUT	0x3F,STACK
	RETI
;============================================================================
;============================================================================
;============================================================================
RESET:
	;мюярпнийю пецхярпнб х онпрнб
	LDI	TEMP,255
	OUT	DDRB,TEMP
	LDI	TEMP,0B00001111
	OUT	DDRD,TEMP
	
	LDI	TEMP,0
	OUT	PORTB,TEMP
	
	LDI	TEMP,255
	OUT	PORTD,TEMP

	LDI	DSP_N,1
	LDI	MODE,0
	LDI	CORR1,COEF_CORR1
	LDI	CORR2,COEF_CORR2

	LDI	SECOND,0
	LDI	MINUTE,0
	LDI	HOUR,12

	LDI	TEMP,0
	MOV	B1_H,TEMP
	MOV	B2_H,TEMP

	LDI	TEMP,60
	MOV	B1_M,TEMP
	MOV	B2_M,TEMP

	CLT
		
	;гюосяй рюилепю
	LDI	TEMP,TMR_CONST
	OUT	TCNT0,TEMP
	LDI	TEMP,0B00000010
	OUT	TIMSK,TEMP
	SEI
	LDI	TEMP,0B00000011
	OUT	TCCR0,TEMP

	;нямнбмни жхйк
MAIN:
	CPSE	HOUR,B1_H
	RJMP	TEST_BELL_2
	CPSE	MINUTE,B1_M
	RJMP	TEST_BELL_2
	SET
	RJMP	BELL_RING
TEST_BELL_2:
	CPSE	HOUR,B2_H
	RJMP	NO_BELL
	CPSE	MINUTE,B2_M
	RJMP	NO_BELL	
	SET
	RJMP	BELL_RING
NO_BELL:
	CLT
BELL_RING:
	;нопня йкюбхюрспш
	IN	A,PIND
	SBR	A,0B10001111

	DELAY	
	DELAY
	
	CPI	A,0B11101111
	BRNE	NOT_KEY_SEL
	;ялемю пефхлю
	INC	MODE
	CPI	MODE,4
	BRNE	OK_MODE
	LDI	MODE,0
OK_MODE:
	RJMP	MAIN
NOT_KEY_SEL:
	CPI	A,0B11011111
	BRNE	NOT_KEY_HOUR
	;нопедекъел цде мсфмн днаюбхрэ 1 вюя
		CPI	MODE,0
		BRNE	NO_H_M0
		MOV	A,HOUR
		RCALL	ADD_HOUR
		MOV	HOUR,A
		RJMP	MAIN
	NO_H_M0:
		CPI	MODE,2
		BRNE	NO_H_M2
		MOV	A,B1_H
		RCALL	ADD_HOUR
		MOV	B1_H,A
		RJMP	MAIN
	NO_H_M2:
		CPI	MODE,3
		BRNE	MAIN
		MOV	A,B2_H
		RCALL	ADD_HOUR
		MOV	B2_H,A
		RJMP	MAIN
NOT_KEY_HOUR:
	CPI	A,0B10111111
	BRNE	MAIN
	;нопедекъел цде мсфмн днаюбхрэ 1 лхмсрс
		CPI	MODE,0
		BRNE	NO_M_M0
		MOV	A,MINUTE
		RCALL	ADD_MIN
		MOV	MINUTE,A
		RJMP	MAIN
	NO_M_M0:
		CPI	MODE,2
		BRNE	NO_M_M2
		MOV	A,B1_M
		RCALL	ADD_MIN_BELL
		MOV	B1_M,A
		RJMP	MAIN
	NO_M_M2:
		CPI	MODE,3
		BRNE	OK_MODE		;EQVIVALENT: RJMP MAIN
		MOV	A,B2_M
		RCALL	ADD_MIN_BELL
		MOV	B2_M,A
		RJMP	MAIN
END:
	RJMP	END
;============================================================================
ADD_HOUR:
	CPI	A,23
	BRNE	NO_23
	LDI	A,0
	RET
NO_23:
	INC	A
	RET

ADD_MIN:
	CPI	A,59
	BRNE	NO_59
	LDI	A,0
	RJMP	ADD_MIN_RET
NO_59:
	INC	A
ADD_MIN_RET:
	LDI	SECOND,0
	RET

ADD_MIN_BELL:
	INC	A
	CPI	A,61
	BRNE	AM_BELL
	LDI	A,0
AM_BELL:
	RET
;============================================================================	
BIN2BCD8:
	CLR	BCD
BBCD8_1:
	SUBI	BIN,10
	BRCS	BBCD8_2
	INC	BCD
	RJMP	BBCD8_1
BBCD8_2:
	SUBI	BIN,-10

	SWAP	BCD
	OR	BIN,BCD
	RET
;============================================================================
BCD7:
	CPI	BCD,0
	BRNE	M1
	LDI	BCD,NUM0
	RET
M1:
	CPI	BCD,1
	BRNE	M2
	LDI	BCD,NUM1
	RET
M2:
	CPI	BCD,2
	BRNE	M3
	LDI	BCD,NUM2
	RET
M3:
	CPI	BCD,3
	BRNE	M4
	LDI	BCD,NUM3
	RET
M4:
	CPI	BCD,4
	BRNE	M5
	LDI	BCD,NUM4
	RET
M5:
	CPI	BCD,5
	BRNE	M6
	LDI	BCD,NUM5
	RET
M6:
	CPI	BCD,6
	BRNE	M7
	LDI	BCD,NUM6
	RET
M7:
	CPI	BCD,7
	BRNE	M8
	LDI	BCD,NUM7
	RET
M8:
	CPI	BCD,8
	BRNE	M9
	LDI	BCD,NUM8
	RET
M9:
	CPI	BCD,9
	BRNE	M_END
	LDI	BCD,NUM9
M_END:
	RET
;============================================================================
;============================================================================
;============================================================================