
char iic_start(void)
{
    sda = 1;
    if (scl == 0 || sda == 0) return 0;   // bus is BUSY
    scl = 1;
    _nop_();
    sda = 0;      // START condition
    _nop_();
    scl = 0;      // tell everyone that we have the bus  
    return 1;     // yes we are free
}

char ack(void)
{
    char ret;
    sda = 1;      // let SDA line float
    scl = 1;
    ret = sda;    // read the ACK bit
    _nop_();
    scl = 0;      // keep hold of the bus
    return ret;   // now you know if you succeeded
}

void read_more(char more)  // was the no_ack() function
{
    sda = !more;  // your example only wanted to read one byte.
    scl = 1;
    _nop_();
    scl = 0;      // keep hold of bus
}
