[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Не знаю, что происходит. Аппараиная запись в 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