Uso del modulo sspm de pic configurándolo sin librerías

hola amigos estoy trabajando con el modulo SSPM en modo de i2c del pic 16f887 solo que me atoro en le parte de que no se si el bit de lectura o escritura lo debo poner yo o el modulo solo lo pone, si este bit es el de mas peso o el de menos peso por que eso cambiaría la dirección



nota uso el IDE de mikro c pero no estoy usando la librería para i2c de ese compilador ...
 
Creo te refieres al módulo MSSP, SSPM más bien hace referencia a los bits 3<>0 del registro SSPCON.
Me parece que tienes que leer bien la hoja de datos porque eso está bien explicado ahí.

Son varios registros involucrados los que se tienen que usar para lo que quieres, pero es algo así por ejemplo.

Para escribir:
PHP:
/******************************************************************************
* Envía el byte 'dato' y devuelve el valor del bit ACK/NACK recibido.
* ACK = 0 y NACK = 1
*******************************************************************************/
char i2c_escribir(char dato)
{
   SSPBUF = dato;          // Colocar el dato a enviar.
   PIR1.SSPIF = 0;         // Limpiar SSPIF

   while(!PIR1.SSPIF)      // Esperar a que llegue el bit ACK/NACK
      continue;
   
   if(SSPCON2.ACKSTAT)     // Leer bit ACK/NACK recibido.
      return 1;            // Esto es un NACK
   else
      return 0;            // Esto es un ACK
}
Para leer:
PHP:
/******************************************************************************
* Lee un byte y envía el bit ACK/NACK.
* ack = 0 es ACK y ack = 1 es NACK.
*******************************************************************************/
char i2c_leer(char ack)
{
   SSPCON2.RCEN = 1;       // Habilitar recepción de dato.
   
   if(ack == 1)            // Preparar el bit ACK/NACK a enviar.
      SSPCON2.ACKDT = 1;   // Esto es un NACK
   else
      SSPCON2.ACKDT = 0;   // Esto es un ACK
      
   while(SSPCON2.RCEN)     // Esperar a que termine de llegar el dato.
      continue;
      
   SSPCON2.ACKEN = 1;      // Iniciar envío de bit ACK/NACK
   
   while(SSPCON2.ACKEN)    // Esperar a que se complete el envío.
      continue;
      
   return SSPBUF;
}
Existe una configuración previa y otras rutinas involucradas, pero; ¿Es esto lo que querías saber?
 
Última edición:
Atrás
Arriba