Exemple #1
0
//Прием байта, если last_byte=0, то принимаем последний байт и подтверждение от мастера не нужно
unsigned char i2c_rx_soft(unsigned char last_byte)
{
	unsigned char i;
  unsigned char data=0;
  unsigned char mask=0x80;
  if(i2c_error_soft)
    return 0;
  sda_io(IN_LN);

  for(i=0;i<8;i++)
    {
      scl_set(1);
      if(in_sda())
        data=data+mask;
      mask>>=1;
      scl_set(0);
    }
  sda_io(OUT_LN);
  if(last_byte)
    sda_set(0);
  else
    sda_set(1);
  scl_set(1);
  scl_set(0);
  return data;
}
Exemple #2
0
//Формирует условие "СТОП"
void i2c_stop_soft(void)
{
  sda_set(0);
  scl_set(1);
  sda_set(1);
  if(i2c_error_soft)
    i2c_init_soft();
}
Exemple #3
0
void sht_start(void)
{
    sda_output();

    sda_set(0);
    scl_low();
    scl_high();
    sda_set(1);
    scl_low();
}
Exemple #4
0
static uint16_t sht_readw(void)
{
    uint8_t i;
    uint16_t r = 0;

    sda_input();

    for(i = 0; i < 8; i++) {
        scl_high();
        r |= sda_get()?(1<<i):0;
        scl_low();
    }

    sda_output();
    sda_set(0);
    scl_high();
    scl_low();
    sda_input();

    for(i = 8; i < 16; i++) {
        scl_high();
        r |= sda_get()?(1<<i):0;
        scl_low();
    }

    return r;
}
Exemple #5
0
//Формирует условие "СТАРТ"
void i2c_start_soft(void)
{
  if(i2c_error_soft)
    return;
  scl_set(1);
  sda_set(0);
  scl_set(0);
}
Exemple #6
0
//Посылка байта
void i2c_tx_soft(unsigned char byte)
{
	unsigned char i;
  if(i2c_error_soft)
    return;
  for(i=0;i<8;i++)
    {
      if(byte&0x80)
        sda_set(1);
      else
        sda_set(0);
      scl_set(1);
      scl_set(0);
      byte<<=1;
    }
  sda_io(IN_LN);
  scl_set(1);
  i2c_error_soft=in_sda();
  scl_set(0);
  sda_io(OUT_LN);
}