; Központi vezérlő PC-PIC-PIC kommunikáció.
; 2004.11.19. v.1.001  
	LIST P=18F458, F=INHX32	
	#include <P18F458.INC>	


;	__CONFIG	_CONFIG1L   Nem használt regiszter
	__CONFIG	_CONFIG1H, 	b'00100110'		; 110 = HS oscillator with PLL enabled/clock frequency = (4 x FOSC)
											; 10MHz-ES KRISTÁLYJAL 40MHz
											; Oscillator system clock switch option is disabled (main oscillator is source)		
	__CONFIG	_CONFIG2L, 	b'00000000'		; Brown-out Reset disabled, PWRT enabled
	__CONFIG	_CONFIG2H, 	b'00000000'		; WDT OFF
;	__CONFIG	_CONFIG3L,  Nem használt regiszter
;	__CONFIG	_CONFIG3H,  Nem használt regiszter
	__CONFIG	_CONFIG4L, 	b'10000001'		; Background Debugger disabled. RB6 and RB7 configured as general purpose I/O pins.
											; Low Voltage ICSP disabled, Stack Full/Underflow will cause RESET	
;	__CONFIG	_CONFIG4H,  Nem használt regiszter	
	__CONFIG	_CONFIG5L, 	b'00001111'		; CODE PROTECT OFF 
	__CONFIG	_CONFIG5H, 	b'11000000'		; EEPROM, BOOTBLOCK PROTECT OFF
	__CONFIG	_CONFIG6L,  b'00001111'		; WRITE PROTECT OFF 
	__CONFIG	_CONFIG6H, 	b'11100000'		; EEPROM WRITE, BOOT WRITE, CONF REG WRITE PROTECT OFF
	__CONFIG	_CONFIG7L,  b'00001111'		; TABLE READ PROTECTION OFF
	__CONFIG	_CONFIG7H, 	b'01000000'		; BOOT READ PROTECT OFF

;***ID Location Define

	__IDLOCS _IDLOC0, 'M'
	__IDLOCS _IDLOC1, 'A'
	__IDLOCS _IDLOC2, 'S'
	__IDLOCS _IDLOC3, 'T'
	__IDLOCS _IDLOC4, 'E'
	__IDLOCS _IDLOC5, 'R'
	__IDLOCS _IDLOC6, '0'
	__IDLOCS _IDLOC7, '1'


;............................. ALAP BEÁLLÍTÁSOK  ............................
	#DEFINE		TMR0_INT_E_T	INTCON,TMR0IE	; TIMER0 MEGSZAKITAS ENGEDELYEZES/TILTAS BIT
	#DEFINE		TMR0_INT_FLAG	INTCON,TMR0IF	; TIMER0 MEGSZAKITAS JELZO BIT.
	
	#DEFINE		ALL_INT_E_T		INTCON,7		; GLOBALIS MEGSZAKITASOK ENGEDELYEZESE_TILTAS
	#DEFINE		ALL_PINT_E_T	INTCON,6		; PERIFERIA MEGSZAKITASOK ENGEDELYEZESE_TILTAS

	#DEFINE	orajel	D'39000000'
	#DEFINE	BAUD(X)	((orajel/X)/D'65')-1	; X-BE IRANDÓ A BAUD RATE KIVANT ERTEKE
	
	#DEFINE	TX_OUT		PORTC,6				; USART KIMENET
	#DEFINE	RX_IN		PORTC,7				; USART BEMENET
	#DEFINE	PC_TX_E		PORTB,3				; PC FELÉ TX ENGEDÉLYEZÉS
	#DEFINE	PC_RX_E		PORTB,2				; PC FELŐL RX ENGEDÉLYEZÉS
	#DEFINE	PIC_TX_E	PORTB,0				; PIC-ek FELÉ TX ENGEDÉLYEZÉS
	#DEFINE	PIC_RX_E	PORTB,1				; PIC-ek FELŐL RX ENGEDÉLYEZÉS

