|
SCL=0;
SCL_DIR = I2C_OUTPUT;/* drive clock low */
/* data hold time = 0, send data now */SDA = ((byte>>i) & 0x01);/* bit to send */
Вот тут надо было SDA оставить в 0, а SDA_DIR делать IN или OUT
SDA_DIR = I2C_OUTPUT;DelayUs(I2C_TM_DATA_SU);
SCL_DIR = I2C_INPUT;/* float clock high */
Вот в этот момент после 8-го бита слейв начинает генерировать ACK, а на выводе данных держится последний переданный бит, который может быть и 1 => КОНФЛИКТ!
E-mail: info@telesys.ru