errorlevel 2
list p=16f886
include "p16f886.inc"
;__CONFIG    KÜLSŐ OSZCILLÁTORT bEAÁLLÍTANI!! EC_OSC 
;__CONFIG    
RADIX DEC

#DEFINE 	NSEL 	PORTB,7;OUT
#DEFINE		SCK_	PORTB,6;OUT
#DEFINE		SDI_	PORTB,5;OUT
#DEFINE		SDO_	PORTB,4;INPUT
#DEFINE     NIRQ	PORTB,0;INPUT MEGSZAKÍTÁS
; fosc=10MHz
CBLOCK 0X20
W_TEMP,STATUS_TEMP
T2H,T2,T2A
COUNT0,COUNT1,
ADATL,ADATH,CRC
FLAG,T2FLAG
ENDC
org 0
CALL	INIT
GOTO	PRG
ORG	4
	MOVWF		W_TEMP		;WREG ÉS STATUS MENTÉSE
	SWAPF		STATUS,W
	MOVWF		STATUS_TEMP
	CLRF		STATUS		;RAM 0-7F IG
	BTFSS		INTCON,INTF;RFM12 OKOZTA A MEGSZAK?
	GOTO		M01		;NEM TOVÁBB
	BCF			INTCON,INTF	;FLAG TÖRLÉSE
	CALL		GET_RFMBYTE	;BEOLVASÁS PUFFERBE
M01:BTFSS	PIR1,TMR2IF	;TIMER2 OKOZTA A MEGSZAKÍTÁST?
	GOTO		M00			;NEM TOVÁBB
	BCF			PIR1,TMR2IF	;JELZŐFLAG VISSZAÁLLÍTÁSA
	MOVF		T2A,F		;ÁLTALÁNOS IDŐZÍTŐ AKTÍV?
	BZ			T20			;NEM TOVÁBB		
	DECFSZ 		T2A			;IDŐZÍTŐ CSÖKKENTÉSE
	GOTO		T20			;NEM JÁRT LE TOVÁBB
	BCF			T2FLAG,0	;LEJÁRT ÉS EZT JELEZZÜK IS
T20:DECFSZ		T2H			;20mS IDŐZÍTŐ CSÖKKENTÉSE
	GOTO		M00			;NEM JÁRT LE TOVÁBB
	MOVLW		.20  ;200mS ;KÖVETKEZŐ IDŐ BETÖLTÉSE
	MOVWF		T2H
	BSF			FLAG,0		;JELZÉS FŐPROGRAMNAK, LEJÁRT A 20Ms
M00:SWAPF		STATUS_TEMP,W
	MOVWF		STATUS		;REGISZTEREK VISSZAÁLLÍTÁSA
	SWAPF 		W_TEMP,F 	;MEGSZAKÍTÁS ELŐTTI ÉRTÉKRE
	SWAPF		W_TEMP,W 
	RETFIE					;MEGSZAK VÉGE
;***************************************
GET_DAT: ;TÁBLÁZAT TÁROLJA A MODUL BEÁLLÍTÁSI PARAMÉTEREIT
			; LÁSD RFM12B .PDF
ADDWF PCL,F	;FIGYELEM!!! ENNEK A TÁBLÁZATNAK A NULLADIK LAPON KELL LENNIE!
			;HA NEM AKKOR A PCH REGISZTERT IS ÁLLÍTANI KELL!!! 
DT 0x80 ,0XE8;//enable register,866MHz,12.5pF
DT 0x82 ,0XD8;//Turn on crystal,PA
DT 0xA6, 0X40;//
DT 0xC6, 0X17;//4.8K baud
DT 0x94, 0XC0;//VDI,FAST,134kHz,0dBm,-103dBm
DT 0xC2, 0XAC;
DT 0xCA, 0X80;
DT 0xCE, 0XD4;
DT 0xCA, 0X83;//FIFO8,SYNC,
DT 0xC4, 0X9B;
DT 0x98, 0X50;//!mp,90kHz,MAX OUT
DT 0xCC, 0X77;
DT 0xE0, 0X00;//NOT USE
DT 0xC8, 0X0E;//NOT USE
DT 0xC0, 0XE0;//10.0MHz


INIT:
	;PORT INIT 
	BANKSEL TRISB ;
	MOVLW	B'00011111'
	ANDWF	TRISB,F		;7 6 5 OUT RFM
	BSF		TRISB,4		;4     INPUT RFM
	BSF 	TRISB,0		; INPUT rfm
	BANKSEL 0
	BSF	NSEL			;RFM12 
	;*****************************
	;timer2 init
	MOVLW	B'01001100' ; ON 10 POST
	MOVWF	T2CON
	BANKSEL PR2
	MOVLW	249
	MOVWF	PR2				;TIMER2 1mSEC IDŐNKÉNT 
	BANKSEL 0				;MEGSZAKÍTÁST
	BSF	INTCON,GIE			;GENERÁL
	BSF	INTCON,PEIE
	BANKSEL PIE1
	BSF	PIE1,TMR2IE
	BANKSEL 0
	BSF	T2FLAG,0
	MOVLW	.20
	MOVWF	T2A
	BTFSC	T2FLAG,0 ;200mSEC DELAY MIVEL RFM12 ITT MÉG
	GOTO	$-1				;1MHz ORAJELET AD KI
	BCF	SCK_
	;RFM12 INIT TÁBLÁZATBÓL
	CLRF		COUNT0		;SZÁMLÁLÓ=NULL
IN0:MOVF		COUNT0,W	
	INCF		COUNT0
	CALL		GET_DAT		;KÖVETKEZŐ ADAT BEOLVASÁSA
	MOVWF		ADATH		;MEGY PARANCS REGISZTERBE
	MOVF		COUNT0,W
	INCF		COUNT0		
	CALL		GET_DAT		;PARANCS MÁSIK FELE
	MOVWF		ADATL
	CALL		WRITECMD	;KIADJUK A PARANCSOT
	MOVLW		.30
	XORWF		COUNT0,W	;MIND KIMENT?
	BNZ			IN0			;NEM VISSZA
	BSF			INTCON,GIE
	BSF			INTCON,INTE
	BCF			OPTION_REG,6		;LELFUTÓÉLRE (NEGÁLT)
	CLRF		ADATH
	CALL		WRITECMD	;STATUS RESET
	CALL		UJ_FIFO
	CLRF 		FLAG
	RETURN
WRITECMD				;73.6u
	MOVLW	0X10
	MOVWF		COUNT1	;16 LÉPÉS
	BCF		SCK_
	BCF		NSEL		;CHIP ENABLE
W01:BCF		SDI_
	BTFSC		ADATH,7
	BSF		SDI_
W00	BSF		SCK_
	BCF		STATUS,C
	BTFSC	SDO_	
	BSF		STATUS,C
	RLF		ADATL,F	;KÖVETKEZŐ BIT
	RLF		ADATH,F
	BCF		SCK_
	DECFSZ	COUNT1		
	GOTO		W01
	BCF		SCK_
	BSF		NSEL
	MOVF	ADATL,W
	RETURN
;****************************
	GET_RFMBYTE:	
	CBLOCK
	DIR_BUF:8		;IDE KERÜLNEK AZ ADATOK
	NUM,FSR_TEMP
	ENDC	
	
	MOVF		FSR,W	;INDIREKT CÍM MENTÉSE
	MOVWF		FSR_TEMP
	MOVF		NUM,W	;FILEPOINTER BETÖLTÉSE
	MOVWF		FSR		;INDIREKTBE
	INCF		NUM		;KÖVETEZŐ CÍM BEÁLLÍTÁSA
	MOVLW		0XB0	;RFM12 BUFFER KIOLVASÁSA
	MOVWF		ADATH
	CALL		WRITECMD
	MOVWF		INDF	;KAPOTT ADAT ELMENTÉSE
	MOVLW		DIR_BUF+3		;ÖSSZESEN ENNYI ADATOT VÁRUNK
	XORWF		NUM,W
	BNZ			AA0		;MÉG NINCS MEG
	MOVF		INDF,W	;UTOLSÓ ADAT VISSZA
	XORWF		CRC,W	;EGYEZIK ?
	BNZ			P27		;NEM ELDOBJUK
	BSF			FLAG,0 	;ÉRVÉNYES ADAT FŐPROGRAM FELDOLGOZHATJA
P27	CALL		UJ_FIFO
	MOVF		FSR_TEMP,W	;INDIREKT CÍMZÉS VISSZAÁLLÍTÁSA 
	MOVWF		FSR			;MEGSZAKÍTÁS ELŐTTIRE
	RETURN
AA0:MOVF		INDF,W
	ADDWF		CRC,F	;ADAT HOZZÁADÁSA CRC-HEZ
	MOVF		FSR_TEMP,W
	MOVWF		FSR
	RETURN
;///////////////////////////////////////////////////////////
UJ_FIFO:
	MOVLW	DIR_BUF	;PUFFER KEZDŐCÍM BEÁLLÍTÁSA
	MOVWF	NUM		;MEGY A SZÁMLÁLÓBA EGYUTTAL INDIREKT CÍMZÉS IS
	CLRF	CRC	
	MOVLW	0XCA
	MOVWF	ADATH	
	MOVLW	0X80	; FIFO RESET
	MOVWF	ADATL		
	CALL	WRITECMD
	MOVLW	0XCA
	MOVWF	ADATH	
	MOVLW	0X83	; FIFO START (2D D4)
	MOVWF	ADATL		
	CALL	WRITECMD
	RETURN
	;******************************
PRG:
	BTFSS	FLAG,0 	;VAN ÉRVÉNYES PARANCS?
	GOTO P01		;NEM TOVÁBB
	BCF		FLAG,0	;JELZÉS TÖRLÉSE
	NOP				;AZ ADATOK DIR_BUF BAN VANNAK
	NOP				;ITT KELL FELDOLGOZNI
P01:NOP 			;TOVÁBBI PROGRAMOK	
	NOP
	GOTO	PRG
	
	END