;............................ MAKRÓK ..................................................

;..................................Állandók, Láb Definiálások ................................................. 
	; LÁB DEFINIÁLÁSOK
	#DEFINE		TIMER0_LED_1	PORTA,0
	#DEFINE		TIMER0_LED_2	PORTA,1
	#DEFINE		PC_VÁLASZ_LED	PORTA,2
	#DEFINE		TASZT_VÁLASZ_LED	PORTA,5
	#DEFINE		IDŐTARTAM_JEL_LED	PORTE,0
	#DEFINE		HIBA_JELZŐ_LED		PORTE,1	


	; PIC-PIC PARANCSOK
	#DEFINE		PE1_ON			B'00001111'		; 9.bit 0
	#DEFINE		PE1_OFF			B'00001110'		; 9.bit 0
	#DEFINE		ADAT_TO_LCD		B'00010000'		; 9.bit 0
												; Ezt a parancsot adatik követik egészen az enterig.			
	#DEFINE		VEGE			B'00000001'		; 9.bit 1

	#DEFINE		CÍM				B'10000001'		; TASZTATÚRA EGYSÉG CÍME

;................................ VALTOZÓ DEKLARALAS ........................................
	CBLOCK		0X0020
			TEMP
			TEMP2
			AKKU_TEMP
			STATUS_TEMP
			BSR_TEMP
			BUFFER
			PIC_VÁR
			PC_OK_V
			FLAG_1
			VAR_1_H
			VAR_1_L
	ENDC

;	------------------------- FLAG DEKRALÁLÁSOK -----------------------------
	;FLAG_1
	#DEFINE		PC_ADAT_JÖTT	FLAG_1,0		; Ha a PC-től adatot fogadtunk, akkor 1	

;.......................RESET PONTOK.............................................
	ORG	0X0000
	 BRA 	INI
	ORG	0X0008
	 BRA 	MEGSZAK
	ORG	0X0018
	RETFIE

; ------------------------------- MEGSZAKITASOK KEZELESE -------------------------------------------
MEGSZAK
	MOVWF 	AKKU_TEMP 			; W REGISZTER ELTAROLASA
	MOVFF 	STATUS, STATUS_TEMP ; STATUS REG TAROLASA
	MOVFF 	BSR, BSR_TEMP 		; BSR REG TAROLASA
	BCF		ALL_INT_E_T			; MINDEN megszakítás tiltva

	; TIMER0 MEGSZAKÍTÁS?
	BTFSS	TMR0_INT_FLAG		; TIMER0 MEGSZAKÍTÁS?
	BRA		MEG_VEG				; HA NEM, KILÉPÉS

		;CLRF	TEMP2
		;RCALL	RX_TX_TO_LED_CLEAR	; soros adatindikátor LED-ek törölve

	; "TIMER0" LED-ek KEZELÉS
IND_LED
	BTFSS	TIMER0_LED_1				; LED BE VAN KAPCSOLVA?
	BRA		LED_BE	
	BCF		TIMER0_LED_1				; KIKAPCS
	BSF		TIMER0_LED_2
	BRA		PC_PIC_PIC_COMM
LED_BE
	BSF		TIMER0_LED_1				; BEKAPCS
	BCF		TIMER0_LED_2				; INDIKÁTOR LED VILLOGTATÁSA TIMER0 ÜTEMÉBEN.
PC_PIC_PIC_COMM

	; Központi PIC -> PC USART MEGKÉRDEZÉS
	; PC-PIC SOROS KOMMUNIKÁCIÓ KEZELÉSE
	; PC MONITOR PROGIT KÉRDEZI MEG, HOGY VAN-E KÉRÉSE
	; A PC VÁLASZÁT VÁRJA ÉS HA VAN, TÁROLJA
; 	RCALL	PC_PIC_KEZEL
		
	; KÖZPONT PIC - TASZT PIC KOMMUNIKÁCIÓ KEZELÉSE
;	RCALL	KÖZPONT_TASZT_KEZEL

	; KILÉPÉSI PONT	
MEG_VEG
	MOVFF 	BSR_TEMP, BSR 
	MOVF 	AKKU_TEMP, W 
	MOVFF 	STATUS_TEMP,STATUS 	; MENTETT REGISZTEREK VISSZAALLITASA
	BCF		TMR0_INT_FLAG		; TIMER0 FLAG TORLESE
	BSF		ALL_INT_E_T			; MINDEN MEGSZAK. SZABAD
	RETFIE	

;********************************** MEGSZAKÍTÁS VÉGE ***************************************************
;*******************************************************************************************************

; -------------------- INICIALIZALASOK -------------------------------------------- 
INI
	BSF		INTCON2,7			; PORTB FELHÚZÓ ELLENALLAS OFF
	CLRF	INTCON
	CLRF	PIR1
	CLRF	PIE1				; MEGSZAKÍTÁSOK TÖRÖLVE
	CLRF	RCREG				; USART VÉTEL REGISZTER TÖRÖLVE
	CLRF	INTCON3
	SETF	CMCON				; COMPARATOR OFF
	MOVLW	B'00000110'			; PORTA DIGIT I/O
	MOVWF	ADCON1

;------------------------- PORTOK BEÁLLÍTÁSA 1-> BEMENET, 0-> KIMENET --------------------------------------------
	CLRF PORTA
	CLRF LATA
	CLRF PORTB
	CLRF LATB
	CLRF PORTC
	CLRF LATC
	CLRF PORTD
	CLRF LATD
	CLRF PORTE
	CLRF LATE
	MOVLW	B'11110000'			; RB0,1,2,3 KI, RB4,5,6,7 BE
	MOVWF	TRISB			
	MOVLW	B'10001111'			; RC7 BE (RX), RC6 KI (TX),
	MOVWF	TRISC
	MOVLW	B'11000000'			; RA0,1,2,3,4,5 ki
	MOVWF	TRISA
	MOVLW	B'00000011'			; 
	MOVWF	TRISD
	MOVLW	B'11101000'			; RE 0,1 KIMENET, PSP MODUL OFF
	MOVWF	TRISE

; ------------------------- MEGSZAKITASOK BEALLITASAI -----------------------------------------------
	; USART megszakítások beállítása (PIR1, PIE1, IPR1 beállításai)

	;	PIR1,RCIF	: USART Receive Interrupt Flag bit
					; 1 =The USART receive buffer, RCREG, is full (cleared when RCREG is read)
					; 0 =The USART receive buffer is empty
	;	PIR1,TXIF	: USART Transmit Interrupt Flag bit
					; 1 = The USART transmit buffer, TXREG, is empty (cleared when TXREG is written)
					; 0 = The USART transmit buffer is full
	;	PIE1,RCIE	: USART Receive Interrupt Enable bit
					; 1 = Enables the USART receive interrupt
					; 0 = Disables the USART receive interrupt
	;	PIE1,TXIE	: USART Transmit Interrupt Enable bit (Akkor áll be, ha a TXREG kiürült)
					; 1 = Enables the USART transmit interrupt
					; 0 = Disables the USART transmit interrupt
	;	IPR1,RCIP	: USART Receive Interrupt Priority bit
					; 1 = High priority
					; 0 = Low priority
	;	IPR1,TXIP	: USART Transmit Interrupt Priority bit
					; 1 = High priority
					; 0 = Low priority

	BCF		PIE1,RCIE			; USART VÉTEL MEGSZAKÍTÁS TILTÁS
	BCF		PIE1,TXIE			; USART ADÁS MEGSZAKÍTÁS TILTÁS	
	BSF		IPR1,RCIP			; 0X0008 CÍMRE LÉP MEGSZAKÍTÁSKOR (HIGH PRIORITY)
	BCF		IPR1,TXIP

	; TIMER0 BEÁLLÍTÁSA
	MOVLW	B'10000110'			; TIMER0 BEALLITASA. TIMER0 ON, 128 ELOOSZTAS, ~1 SECENKENT MEGSZAKITAS LESZ
	MOVWF	T0CON
	BSF		INTCON2,TMR0IP		; TIMER0 MEGSZAKITAS MAGAS SZINTŰ LEKEZELES 8-as CÍM

	; SPI Beállítása
	;----

