 LIST P=16F870	;a listázás a kiválasztott PIC-nek megfelelő legyen és INHX32 hexa bináris fájl szülessen fordításkor.
 #include <P16F870.INC>

 __CONFIG _XT_OSC&_WDT_OFF&_BODEN_ON&_LVP_OFF&_PWRTE_ON&_WDT_OFF
 ERRORLEVEL -302

 #define	RTC_READ	PORTA, 5
 #define	RTC_WRITE	PORTA, 4
 #define	RTC_ALE	PORTA, 3
 #define	PC_BE	PORTA, 0

	CBLOCK 0x20
		DP
		DIS0
		DIS1
		DIS2
		DIS3
		DIS4
		DIS5
		DIS6
		DIS7

		DX
		CX

		T1
		T2
		PB1
		PB2

		RXCIM
		RXADAT
		RXELL
		RXC
		DELAY_REG

		RXINC
		RECDATA

		TXINC
		RXCLEAR
		PCD

		RTC_T1
		RTC_T2
		RTC_T3

		TXFLAG1
		TXFLAG2
		TXDATA1
		TXDATA2
	ENDC

	CBLOCK	0x50

	ENDC
	CBLOCK	0x60
		RTC_MPERC
		RTC_MPERC_ALARM
		RTC_PERC
		RTC_PERC_ALARM
		RTC_ORA
		RTC_ORA_ALARM
		RTC_HETNAPJA
		RTC_NAP
		RTC_HONAP
		RTC_EV
	ENDC
	CBLOCK	0x6E
		PWM_DC
	ENDC
	CBLOCK	0x70
		IDO_HONAP
		IDO_NAP
		IDO_ORA
		IDO_PERC
	ENDC
	CBLOCK	0x7E
		W_TEMP
		STATUS_TEMP
	ENDC

	ORG	0x0000
 	BCF	STATUS, RP0
	BCF	STATUS, RP1
 	GOTO	START

	ORG	0x0004
	MOVWF	W_TEMP		;Copy W to TEMP register
	SWAPF	STATUS, W	;Swap status to be saved into W
	CLRF	STATUS		;bank 0, regardless of current bank, Clears IRP,RP1,RP0
	MOVWF	STATUS_TEMP	;Save status to bank zero STATUS_TEMP register


	BTFSC	INTCON, T0IF
	CALL	TMR0_INT

	BTFSC	PIR1, TMR2IF
	CALL	TMR2_INT



	SWAPF	STATUS_TEMP, W	;Swap STATUS_TEMP register into W (sets bank to original state)
	MOVWF	STATUS		;Move W into STATUS register
	SWAPF	W_TEMP, F	;Swap W_TEMP
	SWAPF	W_TEMP, W	;Swap W_TEMP into W


	RETFIE

TMR0_INT
	BCF	INTCON, T0IF
	CLRF	PORTB
	RETURN

TMR2_INT
	BCF	PIR1,TMR2IF	; TMR2 Interrupt Flag törlése

;	BCF	STATUS, C
;	RRF	PWM_DC, W
	MOVFW	PWM_DC
	MOVWF	TMR0

	CALL	SERIAL_SEND

	CLRF	PORTB
	BSF	STATUS, RP0	;BANK 1
	BSF	TRISC, 0
	BSF	TRISC, 7		;PORTC 0,7 bemenet
	BCF	STATUS, RP0	;BANK 0
	MOVFW	PORTC
;	MOVFW	PCD
	MOVWF	CX
	BSF	STATUS, RP0	;BANK 1
	CLRF	TRISC		;PORTC kimenet
	BCF	STATUS, RP0	;BANK 0
	INCF	RXCLEAR, F
	BTFSC	STATUS, Z
	CLRF	RXC
	BTFSS	CX, 7
	CLRF	RXCLEAR	

	CALL	SERIAL_REC

	CALL	RTC_OLVASAS

	INCF	PB1, F
	BCF	STATUS, C
	RLF	PB2, F
	BNC	TOVABB2
	MOVLW	0x01
	MOVWF	PB1
	MOVWF	PB2

