;**********************************************************************
;                                                                     *
;    Fájlnév:	                                      *
;    Dátum:         2009.12.14.                                       *
;    Verziószám:    V1.0                                              *
;    #058.                         *
;    09.12.30.                           *
;    Szerző:                                            *
;                                                                     * 
;**********************************************************************
;	list	p=16f877a		;proceszor tipusa
;	#include <p16f877a.inc>		;proceszor definicios file behivása
;	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF & _DEBUG_OFF & _CPD_OFF 
;	ERRORLEVEL -302
	list	p=16f877		;proceszor tipusa
	#include <p16f877.inc>		;proceszor definicios file behivása
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
	ERRORLEVEL -302
;----------------------------------------------------------------------
;			Konstansok
;-----------------------------------------------------------------------
				CONSTANT	AOra10=B'00000101'		;5 
				CONSTANT	AOra1=B'00000100'		;4			"
				CONSTANT	APerc10=B'00000011'		;3			"
				CONSTANT	APerc1=B'00000010'		;2			"
				CONSTANT	AEv10=B'00001100'		;C
				CONSTANT	AEv1=B'00001011'		;B			"
				CONSTANT	AHo10=B'00001010'		;A			"
				CONSTANT	AHo1=B'00001001'		;9			"
				CONSTANT	ANap10=B'00001000'		;8
				CONSTANT	ANap1=B'00000111'		;7
				CONSTANT	ANnev=B'00000110'		;6
;-----------------------------------------------------------------------
;		Változók megadása
;---------------------------------

Timer1			equ	0x32	; késleltető szubrutin számlálója, LO
Timer2			equ	0x33	; késleltető szubrutin számlálója, HI

DOra10			equ	0x70	; a kiirando adat tárolása a kiirásig
DOra1			equ	0x71
DPerc10			equ	0x72
DPerc1			equ	0x73
_N				equ 0x74	; a beérkező adress tárolója
DNap10			equ	0x75
DNap1			equ	0x76
DEv10			equ	0x77
DEv1			equ	0x78
DHo10			equ	0x79	
DHo1	        equ 0x7A
DNnap			equ	0x7B
;------------------------------------------------------------------------
;			Segéd flegek
;------------------------------------------------------------------------
_L				equ	0x41	; segéd változók
_K				equ	0x42
_J				equ	0x43
_H				equ	0x44
_G				equ	0x45	;a dallas ideje
_Z				equ	0x46	;a dallas ideje
_U				equ	0x47	;a dallas ideje
_I				equ	0x48
cim				equ	0x49
temp			equ	0x7C	;bank törléshez
temp1			equ 0x7D
;-----------------------------------------
; Port kiosztás megadása
;-----------------------------------------
#define		vetel		PORTB,0		;adat érkezik
#define		adas		PORTB,7		;adatot kell kiirni
#define		ACK_m		PORTB,1		;visszaigazolás
#define		DO			PORTB,3		;rj5c15	olvasásengedély
#define		WR			PORTC,4		;rj5c15 itásengedély
#define 	valto		PORTB,2
#define		clk			PORTC,4
#define		iranyvalto	PORTE,1
#define		CS			PORTD,6		;rj5c15
#define		_CS			PORTD,7     ;rj5c15
#DEFINE	INI_TXSTA	B'01100000'	;8 BITES ASZINKRON ÁTVITEL
#DEFINE	INI_RCSTA	B'11010000'	;8 BITES VÉTEL SOROS VÉTEL ENG.
#DEFINE		CLKFRQ		D'20000000'			;ÓRAJEL
#DEFINE		BAUD(X)		(CLKFRQ/ (D'64'*X))-1		;rs 232 baudrate sebessége
; RC0-3-ig cimeknek fenntartva
;RD0-3- ig adatnak fenntartva

;**************************************************************************
		org     0x000             	; reset vektor		hidegstart
		nop		             	; MPLAB-ICD miatt
		goto	Start
;***************************************************
;			Interrupt
;***************************************************
			org	0x040				;interrupt után innen indúl
Int_feld:
		bcf 	INTCON,GIE			; Megszakitások letiltása globálisan	
		btfss	PIR1,RCIF
		goto	$+2
		goto	Rx_olvas
		btfss	vetel			;megnézi rb0/intet
		goto	$+2
		goto	Rx_int
		btfss	adas			;megnézi rb7 intet
		goto	$+2
		goto	Tx_i
		goto	V_inic		;megy a pgéphez
;----------------------------------
Int_ki:
		movlw	B'00000000'
		movwf	INTCON
		bsf		STATUS,RP0
		movlw	B'00000000'
		movwf	PIE1
		bcf		STATUS,RP0
		return