;------------------ VÁLTOZÓKNAK ÉRTÉKADÁSOK----------------------------------------- 
	BCF		PC_ADAT_JÖTT	; JELZŐ TÖRÖLVE

;.............................................................................................
;***************************************** FOPROGI *******************************************

; ------------- kezdő állapotok beállítása --------------------
	BCF		PORTA,0			; PRÓBA LED-ek ALAPHELYZETBE
	BCF		PORTA,1
	BCF		PORTA,2
	BCF		PORTA,3
	BCF		PORTA,4
	BCF		PORTA,5

	BSF		PC_TX_E
	BSF		PC_RX_E			; PC SOROS CSATORNA TILTVA

	BSF		PIC_RX_E
	BSF		PIC_TX_E		; PIC SOROS CSATORNA TILTVA

	BSF		ALL_INT_E_T		; MINDEN MEGSZAKÍTÁS SZABAD
	BSF		ALL_PINT_E_T	; PERIFÉRIA MEGSZAKÍTÁS KI
	BcF		TMR0_INT_E_T	; TIMER0 MEGSZAKITAS ENGEDELYEZESE
	BCF		PIE1,RCIE		; USART VÉTEL MEGSZAKÍTÁS TILT

;************************ PROGRAM MAG ****************************** 
			; VÉTEL	SZABAD

DO
;........................A PC-re KÜLD KÉRDÉST, HOGY VAN-E KÉRÉSE, MAJD KEZELI A VÁLASZT ...............
PC_PIC_KEZEL
	RCALL	PC_COMM_SET			; PC-PIC USART MÓD BEÁLLÍTVA
	BCF		PC_TX_E				; PC COMM ADÁS ENGEDÉLYEZVE
	BCF		PC_RX_E	

	BCF		HIBA_JELZŐ_LED
;	MOVF	RCREG,W


	; PC FELÉ KÉRDÉS, AKAR E VALAMIT? 	
;	RCALL	BUFFER_TX_ÜRES		; KÜLDÉS MEHET? 
;	MOVLW	D'2'				; PARANCS(2) BETÖLTVE W-be. (PC-NEK LEHETŐSÉGET KÍNÁL KOMMUNIKÁCIÓRA)
;	MOVWF	TXREG				; PC-NEK ELKÜLDVE AZ AJÁNLÁS
;	RCALL	BUFFER_TX_ÜRES		; KÜLDÉS kész? 

	; PC VÁLASZÁT VÁRJUK ÉS HA VAN, TÁROLJUK
	; FELKÉSZÜLÉS A VÉTELRE
 	BCF		PC_VÁLASZ_LED		; INDIKÁTOR LED KI
	btfss	IDŐTARTAM_JEL_LED
	bra		idö_led_off
	bcf		IDŐTARTAM_JEL_LED
	bra		gogo
idö_led_off
	BSF		IDŐTARTAM_JEL_LED
gogo
	BRA		PC_DATA_N_V		

	MOVLW	D'255'				; VÁRAKOZÁSI CIKLUS
	MOVWF	PC_OK_V				; CIKLUSSZÁLÁLÓ FELTÖLTVE
USART_M_U
	BTFSS	PIR1,RCIF			; VÉTEL MEGSZAKÍTÁS FLAG BIT (HA A VÉTEL TELJES, A BIT = TRUE)
	BRA		PC_NO_RE			; HA A PC NEM REAGÁL A KÉRÉSRE, VÁRUNK	 
	BRA		PC_US_OK			; HA VAN VÉTEL
