[an error occurred while processing this directive] [an error occurred while processing this directive]
Аппаратный I2C на p16f873. Help
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено hh 07 марта 2002 г. 14:12

Не знаю, что происходит. Аппараиная запись в EEPROM идет нормально, а читать "зараза" не хочет.... Подскажите кто-нибудь пожалуйста, что делаю не так.
AN734 и AN735 читал. Посмотрите код, что не так.

Основной код.

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

call I2CRecive ; Читаем данные из EEPROM в W.
call SendNack ; Посылаем подтверждение приема.
call I2CStop ; Выдаем "СТОП"-условие.

КОДЫ подпрограмм:

;---------------------------------------------------------------------
; Чтение данных от slave по I2C
;---------------------------------------------------------------------

I2CRecive
banksel SSPCON2 ; Выбираем банк памяти регистра SSPCON2.
bsf SSPCON2,RCEN ; Разрешим прием данных с шины I2C.

banksel PIR1 ; Выбираем банк памяти регистра PIR1.
btfss PIR1,SSPIF ; Ожидаем установки бита SSPIF
goto $-1 ; Бит пока не установлен.
bcf PIR1,SSPIF ;

banksel SSPBUF ; Выбираем банк памяти регистра SSPBUF.
movf SSPBUF,w ; Получим байт с шины I2C в регистр W.
movwf temp ;

banksel PIR1 ; Выбираем банк памяти регистра PIR1.
btfss PIR1,SSPIF ; Ожидаем установки бита SSPIF
goto $-1 ; Бит пока не установлен.
bcf PIR1,SSPIF ;
return ; Возврат из подпрограммы.

;---------------------------------------------------------------------
; Send Not Acknowledge
;---------------------------------------------------------------------
SendNack
banksel SSPCON2 ; select SFR bank
bsf SSPCON2,ACKDT ; acknowledge bit state to send (not ack)
bsf SSPCON2,ACKEN ; initiate acknowledge sequence

banksel PIR1 ; Выбираем банк памяти регистра PIR1.
btfss PIR1,SSPIF ; Ожидаем установки бита SSPIF
goto $-1 ; Бит пока не установлен.
bcf PIR1,SSPIF ;
return ; Возврат из подпрограммы.

;---------------------------------------------------------------------
; Send Acknowledge
;---------------------------------------------------------------------

SendAck
banksel SSPCON2 ; select SFR bank
bcf SSPCON2,ACKDT ; acknowledge bit state to send
bsf SSPCON2,ACKEN ; initiate acknowledge sequence
btfsc SSPCON2,ACKEN ; ack cycle complete?
goto $-1 ; no, so loop again

banksel PIR1 ; Выбираем банк памяти регистра PIR1.
btfss PIR1,SSPIF ; Ожидаем установки бита SSPIF
goto $-1 ; Бит пока не установлен.
bcf PIR1,SSPIF ;
return ; Возврат из подпрограммы.


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

Ответы



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

E-mail: info@telesys.ru