In Proteus simulation (it is first of all running very slow due to excessive CPU load). #include <LPC21XX.h> #include <stdio.h> #include <string.h> #define SDA (1 << 3) // P0.3 #define SCL (1 << 2) // P0.2 #define eprom_dir_sda_write() IODIR0 |= (1 << 3) // LCD Data Bus = Write #define eprom_dir_clk_write() IODIR0 |= (1 << 2) #define eprom_dir_sda_read() IODIR0 &= ~(1 << 3) // LCD Data Bus = Write #define eprom_dir_clk_read() IODIR0 &= ~(1 << 2) #define sda_set() IOSET0 |= (1 << 3) #define scl_set() IOSET0 |= (1 << 2) #define sda_clr() IOCLR0 |= (1 << 3) #define scl_clr() IOCLR0 |= (1 << 2) #define HIGH 0x01 #define LOW 0x00 #define readaddress 161 #define writeaddress 160 void eeprom_start(void); void eeprom_stop(void); void eeprom_write(unsigned char input_data); unsigned char eeprom_read(void); void delaytime(unsigned int time_end); void eprom_memwrite(unsigned int memorylocation, unsigned char value ) ; unsigned char eprom_memread(unsigned int memorylocation ) ; int main() { PINSEL0|=0x00000050;//Configuring P0.2 and P0.3 as SCL and SDA ser_ini(); lcd_init(); lcd_print("Hello"); eprom_dir_sda_write(); eprom_dir_clk_write(); eeprom_start(); eeprom_write(writeaddress); eeprom_write(0); eeprom_write(0); for (i=0;i<50;i++) eeprom_write(2); eeprom_stop(); delaytime(10) ; eeprom_start(); eeprom_stop(); i=eeprom_memread(1); lcd_write_ascii(i|0x30); ser_data(i|0x30); } }
void eeprom_start (void) { eprom_dir_sda_write(); eprom_dir_clk_write(); sda_set(); delaytime(3); scl_set(); delaytime(2); sda_clr(); scl_clr(); }
void eeprom_stop (void) { eprom_dir_sda_write(); eprom_dir_clk_write(); scl_clr(); sda_clr(); scl_set(); delaytime(3); sda_set(); }
void eeprom_write (unsigned char output_data) { unsigned char index; eprom_dir_sda_write(); eprom_dir_clk_write(); for (index = 0; index < 8; index++) { if (output_data & 0x80) sda_set(); else sda_clr(); output_data <<= 1; scl_set(); delaytime(2); scl_clr(); } scl_set(); delaytime(2); scl_clr(); }
unsigned char eeprom_read (void) { unsigned char index,input_data; eprom_dir_sda_read(); eprom_dir_clk_write(); input_data = 0; for (index = 0; index < 8; index++) { input_data <<= 1; scl_set(); input_data |= (IOPIN0 & SDA) ? 1 : 0; delaytime(2); scl_clr(); } return (input_data); }
unsigned char eeprom_memread ( unsigned int memorylocation ) { unsigned char data_in; eeprom_start(); eeprom_write(writeaddress); eeprom_write(memorylocation&0xff00) ; eeprom_write(memorylocation&0x00ff) ; eeprom_stop(); eeprom_start(); eeprom_write(readaddress); data_in = eeprom_read(); return data_in; }
void eeprom_memwrite ( unsigned int memorylocation, unsigned char value ) { eeprom_start(); eeprom_write(writeaddress); eeprom_write(memorylocation&0xff00); eeprom_write(memorylocation&0x00ff); eeprom_write(value); eeprom_stop(); delaytime(10) ; eeprom_start(); eeprom_stop(); }
void delaytime (unsigned int time_end) { unsigned int index; for (index=0;index<time_end;index++); }
Everytime it gives me 0 or 95 when i read it. Plz I ll be veryh appreciative of your help