PC_NO_RE
	RCALL	VAR_1				; VÁRAKOZÁSI RUTIN
	DECFSZ	PC_OK_V,F			; CIKLUSSZÁMLÁLÓ ELLENŐRZÉSE
	BRA		USART_M_U			; HA NEM TELT LE AZ IDŐ, VÉTELRE VÁR
	BRA		PC_NEM_C			; PC NEM AKAR SEMMIT	

	; ADATOK VÉTELE, RAM-ba TÁROLÁSA
PC_US_OK
	BSF		PC_VÁLASZ_LED		; INDIKÁTOR LED BE
	BSF		PC_ADAT_JÖTT		; JELZŐ BEÁLLÍTVA. Ennek hatására az LCD-re lesz küldve a vett adat
	LFSR	FSR0,100h			; TÁROLÓ CÍM ALAPHELYZETBE

	MOVLW	D'20'				; VETT KARAKTEREK MAX SZÁMA
	MOVWF	PC_OK_V				; CIKLUSSZÁLÁLÓ FELTÖLTVE	

PC_DATA_N_V
	RCALL	RX_OK				; VÉTEL MEHET?
	BSF		HIBA_JELZŐ_LED
	MOVF	RCREG,W				; VETT ADAT W-be
	MOVWF	PREINC0				; VETT BÁJT ELTÁROLÁSA, MAJD A RAM CÍM NÖVELÉSE
	DECF	PC_OK_V,F
	BZ		TOV
	XORLW	D'13'				; ENTER? A VÉGE.
	BNZ		PC_DATA_N_V			; még nem érkezett meg a sor vége, következő adatot vesszük
		;Ide hibakezelés is kell, mert ha nem jön enter, akkor beragad! pl. max 100 karakter.		



	; ELTÁROLT ADATOK FELDOLGOZÁSA. MIT AKAR A PC?
TOV
	LFSR	FSR0,100h			; TÁROLÓ CÍM ALAPHELYZETBE
	MOVF	PREINC0,W			; PARANCS BÁJT W-be TÖLTVE
	XORLW	D'4'				; PC KÉRÉST AKAR KÜLDENI?
	BZ		VÁLASZ_TO_PC

	; A KAPOTT ADATOK VISSZAKÜLDÉSE
VÁLASZ_TO_PC
	MOVLW	D'20'				; VETT MAX KARAKTEREK SZÁMA
	MOVWF	PC_OK_V				; CIKLUSSZÁLÁLÓ FELTÖLTVE

	LFSR	FSR0,100h			; TÁROLÓ CÍM ALAPHELYZETBE
TX_SUB
	RCALL	BUFFER_TX_ÜRES		; SZABAD AZ ADÁST INDÍTANI?
	MOVF	PREINC0,W			; TÁROLT ADAT W-be TÖLRVE
	MOVWF	TXREG				; ADAT PC FELÉ KÜLDVE
	DECF	PC_OK_V,F
	BZ		TOV2
	XORLW	D'13'				; ENTER A VÉGE?
	BNZ		TX_SUB				; HA NEM, AKKOR TÖBBI ADAT ELKÜLDÉSE.
TOV2
	RCALL	BUFFER_TX_ÜRES		; PUFFER ÜRÜLÉSÉRE VÁRUNK
PC_NEM_C
	LFSR	FSR0,100h			; TÁROLÓ CÍM ALAPHELYZETBE
	BSF		PC_TX_E
	BSF		PC_RX_E				; PC SOROS CSATORNA TILT 
;	MOVF	RCREG,W
	BRA		DO

;*******************************************************************