;*************************************
Int_s_be:
				bsf		STATUS,RP0
				bsf		PIE1,RCIE		;soros vonal vételi megszakítás
				bcf		STATUS,RP0
				bsf		INTCON,PEIE
				bsf		INTCON,GIE		;ujra indítja az interruptot
				bsf		RCSTA,CREN		;vételi engedély
				return
Int_be:
				movlw	B'10011000'
				movwf	INTCON
				return				;visszatérés a hivás helye utáni első pozicióba
;***************************************************************
;				Itt kezdődik a program
;**************************************************************
V_inic:			bsf		ACK_m
				call	Int_be
				nop
				goto	$-1
;--------------------------------------------------
;				oragenerator kezelése
;--------------------------------------------------



IDE JÖNNE az iró-és olvasó rutin
A RC0-3 ig és az RD0-3 ig szabad az adatoknak









;************************************************************
;				pgp A-D kezelés
;************************************************************
cim_be:	
				btfsc	clk	
				goto	$-1
				nop
				nop
				btfss	DO
				goto	V_inic
A0:
				clrf	cim
				btfss	PORTC,0
				goto	$-2
				goto	$-3
				call	kicsi
				goto	A1
				call	nagy
				goto	A1
A1:
				btfss	PORTC,1
				goto	$-2
				goto	$-3
				call	kicsi
				goto	A2
				call	nagy
				goto	A2
A2:					
				btfss	PORTC,2
				goto	$-2
				goto	$-3
				call	kicsi
				goto	A3
				call	nagy
				goto	A3
A3:
				btfss	PORTC,3
				goto	$-2
				goto	$-3
				call	kicsi
				goto	Tx_dat
				call	nagy
				goto	Tx_dat
kicsi:
				bcf	STATUS,C
				rlf	cim,1
				return
nagy:
				bsf	STATUS,C
				rlf	cim,1
				return
;****************************************************
Tx_i:
		call	Int_ki
		bcf		ACK_m			;küldi a készenlétet
		btfsc	adas
		goto	$-1	
		nop
		nop
		nop
		goto	Tx_dat	
virat:
		bsf		ACK_m			;végzett kiszál
		goto	V_inic
;--------------------------------------
Rx_int:
			call	Int_ki
			bcf		ACK_m
			btfsc	vetel
			goto	$-1
			call	Int_s_be
			call	Oclear			;mindent töröl a helybeni adatokból
			call	Dclear
			bsf		ACK_m
			nop
			nop
			nop
			bcf		ACK_m
			goto	$-1
Rx_veg:
			call	Int_ki
			bsf		ACK_m
			goto	V_inic	
;*******************************************
;			Tx-kezelése adás 
;******************************************
Tx_dat:
		clrf	_N
		clrf	temp
		clrf	temp1
		movlw	H'0B'
		movwf	_N
		bsf		STATUS,RP0
		bsf		TXSTA,TXEN
		bcf		STATUS,RP0
		goto	lepo
firka:		
		call 	Get_Paritas
		bsf		STATUS,RP0
		btfss	temp,0
		goto	$+3
		bsf		TXSTA,TX9D		;PARITÁS KIIRÁSA
		goto	$+2
		bcf		TXSTA,TX9D
		bcf		STATUS,RP0
firka2:
		movwf	TXREG
		btfss	PIR1,TXIF			;TXIF=1 HA KÉSZ AZ ADÁSRA
		goto	$-1
		bcf		PIR1,TXIF	; megszakítás jelzőbit törlése
		clrf	TXREG
		decfsz	_N,1
		goto	lepo
		goto	virat			;végzett vissza 	
;************************************
Get_Paritas:
		movwf	temp
		movwf	temp1
		swapf	temp,w
		xorwf	temp,F
		rrf		temp,W
		xorwf	temp,F
		btfsc	temp,2
		incf	temp,F
		movf	temp,W
;		comf	temp,F			;páros vagy páratlan paritás
		movf	temp1,W
		return	
