Корабельников? Ааа, старый знакомый, жуткий враль и не компетентный товарисч, давняя тема, давняя, еще в те годы этого господина освистывали с позором... Ну, это другой вопрос, сейчас не об этом.
А для автора темы надо вначале правильно прочитать и написать название интерфейса - I2
C, Inter-Integrated
Circuit то есть. А I2
S - это Integrated Inter-chip
Sound, Интерфейс передачи звука.
Во-вторых,
Сигнал A
CK (
acknowledge) передаётся в ответ от еепромки как подтверждение принятых данных или подтверждение присутствия и доступности этой микросхемы на линии.
Почитайте подробнее про I2C интерфейс
https://ru.wikipedia.org/wiki/I%C2%B2CНу и даташит на еепромки прочитать обязательно нужно.
https://pdf1.alldatasheetru.com/datashe ... 24C64.html В нем ясно указана причина вашей проблемы. Когда нога WC = 0, запись физическая запись в ячейки еепромки начнется сразу же после состояния STOP на I2C. И время записи равно 10 мс, в течение этого периода еепромка будет отвечать NACK на байт адреса.
Вам же в анализаторе протокола это и показывается, то есть "занято". Data Write Time в свойствах еепромок установлено на 10 мс. Уменьшите это время до 1 мс и всё заработает. В железе, правда, не проканает и работать ниче не будет, но в симуляции - для проверки можно.
А чтобы заработало в железе, надо менять программу.
Я конечно уже слабо помню ассемблер для PIC16, да и сам PIC16, но если прога писана по-корабельниковски, то она содержит немало ошибок, что и явилось следствием неработоспособности.
В частности, если устройство отвечает NACK (не подтверждает байт адреса или данных), то незачем повторять сразу отправку того же байта, вызывая DoS-атаку (Denial of Service) на это устройство.
Вот у вас получается типичная DoS-атака, так сказать:
как вышло, так и пошло беспрерывно, один и тот же байт, без закрытия связи, куярит и куярит по еепромке, вся линия I2C повисла, МК завис, выхода нет.
По-хорошему, нужно разобраться, почему NACK и в каком месте оное возникает. В частности, если NACK пришел после посылки адреса еепромки, то нужно не долбить этим же байтом в еепромку беспрерыно, а ОСТАНОВИТЬ связь, отправив STOP-состояние, и только затем вновь открыть связь отправкой START-состояния, и затем еще раз отправить этот же байт адреса. Только так.
Вот видите, насколько Корабельников некомпетентен был. Эта сага еще лет 15 назад была известна, в то время многие плевались.