 ;ÏÐÎÃÐÀÌÌÀ ÌÎÄÓËßÒÎÐÀ TDA8822 ÄËß ØÈÍÛ I2C
; ÏÅÐÂÎÍÀ×ÀËÜÍÛÉ ÂÀÐÈÀÍÒ 29 ìàÿ 2001
INDF		EQU	00H
TMR0		EQU	01H
PCL		EQU	02H
STATUS		EQU	03H
FSR		EQU	04H
PORTA		EQU	05H
PORTB		EQU	06H
;		EQU	07H
EEDATA		EQU	08H
EEADR		EQU	09H
PCLATH		EQU	0AH
INTCON		EQU	0BH
;
OPTION_REG	EQU	81H
TRISA		EQU	85H
TRISB		EQU	86H
EECON1		EQU	88H
EECON2		EQU	89H

;  ÏÅÐÅÌÅÍÍÛÅ
STC		EQU	0C
CHET		EQU	0D
REG		EQU	0E
REGIM		EQU	0F

CH		EQU	10
PR		EQU	11
PR0		EQU	12
STATUS_TEMP	EQU	13
W_TEMP		EQU	14
MLB		EQU	15
MSB		EQU	16
CHEN		EQU	17
RFO		EQU	18
TPSG		EQU	19
PO		EQU	1A
TO		EQU	1B
S		EQU	1C
MD		EQU	1D
PS		EQU	1E	
FS		EQU	1F
KS		EQU	20
DATA1		EQU	21
DATA2		EQU	22
DATA3		EQU	23
DATA4		EQU	24
CHET_CIKL	EQU	25
TABL		EQU	26
RGUPR1		EQU	27
RGUPR2		EQU	28
RGUPR3		EQU	29
;		EQU	2A
;		EQU	2B
PERENOS		EQU	2C
PERENOS1	EQU	2D	
TEMPB0		EQU	2E
TEMPB1		EQU	2F
BUFER1		EQU	30
REZULT1		EQU	31
BUFER2		EQU	32
REZULT2		EQU	33
BUFER3		EQU	34
REZULT3		EQU	35
BUFER4		EQU	36
REZULT4		EQU	37
BUFER5		EQU	38
REZULT5		EQU	39
BUFER6		EQU	3A
REZULT6		EQU	3B
BUFER7		EQU	3C
REZULT7		EQU	3D
BUFER8		EQU	3E
REZULT8		EQU	3F
BARGB0		EQU	40
;		EQU	41
ACC		EQU	42
ACC0		EQU	43
ACC1		EQU	44
ACC2		EQU	45
_N		EQU	46
O_BYTE		EQU	47
I_BYTE		EQU	48
LOOP1		EQU	49
LOOP2		EQU	4A
DAT_VAL		EQU	4B
NUM_VAL		EQU	4C
ADR_HI		EQU	4D
ADR_LO		EQU	4E
DEV_ADR		EQU	4F
;ÍÀÇÍÀ×ÅÍÈÅ ÐÀÇÐßÄÎÂ ÏÎÐÒÀ À 
;	À0
;	À1	ÄÀÍÍÛÅ ÄËß ÐÅÃÈÑÒÐÀ ÑÄÂÈÃÀ (ÂÛÂÎÄ 2)
;	À2	ÒÀÊÒÎÂÛÉ ÂÕÎÄ CLOK (ÂÛÂÎÄ 3)
;	À3
;	À4
;	Â0	ÏÀÐÀËÅËÜÍÀß ÇÀÃÐÓÇÊÀ (ÂÛÂÎÄ 1)
;	Â1	ËÅÂÀß   ÊÍÎÏÊÀ
;	Â2	ÑÐÅÄÍßß ÊÍÎÏÊÀ
;	Â3	ÏÐÀÂÀß  ÊÍÎÏÊÀ
;	Â4	ØÈÍÀ ÓÏÐÀÂËÅÍÈß I2C SDA	
;	Â5	ØÈÍÀ ÓÏÐÀÂËÅÍÈß I2C SCL
;	Â6
;	Â7

	CONSTANT SDA=4
	CONSTANT SCL=5
;ÍÀÇÂÀÍÈß ÁÈÒÎÂ ÑÏÅÖÈÀËÜÍÛÕ ÐÅÃÈÑÒÐÎÂ
;EECON1
	CONSTANT	RD=0
	CONSTANT	WR=1
	CONSTANT	WREN=2
	CONSTANT	WREER=3
	CONSTANT	EEIF=4
;STATUS
	CONSTANT	C=00H
	CONSTANT	DC=01H
	CONSTANT	Z=02H
	CONSTANT	RP0=05H
;ÁÈÒ ÀÄÐÅÑÀ ÐÅÇÓËÜÒÀÒÀ W ÈËÈ F
	CONSTANT	W=0
	CONSTANT	F=1

