... ahem nevermind.. I was using ROMO instead of ROM0... shortened it to ROM so I could not make that mistake, and it works.
NOW I have a program that tests memory.. and the use of WORD or BYTE.. This will read or write to memory. VERY odd behavour tho, leading me to think I am missing some key understanding:
I write 0-640 to memory 0-640.. When I read it back I get REALLY odd stuff... NOT 0-640:
'on my DataLoggers I have 16F876 or 18F252 and 2x 24LC512.
'The following code is tested.
'could you give it a try and let us know what the result was?
' -----[ Fuses ]------------------------------------------------
@ __CONFIG _CONFIG1H, _OSC_INTIO67_1H
@ __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
@ __CONFIG _CONFIG3H, _PBADEN_OFF_3H & _MCLRE_OFF_3H
@ __CONFIG _CONFIG4L, _LVP_OFF_4L & 0bfh ;_XINST_OFF_4L
'
' -----[ Includes/Defines ]---------------------------------------------------------
include "modedefs.bas" 'include serout defines
OSCCON=%01111000
DEFINE OSC 8
While OSCCON.2=0:Wend
SCL var PortC.3 ' I2C Clock
SDA var PortC.4 ' I2C Data
ROM con %10100000 ' address of chip1
ADDR VAR word ' ROM Location
portout var PortC.6
portin var PortC.7
Mode con 16572 ' 4800 Baud 8N1 for Monitor Port
Test var byte[21] ' Test Array
I2Cdelay con 10 ' Delay after I2Cwrite
Temp var byte
X var word
dta var word
CLEAR
Addr=100
loop:
SEROUT2 portout,Mode,[13,10,"** MCU started",13,10,13,10]
serout2 portout, mode, ["enter 1 to write data, 2 to read it"]
serin2 portin, mode, [DEC1 temp]
select case temp
case 1
for X = 0 to 640
I2Cwrite SDA, SCL,ROM,X,[X],failw
Serout2 portout, mode, ["Write Address: ",#x," Data:",#X,10,13]
pause 10
next x
case 2
for x = 0 to 640
I2Cread SDA,SCL,ROM,X,[dta.byte0],failr
I2Cread SDA,SCL,ROM,X+1,[dta.byte1],failr
Serout2 portout, mode, ["Address: ",#x," Data:",#dta,10,13]
pause 10
next x
case else
goto loop
end select
goto loop:
failr:
serout2 portout, mode,["failure to read",10,13]
return
failw:
serout2 portout, mode,["failure to write",10,13]
return
END
Bookmarks