I2c y USART en pic16f8XXX

Que tal Amigos.
Escribo por lo siguiente. Deseo obtener información desde un PC a través de a USART y almacenarlo en una memoria EEPROM 24LC256 por medio de I2C. He rebuscado información al respecto y nada me viene.
Necesito con urgencia que alguien me ayude por favor, ya que lo que necesito es sólo guardar lo que obtengo de la Usart.
Gracias!!

(PD: estoy programando en C en CCS)
 
HOLA MIRA YO TAMBIEN NECESITO HACER UN PROYECTO IGUAL DE HECHO ES PARA UNA PANTALLA DE LED LO QUE QUIERO ES QUE POR MEDIO DEL PUERTO SERIAL DE LA PC ENVIAR LOS DATOS Y RECIVIRLOS AL PIC Y ENVIARLOS A LA MEMORIA SERIAL. EN REALIDAD YA TENGO LA PARTE DEL PUERTO SERIAL DE HECHO CON TODO Y SUS MAX 232 QUE ES LO QUE TE RECOMIENDO QUE USES MI UNICO PROBLEMA ES A PESAR DE QUE PUEDO ESCRIBIR EN LA MEMORIA 24CXXX NO PUEDO LEERLA Y SE QUE SI LA ESCRIBE BIEN PORQUE LA HE COMPROBADO EN UN GRABADOR SERIAL DE MEMORIAS ASI QUE MI UNICO PROBLEMA ES QUE NO PUEDO LEER LA MEMORIA SI QUEIRES TE ENVIO TODO JUNTO YA JALANDO PERO QUE ALGUIEN NOS AYUDE CON ESTE PEQUEÑO PROBLEMA ADJUNTO EL PROGRAMA EN ASM PARA QUE VEAN SI EXISTE UN ERROR SALUDOS AMIGOS DEL FORO.

Código:
;****************************************CABEZERA*************************************************************
    List  P=16F877A
 INCLUDE P16F877A.inc   
 RADIX HEX
 __CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF    
;****************************************DECLARAR VARIABLES**************************************************
 CBLOCK 0X20
 PDel0
 PDel1
 PDel2
 ENDC
;**************************************VECTORES**********************************
 ORG 0
 GOTO CONFIGURACION
 ORG 5
;****************************************CONFIGURACION INICIAL**********************************************
CONFIGURACION 
 BSF  STATUS,RP0 
 BCF  STATUS,RP1
 CLRF TRISB 
 MOVLW  0XFF 
 MOVWF  TRISC
 ;CLRF TRISC 
 MOVLW  B'10000000' 
 MOVWF  SSPSTAT 
 MOVLW  .9 
 MOVWF  SSPADD 
 BCF  STATUS,RP0 ; TE CAMBIAS AL BANCO 0 
 MOVLW  B'00101000' 
 MOVWF  SSPCON 
 CLRF PORTB
 GOTO PRINCIPAL
;*******************************************DELAY ENTRE DATO Y DATO*****************************************+++++
;500MS
DEMORA  movlw     .239      ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .232      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  goto PDelL3         ; 2 ciclos delay
PDelL3  clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL4  goto PDelL5         ; 2 ciclos delay
PDelL5  goto PDelL6         ; 2 ciclos delay
PDelL6  goto PDelL7         ; 2 ciclos delay
PDelL7  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
;****************************************INICIALIZA I2C*****************
S_START 
 BCF PIR1,SSPIF ; CON ACK 
 BSF STATUS,RP0 
 BSF SSPCON2,SEN 
 BCF STATUS,RP0 
START_W
 BTFSS PIR1,SSPIF 
 GOTO START_W 
 RETURN
;***************************************DETIENE I2C**************************
S_STOP
 BCF   PIR1,SSPIF 
 BSF  STATUS,RP0
 BSF  SSPCON2,PEN 
 BCF  STATUS,RP0
STOP_W
 BTFSS PIR1,SSPIF 
 GOTO STOP_W 
 RETURN
;****************************************ENVIA DATO******************************
S_BYTE 
 BCF  PIR1,SSPIF 
 MOVWF  SSPBUF 
SEND_B 
 BTFSS  PIR1,SSPIF 
 GOTO  SEND_B 
 RETURN 
;******************************************RECIVED DATO***************************
R_BYTE 
 BCF  PIR1,SSPIF ;PARA GRABAR 
 BSF  STATUS,RP0 
 BSF  SSPCON2,RCEN 
 BCF  STATUS,RP0 
READ_W 
 BTFSS  PIR1,SSPIF 
 GOTO  READ_W 
 BCF  PIR1,SSPIF 
 BSF  STATUS,RP0 
 BCF  SSPCON2,ACKDT 
 BSF  SSPCON2,ACKEN 
 BCF  STATUS,RP0 
ACK_W 
 BTFSS  PIR1,SSPIF 
 GOTO  ACK_W 
 CALL DEMORA
 MOVF  SSPBUF,W
 MOVWF PORTB
 RETURN 
;*******************************************PRINCIPAL************************************
PRINCIPAL 
ESCRIBIR
 CALL  S_START ;start 
 MOVLW  B'10101100' ; byte identificador a W ULTIMO BIT INDICA SI GRABA O LEE Y LOS ULTIMOS BITS DE LA DIRECCION ALTA (1 A1 A2 A3 B2 B1 BO R\W) VER DATASHEET
 CALL  S_BYTE ; envio de byte en W, que es identificador 
 ;MOVLW  .0 ; direccion alta 
 ;CALL  S_BYTE ; envio de direccion alta PARA MEMORIAS MAYORES A 16K 
 MOVLW  .1 ; direccion baja 
 CALL  S_BYTE ; envio de direccion baja 
 MOVLW  0XAA ; dato a grabar en posicion 000h 
 CALL  S_BYTE ; envio de dato a grabar 
 CALL  S_STOP ; stop, si deseas, mandas mas datos antes de parar
 CALL DEMORA
LEER
 CALL  S_START ;start 
 MOVLW  B'10101101' ; byte identificador a W ULTIMO BIT INDICA SI GRABA O LEE Y LOS ULTIMOS BITS DE LA DIRECCION ALTA (1 A1 A2 A3 B2 B1 BO R\W) VER DATASHEET
 CALL  S_BYTE ; envio de byte en W, que es identificador 
 ;MOVLW  .0 ; direccion alta 
 ;CALL  S_BYTE ; envio de direccion alta 
 MOVLW  .1 ; direccion baja 
 CALL  S_BYTE ; envio de direccion baja 
 CALL R_BYTE
 BCF  PORTB,0 
 CALL S_STOP 
 SLEEP
 END
 
Atrás
Arriba