Может кто знает как решить такую проблему?
Читаю побайтно EEPROM 24LC04B, процессор 16F877. Подпрограмма завершается передачей состояния STOP, но анализатор, смотрящий линии SDA, SCL не показывает, что это состояние вырабатывается. После останова программы в регистре SSPSTAT значение 0х88, т.е. взведен бит S. Что свидетельствует о том, что последним был сигнал START.
Подпрограмма записи в память работает, СТОП вырабатывается. И на анализаторе это видно.
Вот кусок окончания подпрограммы чтения:
; Send NACK bit for Acknowledge Sequence
bsf STATUS,RP0 ; банк 1
bsf SSPCON2,ACKDT ; ACK DATA to send is 1, which is NACK.
bsf SSPCON2,ACKEN ; Send ACK DATA now.
; После отправки ACK или NACK, ACKEN автоматически сбрасывается MSSP
; Отправляем и проверяем состояние STOP и дожидаемся его завершения.
bsf SSPCON2,PEN ; Send STOP condition
call WaitMSSP ; Wait for I2C operation to complete
; I2C Запись и Чтение завершены.
bcf STATUS,RP0 ; BANK 0
movf SSPBUF,W ; Get data from SSPBUF into W register
movwf LC04D ; сохранить в регистр LC04D
return

Программы взяты из презентации побайтной работы с памятью. Немного их дополнил. Поскольку использую и второй банк перед записью и чтением адреса анализирую с каким банком идет работа, и, соответственно изменяется первый конфигурационный байт.
Я конечно выкрутился. После завершения чтения даю команду сброса модуля MSSP. Но хочется понять почему?