;****************************************
	ORG 	0
	GOTO	INIT
	NOP
	NOP
	NOP
	GOTO	INTERUPT
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÏÐÈÍÀÆÀÒÈÈ 1-É ÊÍÎÏÊÈ
	ORG	10
	GOTO	CHEN_MINUS	; 0
	GOTO	IZM_RFO		; 1  
	GOTO	IZM_TPSG	; 2 
	GOTO	DEC_S		; 5  
	GOTO	DEC_MD		; 6 
	GOTO	DEC_PS		; 7 
	GOTO	DEC_FS		; 8
	RETURN			; 9
	GOTO	DEC_REGIM	; 10  
	GOTO	DEC_REGIM	; 11 
	GOTO	DEC_REGIM	; 12
	GOTO	DEC_REGIM	; 13 
	RETURN			; 14
	RETURN			; 15
	GOTO	IZM_PO		; 3
	GOTO	IZM_TO		; 4
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÏÐÈÍÀÆÀÒÈÈ 2-É ÊÍÎÏÊÈ
	ORG	20
	GOTO	INC_REGIM	; 0
	GOTO	INC_REGIM	; 1  
	GOTO	INC_REGIM	; 2 
	GOTO	INC_REGIM	; 5 
	GOTO	INC_REGIM	; 6 
	GOTO	INC_REGIM	; 7
	GOTO	INC_REGIM	; 8
	GOTO	CLRF_REGIM	; 9
	GOTO	PLUS100		; 11  
	GOTO	PLUS10		; 12 
	GOTO	PLUS1		; 13
	GOTO	PLUS01		; 13 
	RETURN			; 14
	RETURN			; 15
	GOTO	INC_REGIM	; 3 
	GOTO	INC_REGIM	; 4
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÏÐÈÍÀÆÀÒÈÈ 3-É ÊÍÎÏÊÈ
	ORG	30
	GOTO	CHEN_PLUS	; 0
 	GOTO	IZM_RFO		; 1  
	GOTO	IZM_TPSG	; 2 
	GOTO	INC_S		; 5  
	GOTO	INC_MD		; 6 
	GOTO	INC_PS		; 7 
	GOTO	INC_FS		; 8
	GOTO	INC_REGIM	; 9
	GOTO	INC_REGIM	; 10  
	GOTO	INC_REGIM	; 11 
	GOTO	INC_REGIM	; 12
	RETURN			; 13 
	RETURN			; 14
	RETURN			; 15
	GOTO	IZM_PO		; 3
	GOTO	IZM_TO		; 4
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÄËß ÈÍÄÈÊÀÖÈÈ
	ORG	40
	GOTO	INDIC_CHEN	; 0
	GOTO	INDIC_RFO	; 1  
	GOTO	INDIC_TPSG	; 2 
	GOTO	INDIC_S		; 5  
	GOTO	INDIC_MD	; 6 
	GOTO	INDIC_PS	; 7 
	GOTO	INDIC_FS	; 8
	GOTO	INDIC_U		; 9
	GOTO	INDIC_100	; 10  
	GOTO	INDIC_10	; 11 
	GOTO	INDIC_1		; 12
	GOTO	INDIC_01	; 13 
	RETURN			; 14
	RETURN			; 15
	GOTO	INDIC_PO	; 3
 	GOTO	INDIC_TO	; 4
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÄËß 
; ÏÐÅÎÁÐÀÇÎÂÀÍÈß ÏÅÐÂÎÉ ÖÈÔÐÛ
	ORG	50
	RETLW	077	; 0
	RETLW	014	; 1  
	RETLW	0D3	; 2 
	RETLW	0D5	; 3 
	RETLW	0B4	; 4  
	RETLW	0E5	; 5 
	RETLW	0E7	; 6 
	RETLW	054	; 7
	RETLW	0F7	; 8
	RETLW	0F5	; 9  
	RETLW	0F6	; 10 
	RETLW	0A7	; 11
	RETLW	063	; 12 
	RETLW	097	; 13
	RETLW	0E3	; 14
	RETLW	0E2	; 15
;*********************************
; ÂÅÊÒÎÐÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ ÄËß 
; ÏÐÅÎÁÐÀÇÎÂÀÍÈß ÏÅÐÂÎÉ ÖÈÔÐÛ
	ORG	60
	RETLW	0E7	; 0
	RETLW	081	; 1  
	RETLW	0B6	; 2 
	RETLW	0B5	; 3 
	RETLW	0D1	; 4  
	RETLW	075	; 5 
	RETLW	077	; 6 
	RETLW	0A1	; 7
	RETLW	0F7	; 8
	RETLW	0F5	; 9  
	RETLW	0F3	; 10 
	RETLW	057	; 11
	RETLW	066	; 12 
	RETLW	097	; 13
	RETLW	076	; 14
	RETLW	072	; 15
;*********************************
	ORG	70
; ÏÎÄÏÐÎÃÐÀÌÌÀ ÂÛ×ÈÑËßÅÌÛÕ ÏÅÐÅÕÎÄÎÂ
; Â ÐÅÃÈÑÒÐÅ W ÀÄÐÅÑ ÒÀÁËÈÖÈ ÏÅÐÅÕÎÄÎÂ
; Â ÐÅÃÈÑÒÐÅ REGIM ÀÄÐÅÑ ÏÅÐÅÕÎÄÀ ÂÍÓÒÐÈ ÒÀÁËÈÖÈ
VEKTOR
	MOVWF	TABL
	MOVLW	0F
	ANDWF	REGIM,1
	MOVF	REGIM,0
VEKTOR1
	CLRWDT
	CLRF	PCLATH
	BCF	STATUS,C
	ADDWF	TABL,0
	MOVWF	PCL
; ÄÀËÅÅ ÂÛ×ÈÑËßÅÌÛÉ ÏÅÐÅÕÎÄ
;*********************
EROR
	CLRF	STATUS
	CLRF	INTCON		; ÇÀÏÐÅÒ ÏÐÅÐÛÂÀÍÈÉ
	GOTO 	EROR		; ÎÆÈÄÀÅÌ ÑÁÐÎÑÀ ÎÒ ÑÒÎÐÎÆÅÂÎÃÎ ÒÀÉÌÅÐÀ
	NOP
INIT
	BSF	STATUS,RP0
	MOVLW	00H		; ÍÀÑÒÐÎÉÊÀ ÏÎÐÒÀ A
	MOVWF	TRISA
	MOVLW	0FEH		; ÍÀÑÒÐÎÉÊÀ ÏÎÐÒÀ Â
	MOVWF	TRISB

	MOVLW	87		;ÏÐÅÄÅËÈÒÅËÜ ÏÎÄÊËÞ×ÅÍ Ê ÒÀÉÌÅÐÓ, ÊÎÝÔ ÄÅËÅÍÈß.-256
	MOVWF	OPTION_REG
	BCF	STATUS,RP0

	CLRF	INTCON		; ÍÀÑÒÐÎÉÊÀ ÏÐÅÐÛÂÀÍÈß ÎÒ ÒÀÉÌÅÐÀ
	BSF	INTCON,5	; ÐÀÇÐÅØÅÍÎ ÏÐÅÐÛÂÀÍÈÅ ÎÒ ÒÀÉÌÅÐÀ
	BSF	INTCON,7	; ÂÑÅ ÍÅ ÌÀÑÊÈÐÓÅÌÛÅ ÏÐÅÐÛÂÀÍÈß ÐÀÇÐÅØÅÍÛ
;****************************************
; ÍÀ×ÀËÜÍÛÅ ÓÑÒÀÍÎÂÊÈ ÐÅÃÈÑÒÐÎÂ ÑÈÑÒÅÌÛ
	CLRF	PORTA
	CLRF	PORTB

	MOVLW	8
	MOVWF	CHET_CIKL

	CLRF	REGIM

	CALL	EEPROM_REED
	BTFSC	STATUS,Z
	GOTO	ALL_GOOD
;****************************************
;ÇÍÀ×ÅÍÈß ÏÅÐÅÌÅÍÍÛÕ ÏÎ ÓÌÎË×ÀÍÈÞ
	MOVLW	11
	MOVWF	MSB
	MOVLW	38
	MOVWF	MLB
	MOVLW	1
	MOVWF	RFO
	MOVLW	0
	MOVWF	TPSG
	MOVLW	1
	MOVWF	PO
	MOVLW	0
	MOVWF	TO
	MOVLW	1
	MOVWF	S
	MOVLW	1
	MOVWF	MD
	MOVLW	1
	MOVWF	PS
	MOVLW	1
	MOVWF	FS
;****************************************
ALL_GOOD
; ÖÈÊË ÎÆÈÄÀÍÈß ÏÐÅÐÛÂÀÍÈß


METKAS1	
	CALL	TEST_COR
	CALL	CHEN_CONV
	CALL	CONVERT
	CALL	PREOBR
	CALL	NASTR
	CALL	INDIC
	CALL	INDICATION
	CALL	MEMOR
CICL_WAIT
	MOVLW	.5
	MOVWF	LOOP2
	CALL 	DELAY_SHORT1
	BCF	PORTA,0

	MOVLW	.5
	MOVWF	LOOP2
	CALL 	DELAY_SHORT1
	BSF	PORTA,0

 	GOTO	CICL_WAIT
;***********************************
; ÎÁÑËÓÆÈÂÀÍÈÅ ÏÐÅÐÛÂÀÍÈß
INTERUPT
	CLRWDT
PUSH	MOVWF	W_TEMP		; \
	MOVF	STATUS,0	; / ÑÎÕÐÀÍÅÍÈÅ Â ÑÒÅÊÅ
	MOVWF	STATUS_TEMP	;/

	MOVF	RGUPR2,0
	MOVWF	RGUPR3

	MOVLW	00
	IORWF	REGIM,0
	BTFSC	STATUS,Z
	GOTO	METKA
	BTFSC	CHET_CIKL,1
	CLRF	RGUPR3
METKA
	CALL	INDICATION
	DECFSZ	CHET_CIKL,1
	GOTO	EXIT		; ÎÏÐÎÑ ÊËÀÂÈÀÒÓÐÛ ÏÐÎÈÇÂÎÄÈÒÑß ÍÅ ÏÎ ÊÀÆÄÎÌÓ ÏÐÅÐÛÂÀÍÈÞ
	MOVLW	8
	MOVWF	CHET_CIKL

	BTFSS	PORTB,1		;PORTB,1 - ÈÍÄÈÊÀÒÎÐ VER2 , PORTB,1 - ÈÍÄÈÊÀÒÎÐ VER1
	GOTO	KEY3		; -
	BTFSS	PORTB,2		;PORTB,3 - ÈÍÄÈÊÀÒÎÐ VER2 , PORTB,2 - ÈÍÄÈÊÀÒÎÐ VER1
	GOTO	KEY2		; ÈÇÌÅÍÅÍÈÅ ÐÅÆÈÌÀ
	BTFSS	PORTB,3		;PORTB,2 - ÈÍÄÈÊÀÒÎÐ VER2 , PORTB,3 - ÈÍÄÈÊÀÒÎÐ VER1
	GOTO	KEY1		; +
	GOTO	EXIT