TOVABB2
	MOVFW	PB1
	ADDLW	0x20
	MOVWF	FSR

	MOVLW	HIGH TABLA
	MOVWF	PCLATH
	MOVFW	INDF
	CALL	TABLA
	MOVWF	PORTC

	MOVF	RTC_MPERC, W
	XORWF	PB1, W
	ANDLW	0x01
	SKPNZ
	BCF	PORTC, 0

	MOVFW	PB2
	MOVWF	PORTB

	RETURN

; Soros küldés kezdete
SERIAL_SEND
	INCF	TXINC, F
	BTFSC	TXINC, 0
	RETURN
	MOVF	TXFLAG1, F
	BNZ	LAB6
	MOVF	TXFLAG2, F
	BNZ	LAB7
	RETURN

LAB6
	MOVF	TXFLAG1, W
	XORLW	d'10'
	BZ	START_BIT1
	MOVF	TXFLAG1, W
	XORLW	d'01'
	BZ	STOP_BIT1
	DECF	TXFLAG1, F
	BTFSC	TXDATA1, 0
	BSF	PORTA, 2
	BTFSS	TXDATA1, 0
	BCF	PORTA, 2
	RRF	TXDATA1, F
	RETURN

START_BIT1
	BCF	PORTA, 2
	DECF	TXFLAG1, F
	RETURN
STOP_BIT1
	BSF	PORTA, 2
	DECF	TXFLAG1, F
	RETURN

LAB7
	MOVF	TXFLAG2, W
	XORLW	d'10'
	BZ	START_BIT2
	MOVF	TXFLAG2, W
	XORLW	d'01'
	BZ	STOP_BIT2
	DECF	TXFLAG2, F
	BTFSC	TXDATA2, 0
	BSF	PORTA, 2
	BTFSS	TXDATA2, 0
	BCF	PORTA, 2
	RRF	TXDATA2, F
	RETURN

START_BIT2
	BCF	PORTA, 2
	DECF	TXFLAG2, F
	RETURN
STOP_BIT2
	BSF	PORTA, 2
	DECF	TXFLAG2, F
	RETURN
; Soros küldés vége


; Soros fogadás kezdete
SERIAL_REC
	MOVLW	0x92
	MOVWF	FSR	
	MOVF	RXINC, F
	BZ	LAB1	
	INCF	RXINC, F
	MOVF	RXINC, W
	XORLW	d'02'
	MOVLW	d'205'
	SKPNZ	
	MOVWF	INDF
	SKPNZ
	GOTO	SERIAL_REC_RET
	
	MOVFW	RXINC
	XORLW	d'11'
	SKPNZ
	GOTO	LAB3

	BCF	RECDATA, 7
	BTFSC	CX, 7
	BSF	RECDATA, 7
	MOVF	RXINC, W
	XORLW	d'10'
	BZ	SERIAL_REC_RET
	RRF	RECDATA, F
	GOTO	SERIAL_REC_RET

LAB1
	CLRF	RXINC
	BTFSC	CX, 7
	GOTO	SERIAL_REC_RET
	INCF	RXINC, F
	RRF	INDF, F
	BCF	INDF, 7
	CLRF	RECDATA
	GOTO	SERIAL_REC_RET

LAB3
	BTFSC	CX, 7
	CALL	SERIAL_INT
	CLRF	RXINC
	MOVLW	d'102'
	MOVWF	INDF
SERIAL_REC_RET
	RETURN
; Soros fogadás vége


; Soros megszakítás kezdete (csak szoftveres)
SERIAL_INT
	INCF	RXC, F
	MOVF	RXC, W
	XORLW	0x01
	BNZ	LAB8
	MOVF	RECDATA, W
	MOVWF	RXCIM
LAB8
	BTFSS	RXCIM, 7
	GOTO	OLVASAS

