Hello.
I've decided to use 25LC640 EEPROM with 16F870. For that purpose, I've took the LAB1X code from here:
http://melabs.com/samples/LABX1-16F887/spix.htm
and modified it to my needs( just changed LCD and EEPROM ports and added details to info screen):
Code:
' Define LCD registers and bits
include "modedefs.bas"
DEFINE OSC 4
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 1500
DEFINE LCD_DATAUS 44
ADCON1=%00000110 'CONFIGURE PORT A AS DIGITAL
CS Var PORTB.3 ' Chip select pin
SCK Var PORTC.6 ' Clock pin
SI Var PORTC.5 ' Data in pin
SO Var PORTB.2 ' Data out pin
addr Var Word ' Address
B0 Var Byte ' Data
For addr = 0 To 15 ' Loop 16 times
B0 = addr + 100 ' B0 is data for SEEPROM
Lcdout $fe,1,#addr,": ",#B0 ' Display
Lcdout $fe,$C0,"Writing... " ' Display
Gosub eewrite ' Write to SEEPROM
Pause 10 ' Delay 10ms after each write
Next addr
pause 1000
mainloop:
For addr = 0 To 15 ' Loop 16 times
Gosub eeread ' Read from SEEPROM
Lcdout $fe,1,#addr,": ",#B0 ' Display
Lcdout $fe,$C0,"Reading... " ' Display
Pause 1000
Next addr
Goto mainloop
' Subroutine to read data from addr in serial EEPROM
eeread:
CS = 0 ' Enable serial EEPROM
Shiftout SI, SCK, MSBFIRST, [$03, addr.byte1, addr.byte0] ' Send read command and address
Shiftin SO, SCK, MSBPRE, [B0] ' Read data
CS = 1 ' Disable
Return
' Subroutine to write data at addr in serial EEPROM
eewrite:
CS = 0 ' Enable serial EEPROM
Shiftout SI, SCK, MSBFIRST, [$06] ' Send write enable command
CS = 1 ' Disable to execute command
CS = 0 ' Enable
Shiftout SI, SCK, MSBFIRST, [$02, addr.byte1, addr.byte0, B0] ' Send address and data
CS = 1 ' Disable
Return
End
It appears to not write anything and reads the same sequence of 0s and 255 in each cycle, but the sequence is different on each power up.
I was not able to find schematics how correctly wire another pins of EEPROM, such as HOLD. This can be wrong connection issue?
Bookmarks