SETCXA
	CALL	TEST_COR
	CALL	CHEN_CONV
	CALL	CONVERT
	CALL	PREOBR
	CALL	NASTR
	CALL	INDIC
	CALL	INDICATION
	CALL	MEMOR

EXIT
POP	MOVF	STATUS_TEMP,0	;\
	MOVWF	STATUS		; \ ÂÎÑÒÀÍÎÂËÅÍÈÅ ÈÇ ÑÒÅÊÀ
	MOVF	W_TEMP,0	; /
	BCF	INTCON,2	; ÑÁÐÎÑ ÔËÀÃÀ ÏÐÅÐÛÂÀÍÈß ÎÒ ÒÀÉÌÅÐÀ
	RETFIE
;****************************************
KEY1	MOVLW	30
	CALL	VEKTOR
	GOTO	SETCXA
;****************************************
KEY2	MOVLW	20
	CALL	VEKTOR
	GOTO	SETCXA
;****************************************
KEY3	MOVLW	10
	CALL	VEKTOR
	GOTO	SETCXA
;****************************************
CLRF_REGIM
	CLRF	REGIM
	RETURN
;****************************************
INC_REGIM
	INCF	REGIM,1
	RETURN
;****************************************
DEC_REGIM
	DECF	REGIM,1
	RETURN
;****************************************
IZM_RFO
	COMF	RFO,1
	MOVLW	01
	ANDWF	RFO,1
	RETURN
;****************************************
IZM_TPSG
	COMF	TPSG,1
	MOVLW	01
	ANDWF	TPSG,1
	RETURN
;****************************************
IZM_PO	COMF	PO,1
	MOVLW	01
	ANDWF	PO,1
	RETURN
;****************************************
IZM_TO	COMF	TO,1
	MOVLW	01
	ANDWF	TO,1
	RETURN
;****************************************
INC_S	INCF	S,1
INC_S1	MOVLW	3
	ANDWF	S,1
	RETURN
;****************************************
DEC_S	DECF	S,1
	GOTO	INC_S1
;****************************************
INC_MD	INCF	MD,1
INC_MD1	MOVLW	7
	ANDWF	MD,1
	RETURN
;****************************************
DEC_MD	DECF	MD,1
	GOTO	INC_MD1
;****************************************
INC_PS	INCF	PS,1
INC_PS1	MOVLW	7
	ANDWF	PS,1
	RETURN
;****************************************
DEC_PS	DECF	PS,1
	GOTO	INC_PS1
;****************************************
INC_FS	INCF	FS,1
INC_FS1	MOVLW	7
	ANDWF	FS,1
	RETURN
;****************************************
DEC_FS		DECF	FS,1
	GOTO	INC_FS1
;****************************************
; ÏÎÄÏÐÎÃÐÀÌÌÀ ÏÎÄÃÎÒÎÂÊÈ ÄÀÍÍÛÕ ÄËß 
; ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß TDA8822
PREOBR
	MOVF	MSB,0
	MOVWF	DATA1
	MOVF	MLB,0
	MOVWF	DATA2
	BCF	STATUS,C
	RLF 	DATA2,1
	RLF	DATA1,1

	BCF	DATA1,6
	BTFSC	TPSG,0
	BSF	DATA1,6

	MOVF	FS,0
	MOVWF	DATA3
	SWAPF	DATA3,1
	BSF	DATA3,7
	BCF	STATUS,C
	RLF	PS,0
	IORWF	DATA3,1
	MOVF	MD,0
	MOVWF	DATA4
	BCF	STATUS,C
	RLF	DATA4,1
	RLF	DATA4,1
	MOVF	S,0
	IORWF	DATA4,1
	BCF	STATUS,C
	RLF	DATA4,1
	RLF	DATA4,1

	BCF	DATA4,2
	BTFSC	RFO,0
	BSF	DATA4,2

	BCF	DATA4,1
;	BTFSC	PO,0
;	BSF	DATA4,1	

	BCF	DATA4,0	
;	BTFSC	TO,0
;	BSF	DATA4,0
	RETURN
;****************************************
; ÏÐÎÂÅÐÊÀ ÍÀ ÊÎÐÐÅÊÒÍÎÑÒÜ ×ÀÑÒÎÒÛ
TEST_COR
	CLRWDT
	BCF	MSB,7
	BCF	MSB,6
	BCF	MSB,5

	MOVF	MSB,0
	BCF	STATUS,C
	SUBLW	0D
	BTFSC	STATUS,C
	GOTO	MINIMUM

	MOVF	MSB,0
	BCF	STATUS,C
	SUBLW	18
	BTFSS	STATUS,C
	GOTO	MAXIMUM

	RETURN
MINIMUM
	MOVLW	0E
	MOVWF	MSB
	MOVLW	0B8
	MOVWF	MLB
	RETURN
MAXIMUM
	MOVLW	0E
	MOVWF	MSB
	MOVLW	0B8
	MOVWF	MLB
	RETURN



