Здравствуйте нашел вашу статью про i2c c примерами , но ни как не получается прочитать микросхему 24с04
В протеусе вроде бы запись происходит , но вот с чтением ни как . Думал может с протеусом что то не так собрал устройство но результат тот же , значение вывожу в порт b постоянно одно и тоже ff какое бы я число не записывал в eeprom
Помогите разобраться
Код :
list p=16f628A
#include <p16F628A.inc>
errorlevel -302
errorlevel -205
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************
#define Port_reg PORTA
#define Tris_reg TRISA
#define Clock_line 0X06
#define Data_line 0X07
;****************************************************************************
CBLOCK 0x20
I2C_flags ; 20h
Bit_counter ; 21h
BTS ; byte to send 22h
RDB ; recieved byte 23h
ENDC
;****************************************************************************
ORG 0X00
GOTO START
START
bsf STATUS,5
movlw b'11101111'
movwf TRISA
movlw b'00000000'
movwf TRISB
bcf STATUS,5
clrf PORTA
clrf PORTB
movlw 0X07
movwf CMCON
;=================================================================
MAIN
CALL Start_uslovie ; _|_- BANK
movlw B'10100000' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;----
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;----
movlw B'10101010' ; DATA SEND
movwf BTS
CALL Send_Byte
;---
CALL Stop_uslovie
NOP
CALL Start_uslovie ; _|_- BANK
movlw b'10100001' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;---
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;---
CALL Recieve_Byte
MOVF RDB,W
MOVWF PORTB
CALL Stop_uslovie
GOTO MAIN
;=================================================================
;--------START_USLOVIE----------------------------------------
Start_uslovie
Call Clock_one
Call Data_null
Call Clock_null
return
;--------STOP_USLOVIE-----------------------------------------
Stop_uslovie
call Data_null
call Clock_one
wait_clock_p
btfss Port_reg , Clock_line
goto wait_clock_p
call Data_one
return
;-------OTPRAVKA_BAYTA----------------------------------------
Send_Byte
bcf I2C_flags,0
movlw .8
movwf Bit_counter
next_bit_s
btfsc BTS,7
Call Data_one
btfss BTS,7
call Data_null
Call Clock_one
wait_clock_s1
btfss Port_reg , Clock_line
goto wait_clock_s1
call Clock_null
rlf BTS,1
decfsz Bit_counter,1
goto next_bit_s
call Data_one
call Clock_one
wait_clock_s2
btfss Port_reg , Clock_line
goto wait_clock_s2
btfsc Port_reg , Data_line
bsf I2C_flags,0
call Clock_null
return
;--------PRIEM_BAYTA-------------------------------------------
Recieve_Byte
clrf RDB
movlw .8
movwf Bit_counter
next_bit_r
bcf STATUS,0
rlf RDB,1
call Data_one
call Clock_one
wait_clock_r1
btfss Port_reg , Clock_line
goto wait_clock_r1
btfsc Port_reg , Data_line
bsf RDB,0
call Clock_null
decfsz Bit_counter,F
goto next_bit_r
btfss I2C_flags,0
call Data_null
btfsc I2C_flags,0
call Data_one
call Clock_one
wait_clock_r2
btfss Port_reg , Clock_line
goto wait_clock_r2
call Clock_null
return
;------------ 0_NA_CLOK-----------------------------------
Clock_null
bcf Port_reg , Clock_line
bsf STATUS,5
bcf Tris_reg , Clock_line
bcf STATUS,5
return
;----------- 1_NA_CLOK------------------------------------
Clock_one
bsf STATUS,5
bsf Tris_reg , Clock_line
bcf STATUS,5
return
;---------- 0_NA_DATA------------------------------------
Data_null
bcf Port_reg , Data_line
bsf STATUS,5
bcf Tris_reg , Data_line
bcf STATUS,5
return
;------------ 1_NA_DATA------------------------------------
Data_one
bsf STATUS,5
bsf Tris_reg , Data_line
bcf STATUS,5
return
;----------------------------------------------------------
END