' ========================================================================= ' ' File...... 24LC515.BSP ' Purpose... 24LC515 control via I2C ' Author.... Jon Williams -- Parallax, Inc. ' Copyright (c) 2002-2005, All Rights Reserved ' E-mail.... jwilliams@parallax.com ' Started... 21 MAR 2002 ' Updated... 05 NOV 2005 ' ' {$STAMP BS2p} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' ' This program demonstrates essential I2C routines and communication with ' the Microchip 24LC515 serial EEPROM. ' -----[ Revision History ]------------------------------------------------ ' -----[ I/O Definitions ]------------------------------------------------- ' SDA PIN 0 ' I2C serial data line SCL PIN 1 ' I2C serial clock line ' -----[ Constants ]------------------------------------------------------- EE24515 CON %1010 ' device type (eeprom) ' -----[ Variables ]------------------------------------------------------- slvAddr VAR Byte ' slave address devNum VAR Nib ' device number (%00-%11) wrdAddr VAR Word ' address in EEPROM blockSel VAR wrdAddr.BIT15 ' block select bit test VAR Nib outVal VAR Byte ' output to EEPROM inVal VAR Byte ' input from EEPROM ' -----[ EEPROM Data ]----------------------------------------------------- ' -----[ Initialization ]-------------------------------------------------- Setup: #IF ($STAMP < BS2P) #THEN #ERROR "BS2p, BS2pe, or BS2px required." #ENDIF DEBUG CLS, ' setup output screen "24LC515 Demo", CR, CR, "Address... ", CR, "Output.... ", CR, "Input..... ", CR devNum = %00 ' -----[ Program Code ]---------------------------------------------------- Main: FOR wrdAddr = $0000 TO $FFFF slvAddr = (EE24515 << 4) | (blockSel << 3) | (devNum << 1) DEBUG CRSRXY, 11, 2, DEC wrdAddr, " " FOR test = 0 TO 3 LOOKUP test, [$FF, $AA, $55, $00], outVal DEBUG CRSRXY, 11, 3, IHEX2 outVal I2COUT SDA, slvAddr, wrdAddr.BYTE1\wrdAddr.byte0, [outVal] PAUSE 10 inVal = ~outVal I2CIN SDA, slvAddr, wrdAddr.BYTE1\wrdAddr.byte0, [inVal] DEBUG CRSRXY, 11, 4, IHEX2 inVal, " " IF (inVal = outVal) THEN DEBUG "Pass" ELSE DEBUG "Fail" ENDIF PAUSE 50 NEXT NEXT END ' -----[ Subroutines ]-----------------------------------------------------