[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AK 08 марта 2002 г. 10:58
В ответ на: Аппаратный I2C на p16f873. Help отправлено hh 07 марта 2002 г. 14:12


; Read
call I2CStart ; Выдаем "СТАРТ"-условие
movlw Adr24C01 ; Получим значение адреса EEPROM на шине.
call I2CTransW ; Передаем адрес устройства.
movlw b'00000000' ; Значение адреса в памяти устройства
call I2CTransW ; Передаем адрес байта памяти.

+++ Я бы в этом месте Stop послал, не помешает. А то неизвестно в каком состоянии I2CTransW оставляет линии SDA и SCL
+++ call I2CStop ; Выдаем "СТОП"-условие.

call I2CStart ; Выдаем "СТАРТ"-условие
movlw Adr24C01 ; Получим значение адреса EEPROM на шине.
addlw b'00000001' ; Добавляем бит чтение из EEPROM.

+++ А здесь я бы использовал ИЛИ для надежности:
+++ iorlw b'00000001' ; Добавляем бит чтение из EEPROM.

call I2CTransW ; Передаем адрес с битом чтения.
call I2CRecive ; Читаем данные из EEPROM в W.
call SendNack ; Посылаем подтверждение приема.

+++ А почему NACK? Ведь надо ACK, а то передатчик не будет больше ничего посылать.

call I2CStop ; Выдаем "СТОП"-условие.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru