	
	;----------------------------------------------------------------------------------------------------------------
	; ERDS v1.1
	; 23.02.2004.
	; - Popravljen RDS niz, nema prekida 
	; - RT salje svih 64 karaktera
	; - potpuno kompatibilan sa erds v3 softwareom
	;---------------------------------------------------
	; Author: Ivo Baradic
	; Home page: www.qsl.net/9a4cs
	; Project Page: www.fmdream.net
	;
	; Design for ERDS encoder hardware by www.pira.cz
	;----------------------------------------------------------------------------------------------------------------
	;
	;
			list      p=16F628A	; list directive to define processor
			#include <p16F628.inc>	; processor specific variable definitions
			__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _HS_OSC
	
			org    000h    ; 
			goto   MAIN  
					
			; Sistemske RAM Adrese
			Config_Byte	equ	0x20		; Config byte	
			Status_Byte	equ	0x21		; Status byte (11111111) => (F,F,F,F, RWT, Flag New Bit, Flag Last Bit, ACK ) 
					;		equ	22h		; Slobodan
			; 23h to 63h temporary save rds data in byte format for sending out
			TX_Buffer	equ	0x64		; Koristim za slanje byte
			RX_Buffer	equ	0x65		; Koristim za primanje byte
			DPS_ADDR	equ	0x66		; Adresa ieeproma kad se koristi dps
			IEE_ADDR	equ	0x67		; Obicna ieprom adresa
			RAM_ADDR	equ	0x68		; RAM adresa koja ujedno sluzi kao brojac
			COUNTER		equ	0x69		; Iskoristen u differencialnom koderu
			COUNTER_1	equ	0x6A		; koristim u NO_DPS kao brojac poslanih 0A grupa, kod mene je 4
			COUNTER_2	equ	0x6B		; Koristim u 2A citanje/slanje RDS data kao brojac byteova eprom adrese 00h~1CF	
			COUNTER_3	equ	0x6C		; Program Service Counter
			COUNTER_4	equ	0x6D		; slobodan
			COUNTER_5	equ	0x6E		; Slobodan
			T_Puls		equ	0x6F		; Brojac za bifazne impulse
			
			; Konstante
			T_Puls_		equ	0x60

			; Portovi
			RA3			equ	3			; RDCL 1.1875kHz
			SCL			equ	1			; I2C Serial Clock
			SDA			equ	2			; I2C Serial Data
			A0			equ	3			; Signal PC-u da ima pristup 12C uredaju
			RB4			equ	4			; biphase 1
			RB5			equ	5			; biphase 2
			; Status_Byte
			ACK			equ	0			; IEEPROM Acknowledge
			FLB			equ	1			; Flag for Last bit smjestaj bita za diferencialni koder (prosli bit)
			FNB			equ	2			; Flag for New Bit smjestaj bita za diferencialni koder (novi bit)
			RWT			equ	3			; Period slanja RDS-a / period citanja ieeprom
		 
			
			; PIC bitovi
			C			equ	0			; carry bit
			Z			equ	2			; Zero bit
			w			equ	0			; work registar
			f			equ	1			; File registar
		
	;>>>>>>>>>>>>>>>>>  Procedure za komunikaciju sa I2C  >>>>>>>>>>>>>>>>>>>
	TX
			MOVLW   b'11000001'			; SDA=OUT SCL=OUT
	        TRIS    PORTB				;
	
	        CALL    TX4					; TRANSMIT 8 TIMES
	        CALL    TX4					;
	        GOTO    BITIN				;
	TX4
			CALL    TXLP				;
	        CALL    TXLP				;
	        CALL    TXLP				;
	TXLP
			RLF     TX_Buffer, f		; ROTATE BIT TO CARRY
	        GOTO    BITO0				; send the bit to serial EE
	
	;       RECEIVE DATA SUBROUTINE
	;--------------------------------------------------------------
	RX
			MOVLW   b'11000101'			; SDA=IN, SCL=OUT
	       	TRIS    PORTB           	;
	       	CALL    RX4             	;
	       	CALL    RX4             	;
	       	BSF     STATUS, C       	; SET ACK BIT=1
	       	GOTO    BITOUT          	; TO FINISH TRANSMISSION
	
	RX4
			CALL    RXLP            	;
	        CALL    RXLP            	;
	        CALL    RXLP            	;
	RXLP
			CALL    BITI0           	; READ A BIT
	       	RLF     RX_Buffer, f		; SHIFT CARRY TO BYTE
	       	RETURN                  	;
		
	; SEQUENCIAL READING
	;---------------------------------------------------------------
	RX_SEQ
			MOVLW   b'11000101'			; SDA=IN, SCL=OUT
	      	TRIS    PORTB           	;
	       	CALL    RX4_SEQ             ;
	       	CALL    RX4_SEQ             ;
	       	BCF     STATUS, C       	; SET ACK BIT=0
	       	GOTO    BITOUT          	; TO FINISH TRANSMISSION
	
	RX4_SEQ
			CALL    RXLP_SEQ            ;
	        CALL    RXLP_SEQ            ;
	        CALL    RXLP_SEQ            ;
	RXLP_SEQ
			CALL    BITI0           	; READ A BIT
	      	RLF     RX_Buffer, f		; SHIFT CARRY TO BYTE
	       	RETURN  
	       	
	;       START BIT SUBROUTINE
	;--------------------------------------------------------------
	BSTART
			BSF     PORTB,SDA			; make sure data is high
	        MOVLW   b'11000001'			; SDA=OUT SCL=OUT
	        TRIS    PORTB				;
	        BSF     PORTB,SCL			; set clock high
	        NOP							;
	        BCF     PORTB,SDA			; data line goes low during
	        GOTO    BC_END				; high clock for start bit
	
	;       STOP BIT SUBROUTINE
	;--------------------------------------------------------------
	BSTOP
			BCF     PORTB, SDA			; make sure data line is low
	        MOVLW   B'11000001'			; SDA=OUT SCL=OUT
	        TRIS    PORTB				;
	        NOP							;
	        BSF     PORTB, SCL			; set clock high
	        NOP							;
	        BSF     PORTB, SDA			; data goes high while clock high
	
	B_END
			NOP							;
	BC_END
			BCF     PORTB, SCL			; set clock low again
	        RETURN						;
	
	; BITOUT ROUTINE , SEND BIT
	;--------------------------------------------------------------
	BITOUT								; SDA=OUT SCL=OUT
			movlw	b'11000001'
			tris	PORTB	
	BITO0
			BTFSS   STATUS, C			; check for state of data bit to xmit
	        BCF     PORTB, SDA			; set data line low
	        BTFSC   STATUS, C			;
	        BSF     PORTB, SDA			; high? set data line high
	        BSF     PORTB, SCL			; set clock line high
	        ; tu je B_end po originalu vrati ako nepomaze
	        GOTO    BC_END		;
	
	;       BITIN ROUTINE
	;--------------------------------------------------------------
	BITIN			           
			MOVLW   b'11000101'			; SDA=IN SCL=OUT
			tris	PORTB	
	BITI0
			BSF     PORTB, SCL			; set clock line high
	        NOP							;
	        BSF     STATUS,C			; assume input bit is high
	        BTFSS   PORTB, SDA			; read the data bit
	        BCF     STATUS,C			; input bit was low ,clear CARRY
	        GOTO    BC_END				;
	
	;<<<<<<<<<<<<<<<<<<<< end komunikacija I2C <<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>  Sending Bit "1" RDS  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	RDS_1
			btfss	PORTA, RA3			; Wait for RDCL	High
			goto	$ - 1
					
			bsf		PORTB, RB5			; Set in output 2.5V
			bcf		PORTB, RB4
			nop
			bsf		PORTB, RB4			; Set in out 5V
			movlw	T_Puls_
			movwf	T_Puls
			decfsz	T_Puls, f 			; Counter the Time of Puls
			goto	$ - 1
			bcf		PORTB, RB4			; Back in out 2.5V
			
			btfsc	PORTA, RA3			; Wait for RDCL Low
			goto	$ - 1
			bcf		PORTB, A0			; Prosljedivanje RDS cloka prema PC dok je i2c uredaj slobodan
			bcf		PORTB, RB5			; Set in out 0V
			movlw	T_Puls_
			movwf	T_Puls		
			decfsz	T_Puls, f			; Counter the Time of Puls
			goto	$ - 1
			bsf		PORTB, RB5			; Back in out 2.5V
			bsf		Status_Byte, FLB	; Flag last bit for Diff_encoder
			return						; Go to Read next Bit
	;>>>>>>>>>>>>>>>  End Sending Bit "1" RDS  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	;>>>>>>>>>>>>>>>  Sending Bit "0" RDS  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	RDS_0
			btfss	PORTA, RA3			; Wait for RDCL High
			goto	$ - 1
			
			bsf		PORTB, RB5			; Set in out 2.5V
			bcf		PORTB, RB4
			nop
			bcf		PORTB, RB5			; Set in out 0V
			movlw	T_Puls_
			movwf	T_Puls		
			decfsz	T_Puls, f			; Counter the Time of Puls
			goto	$ - 1	
			bsf		PORTB, RB5			; back in out 2.5V
			
			btfsc	PORTA, RA3			; Wait for RDCL Low
			goto	$ - 1
			bcF		PORTB, A0			; A0 = Low
			bsf		PORTB, RB4			; Set in out 5V
			movlw	T_Puls_
			movwf	T_Puls
			decfsz	T_Puls, f			; Counter the Time of Puls
			goto	$ - 1
			bcf		PORTB, RB4			; Back in out 2.5V
			bcf		Status_Byte, FLB	; Flag the last bit for diff_encoder
			return						; Go to Bit Read
	;<<<<<<<<<<<<<<<<<<  End Sending Bit "0" RDS  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>  Differential encoder SubRoutine  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
	DIFF_E	
			movlw	0x08				; Brojac bitova
			movwf	COUNTER
	_DIFF_E	
			btfss	Status_Byte, RWT
			bsf		PORTB, A0
			
			rlf		TX_Buffer, f
			btfss	STATUS, C	;
			call	_zero_				; Send the Old value
			btfsc	STATUS, C
			call	_set_
	
			decfsz	COUNTER, f
			goto	_DIFF_E
			return
	_set_
			btfss	Status_Byte, FLB	; What is the last Bit "1" Or "0" 
			goto	RDS_1				; Send "1"
			goto	RDS_0				; Send "0"
	_zero_
			btfss	Status_Byte, FLB	; What is the last Bit "1" Or "0"
			goto	RDS_0				; Send "0"
			goto	RDS_1				; Send "1"
	;<<<<<<<<<<<<<<<<<<<<<<<  end Diferential Encoder  <<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>  SEND RDS DATA  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	
	SEND_RDS
			movlw	0x23				; Pocetna RAM adresa s koje iscitavam (indirect addressing)
			movwf	RAM_ADDR			; Postavi Pocetnu RAM Adresu
	_SEND_RDS	
			movf	RAM_ADDR, w
			movwf	FSR					; pointaj FSR na RAM adresu
			movf	INDF, w				; Iscupaj sadrzaj RAM adrese
			movwf	TX_Buffer			; Sadrszaj RAM adrese iskopiraj  u TX_Buffer fajl
				
			call	DIFF_E
				
			incf	RAM_ADDR, f			; Uvecaj RAM Adresu za 1
			bcf		STATUS, Z			; Ponisti Z bit jer se sam ne ponistava
			movlw	0x64				; Zadnja RAM Adresa koja ce biti iscitana/poslana
			subwf	RAM_ADDR, w
			btfss	STATUS, Z
			goto	_SEND_RDS
	
			return
	;<<<<<<<<<<<<<<<<<<<<<<<  end SEND RDS DATA  <<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>> Read IEEPROM I2C >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>	
	R_IEE_SEQ	
			call	BSTART				; Send the Start Bit to I2C Device
			call	TX					; Send control byte
			btfsc	STATUS, C			; ACK?
			goto	R_IEE_SEQ			; No		
			movf	IEE_ADDR, w
			movwf	TX_Buffer			; 
			call	TX					; Send address to I2C Device
			btfsc	STATUS, C			; ACK?
			goto	R_IEE_SEQ			; go repeat Device not ACK		
	_R_SEQ		
			call	BSTART				; Send the Start Bit to I2C Device
			movlw	b'10100001'			; control byte = Citaj iz BANK 0
			movwf	TX_Buffer			; Set Control byte bit0	
			call	TX					; Slanje control byte za citanje iz I2C
			btfsc	STATUS, C			; ACK?
			goto	_R_SEQ
			return	
	
			
	;<<<<<<<<<<<<<<<<<<<<<  End Read IEEPROM I2C  <<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>  DPS RANDOM  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	READ_DPS
			movlw	b'11000001'
			tris	PORTB				; Inicializiraj port B (RB4, RB5)=Output
			movlw	b'10100000'			; Pisi u BANK 0 (control byte)
			movwf	TX_Buffer
			
			clrf	COUNTER_3			; Namjesti brojac bytova
			movf	DPS_ADDR, w
			movwf	IEE_ADDR
	
	_READ_DPS
			bcf		STATUS, Z
			movlw	0x00				; Pocetna RAM Adresa	
			subwf	COUNTER_3, w		; Ako se suni pocetna ram adresa poslji ramdom sequencu			
			btfsc	STATUS, Z			
			call	R_IEE_SEQ			; Posalji startnu sequencu
			call	RX_SEQ				; Ocitaj data s prve IEEPROM Adrese
			
			movf	RAM_ADDR, w			; 
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz RX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			movwf	TX_Buffer	
			call 	DIFF_E				; Posalji primljeni byte
			
			incf	RAM_ADDR, f			; uvecaj RAM adresu za 1
			incf	IEE_ADDR, f			; Uvecaj IEEPROM Adresu za 1
			incf	DPS_ADDR, f			; Uvecaj DPS_ADDR za 1	
			incf	COUNTER_3, f 
			
			bcf		STATUS, Z
			movlw	0x3
			subwf	COUNTER_3, w
			btfss	STATUS, Z			; loopback dok neiscitas 4 byta
			goto	_READ_DPS
	       	
	       	call	RX					; Primi zadnji 33 byte i zavrsi sa sequencialnim citanjem
			call	BSTOP				; Poslji stop bit I2C uredaju

			movf	RAM_ADDR, w			; Upisi posljednji byte u RAM
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz TX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			movwf	TX_Buffer			; Posalji poslijednji byte
			call	DIFF_E
					
			incf	RAM_ADDR, f
			incf	IEE_ADDR, f
			incf	DPS_ADDR, f
			
			movlw	b'11000111'			; Oslobodi I2 bus
			tris	PORTB 
									
			return
	
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  End DPS RANDOM  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  Start READ_PI  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	READ_PI
			movlw	b'11000001'
			tris	PORTB				; Inicializiraj port B (RB4, RB5)=Output
			movlw	b'10100000'			; Pisi u BANK 0 (control byte)
			movwf	TX_Buffer					
			clrf	COUNTER_3
			movf	RAM_ADDR, w
			movwf	IEE_ADDR
			movlw	0x23
			subwf	IEE_ADDR, f

	_READ_PI
			bcf		STATUS, Z				
			movlw	0x00				; provjeri dali se cita prvi byte ako da onda posalji control byte
			subwf	COUNTER_3, w
			btfsc	STATUS, Z			
			call	R_IEE_SEQ			; Posalji startnu sequencu
			call	RX_SEQ				; Ocitaj data s prve IEEPROM Adrese
			
			movf	RAM_ADDR, w			; Upisi sadrzaj indirektno u RAm 
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz TX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			incf	RAM_ADDR, f
			incf	IEE_ADDR, f
			incf	COUNTER_3, f
			
			movwf	TX_Buffer			; byte spremi u TX buffer za RDS Slanje
			call	DIFF_E				; Posalji byte
			
			bcf		STATUS, Z
			movlw	0x08
			subwf	COUNTER_3, w
			btfss	STATUS, Z
			goto	_READ_PI
	       	
	       	call	RX					; Primi zadnji 33 byte i zavrsi sa sequencialnim citanjem
			call	BSTOP				; Poslji stop bit I2C uredaju
				
			movf	RAM_ADDR, w			; Upisi posljednji byte u RAM
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz TX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			movwf	TX_Buffer			; Posalji poslijednji byte
			call	DIFF_E	
				
			incf	RAM_ADDR, f
			incf	IEE_ADDR, f
			
			movlw	b'11000111'			; Oslobodi I2 bus
			tris	PORTB						
			
			return
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  End  READ_PI  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  DPS  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	START_DPS
            movlw	0x60			; DPS_ADDR prva adresa koja ce biti citana
            movwf	DPS_ADDR		; Postavi Prvu IEEPROM DPS ADRESU		
	DPS			
			movlw	0x23				; Start RAM address
			movwf	RAM_ADDR			; Set Ram Address
			clrf	IEE_ADDR			; Start IEEPROM address
			bsf		Status_Byte, RWT	; Oznaci vrijeme citanja				
	_DPS
			call	READ_CONFIG			; ocitaj config file		
			call	READ_PI
			call	READ_DPS			; 1st OA
			call	READ_PI
			call	READ_DPS			; 2st 0A
			call	READ_PI
			call	READ_DPS			; 3st 0A
			call	READ_PI
			call	READ_DPS			; 4st 0A

			movf	Config_Byte, w
			movwf	COUNTER_3			; Upisi PS period u brojac
	__DPS
			bcf		Status_Byte, RWT	; Omoguci ex. uredaju pisanje u IEEPROM					
			;call	SEND_RDS
			;call 	SEND_RDS
			call	SEND_RDS
			call	SEND_RDS			; predi na slanje iz RAM-a
			call	R_2A				; Posalji 2a
			decfsz	COUNTER_3, f
			goto	__DPS
						
			movlw	0xc0
			subwf	DPS_ADDR, w
			btfss	STATUS, Z			
			goto	DPS					; Inicializiraj ponovno ocitaj eprom itd 					
			goto 	MAIN
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  end DPS  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<	
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  NO_DPS  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	NO_DPS
			movlw	0x23				; Start RAM address
			movwf	RAM_ADDR			; Set Ram Address
			clrf	IEE_ADDR			; Start IEEPROM address
			bsf		Status_Byte, RWT	; Oznaci vrijeme citanja
	_NO_DPS	
			movlw	b'11000001'
			tris	PORTB				; Inicializiraj port B (RB4, RB5)=Output

			movlw	b'10100000'			; Pisi u BANK 0
			movwf	TX_Buffer
			bcf		PORTB, A0			; Spusti RDCL koji ide na PC

			movlw	0x23				; Pocetna RAM Adresa	
			subwf	RAM_ADDR, w			; Ako se suni pocetna ram adresa poslji ramdom sequencu			
			btfsc	STATUS, Z			
			call	R_IEE_SEQ			; Posalji startnu sequencu
			call	RX_SEQ				; Ocitaj data s prve IEEPROM Adrese
			
			movf	RAM_ADDR, w			; Upisi sadrzaj indirektno u RAm 
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz TX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			movwf	TX_Buffer			; byte spremi u TX buffer za RDS Slanje
			call	DIFF_E				; Posalji byte

			incf	RAM_ADDR, f			; Uvecaj RAM adresu za 1
			incf	IEE_ADDR, f			; Uvecaj IEEPROM Adresu za 1
			
			movlw	0x63				; provjeri dali si upisao sve adrese ozim zadnje 32 byta u RAM
			bcf		STATUS, Z
			subwf	RAM_ADDR, w
			btfss	STATUS, Z
			goto	_NO_DPS				; loopback dok neisitas 32 byte od 33 RDS byta 
	       	
	       	call	RX					; Primi zadnji 33 byte i zavrsi sa sequencialnim citanjem
			call	BSTOP				; Poslji stop bit I2C uredaju

			movlw	b'11000111'			; Oslobodi I2 bus
			tris	PORTB			

			movf	RAM_ADDR, w			; Upisi posljednji byte u RAM
			movwf	FSR					; Adresiraj FSR na RAM Adresu iz RAM_ADDR fajla
			movf	RX_Buffer, w		; Iscupaj primljeni byte iz TX_Buffer-au W registar
			movwf	INDF				; Iskopiraj sadrzaj u RAM Adresu indirektno preko FSR
			
			movwf	TX_Buffer			; Posalji poslijednji byte
			call	DIFF_E			
			
			movlw	0x4				    ; koliko ce puta ponoviti slanje iz RAM-a
			movwf	COUNTER_1			; brojac 
	__NO_DPS
			bcf		Status_Byte, RWT	; Omoguci ex. uredaju pisanje u IEEPROM					
			call	SEND_RDS			; predi na slanje iz RAM-a
			decfsz	COUNTER_1, f
			goto	__NO_DPS
			call	R_2A				; Posalji 2a			
			goto	MAIN				; Inicializiraj ponovno ocitaj eprom itd 
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  End NO_DPS  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  Start Radio Text  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	; Citaj iz eproma i odma salji bez da diras RAM

	R_2A
            bsf		Status_Byte, RWT	; Oznaci vrijeme citanja
			clrf	IEE_ADDR			; clear IEE_ADDR
			clrf	COUNTER_2 
						
			movlw	b'11000001'
			tris	PORTB				; Inicializiraj port B (RB4, RB5)=Output	

	_R_2A
            bsf		Status_Byte, RWT	; Oznaci vrijeme citanja	
			bcf		PORTB, A0			; Spusti RDCL koji ide na PC onemogci programiranje
			movlw	b'10100010'			; Pisi u BANK 1
			movwf	TX_Buffer
			
		    bcf		STATUS, Z
			movlw	0x00				; Pocetna RAM Adresa	
            subwf	IEE_ADDR, w			; Ako se suni pocetna ram adresa poslji ramdom sequencu			
            btfsc	STATUS, Z			
			call	R_IEE_SEQ			; Posalji startnu sequencu
			call	RX_SEQ				; Ocitaj data s prve IEEPROM Adrese			
			movf	RX_Buffer, w
			movwf	TX_Buffer
			call	DIFF_E
			incf	IEE_ADDR, f			; Uvecaj IEEPROM Adresu za 1
			; Ubacivanje 0A grupe unutar 2A
			incf	COUNTER_2, f
             		
			
			BSF     STATUS, RP0  
            movlw	0xA0
            BCF     STATUS, RP0 
			bcf		STATUS, Z
			subwf	COUNTER_2, w
			btfsc	STATUS, Z
			call	_R_2A_0A		
			
			movlw	0x1CF				; provjeri dali si poslao 254 byte
			bcf		STATUS, Z
            subwf	IEE_ADDR, w
			btfss	STATUS, Z
			goto	_R_2A				; loopback dok neisitas 254 byte od 255 grupe 2A RDS byta

	       	call	RX					; Primi zadnji 255 byte i zavrsi sa sequencialnim citanjem
			call	BSTOP				; Poslji stop bit I2C uredaju zavrsi citanje			
			movf	RX_Buffer, w
			movwf	TX_Buffer
			call	DIFF_E				; Posalji Zadnji Byte
						
			bcf		Status_Byte, RWT	; Dozvoli pisanje u eprom			
			movlw	b'11000111'			; Oslobodi I2 bus
			tris	PORTB			
			
			return
	_R_2A_0A
			call	SEND_RDS
			clrf	COUNTER_2
			return	 	
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  End RT  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> READ CONFIG  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
	READ_CONFIG	
			bcf		PORTB, A0			; Spusti RDCL koji ide na PC onemogci programiranje
			movlw	b'10100000'			; Pisi u BANK 1
			movwf	TX_Buffer
			BSF     STATUS, RP0
            movlw	0xA0				; Adresa confiruracijskog byta
			BCF     STATUS, RP0
            movwf	IEE_ADDR			;
		
			call	R_IEE_SEQ			; Posalji startnu sequencu
			call	RX					; Ocitaj data s prve IEEPROM Adrese
			call	BSTOP
			movlw	b'11000111'			; Oslobodi I2 bus
			tris	PORTB

			movfw	RX_Buffer
			movwf	Config_Byte
			return
	;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  end ocitavanje config bytea  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	;>>>>>>>>>>>>>>>>>>> MAIN CODE /Initialize PORT`s/read config byte from ieeprom >>>>>>>>>>>>>>>>>>>>>>>>>>>
	MAIN
            bsf		STATUS, RP0			; Selected Bank 1
            bcf	    INTCON,7	
            movlw	b'11000001'			; SDA Out SCL Out
		    movwf	TRISB				; RB0, 6, 7 = Input 
			bcf		STATUS, RP0			; Initialize the ports RA I/O
	        
            bsf		STATUS, RP0
			movlw	b'00011111'			;
			movwf	TRISA				; RA0, 1, 3, 4 = Input
			bcf		STATUS, RP0			; Back to Bank 0
            movlw	0x07
	        movwf	CMCON
			
			call	READ_CONFIG			; Citaj configuracijske adrese iz eeproma	; Amo rec OK
			
			movlw	0x20
			bcf		STATUS, Z
			subwf	Config_Byte, w		; ako je Config Byte 20h onda nije ukljucen DPS		
			
			btfsc	STATUS, Z			; Dali je ukljucen DPS
			goto	NO_DPS				; Salji default PS		
			goto	START_DPS			; Salji rds sa Dynamic PS-om
	
			end
		