;****************************************
; ÏÐÎÃÐÀÌÌÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß ÌÍÎÆÈÒÅËß 
; ÑÕÀ3050 Â ×ÀÑÒÎÒÍÛÉ ÊÀÍÀË
CHEN_CONV
	CLRWDT
	CALL	CLRF_REG
	MOVF	MLB,0
	MOVWF	ACC1
	MOVF	MSB,0
	MOVWF	ACC0
	BCF	STATUS,C
	RLF	ACC1,1
	RLF	ACC0,1
	RLF	ACC1,1
	RLF	ACC0,1
	MOVLW	39-.20
	BCF	STATUS,C
	SUBWF	ACC0,1
	CLRF	ACC1

	CALL	DIGIT_CONV

	MOVF	REZULT2,0
	MOVWF	CHEN
	SWAPF	CHEN,1
	MOVF	REZULT1,0
	IORWF	CHEN,1
	RETURN
;****************************************
; ÏÐÎÃÐÀÌÌÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß ÌÍÎÆÈÒÅËß ÑÕÀ3050
;  Â ×ÀÑÒÎÒÓ F=125*(M+2)
CONVERT
	CLRWDT
	CALL	CLRF_REG
	CALL	UM1608
	CALL	DIGIT_CONV
	RETURN
;****************************************
CLRF_REG
	CLRWDT
	CLRF	ACC0
	CLRF	ACC1
	CLRF	ACC2
	CLRF	REZULT1
	CLRF	REZULT2
	CLRF	REZULT3
	CLRF	REZULT4
	CLRF	REZULT5
	CLRF	REZULT6
	CLRF	BUFER1
	CLRF	BUFER2
	CLRF	BUFER3
	CLRF	BUFER4
	CLRF	BUFER5
	CLRF	BUFER6
	RETURN
;****************************************
; ÏÐÎÃÐÀÌÌÀ ÓÌÍÎÆÅÍÈß ÌÍÎÆÈÒÅËß ÍÀ 125
UM1608
	CLRWDT
	MOVF	MLB,0
	MOVWF	TEMPB1
	MOVF	MSB,0
	MOVWF	TEMPB0
	CLRWDT
	MOVLW	8
	MOVWF	CH
	MOVLW	.125
	MOVWF	BARGB0
	BCF	STATUS,C
LOOPUM1608
	CLRWDT
	RRF	BARGB0,1
	BTFSS	STATUS,C
	GOTO	LUM1608NA
	MOVF	TEMPB1,0
	ADDWF	ACC1,1
	MOVF	TEMPB0,0
	BTFSC	STATUS,C
	INCFSZ	TEMPB0,0
	ADDWF	ACC2,1
LUM1608NA
	RRF	ACC2,1
	RRF	ACC1,1
	RRF	ACC0,1
	DECFSZ	CH,1
	GOTO	LOOPUM1608
	RETURN
;****************************************
; ÏÐÅÎÁÐÀÇÎÂÀÍÈÅ Â ÄÅÑßÒÈ×ÍÓÞ ÔÎÐÌÓ
DIGIT_CONV
	MOVLW	01
	MOVWF	BUFER1
	MOVF	ACC0,0
	CALL	ANALIZ
	MOVF	ACC1,0
	CALL	ANALIZ
	MOVF	ACC2,0
	CALL	ANALIZ
	RETURN
;****************************************
; ÏÐÎÃÐÀÌÌÀ ÔÎÐÌÈÐÎÂÀÍÈß ÄÅÑßÒÈ×ÍÛÕ ÂÅÑÎÂÛÕ 
; ÊÎÝÔ. ÏÓÒÅÌ ÑÄÂÈÃÀ ÂËÅÂÎ Ò.Å. ÓÌÍÎÆÅÍÈÅ ÍÀ 2  
; È ÂÛÏÎËÍÅÍÈÅ ÄÅÑßÒÈ×ÍÎÉ ÊÎÐÐÅÊÖÈÈ
SHIFT_REG
	MOVLW	6
	MOVWF	CH
	MOVLW	BUFER1
	MOVWF	FSR
	CLRF	PERENOS
SHIFT1
	CLRWDT
	MOVF	PERENOS,0
	MOVWF	PERENOS1
	CLRF	PERENOS
	CALL	SHIFT
	INCF	FSR,1
	INCF	FSR,1
	DECFSZ	CH,1
	GOTO	SHIFT1
	RETURN
SHIFT
	BCF	STATUS,C
	RLF	INDF,1
	BTFSC	PERENOS1,0
	INCF	INDF,1
	GOTO	SUM_SHIFT
;****************************************
; ÏÐÎÃÐÀÌÌÀ ÑÓÌÌÈÐÎÂÀÍÈß ØÅÑÒÈÐÀÇÐßÄÍÛÕ ×ÈÑÅË
SUMSIX
	MOVLW	6
	MOVWF	CH
	MOVLW	BUFER1
	MOVWF	FSR
	CLRF	PERENOS
SUMSIX1
	CLRWDT
	MOVF	PERENOS,0
	MOVWF	PERENOS1
	CLRF	PERENOS
	CALL	SUM
	INCF	FSR,1
	DECFSZ	CH,1
	GOTO	SUMSIX1
	RETURN
SUM
	MOVF	INDF,0
	INCF	FSR,1
	BTFSC	PERENOS1,0
	INCF	INDF,1
	BCF	STATUS,C
	ADDWF	INDF,1
