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
; fosc=10MHz
CBLOCK 0X20
W_TEMP,STATUS_TEMP
T2H
T2A,T2B,T2C
T2FLAG
COUNT0,COUNT1,HOSSZ
ADATL,ADATH,CRC
FLAG
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		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 ,0X08;//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
	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 MEGSZAKÍTÁST
	BANKSEL 0
	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
	RETURN
TXBYTE						;1 BYTE KIKÜLDÉSE
	MOVWF	ADATL			;ADAT PARANCSREGISZTERBE
	ADDWF	CRC,F			;CRC HOZZÁADAÁS
	MOVLW	0XB8			;ADAT KIVITELI PARANCS
	MOVWF	ADATH
	BCF		SCK_			;SDO LÁB JELZI,HA 
	BCF		SDI_			;MEHET A KÖVETKEZŐ
TX1:BCF		NSEL			;ADDIG VÁRUNK
	BSF		SCK_
	BTFSC	SDO_			;POLLING SDO
	GOTO	TX0
	BCF		SCK_
	BSF		NSEL
	GOTO	TX1
TX0:BCF		SCK_			;MEHET A BYTE
	BSF		NSEL
	
WRITECMD:					;PARANCS KIADÁSA RFM12 NEK
	BCF		SCK_
	BCF		NSEL
	MOVLW	.16
	MOVWF	COUNT1
W00:	BCF		SDI_
	BTFSC	ADATH,7
	BSF		SDI_
	BSF		SCK_
	NOP
	RLF		ADATL,F
	RLF		ADATH,F
	BCF		SCK_
	NOP
	DECFSZ	COUNT1
	GOTO		W00
	BSF		NSEL
	RETURN
;
FILE_OUT:
	CALL 	OPENTX ;ADÓ BEKAPCS AZONOSÍTÓ KARAKTEREK ÉS CRC=0
	MOVLW	0X30	;IDE JÖNNEK A KIKÜLDENDŐ ADATOK
	CALL	TXBYTE	;MOST CSAK ASCII   0 ÉS 1  MEGY KI
	MOVLW	0X31
	CALL	TXBYTE
	CALL	CLOSETX	;CRC KIKÜLDÉSE ADÁS LEZÁRÁSA ADÓ OFF
	RETURN
;***********************
OPENTX:
	MOVLW	0X82
	MOVWF	ADATH
	MOVLW	0X28
	MOVWF	ADATL
	CALL	WRITECMD	;ADÓ BEKAPCSOLÁSA
	CALL	D150uS		;FELÉLEDÉS 150MIKROSEC
	MOVLW	0X82
	MOVWF	ADATH
	MOVLW	0X38
	MOVWF	ADATL
	CALL	WRITECMD
	MOVLW	0XAA		;START BYTE-OK
	CALL	TXBYTE
	MOVLW	0XAA
	CALL	TXBYTE
	MOVLW	0XAA
	CALL	TXBYTE
	MOVLW	0X2D	;AZONOSÍTÓ KÓD
	CALL	TXBYTE
	MOVLW	0XD4
	CALL	TXBYTE
	CLRF	CRC
	RETURN
;********************
CLOSETX:
	MOVF	CRC,W	;ELLENŐRZŐ SZÁM KIKÜLDÉSE
	CALL	TXBYTE
	MOVLW	0XAA
	CALL	TXBYTE
	MOVLW	0XAA
	CALL	TXBYTE
	MOVLW	0X82
	MOVWF	ADATH
	MOVLW	0X08
	MOVWF	ADATL
	CALL	WRITECMD	;ADÓ STOP
	RETURN
;********************
D150uS:
	MOVLW	0X5E
	ADDLW	0XFF
	BNZ		$-2
	RETURN
;********************
	PRG:
	BTFSS	FLAG,0		;VÁRUNK 20mSEC IDEIG
	GOTO	PRG
	BCF		FLAG,0
	CALL	FILE_OUT	;ADÁS 
	GOTO	PRG			;VISSZA

END	