IRAS
	MOVF	RXC, W
	XORLW	0x02
	BNZ	LAB9
	MOVF	RECDATA, W
	MOVWF	RXADAT
LAB9	MOVF	RXC, W
	XORLW	0x03
	BNZ	LAB10
	MOVF	RECDATA, W
	MOVWF	RXELL
LAB10	MOVF	RXC, W
	XORLW	0x03
	BNZ	SERIAL_INT_RET
	MOVF	RXCIM, W
	XORWF	RXADAT, W
	XORWF	RXELL, W
	BNZ	SERIAL_INT_RET
	BSF	STATUS, RP0
	CLRF	TRISC
	BCF	STATUS, RP0
	MOVF	RXCIM, W
	MOVWF	PORTC
	BCF	PORTC, 7
	BCF	RTC_ALE
	MOVF	RXADAT, W
	MOVWF	PORTC
	BCF	RTC_WRITE
	BSF	RTC_WRITE
	BSF	RTC_ALE
	CLRF	RXC
	GOTO 	SERIAL_INT_RET

OLVASAS
	BSF	STATUS, RP0
	CLRF	TRISC
	BCF	STATUS, RP0
	MOVF	RXCIM, W
	MOVWF	PORTC
	BCF	RTC_ALE
	BSF	STATUS, RP0
	COMF	TRISC, F
	BCF	STATUS, RP0
	BCF	RTC_READ
	MOVF	PORTC, W
	MOVWF	TXDATA1
	BSF	RTC_READ
	BSF	STATUS, RP0
	CLRF	TRISC
	BCF	STATUS, RP0
	BSF	RTC_ALE

	MOVF	TXDATA1, W
	XORWF	RXCIM, W
	MOVWF	TXDATA2
	MOVLW	d'10'
	MOVWF	TXFLAG1
	MOVWF	TXFLAG2
	CLRF	RXC

SERIAL_INT_RET
	RETURN
; Soros megszakítás vége

; RTC olvasás kezdete
RTC_OLVASAS
	INCF	RTC_T1, F
	BTFSS	RTC_T1, 6

	RETURN
	MOVFW	RTC_T1
	XORLW	b'01010000'
	SKPNZ
	CLRF	RTC_T1
	MOVFW	RTC_T1
	ANDLW	0x0F
	MOVWF	PORTC
	BCF	RTC_ALE
	ADDLW	0x60
	MOVWF	FSR
	BSF	STATUS, RP0	;Bank1
	COMF	TRISC, F
	BCF	STATUS, RP0	;Bank0
	BCF	RTC_READ
	MOVFW	PORTC
	MOVWF	INDF
	BSF	RTC_READ
	BSF	STATUS, RP0	;Bank1
	CLRF	TRISC
	BCF	STATUS, RP0	;Bank0
	BSF	RTC_ALE

	DECFSZ	RTC_T3, F
	RETURN
	BSF	RTC_T3, 5
	INCF	RTC_T2, F
	MOVLW	0x10
	BTFSC	RTC_T2, 7
	MOVWF	RTC_T2
	MOVFW	RTC_T2
	MOVWF	PORTC
	ANDLW	0x03
	ADDLW	0x70
	MOVWF	FSR
	BCF	RTC_ALE
	BSF	STATUS, RP0
	COMF	TRISC, F
	BCF	STATUS, RP0
	BCF	RTC_READ
	MOVFW	PORTC
	MOVWF	INDF
	BSF	RTC_READ
	BSF	STATUS, RP0
	CLRF	TRISC
	BCF	STATUS, RP0
	BSF	RTC_ALE

RTC_OLVASAS_RET
	RETURN
; RTC olvasás vége



DELAY
	MOVLW	0xFF
	MOVWF	T1
DEL1
	MOVLW	0xFF
	MOVWF	T2
DEL2	DECFSZ	T2, F
	GOTO	DEL2
	DECFSZ	T1, F
	GOTO	DEL1
	DECFSZ	DELAY_REG, F
	GOTO	DELAY
	RETURN

