;***********************Leírás*************************************************
;
;******************Config**********************************

	LIST	P=PIC16F1937
	INCLUDE	<P16F1937.INC>
	ERRORLEVEL	0,	-302, -305
	
	 __CONFIG _CONFIG1, 0x3FFF & _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
	 __CONFIG _CONFIG2, 0x3FFF & _WRT_OFF & _VCAPEN_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_25 & _LVP_OFF
	
;********************Változók******************************
	CBLOCK	0x20
	count
	count1           
	counta
	countb
	count2
	relais: 2
	endc

	
	ORG 0x0000
	goto	Setup
	
;********************Megszakítás***************************
	ORG	0x0004
;ez most nem kell


;*********************Main*********************************	
Setup
	banksel	TRISA		;BANK1
	movlw	0xEF
	movwf	TRISA			;RA4 láb kimenet, a többi bemenet
	clrf	TRISB
	movlw	0xC0
	movwf	TRISC			;RC6 ás RC7 bemenet
	clrf	TRISD
	clrf	TRISE
	movlw	b'00000110'		;értéket töltönk a W regiszterbe
	banksel	ADCON1
	movwf	ADCON1			;W regiszter tartalmát áttöltjük az ADCON1 regiszterbe. Minden láb digitális
	banksel	ANSELA
	clrf	ANSELA
	clrf	ANSELB

	clrf	ANSELD
	clrf	ANSELE

	BANKSEL	PORTA			;BANK0
	clrf	PORTA			;minden kimenetet alacsony szintre állítunk
	clrf	PORTB
	clrf	PORTC
	clrf	PORTD
	clrf	PORTE

	clrf	relais
	clrf	relais+1
	call	RelaisOutput
	
Villog
	bsf		PORTA,4			;PORTA 4 lábát (6. láb) magas szintre állítjuk
	call	Kesleltet255	;meghívjuk a Kesleltet255 szubrutint
	bcf		PORTA,4			;PORTA 4 lábát (6. láb) alacsony szintre állítjuk
	call	Kesleltet255	;meghívjuk a Kesleltet255 szubrutint

	call	ReadInput
	movwf	relais
	xorwf	0xFF
	movwf	relais+1
	call	RelaisOutput

	goto	Villog			;A Villog címkéhez ugrunk (előről kezdjük)

ReadInput
	banksel	PORTA
	movf	PORTA,w			; Alsó 4 bit beolvasása
	andlw	0x0F			; Felső 4 bit nullázása
	btfsc	PORTA,5			; További bites beállítása
	iorlw	0x10
	btfsc	PORTE,0
	iorlw	0x20
	btfsc	PORTA,6
	iorlw	0x40
	btfsc	PORTA,7
	iorlw	0x80
	return

RelaisOutput
	bcf		PORTB,5				; STR = 0
	bcf		PORTB,7				; CLK = 0
	movlw	.8
	movwf	count1
	movf	relais+1,w			; Q15..Q8
	call	RO1					; kiléptetése
	movlw	.8
	movwf	count1
	movf	relais,w			; Q7..Q0
	call	RO1					; kiléptetése
	bsf		PORTB,5				; STR = 1
	nop
	bcf		PORTB,5				; STR = 0
	return

RO1:
	addwf	WREG,f				; léptetés balra 
	bcf		PORTB,6
	btfsc	STATUS,C			; D beállítása a C bit szerint
	bsf		PORTB,6
	nop
	bsf		PORTB,7				; CLK = 1
	nop
	bcf		PORTB,7				; CLK = 0
	decfsz	count1,f			; ciklus 8 bitre
	goto	RO1
	return

;********************************************************	
Kesleltet255
     movlw   0xff             ; A késleltetés 255ms.
     goto    K0
Kesleltet100
     movlw   d'100'           ; A késleltetés 100ms.
     goto    K0
Kesleltet50
     movlw   d'50'            ; A késleltetés 50ms.
     goto    K0
Kesleltet20
     movlw   d'20'            ; A késleltetés 20ms.
     goto    K0
Kesleltet5
     movlw   0x01             ; A késleltetés 5.000 ms (4 MHz órajel).
K0
	 movwf   count1
K1
     movlw   0xC7             ; A késleltetés 1ms.
     movwf   counta
     movlw   0x01
     movwf   countb
Kesleltet_0
     decfsz  counta,f
     goto    T1
     decfsz  countb,f
T1
     goto    Kesleltet_0

     decfsz  count1,f
     goto    K1
     return


	END
	
	