SUM_SHIFT
	BTFSC	INDF,4
	GOTO	CORECT
	BTFSS	INDF,3
	RETURN	; ÍÅÒ ÄÅÑßÒÈ×ÍÎÉ ÊÎÐÐÅÊÖÈÈ
	BTFSC	INDF,2
	GOTO	CORECT
	BTFSC	INDF,1
	GOTO	CORECT
	RETURN	; ÍÅÒ ÄÅÑßÒÈ×ÍÎÉ ÊÎÐÐÅÊÖÈÈ
CORECT
	MOVLW	6
	ADDWF	INDF,1
	BCF	INDF,4
	BSF	PERENOS,0
	RETURN
;****************************************
ANALIZ
	MOVWF	ACC
	MOVLW	8
	MOVWF	STC
ANALIZ1
	BTFSC	ACC,0
	CALL	SUMSIX
	CALL	SHIFT_REG
	RRF	ACC,1
	DECFSZ	STC,1
	GOTO	ANALIZ1
	RETURN
;****************************************
	; ÏÐÎÃÐÀÌÌÀ ÑÓÌÌÈÐÎÂÀÍÈß
PLUS
	BCF	STATUS,C
	MOVF	TEMPB0,0
	ADDWF	MLB,1
	BTFSC	STATUS,C
	INCF	TEMPB1,1
	BCF	STATUS,C
	MOVF	TEMPB1,0
	ADDWF	MSB,1
	RETURN
;****************************************
	; ÏÐÎÃÐÀÌÌÀ ÂÛ×ÈÒÀÍÈß
MINUS
	BCF	STATUS,C
	MOVF	TEMPB0,0
	SUBWF	MLB,1
	BTFSS	STATUS,C
	DECF	MSB,1
	MOVF	TEMPB1,0
	SUBWF	MSB,1
	RETURN
;****************************************
PLUS01	
	BCF	STATUS,C
	MOVF	REZULT3,0
	SUBLW	08
	BTFSC	STATUS,Z
	GOTO	MINUS09
	BCF	STATUS,C
	INCF	MLB,1
	BTFSC	STATUS,C
	INCF	MSB,1	
	RETURN
MINUS09
	MOVLW	.7
	MOVWF	TEMPB0
	CLRF	TEMPB1
	GOTO	MINUS
;****************************************
PLUS1
	MOVF	REZULT4,0
	BCF	STATUS,C
	SUBLW	09
	BTFSC	STATUS,Z
	GOTO	MINUS9
	MOVLW	.8
	MOVWF	TEMPB0
	CLRF	TEMPB1
	GOTO	PLUS
MINUS9
	MOVLW	.72
	MOVWF	TEMPB0
	CLRF	TEMPB1
	GOTO	MINUS
;****************************************
PLUS10
	MOVF	REZULT5,0
	BCF	STATUS,C
	SUBLW	09
	BTFSC	STATUS,Z
	GOTO	MINUS90
	MOVLW	.80
	MOVWF	TEMPB0
	CLRF	TEMPB1
	GOTO	PLUS
MINUS90
	MOVLW	0D0
	MOVWF	TEMPB0
	MOVLW	02
	MOVWF	TEMPB1
	GOTO	MINUS
;****************************************
PLUS100
	MOVF	REZULT6,0
	BCF	STATUS,C
	SUBLW	09
	BTFSC	STATUS,Z
	GOTO	MINUS900
	MOVLW	20
	MOVWF	TEMPB0
	MOVLW	03
	MOVWF	TEMPB1
	GOTO	PLUS
MINUS900
	MOVLW	20
	MOVWF	TEMPB0
	MOVLW	1C
	MOVWF	TEMPB1
	GOTO	MINUS
;****************************************
CHEN_PLUS
	MOVLW	.64
	MOVWF	TEMPB0
	CLRF	TEMPB1
	CALL	PLUS
CHEN_PLUS1
	MOVLW	0C0
	ANDWF	MLB,0
	IORLW	38
	MOVWF	MLB
	RETURN
;****************************************
CHEN_MINUS
	MOVLW	.64
	MOVWF	TEMPB0
	CLRF	TEMPB1
	CALL	MINUS
	GOTO	CHEN_PLUS1
;****************************************
INDIC
	MOVLW	40
	GOTO	VEKTOR
INDIC_CHEN
	GOTO	DIGIT
INDIC_RFO
	MOVLW	062		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ Ã
	MOVWF	RGUPR2
	MOVF	RFO,0
	GOTO	INDIC_ALL1
INDIC_TPSG
	MOVLW	0F6		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ A
	MOVWF	RGUPR2
	MOVF	TPSG,0
	GOTO	INDIC_ALL1
INDIC_PO
	MOVLW	097		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ d
	MOVWF	RGUPR2
	MOVF	PO,0
	GOTO	INDIC_ALL1
INDIC_TO
	MOVLW	087		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ O
	MOVWF	RGUPR2
	MOVF	TO,0
	GOTO	INDIC_ALL1
INDIC_S
	MOVLW	063		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ C
	MOVWF	RGUPR2
	MOVF	S,0
	GOTO	INDIC_ALL
INDIC_MD
	MOVLW	0B6		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ
	MOVWF	RGUPR2
	MOVF	MD,0
	GOTO	INDIC_ALL