START
	CLRF	TXFLAG1
	CLRF	TXFLAG2
	CLRF	TXINC
	CLRF	RXINC
	CLRF	RXC

	CLRF	PIE1
	CLRF	PIE2
	CLRF	PIR1
	CLRF	PIR2		; MEGSZAKITASOKAT KEZELO REGISZTEREK ALAPHELYZETBE ALLITVA

	CLRF	PB1
	CLRF	PB2
	BSF	PB1, 0
	BSF	PB2, 0
	CLRF	DX
	BSF	DX, 0

	BSF	STATUS, RP0
	BSF	OPTION_REG, 7	; PORTB Pull-Up Off
	MOVLW	B'00000110'	; PORTA Digit I/O
	MOVWF	ADCON1
	MOVLW	b'11000010'
	MOVWF	TRISA
	BCF	STATUS, RP0
	MOVLW	b'11111110'
	MOVWF	PORTA

	CLRF	PORTB
	CLRF	PORTC
	BSF	STATUS, RP0	;Bank1
	CLRF	TRISB
	CLRF	TRISC
	BSF	STATUS, RP1	;Bank3
	BSF	EECON1, EEPGD
	BCF	STATUS, RP0	;Bank2
	MOVLW	HIGH(TABLA)
	MOVWF	EEADRH
	BCF	STATUS, RP1	;Bank0

	CLRF	PORTC
	COMF	PORTB, F
	MOVLW	0x08
	MOVWF	DELAY_REG
	CALL	DELAY
	CLRF	PORTB

	MOVLW	0x0A
	MOVFW	PORTC
	BCF	RTC_ALE
	MOVLW	b'00100000'
	MOVWF	PORTC
	BCF	RTC_WRITE
	BSF	RTC_WRITE
	BSF	RTC_ALE

	MOVLW	0x0B
	MOVWF	PORTC
	BCF	RTC_ALE
	MOVLW	b'00000011'
	MOVWF	PORTC
	BCF	RTC_WRITE
	BSF	RTC_WRITE
	BSF	RTC_ALE

	MOVLW	b'00000001'
	MOVWF	T1CON


	BSF	INTCON, GIE	; Global Interrupt Enable
	BSF	INTCON, PEIE
	BSF	STATUS, RP0
	BSF	PIE1, TMR2IE
	BCF	STATUS, RP0
	MOVLW	b'00000101'
	MOVWF	T2CON		; TMR2 ON, 1:4 Prescaler, 1:1 Postscaler

	BSF	STATUS, RP0
	MOVLW	d'102'
	MOVWF	PR2
	MOVLW	b'10001000'
	MOVWF	OPTION_REG
	BCF	STATUS, RP0
	BSF	INTCON, T0IE

VISSZA
	BTFSC	DX, 2
	GOTO	DISP_STARTING
	BTFSC	DX, 1
	GOTO	DISP_DATUM

DISP_IDO
	MOVF	RTC_MPERC, W
	ANDLW	0x0F
	MOVWF	DIS0
	SWAPF	RTC_MPERC, W
	ANDLW	0x0F
	MOVWF	DIS1
	MOVLW	0x2B
	MOVWF	DIS2
	MOVF	RTC_PERC, W
	ANDLW	0x0F
	MOVWF	DIS3
	SWAPF	RTC_PERC, W
	ANDLW	0x0F
	MOVWF	DIS4
	MOVLW	0x2B
	MOVWF	DIS5
	MOVF	RTC_ORA, W
	ANDLW	0x0F
	MOVWF	DIS6
	SWAPF	RTC_ORA, W
	ANDLW	0x0F
	MOVWF	DIS7
	
	GOTO	EGYEZES

