I2C
	MOVLW		D'40'	
	movwf 		SSPCON 
	BSF		STATUS,RP0
	MOVLW		D'9'
	movwf 		SSPADD
	MOVLW		D'0'
	movwf 		SSPSTAT
	MOVLW		D'24'
	MOVWF		TRISC



	CALL		STARTI2C
	CALL		I2CIDLE
	MOVLW		B'10010000'
	CALL		WRITEI2C

	BSF		STATUS,RP0
	BTFSC		SSPCON2,ACKSTAT
	GOTO		$-1

	CALL		I2CIDLE
	MOVLW		D'0'
	CALL		WRITEI2C	

	BSF		STATUS,RP0
	BTFSC		SSPCON2,ACKSTAT
	GOTO		$-1

	CALL		RESTARTI2C
	CALL		READI2C
	CALL		STOPI2C
	RETURN	

STARTI2C
	BSF		STATUS,RP0
	bsf 		SSPCON2,SEN 
	btfsc 		SSPCON2,SEN ; test start
	goto $-1
	RETURN

RESTARTI2C
	BSF		STATUS,RP0
	bsf 		SSPCON2,RCEN ; initiate
	btfsc		 SSPCON2,RCEN ; test read
	goto 		$-1
	RETURN

STOPI2C
	BSF		STATUS,RP0
	bsf 		SSPCON2,PEN 
	btfsc 		SSPCON2,PEN ; test start
	goto $-1
	RETURN

WRITEI2C
	BCF		STATUS,RP0
	movwf 		SSPBUF ; initiate I2C
	BSF		STATUS,RP0
	btfsc 		SSPSTAT,R_W ; test write bit
	goto 		$-1 ; module busy
	BCF		STATUS,RP0
	BCF		PIR1,SSPIF
	RETURN


I2CIDLE
	BCF		STATUS,RP0
	btfsc 		SSPSTAT,R_W ; transmit
	goto 		$-1 
	BSF		STATUS,RP0
	movf 		SSPCON2,w ; get copy
	andlw		 0x1F ; mask out
	btfss		STATUS,Z ; test for
	goto 		$-3 ; bus is busy
	return 

READI2C
	BSF		STATUS,RP0
	BTFSC		SSPSTAT,BF
	GOTO		$-1
	BCF			STATUS,RP0
	MOVF		SSPBUF,0
	MOVWF		CELZIUS
	RETURN