INDIC_PS
	MOVLW	0F2		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍÀÊ P
	MOVWF	RGUPR2
	MOVF	PS,0
	GOTO	INDIC_ALL
INDIC_FS
	MOVLW	0E2		; ÎÒÎÁÐÀÆÀÅÒÑß ÇÍ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ; ÊÎËÈ×ÅÑÒÂÎ ÁÈÒ Â ÐÅÃÈÑÒÐÅ
	MOVWF	CHET
   	COMF	REG,1 		; ÈÍÂÅÐÒÈÐÎÂÀÒÜ ÄËß ÎÁÙÅÃÎ ÀÍÎÄÀ
USTCOM22
	CLRWDT
	BCF	PORTA,3
	BTFSC	REG,7		; ÅÑËÈ ÀÍÀËÈÇÈÐÓÅÌÛÉ ÁÈÒ ÐÀÂÅÍ 1 ÒÎ ÓÑÒÀÍÀÂËÈÂÀÅÌ 
	BSF	PORTA,3		; ØÈÍÓ ÄÀÍÍÛÕ Â 1, ÈÍÀ×Å ÏÐÎÏÓÑÊÀÅÌ ÓÑÒÀÍÎÂÊÓ Â 1
	BSF	PORTA,2		; ÏÎÄÀÅÌ ÑÈÃÍÀË ÑÒÐÎÁÈÐÎÂÀÍÈß
	BCF	PORTA,2
	RLF	REG,1		; ÑÄÂÈÃ ÂËÅÂÎ ÄËß ÀÍÀËÈÇÀ ÑËÅÄÓÞÙÅÃÎ ÁÈÒÀ
	DECFSZ	CHET,1
	GOTO	USTCOM22
	RETURN
;****************************************
DIGIT
	MOVF	CHEN,0
DIGIT1
	MOVWF	PR0
	MOVWF	PR
	CALL	DIGIT3
	MOVWF	RGUPR1
	SWAPF	PR0,0
	MOVWF	PR
	CALL	DIGIT2
	MOVWF	RGUPR2
	RETURN

; ÏÎÄÏÐÎÃÐÀÌÌÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß Â ÊÎÄ ÄÂÓÕÐÀÇÐßÄÍÎÃÎ ÈÍÄÈÊÀÒÎÐÀ
; ÏÅÐÂÀß ÖÈÔÐÀ
DIGIT2
	MOVWF	PR
	MOVLW	50
	MOVWF	TABL
DIG_1
	MOVF	PR,0
	ANDLW	0F
	GOTO	VEKTOR1
;****************************************
; ÏÎÄÏÐÎÃÐÀÌÌÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß Â ÊÎÄ ÄÂÓÕÐÀÇÐßÄÍÎÃÎ ÈÍÄÈÊÀÒÎÐÀ
; ÂÒÎÐÀß ÖÈÔÐÀ
DIGIT3
	MOVWF	PR
	MOVLW	60
	MOVWF	TABL
	GOTO	DIG_1
;****************************************
MEMOR
	CLRF	INTCON		;ÇÀÏÐÅÒ ÂÑÅÕ ÏÐÅÐÛÂÀÍÈÉ ÍÀ ÂÐÅÌß ÇÀÏÈÑÈ Â ÏÀÌßÒÜ
	CLRF	KS
	CLRF	EEADR
	MOVF	MSB,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	MLB,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	RFO,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	TPSG,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	PO,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	TO,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	S,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	MD,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	PS,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	FS,0
	BCF	STATUS,C
	ADDWF	KS,1
	MOVWF	EEDATA
	CALL	WR_FLASH
	INCF	EEADR,1
	MOVF	KS,0
	MOVWF	EEDATA
	CALL	WR_FLASH
	CLRF	INTCON		; ÍÀÑÒÐÎÉÊÀ ÏÐÅÐÛÂÀÍÈß ÎÒ ÒÀÉÌÅÐÀ
	BSF	INTCON,5
	BSF	INTCON,7
	RETURN
;****************************************
EEPROM_REED
	CLRF	KS
	CLRF	EEADR
	CALL	RD_FLASH
	MOVWF	MSB
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	MLB
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	RFO
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	TPSG
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	PO
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	TO
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	S
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	MD
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	PS
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	MOVWF	FS
	BCF	STATUS,C
	ADDWF	KS,1
	INCF	EEADR,1
	CALL	RD_FLASH
	BCF	STATUS,C
	SUBWF	KS,0	;ÅÑËÈ ÊÎÍÒÐÎËÜÍÀß ÑÓÌÌÀ ÑÎÂÏÀÄÀÅÒ ÒÎ STATUS,Z = 1
	RETURN
;****************************************
RD_FLASH
	CLRWDT
	BSF	STATUS,RP0
	BSF	EECON1,RD
	BCF	STATUS,RP0
	NOP
	MOVF	EEDATA,0
	RETURN
;****************************************
WR_FLASH
	CLRWDT
	BSF	STATUS,RP0
	BSF	EECON1,WREN
	MOVLW	55
	MOVWF	EECON2
	MOVLW	0AA
	MOVWF	EECON2
	BSF	EECON1,WR
WAIT_WR
	CLRWDT
	BTFSS	EECON1,EEIF
	GOTO	WAIT_WR
	BCF	EECON1,EEIF
	BCF	STATUS,RP0
	RETURN
