I'm having a terrible time trying to get the I2C module on the 18F67K40 wor= king. My test code is posted below. This code and the I2C module seem very = simple so I must be missing something simple.=0A= This code tries to read address 0000 of an attached 24LC512 EEPROM. I know = the hardware is good because I can use Pic Basic Pro and read and write the= EEPROM using I2C.=0A= The code I'm using came off a forum on the Microchip Support website. It is= "bullet proof". Ha.=0A= =0A= I've put debugging statements in the code and what I've found is that the I= nterrupt flag, PIR3,SSP1IF, never gets asserted.=0A= =0A= Any pointers would be greatly appreciated.=0A= =0A= =0A= 'i2ctest.pbp=0A= 'another try at reading I2C data from 24LC512=0A= =0A= 'Start Condition=0A= 'Control Byte for write=0A= 'High address byte=0A= 'Low address byte=0A= 'Start Condition=0A= 'Control Byte for read=0A= 'Read in data byte=0A= 'Return with NACK=0A= 'Stop Condition=0A= =0A= =0A= asm=0A= #define Memtop 0x10000 ;higest memory in the 18F67k40 processor=0A= Startaddress =3D MemTop-800=0A= SDA =3D 4=0A= SCL =3D 3=0A= =0A= ORG Startaddress=0A= =0A= ;***************************************************************=0A= ;=0A= ; 24LC256 I2C Single Byte Read Routines=0A= ;=0A= =0A= ; =0A= ;=0A= _I2CTEST1=0A= rcall I2CInit=0A= =0A= ;EE_RD =0A= rcall I2CStrt ;send I2C START=0A= movlw h'A6'=0A= rcall I2CSend ;send device address (control byte)=0A= movlw h'00'=0A= rcall I2CSend ;send address hi byte=0A= movlw h'00'=0A= rcall I2CSend ;send address lo byte=0A= rcall I2CStrt ;send I2C START=0A= movlw h'A7'=0A= rcall I2CSend ;send device address (control byte)=0A= EE_R1 =0A= rcall I2CRcv ;receive mode (receive byte)=0A= movwf _testbyte1=0A= rcall I2CNack ;signal end of receive=0A= rcall I2CStopp ;send STOP=0A= return ;=0A= =0A= ;***************************************************************=0A= ;=0A= ; I2C primitives=0A= ;=0A= ; SSPADD =3D ((Fosc/I2Cclock)/4)-1 {formula from AN735}=0A= ;=0A= =0A= I2CInit =0A= bsf PIE3,SSP1IE ; enable the Interrupt flag, PIR3,SSP1IF=0A= bsf TRISC,SCL ;=0A= bsf TRISC,SDA ;=0A= movlw b'00101000' ;SSPEN + 12C Master=0A= movwf SSP1CON1 ;=0A= movlw b'00000000' ;=0A= movwf SSP1CON2 ;=0A= movlw b'00000000' ;slew rate on for 400khz=0A= movwf SSP1STAT ;=0A= movlw d'13' ;(20000000/100000)-1/4=0A= movwf SSP1ADD ;400khz using 20mhz xtal =0A= return ;=0A= =0A= I2CDebug=0A= movf ssp1stat,0=0A= movwf _testbyte1=0A= movf ssp1con1,0=0A= movwf _testbyte2=0A= movf ssp1con2,0=0A= movwf _testbyte3=0A= movf ssp1con3,0=0A= movwf _testbyte4=0A= return=0A= =0A= I2CWait =0A= btfss PIR3,SSP1IF ;complete flag?=0A= bra I2CWait ;no, wait=0A= bcf PIR3,SSP1IF ;clear irq flag=0A= return ;=0A= =0A= I2CStrt=0A= bsf SSP1CON2,SEN_SSP1CON2 ;send START condition=0A= bra I2CWait ;=0A= =0A= I2CStopp =0A= bsf SSP1CON2,PEN ;send STOP condition=0A= bra I2CWait ;=0A= =0A= I2CSend=0A= movwf SSP1BUF ;send byte=0A= bra I2CWait ;=0A= =0A= I2CRcv =0A= btfsc SSP1STAT,R_W ;transmit complete?=0A= bra I2CRcv ;no, wait=0A= bsf SSP1CON2,RCEN ;receive enable=0A= bcf PIR3,SSP1IF ;clear irq flag=0A= rcall I2CWait ;=0A= movf SSP1BUF,W ;=0A= return ;=0A= =0A= I2CAck =0A= bcf SSP1CON2,ACKDT ;set ACK=0A= bra I2CNack+2 ;=0A= =0A= I2CNack =0A= bsf SSP1CON2,ACKDT ;set NACK=0A= bsf SSP1CON2,ACKEN ;send ACK or NACK=0A= bra I2CWait ;=0A= =0A= I2CRes =0A= bsf SSP1CON2,RSEN ;send RESTART condition=0A= bra I2CWait ;=0A= =0A= endasm=0A= =0A= Carey Fisher =81 Director of Engineering=0A= O +1 770-209-0012 x2031 =81 F +1 770-209-0719=0A= 4295 Hamilton Mill Road =81 Suite 100 =81 Buford, GA 30518=0A= www.omnimetrix.net=0A= =0A= =0A= =0A= Tell us how we're doing! Click here to take our two-question survey.=0A= =0A= =9A =9A=9A=9A=0A= =0A= =0A= -- =0A= http://www.piclist.com/techref/piclist PIC/SX FAQ & list archive=0A= View/change your membership options at=0A= http://mailman.mit.edu/mailman/listinfo/piclist=0A= .