DISP_DATUM
	MOVF	RTC_NAP, W
	ANDLW	0x0F
	MOVWF	DIS0
	SWAPF	RTC_NAP, W
	ANDLW	0x0F
	MOVWF	DIS1
	MOVLW	0x2A
	MOVWF	DIS2
	MOVF	RTC_HONAP, W
	ANDLW	0x0F
	MOVWF	DIS3
	SWAPF	RTC_HONAP, W
	ANDLW	0x0F
	MOVWF	DIS4
	MOVLW	0x2A
	MOVWF	DIS5
	MOVF	RTC_EV, W
	ANDLW	0x0F
	MOVWF	DIS6
	SWAPF	RTC_EV, W
	ANDLW	0x0F
	MOVWF	DIS7

	GOTO	EGYEZES

DISP_STARTING
	MOVLW	0x22
	MOVWF	DIS7
	MOVLW	0x23
	MOVWF	DIS6
	MOVLW	0x10
	MOVWF	DIS5
	MOVLW	0x21
	MOVWF	DIS4
	MOVLW	0x23
	MOVWF	DIS3
	MOVLW	0x18
	MOVWF	DIS2
	MOVLW	0x1D
	MOVWF	DIS1
	MOVLW	0x16
	MOVWF	DIS0

	BSF	PC_BE
	MOVLW	0x07
	MOVWF	DELAY_REG
	CALL	DELAY
	BCF	DX,2
	BCF	PC_BE

EGYEZES
	MOVFW	RTC_T2
	ANDLW	0x03
	XORLW	0x03
	BNZ	VISSZA

	MOVF	IDO_ORA, W
	XORWF	RTC_ORA, W
	BNZ	VISSZA
	MOVF	IDO_PERC, W
	XORWF	RTC_PERC, W
	BNZ	VISSZA

	MOVF	IDO_HONAP, W
	BZ	LAB11
	XORWF	RTC_HONAP, W
	BNZ	VISSZA

LAB11
	MOVF	IDO_NAP, W
	XORLW	0x60
	BZ	HETVEGE

	MOVF	IDO_NAP, W
	XORLW	0x50
	BZ	MUNKANAP

	MOVF	IDO_NAP, W
	ANDLW	0x40
	XORLW	0x40
	BZ	HETNAPJA

	MOVF	IDO_NAP, W
	SUBLW	0x31
	BNC	NAPON

	GOTO	VISSZA
	
HETVEGE
	MOVF	RTC_HETNAPJA, W
	XORLW	0x01
	BZ	INDIT
	MOVF	RTC_HETNAPJA, W
	XORLW	0x07
	BZ	INDIT
	GOTO	VISSZA

MUNKANAP
	MOVF	RTC_HETNAPJA, W
	XORLW	0x01
	BZ	VISSZA
	MOVF	RTC_HETNAPJA, W
	XORLW	0x07
	BZ	VISSZA
	GOTO	INDIT

HETNAPJA
	MOVF	IDO_NAP, W
	ANDLW	0x0F
	XORWF	RTC_HETNAPJA, W
	BZ	INDIT
	GOTO	VISSZA

NAPON
	MOVF	IDO_NAP, W
	XORWF	RTC_NAP, W
	BNZ	VISSZA

INDIT
	BTFSS	CX, 0
	BSF	DX,2

	GOTO	VISSZA

	ORG	0x0300
TABLA
	ADDWF	PCL, F
	RETLW	b'00010001'
	RETLW	b'11111001'
	RETLW	b'00100011'
	RETLW	b'01100001'
	RETLW	b'11001001'
	RETLW	b'01000101'
	RETLW	b'00000101'
	RETLW	b'11110001'
	RETLW	b'00000001'
	RETLW	b'01000001'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'10000001'
	RETLW	b'00001101'
	RETLW	b'00010111'
	RETLW	b'00101001'
	RETLW	b'00000111'
	RETLW	b'10000111'
	RETLW	b'01000001'
	RETLW	b'11111111'
	RETLW	b'11111001'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'10101101'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'10101111'
	RETLW	b'01000101'
	RETLW	b'00001111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'11111111'
	RETLW	b'00000000'
	RETLW	b'00000000'


	END