;*************************************
lepo:	
		bcf		STATUS,Z
		movf	_N,0	
		xorlw	H'0B'
		btfss	STATUS,Z
		goto	$+3
		movf	DEv10,0
		goto	firka
		movf	_N,0		
		xorlw	H'0A'
		btfss	STATUS,Z
		goto	$+3
		movf	DEv1,0
		goto	firka
		movf	_N,0	
		xorlw	H'09'
		btfss	STATUS,Z
		goto	$+3
		movf	DHo10,0
		goto	firka
		movf	_N,0
		xorlw	H'08'
		btfss	STATUS,Z
		goto	$+3
		movf	DHo1,0
		goto	firka
		movf	_N,0
		xorlw	H'07'
		btfss	STATUS,Z
		goto	$+3
		movf	DNap10,0
		goto	firka
		movf	_N,0
		xorlw	H'06'
		btfss	STATUS,Z
		goto	$+3
		movf	DNap1,0
		goto	firka
		movf	_N,0
		xorlw	H'05'
		btfss	STATUS,Z
		goto	$+3
		movf	DNnap,0
		goto	firka
		movf	_N,0
		xorlw	H'04'
		btfss	STATUS,Z
		goto	$+3
		movf	DOra10,0
		goto	firka
		movf	_N,0
		xorlw	H'03'
		btfss	STATUS,Z
		goto	$+3
		movf	DOra1,0
		goto	firka
		movf	_N,0
		xorlw	H'02'
		btfss	STATUS,Z
		goto	$+3
		movf	DPerc10,0
		goto	firka
		movf	_N,0
		xorlw	H'01'
		btfss	STATUS,Z
		goto	lepo
		movf	DPerc1,0
		goto	firka
;-------------------------------
;			RX kezelése
;-------------------------------
Rx_olvas:
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DEv10			;elsö byte azonositó
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DEv1			;vétel vagy adás
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DHo10			;a veendő byte-k száma
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DHo1			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DNap10			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DNap1			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DNnap			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DOra10			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DOra1			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DPerc10			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	DPerc1			;
		clrf	RCREG
		btfss	PIR1,5			;RCIF=1, HA BEÉRKEZETT EGY KARAKTER
		goto	$-1
		movf	RCREG,0			;VETT ADAT A W-BEN VAN
		movwf	_G
		clrf	RCREG	
		goto	Rx_veg
;-----------------------------------------------------------------------
;			A Pic configurállása
;-----------------------------------------------------------------------

Start:		goto	pstart
			clrf	STATUS
			clrf	PCLATH	
			movlw	0x20
			movwf	FSR 
bank_torl:
			bcf	STATUS,IRP
			movlw	H'20'
			movf	FSR,0
			clrf	INDF
			incf	FSR,1
			movf	FSR,W
			xorlw	H'7F'
			btfss	STATUS,Z
			goto	bank_torl			
pstart:								;konfigurállás	
			bcf		STATUS,RP1
			bcf		STATUS,RP0
			bsf		STATUS,RP0
			movlw	14
			movwf	ADCON1			;  kimenet !!!
			clrf	TRISA			;végig kimenet
			movlw	B'10000001'
			movwf	TRISB
			movlw	B'10101111'
			movwf	TRISC
			movlw	B'00001111'
			movwf	TRISD
			movlw	B'00000000'
			movwf	TRISE
			bcf		STATUS,RP0
INI_SERIAL
			bsf		STATUS,RP0
			MOVLW	BAUD(D'9600')
			MOVWF	SPBRG			;EZ 6 HA 9600 BIT/SEC-ESETÉN
			MOVLW	INI_TXSTA
			MOVWF	TXSTA
			bcf		STATUS,RP0
			MOVLW	INI_RCSTA
			MOVWF	RCSTA 
			bcf		valto					
			bsf		ACK_m
			call	ido2
			bcf		ACK_m
			call	ido1
			goto	V_inic
;---------------------------------------------------------
Oclear:	
				movlw	H'00'
				movwf	DOra10			
				movwf	DOra1			
				movwf	DPerc10		
				movwf	DPerc1
				return
Dclear:		
				movlw	H'00'
				movwf	DNap10		
				movwf	DNap1			
				movwf	DEv10			
				movwf	DEv1			
				movwf	DHo10			
				movwf	DHo1	        
				movwf	DNnap
				return			
;--------------------------------------
ido1:      		movlw	.40
				movwf	_J
iddd:
			  	movlw	.140			;a számjelzés utánvilágításának ideje
				movwf	_L
od:			
				movlw	.150
				movwf	_K
				nop
				decfsz	_K,1
				goto	$-2
				decfsz	_L,1
				goto	od
				decfsz	_J,1
				goto	iddd
				return
				
ido2:      		movlw	.140
				movwf	_J
iddd2:
			  	movlw	.240			;a számjelzés utánvilágításának ideje
				movwf	_L
od2:			
				movlw	.240
				movwf	_K
				nop
				decfsz	_K,1
				goto	$-2
				decfsz	_L,1
				goto	od2
				decfsz	_J,1
				goto	iddd2
				return
;---------------------------------------------------------------------------		
			end                   	

