Respecto al programa:
Considero que por ahi seria mas util crear 2 funciones como tenes, con envio y revisar el ACK. Luego tener algunos registros, uno que indique la cantidad de datos, y los otros como un Buffer, entonces siempre se envia lo que esta alli, eso lo hace un poco mas versatil al momento de reutilizar el codigo de la instruccion, sino deberias estar cambiando la tabla a cada rato.
Ejemplo.. Pongo los datos "Direccion, Comando, Argumento" en mi buffer, y luego le pongo que debo enviar 3 datos. Necesito por supuesto 1 registro mas para indicar si estoy enviando o si estoy en el ACK, y por supuesto uno que indique que esta activo el proceso, de esa forma en tu programa podes generar una funcion que revisa si esta en medio de una comunicacion.
Ahora algunas partes del codigo:
BTFSC PIR1,3 ;TEST DE BANDERA I2C SI VALE UNO SIGUE HASTA EL GOTO I2C
GOTO I2C ;SALTA A LA RUTINA I2C
;-----------------------------------------------------------------------------------------------------
; RUTINA I2C
;-----------------------------------------------------------------------------------------------------
I2C
BCF PIR1,3 ;BORRAR BANDERA I2C
Si el BTFSC salta, se ejecuta I2C, si no salta, ejecuta el GOTO y nuevamente ejecuta el I2C, por lo tanto ese BTFSC es insensato.
BTFSC SSP1CON2,6 ;COMPRUEBA EL ESTADO ACK SI NO HAY CONFIRMACION SIGUE Y VUELVE A CARGAR EL DATO
GOTO SALIDA_I2C ;SI HAY CONFIRMACION
MOVLB BANCO_0 ;BANCO 0
Si no hay confirmacion se vuelve a enviar el dato, lo cual esta mal, deberia generar un STOP, y luego volver a iniciar la comunicacion.
Con esto tambien te daras cuenta que no hay nada sobre un posible STOP.
INCF POSI2C ;SE INCREMENTA POSI2C PARA CARGAR ORTRO DATO EN EL BUFF I2C
No hay un limitador de POSI2C por lo cual puede haber un overflow de la tabla.
Y finalmente tu problema:
Todo lo demas parece correcto, y el que cambie en el mismo momento que el clock es debido a que Proteus esta simulandolo asi, el tema esta en que si asi lo simula, entonces el otro componente deberia tambien soportar el mismo sistema que seria lo mas obvio. El hardware del PIC simplemente va a hacer su trabajo.