Selam arkadaşlar;
Bir konu hakkında sizlerin görüşüne ihtiyacım var. PIC16F877 ile 24c64 harici eeproma veri yazmak ve yazılmış olan veriyi okumak istiyorum.Kullandığım komutlar I2C write ve I2C read komutlarıdır. Hafızaya veri yazma kısmında bir sorun yok. Okuma yaparken bir sorunla karşılasıyorum. Eğer hafızadan okuyacağım veri 07h ten büyük ise yine sıkıntı yok. Ancak veri 07h ten küçükse hafızadaki verileri şu şekilde okuyor;
Hafızadaki veri 00h Okunan veri 01h
Hafızadaki veri 01h Okunan veri 03h
Hafızadaki veri 02h Okunan veri 05h
Hafızadaki veri 03h Okunan veri 07h
Hafızadaki veri 04h Okunan veri 01h
Hafızadaki veri 05h Okunan veri 03h
Hafızadaki veri 06h Okunan veri 05h
Hafızadaki veri 07h Okunan veri 07h
(1 den fazla veri arka arkaya okunuyorsa 1. veriyi yukarıdaki gibi okuyor. Daha sonraki verileri FFh şeklinde okuyor). Acaba sizlerde böyle bir problemle karşılaştınız mı? Sorunun nedeni ne olabilir?
Yazmış olduğum kodları aşağıya ekliyorum .
----------------------------------------------------------------------------------------------------------------------------------------------------------
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 4
DEFINE LCD_DREG PORTD ' Set LCD Data port
DEFINE LCD_DBIT 4 ' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTA ' Set LCD Register Select port
DEFINE LCD_RSBIT 2 ' Set LCD Register Select bit
DEFINE LCD_EREG PORTA ' Set LCD Enable port
DEFINE LCD_EBIT 0 ' Set LCD Enable bit
DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ' Set number of lines on LCD
DEFINE LCD_COMMANDUS 2000 ' Set command delay time in us
DEFINE LCD_DATAUS 50 ' Set data delay time in us
TRISA=%00000000
TRISB=%11111111
TRISC=%00000000
TRISD=%00000000
TRISE=%000
ADCON1=7
'*************** I2C BAĞLANTI PİNLERİ *******************************
SYMBOL SCL=PORTC.3
SYMBOL SDA=PORTC.4
'************** DEĞİŞKEN TANIMLAMALARI *******************************
RD1 VAR BYTE
RD2 VAR BYTE
RD3 VAR BYTE
RD4 VAR BYTE
RD0 VAR BYTE
RD VAR BYTE
W VAR BYTE[4]
WD VAR BYTE[4]
WD1 VAR BYTE
WD2 VAR BYTE
WD3 VAR BYTE
ADRS VAR WORD
'***************
SYMBOL B0=RD.0
SYMBOL B1=RD.1
SYMBOL B2=RD.2
SYMBOL B3=RD.3
SYMBOL TUS1=PORTB.0
SYMBOL TUS2=PORTB.1
CD VAR BYTE
CQ VAR BYTE
C0 VAR BIT
C1 VAR BIT
C2 VAR BIT
C3 VAR BIT
'***************
YEDI VAR BYTE
YEDI=%00000111
DORT VAR BYTE
DORT=%00000100
CR1 VAR BYTE
CR1=%10100001
CR2 CON %10100011
CR3 CON %10100101
CR4 CON %10100111
CW1 VAR BYTE
CW1=%10100000
CW2 CON %10100010
CW3 CON %10100100
CW4 CON %10100110
KYT VAR BYTE
SGN VAR BYTE
'************** ATAMALAR *******************************
ADRS=%0000000000000000
WD[0]=%00000000
WD[1]=%00000000
WD[2]=%00000000
WD[3]=%00000000
KYT=0
SGN=0
'***************************************************************************
BASLA:
GOSUB EEPR1
PAUSE 10
GOSUB OKU
PAUSE 50
CQ=CW2
ADRS=0
GOSUB YAZ2
SON:END
'************** EEPROM İÇİN AYARLAMA YAPILIYOR ****************************
EEPR1:
CD=CR1 'OKUMA KONTROL BİLGİSİ AYARLANIYOR
CQ=CW1 'YAZMA KONTROL BİLGİSİ AYARLANIYOR
GOSUB DONGU
RETURN
DONGU:
WD=1
GOSUB YAZ
PAUSE 10
RETURN
'************** EEPROMA BİLGİ YAZILIYOR *************************************
YAZ:
I2CWRITE SDA,SCL,CQ,ADRS,[WD,WD,WD,WD,WD,WD,WD,WD,WD,WD]
pause 10
RETURN
'************** EEPROMDAN BİLGİ OKUNUYOR ************************************
OKU:
I2CREAD SDA,SCL,CD,ADRS,[RD[0],RD[1],RD[2],RD[3],RD[4],RD[5],RD[6],RD[7],RD[8],RD[9]]
pauSE 10
RETURN