;......................ELJÁRÁSOK..................................
PC_COMM_SET		; PC-vel való kommunikációt állítja be

	MOVLW	BAUD(D'9600')		; BAUD RATE BEALLITASA!! (A PC csak 19200-ig Bírja!)
	MOVWF	SPBRG

						; TXSTA beállításai	
	BCF		TXSTA,TX9			; 8 BITES ÁTVITELI MÓD BEÁLLÍTVA
	BSF		TXSTA,TXEN			; TRANSMIT ENGEDÉLYEZÉS
	BCF		TXSTA,SYNC			; Asynchronous mode	
	BCF		TXSTA,BRGH			; ALACSONY BaudRate tartomány
	;		TXSTA,TRMT : Transmit Shift Register Status bit
	;		TXSTA,TX9D : 9th bit of Transmit Data / Can be address/data bit or a parity bit

						; RCSTA beállításai
	BSF		RCSTA,SPEN			; SOROS PORT ENGEDÉLYEZÉSE
	BCF		RCSTA,RX9			; 8-bites VÉTELI MÓD (9-bites VÉTEL TILTÁS)
	BSF		RCSTA,CREN			; Continuous Receive Enable bit	ENGEDÉLYEZÉSE
	BCF		RCSTA,ADDEN			; Address Detect Enable bit 
								; 1 = Enables address detection, enables interrupt and load of the receive buffer when RSR<8> is set
								; 0 = Disables address detection, all bytes are received, and ninth bit can be used as parity bit
	;		RCSTA,FERR : Framing Error bit (KERET HIBA)
		;		1 = Framing error (can be updated by reading RCREG register and receive next valid byte)
		;		0 = No framing error
	
	; 		RCSTA,OERR: Overrun Error bit  (ELÁRASZTÁST JELEZŐ BIT)
		;		1 = Overrun error (can be cleared by clearing bit CREN)
		;		0 = No overrun error
	; 		RX9D: 9th bit of Received Data (A FOGADOTT 9.-BIT VAN BENNE)
		; 		Can be address/data bit or a parity bit
	RETURN

;....................................
PIC_COMM_SET		; PIC-ke egymás közötti kommunikációját állítja be

	MOVLW	BAUD(D'19200')		; BAUD RATE BEALLITASA
	MOVWF	SPBRG

						; TXSTA beállításai	
	BSF		TXSTA,TX9			; 9 BITES ÁTVITELI MÓD BEÁLLÍTVA
	BSF		TXSTA,TXEN			; TRANSMIT ENGEDÉLYEZÉS
	BCF		TXSTA,SYNC			; Asynchronous mode	
	BCF		TXSTA,BRGH			; ALACSONY BaudRate tartomány
	;		TXSTA,TRMT : Transmit Shift Register Status bit
	;		TXSTA,TX9D : 9th bit of Transmit Data / Can be address/data bit or a parity bit	(9. BIT HELYE)

						; RCSTA beállításai
	BSF		RCSTA,SPEN			; SOROS PORT ENGEDÉLYEZÉSE
	BCF		RCSTA,RX9			; 8-bites VÉTELI MÓD (Master 9 biten ad, 8 biten vesz. Slave 8biten ad, 9 biten vesz) 
	BSF		RCSTA,CREN			; Continuous Receive Enable bit	ENGEDÉLYEZÉSE
	BCF		RCSTA,ADDEN			; Address Detect Enable bit (EZT A SLAVEKNÉL KELL MAJD BEÁLLÍTANI) 
								; 1 = Enables address detection, enables interrupt and load of the receive buffer when RSR<8> is set
								; 0 = Disables address detection, all bytes are received, and ninth bit can be used as parity bit
	;		RCSTA,FERR : Framing Error bit (KERET HIBA)
		;		1 = Framing error (can be updated by reading RCREG register and receive next valid byte)
		;		0 = No framing error
	
	; 		RCSTA,OERR: Overrun Error bit  (ELÁRASZTÁST JELEZŐ BIT)
		;		1 = Overrun error (can be cleared by clearing bit CREN)
		;		0 = No overrun error
	; 		RX9D: 9th bit of Received Data (A FOGADOTT 9.-BIT VAN BENNE)
		; 		Can be address/data bit or a parity bit
	RETURN

				; KÉSZ