;****************************************
;ÍÀÑÒÐÎÉÊÀ ÌÈÊÐÎÑÕÅÌÛ ÌÎÄÓËßÒÎÐÀ
NASTR
	CLRWDT
	CALL	START
; SLAVE ÀÄÐÅÑ ÌÈÊÐÎÑÕÅÌÛ ÑÕÀ3050
	MOVLW	0CAH
	MOVWF 	O_BYTE
	CALL	OUT_BYTE
	CALL	NACK
; ÏÅÐÂÛÉ ÁÀÉÒ ÓÏÐÀÂËßÞÙÅÃÎ ÑËÎÂÀ
	MOVF	DATA1,0
	MOVWF 	O_BYTE
	CALL	OUT_BYTE
	CALL	NACK
; ÂÒÎÐÎÉ ÁÀÉÒ ÓÏÐÀÂËßÞÙÅÃÎ ÑËÎÂÀ
	MOVF	DATA2,0
	MOVWF 	O_BYTE
	CALL	OUT_BYTE
	CALL	NACK
; ÒÐÅÒÈÉ ÁÀÉÒ ÓÏÐÀÂËßÞÙÅÃÎ ÑËÎÂÀ
	MOVF	DATA3,0
	MOVWF 	O_BYTE
	CALL	OUT_BYTE
	CALL	NACK
; ×ÅÒÂÅÐÒÛÉ ÁÀÉÒ ÓÏÐÀÂËßÞÙÅÃÎ ÑËÎÂÀ
	MOVF	DATA4,0
	MOVWF 	O_BYTE
	CALL	OUT_BYTE
	CALL	NACK
	CALL	STOP
	RETURN
;****************************************
;ÏÎÄÏÐÎÃÐÀÌÌÛ ØÈÍÛ I2C
IN_BYTE
	CLRF	I_BYTE
	MOVLW	.8
	MOVWF	_N
	CALL	HIGH_SDA
IN_BIT
	CALL 	HIGH_SCL
	BTFSS	PORTB,SDA
	GOTO	IN_ZERO
	GOTO	IN_ONE
IN_ZERO
	BCF	STATUS,C
	RLF	I_BYTE,F
	GOTO	CONT_IN
IN_ONE
	BCF	STATUS,C
	RLF	I_BYTE,F
	INCF	I_BYTE,F
	GOTO	CONT_IN
CONT_IN
	CALL	LOW_SCL
	DECFSZ	_N,F
	GOTO	IN_BIT
	RETURN
OUT_BYTE
	MOVLW	.8
	MOVWF	_N
OUT_BIT
	BCF	STATUS,C
	RLF	O_BYTE,F
	BTFSS 	STATUS,C
	GOTO	OUT_ZERO
	GOTO	OUT_ONE
OUT_ZERO
	CALL	LOW_SDA
	CALL	CLOCK_PULSE
	CALL	HIGH_SDA
	GOTO	OUT_CONT
OUT_ONE
	CALL	HIGH_SDA
	CALL	CLOCK_PULSE
	GOTO	OUT_CONT
OUT_CONT
	DECFSZ	_N,F
	GOTO	OUT_BIT
	RETURN
NACK
	CALL	HIGH_SDA
	CALL	CLOCK_PULSE
	RETURN
ACK
	CALL	LOW_SDA
	CALL	CLOCK_PULSE
	RETURN
START
	CALL	LOW_SCL
	CALL	HIGH_SDA
	CALL	HIGH_SCL
	CALL	LOW_SDA
	CALL	LOW_SCL
	RETURN
STOP
	CALL	LOW_SCL
	CALL	LOW_SDA
	CALL	HIGH_SCL
	CALL	HIGH_SDA
	RETURN
CLOCK_PULSE
	CALL	HIGH_SCL
	CALL	LOW_SCL
	RETURN
HIGH_SDA
	BSF	STATUS,RP0
	BSF	TRISB,SDA
	BCF	STATUS,RP0
	CALL	DELAY_SHORT
	RETURN
LOW_SDA
	BCF	PORTB,SDA
	BSF	STATUS,RP0
	BCF	TRISB,SDA
	BCF	STATUS,RP0
	CALL	DELAY_SHORT
	RETURN
HIGH_SCL
	BSF	STATUS,RP0
	BSF	TRISB,SCL
	BCF	STATUS,RP0
	CALL	DELAY_SHORT
	RETURN
LOW_SCL
	BCF	PORTB,SCL
	BSF	STATUS,RP0
	BCF	TRISB,SCL
	BCF	STATUS,RP0
	CALL	DELAY_SHORT
	RETURN
DELAY_SHORT
	MOVLW	.5
	MOVWF	LOOP2
DELAY_SHORT1
	CLRWDT
	DECFSZ	LOOP2,F
	GOTO	DELAY_SHORT1
	RETURN
DELAY_LONG
	MOVLW	.250
DELAY_N_MS
	MOVWF	LOOP1
OUTTER
	MOVLW	.110
	MOVWF	LOOP2
INNER
	CLRWDT
	NOP
	NOP
	NOP
	NOP
	NOP
	DECFSZ	LOOP2,F
	GOTO	INNER
	DECFSZ	LOOP1,F
	GOTO	OUTTER
	RETURN
;****************************************
	END
