Code:
' *****************************************************************************
' * *
' * EEPROM WRITE. 512k EEPROM used. Control Byte for this one is $A8 *
' * Stores weather readings, 16 bytes/Record. 4096 Records/Chip *
' * At one Record every 6 minutes this holds data for 17 days *
' * Write address 'Eaddress' stored in PIC EEPROM at addresses 1 and 2 *
' * *
' *****************************************************************************
EEPROM_write:
read 1,Eaddress.Byte0 ' Next free EEPROM address for chip $A8
read 2,Eaddress.Byte1 ' TempInt is not stored
i2cwrite Eprom_D, Eprom_C, $A8, Eaddress,_' Write to $A8 on ETT board
[Mont,Days,Hour,Mins,_
Pressure.lowbyte,Pressure.highbyte,_
Humidity,_
TempExt.byte0,TempExt.byte1,_
Wind_S,_
Wind_S_Ave,_
Wind_D,_
Wind_D_Ave,_
Rain,_
Voltage,_ ' Spare
Voltage] ' Spare
pause 10
Eaddress = Eaddress+16 ' 16 bytes per record, must be an integer of 128/No of rcds
write 1,Eaddress.Byte0 ' Write new Eaddress to PIC EEPROM
write 2,Eaddress.Byte1
return
And reading it back:
Code:
' *****************************************************************************
' * *
' * DATA DUMP. Read EEPROM $A8 from Address 0 to Address Eaddres *
' * and send it to the PC *
' * *
' *****************************************************************************
Data_dump:
RCSTA=$90:TXSTA=$24:SPBRG=21 ' Set up for 115200 Baud when oscillator is at 40 MHz
pause 10
read 1,Eaddress.Byte0
read 2,Eaddress.Byte1
hserout [13,13,"DUMP OF DATA FROM EEPROM CHIP $A8",13]' Print column headings with TAB command
hserout [_
"Recd" ,9,_
"Month",9,_
"Date ",9,_
"Hours",9,_
"Mins ",9,_
"Press",9,_
"ReHum",9,_
"TeExt",9,_
"WinSp",9,_
"WinSA",9,_
"WinDr",9,_
"WinDA",9,_
"Rain ",9,_
"Volts",9,_
"Volts",13]
for Address=0 to Eaddress-16 step 16' 16 bytes per record
i2cread Eprom_D, Eprom_C, $A8, Address,_' Read from %1010100X on ETT board
[Mont,_
Days,_
Hour,_
Mins,_
Pressure.lowbyte,Pressure.highbyte,_
Humidity,_
TempExt.lowbyte,TempExt.highbyte,_
Wind_S,_
Wind_S_Ave,_
Wind_D,_
Wind_D_Ave,_
Rain,_
Voltage,_
Voltage]
hserout[_' Print weather data with TAB command
dec5 Address,9,_
dec2 Mont,9,_' Read from EEPROM $A8
dec2 Days,9,_' Read from EEPROM $A8
dec2 Hour,9,_' Read from EEPROM $A8
dec2 Mins,9,_' Read from EEPROM $A8
dec4 Pressure/10,".",dec1 Pressure,9,_ ' Read from EEPROM $A8
dec2 Humidity,9,_ ' Read from EEPROM $A8
dec2 TempExt/10,".", dec1 TempExt,9,_' Read from EEPROM $A8
dec3 Wind_S,9,_' Read from EEPROM $A8
dec3 Wind_S_Ave,9,_' Read from EEPROM $A8
dec3 Wind_D,9,_' Read from EEPROM $A8
dec3 Wind_D_Ave,9,_ ' Read from EEPROM $A8
dec2 Rain/10,".", dec1 Rain,9,_ ' Read from EEPROM $A8
dec2 Voltage/10,".", dec1 Voltage,9,_' Read from EEPROM $A8
dec2 Voltage/10,".", dec1 Voltage,13]' Read from EEPROM $A8
pause 10
next Address
hserout [13,13]
return
Note the 'WRITE' command to stores the address on the internal PIC EEPROM and the 'I2CWRITE' stores the variables on the external EEPROM
Bookmarks