;......................... KÖZPONT PIC ÉS A TASZT PIC KÖZÖTTI ADATCSERE KEZELÉSE ........
KÖZPONT_TASZT_KEZEL
	BTFSS	PC_ADAT_JÖTT		; ha volt PC-től ADAT vétel akkor ugrik
	RETURN						; Ha nem jött adat, akkor nincs mit tenni.	
	; SOROS ÜZEMMÓD VÁLTÁS
	BSF		TASZT_VÁLASZ_LED	; HIBAJELZŐ LED BE. Csak akor marad égve, ha nincs válasz
	BCF		PIC_TX_E			; PIC_PIC TX ENGEDÉLY	
	RCALL	PIC_COMM_SET		; PIC KOMMUNIKÁCIÓS MÓD BEÁLLÍTVA.

	; SLAVE CÍM ELKÜLDÉSE				
	RCALL	BUFFER_TX_ÜRES		; SZABAD AZ ADÁST INDÍTANI?
	BSF		TXSTA,TX9D			; CÍMET, VAGY JELZŐT KÜLDÜNK
	MOVLW	CÍM					; TASZTATURA EGYSÉG SLAVE CÍME
	MOVWF	TXREG				; CÍM ELKÜLDÉSE
	RCALL	BUFFER_TX_ÜRES			; KÜLDÉS KÉSZ? (Meg kell várni, míg a bitek kimennek, mert befolynak az RCREG-be.)

	; PARANCSOT KÜLDÜNK
	BCF		TXSTA,TX9D			; PARANCSOT, ADATOT KÜLDÜNK	(9.bit 0)
	MOVLW	ADAT_TO_LCD			; A PC-től vett adatokat toljuk ki a Taszt egységnek
	RCALL	BUFFER_TX_ÜRES			; SZABAD AZ ADÁST INDÍTANI?		
	MOVWF	TXREG				; PARANCS ELKÜLDVE
	
		; A PC-től kapott karaktereket a Taszt egységnek átküldjük, hogy az LCD-re tegye ki.
	LFSR	FSR0,101H			;  TÁROLÓ CÍM BEÁLLÍTVA, PC PARANCS KIHAGYVA
PIC_TX_SUB
	RCALL	BUFFER_TX_ÜRES		; SZABAD AZ ADÁST INDÍTANI?
	MOVF	PREINC0,W
	MOVWF	TXREG
	XORLW	D'13'				; ENTER A VÉGE
	BNZ		PIC_TX_SUB			; HA NEM ENTER, AKKOR VAN MÉG ADAT
P_V	;VÉGE JELZŐ KÜLDÜNK
	RCALL	BUFFER_TX_ÜRES			; ADÁS BEFEJEZÉSIG VÁRUNK	
	BSF		TXSTA,TX9D			; CÍMET, VAGY JELZŐT KÜLDÜNK (9.bit 1)
	MOVLW	VEGE				; VÉGÉT JELEZZÜK
	MOVWF	TXREG				; JELZŐ ELKÜLDVE
	RCALL	BUFFER_TX_ÜRES			; ADÁS BEFEJEZÉSIG VÁRUNK

	; VÁLASZRA VÁRUNK
	MOVLW	D'50'				; ENNYI CIKLUST VÁR, A VÁLASZRA
	MOVWF	PIC_VÁR
VÁLASZ
	BSF		PIC_TX_E			; ADÁS VONAL TILT
	BCF		PIC_RX_E			; VÉTEL VONAL ENGED 
VÁR_PIC
	BTFSS	PIR1,RCIF			; VÉTEL MEGSZAKÍTÁS FLAG BIT (HA A VÉTEL TELJES, A BIT = TRUE)
	BRA		VÁR_PIC2			; VÉTEL SZABAD?
	BRA		PIC_VÁLASZ			; VÁLASZ ÉRKEZETT
