Saludos amigos
Les comento un poco lo que quiero hacer: Un pic 16f876 en modo maestro quiero que le de información a un pic 16f876 modo esclavo. Hasta ahora lo que intenta hacer mi programa es prender un par de leds en la puerta B del esclavo cada vez que recibe un dato válido.
El programa cuando lo pruebo en protoboard no está funcionando, y no se como simular en mplab v7.4 la comunicación I2C.
Anexo les pongo el código de ambos programas
PIC Maestro
***********************************************************************
	
	
	
		
**************************************************************************
Los retardos de 1 segundo y la librería de I2C funcionan bien
Ahora el código del PIC esclavo
*************************************************************************
	
	
	
		
***********************************************************************
Como verán, el programa es bastante simple. Se me ocurre que puede ser un error de configuración de algún registro pero no consigo dar con el error.
Muchas gracias de antemano por cualquier ayuda que me puedan ofrecer
				
			Les comento un poco lo que quiero hacer: Un pic 16f876 en modo maestro quiero que le de información a un pic 16f876 modo esclavo. Hasta ahora lo que intenta hacer mi programa es prender un par de leds en la puerta B del esclavo cada vez que recibe un dato válido.
El programa cuando lo pruebo en protoboard no está funcionando, y no se como simular en mplab v7.4 la comunicación I2C.
Anexo les pongo el código de ambos programas
PIC Maestro
***********************************************************************
		Código:
	
	;Programa de Prueba Micro maestro
;se conecta mediante I2C con micro esclavo
	LIST		P=16F876
	INCLUDE		<P16F876.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
	CBLOCK 0x21 
	ENDC
	
	ORG	0
	goto Inicio
	ORG	4
	goto Interrupcion
	
Inicio
	clrf PORTC			;limpio puerto c
	clrf PORTB			;limpio puerto b
	bsf STATUS,RP0		;cambio al banco 1
	movlw b'11111100'	                ;inicializa PORTC como entradas
	movwf PORTC		;PORTC 0,1 leds de visualizacion	
	clrf PORTB			;inicializo como salidas para leds	
	movlw b'10000000'
	movwf SSPSTAT		;Velocidad Standard con niveles I2C
	movlw .9
	movwf SSPADD		;Velocidad del bus 100KHz
	bsf PIE1,SSPIE		;activo interrupcion del MSSP
	bcf STATUS,RP0		;cambio al banco 0
	movlw b'00101000'	                ;Modo maestro con 7 bits de direccion
	movwf SSPCON		;Módulo MSSP encendido
	bcf PIR1,SSPIF		;clear de la bandera del I2C
	movlw b'10000000'
	movwf INTCON		;activacion general de interrupciones
lazo
	bsf PORTB,0
	bcf PORTB,1
	call Retardo_1s
	bcf PORTB,0
	bsf PORTB,1
	call Retardo_1s
	call S_START
	movlw 0xA2			;Direccion esclavo b'1010001'
					;modo escritura, ultimo bit 0	
	call SEND_B			;Indico al micro que voy a escribir
	movlw 0x30			;en la posición 0x30
	call SEND_B
	movlw 0x00
	call SEND_B
	call S_STOP
	goto lazo			                ;del maestro via I2C
Interrupcion
	retfie
	INCLUDE <RETARDOS.INC>
	INCLUDE <I2C_Lib.INC>
	end
	Los retardos de 1 segundo y la librería de I2C funcionan bien
Ahora el código del PIC esclavo
*************************************************************************
		Código:
	
	;Programa de Prueba Micro esclavo
;se conecta mediante I2C con micro maestro
	LIST		P=16F876
	INCLUDE		<P16F876.INC>
	__CONFIG	_CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
	CBLOCK  0x21
	ENDC
	
	ORG	0
	goto Inicio
	ORG	4
	goto Interrupcion
	
Inicio
	clrf PORTC			;limpio puerto c
	clrf PORTB			;limpio puerto b
	bsf STATUS,RP0		;cambio al banco 1
	movlw b'11111100'	                ;inicializa PORTC como entradas
	movwf PORTC		;PORTC 0,1 leds de visualizacion
	clrf PORTB			;inicializa PORTB como salida de leds		
	movlw b'10000000'
	movwf SSPSTAT		;Velocidad Standard con niveles I2C
	movlw 0xA2
	movwf SSPADD		;Direccion del esclavo
	bsf PIE1,SSPIE		;activo interrupcion del MSSP
	bcf STATUS,RP0		;cambio al banco 0
	movlw b'00111110'	                ;Modo esclavo con 7 bits de direccion
	movwf SSPCON		;Módulo MSSP encendido
	bcf PIR1,SSPIF		;clear de la bandera del I2C
	movlw b'10000000'
	movwf INTCON		;activacion general de interrupciones
lazo
	nop			;lazo infinito esperando datos
	goto lazo			;del maestro via I2C
Interrupcion
	btfss PIR1,SSPIF	;Pregunto si fue interrupcion del I2C
	goto fin		;no fue
	bcf PIR1,SSPIF	;limpio bandera
	bsf PORTB,0	;prendo leds
	bcf PORTB,1
	call Retardo_500ms	;espero tiempo para verlo
	bcf PORTB,0	;apago leds
	bsf PORTB,1
	call Retardo_200ms	;espero a ver leds
fin
	retfie
	INCLUDE <RETARDOS.INC>
	end
	Como verán, el programa es bastante simple. Se me ocurre que puede ser un error de configuración de algún registro pero no consigo dar con el error.
Muchas gracias de antemano por cualquier ayuda que me puedan ofrecer