#include #include "eeprom.h" sbit SDA = P3^6; sbit SCL = P3^7; void delay() { unsigned char i,j; for( i=0; i<100; i++) { for( j=0; j<10; j++) ; } } void StopI2C(void) { SDA = 0; SCL = 1; SDA = 1; SCL = 0; } void StartI2C(void) { SDA = 1; SCL = 1; SDA = 0; SCL = 0; } void WriteI2C(bit val) { SDA = val; SCL = 1; SCL = 0; } bit ReadI2C(void) { bit val; SDA = 1; SCL = 1; val = SDA; SCL = 0; return val; } //writing a byte to eeprom void writeByte(unsigned char val, unsigned int address) { unsigned char i; /* device address */ StartI2C(); WriteI2C(1); WriteI2C(0); WriteI2C(1); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(0); ReadI2C(); /* page address */ WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(address & 0x1000); WriteI2C(address & 0x0800); WriteI2C(address & 0x0400); WriteI2C(address & 0x0200); WriteI2C(address & 0x0100); ReadI2C(); WriteI2C(address & 0x0080); WriteI2C(address & 0x0040); WriteI2C(address & 0x0020); WriteI2C(address & 0x0010); WriteI2C(address & 0x0008); WriteI2C(address & 0x0004); WriteI2C(address & 0x0002); WriteI2C(address & 0x0001); ReadI2C(); //write a byte for(i=0; i<8; i++) { WriteI2C(((val & (0x01 << i)) == 0) ? 0 : 1); } ReadI2C(); StopI2C(); delay(); delay(); } //reading byte from eeprom unsigned char readByte(unsigned int address) { unsigned char i,j; StartI2C(); WriteI2C(1); WriteI2C(0); WriteI2C(1); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(0); ReadI2C(); /* page address */ WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(address & 0x1000); WriteI2C(address & 0x0800); WriteI2C(address & 0x0400); WriteI2C(address & 0x0200); WriteI2C(address & 0x0100); ReadI2C(); WriteI2C(address & 0x0080); WriteI2C(address & 0x0040); WriteI2C(address & 0x0020); WriteI2C(address & 0x0010); WriteI2C(address & 0x0008); WriteI2C(address & 0x0004); WriteI2C(address & 0x0002); WriteI2C(address & 0x0001); ReadI2C(); /* device address */ StartI2C(); WriteI2C(1); WriteI2C(0); WriteI2C(1); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(0); WriteI2C(1); ReadI2C(); // read a byte for(i=j=0; i<8; i++) { j |= (unsigned char)ReadI2C() << i; } WriteI2C(1); StopI2C(); return j; } //enters a new message to eeprom void newMessage(unsigned char *mydata, unsigned int count) { unsigned int x; unsigned int address = ((count-1)*45) + 131; for(x=0; x<45; x++) { writeByte(mydata[x],address++); } } //enters a new password into the eeprom void newPassword(unsigned char *mydata, unsigned int count) { unsigned int x; unsigned int address = (count*4) + 2; for(x=0; x<4; x++) { writeByte(mydata[x],address++); } } //retevies a message from eeprom void getMessage(unsigned char *mydata, unsigned int count) { unsigned int x; unsigned int address = ((count-1)*45) + 131; for(x=0; x<45; x++) { mydata[x] = readByte(address++); } } //return the total of the number passwords and messages unsigned int getTotals(unsigned int address) { return(readByte(address)); } //updates the total of passwords and messages void updateTotals(unsigned int mydata, unsigned int address) { writeByte(mydata,address); } //check to see if password is valid or not unsigned char checkPassword(unsigned char *password, unsigned int passTotal) { unsigned int x,count = 0; unsigned char pass[4]; unsigned int address = 2; do { //reading in one password and check for(x=0; x<4; x++) { pass[x] = readByte(address++); } if( password[0] == pass[0] && password[1] == pass[1] && password[2] == pass[2] && password[3] == pass[3] ) { count = passTotal + 3; } else { count++; } } while(count < passTotal); if(count == passTotal + 3) { return 0; } else { return 1; } }