VÁR_PIC2
	RCALL	VAR_1				; IDŐZÍTÉS
	DECFSZ	PIC_VÁR,F			; VÁRAKOZÁS SZÁMLÁLÁSA	
	BRA		VÁR_PIC				; HA MÉG NEM JÁRT LE A VÁRAKOZÁSI IDŐ
	BCF		TASZT_VÁLASZ_LED	; HIBAJELZŐ LED KI. Csak akkor ég, ha van válasz
	BRA		PIC_VÁLASZ_OK		; IDE HIBAKEZELÉS JÖN MAJD!!!!!!!!!!

	; PIC VÁLASZÁT KEZELJÜK LE 
PIC_VÁLASZ
	MOVF	RCREG,W				; VÁLASZ W-BE TÖLTVE
	MOVWF	TEMP2
	XORLW	CÍM					; A VÁLASZ A TASZT EGYSÉGTŐL JÖTT?
	BTFSS	STATUS,Z
	BRA		PIC_VÁLASZ_OK		; IDE HIBAKEZELÉS JÖN MAJD!!!!!!
PIC_VÁLASZ_OK
	BSF		PIC_RX_E			; VÉTEL VONAL TILT
	BCF		PC_ADAT_JÖTT		; JELZŐ TÖRÖLVE. BEÁLÍTANI A PC USART MEGSZAKÍTÁSBA KELL, HA VAN FOGADOTT ADAT
	RETURN

;................... USART ADÁS ELŐTTI BUFFER VIZSGÁLAT ........................
BUFFER_TX_ÜRES	
	BTFSS	TXSTA,TRMT			; ADÁS MŰVELET KÉSZ? BUFFER Empty (Üres) BIT = 1
	BRA		BUFFER_TX_ÜRES
	RETURN						; BUFFER KIÜRÜLT				

;................... USART VÉTEL LEHETŐSÉGÉT VIZSGÁLJA .........................
RX_OK						
	BTFSS	PIR1,RCIF			; VÉTEL MEGSZAKÍTÁS FLAG BIT (HA A VÉTEL TELJES, A BIT = TRUE)
	BRA		RX_OK
	RETURN						; LEHET VENNI			

;.................... EGY BÁJT TARTALMÁT JELENÍTI MEG LEDEKEN ....................
RX_TX_TO_LED
	;MOVLW	B'11111111'
	MOVWF	TEMP
	;0. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G1
	BCF		PORTD,7
	BRA		G11
G1
	BSF		PORTD,7
G11
	;1. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G2
	BCF		PORTD,6
	BRA		G22
G2
	BSF		PORTD,6
G22
	;2. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G3
	BCF		PORTD,5
	BRA		G33
G3
	BSF		PORTD,5
G33
	;3. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G4
	BCF		PORTD,4
	BRA		G44
G4
	BSF		PORTD,4
G44
	;4. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G5
	BCF		PORTC,5
	BRA		G55
G5
	BSF		PORTC,5
G55
	;5. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G6
	BCF		PORTC,4
	BRA		G66
G6
	BSF		PORTC,4
G66
	;6. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G7
	BCF		PORTD,3
	BRA		G77
G7
	BSF		PORTD,3
G77
	;7. BIT
	RRCF	TEMP,F
	BTFSC	STATUS,C
	BRA		G8
	BCF		PORTD,2
	BRA		G88
G8
	BSF		PORTD,2
G88
;	 BRA  	RX_TX_TO_LED
	RETURN

;................ RX_TX_TO_LED TÖRLÉSE ........................
RX_TX_TO_LED_CLEAR
	BCF		PORTD,7
	BCF		PORTD,6
	BCF		PORTD,5
	BCF		PORTD,4
	BCF		PORTC,5
	BCF		PORTC,4
	BCF		PORTD,3
	BCF		PORTD,2			
	RETURN

;..............................................................
VAR_1
	MOVLW	D'255'
	MOVWF	VAR_1_H
LO1
	MOVLW	D'255'
	MOVWF	VAR_1_L
LO
	DECFSZ	VAR_1_L,F
	BRA 	LO

	DECFSZ	VAR_1_H,F
	BRA 	LO1

	RETURN

;.............................................................................................
	END
