We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
help me for the following doubts:
i have interfaced EEPROM(24c64) with 89s52). but i can't understand what is the process in it. i know something about it. its having sda pin(pin 5) for serial data communication and scl pin (pin 6) for control signal. question: 1. how to do the read and write operation on it. 2. In the following program doing some serial communication which is taken from engineersgarage.com www.engineersgarage.com/micro...T89C51-circuit
3. In that program what is device address 4. what is calculation in extracting MSB. 5. tell me simple procedure for do a own program.
//Program to interface Serial EEPROM AT24C02 with 8051 microcontroller (AT89C51) #include<reg51.h> #include<intrins.h> //For using [_nop_()] sbit sda=P1^0; sbit scl=P1^1; sbit led=P0^3; bit ack; sbit led1=P0^1; sfr lcd_data_pin=0xA0;//p2 port sfr output=0x80;//p0 port sbit rs=P3^0; sbit rw=P3^1; sbit en=P3^6; unsigned char reead,write,write2,i,j; unsigned int temp; void delay(unsigned int count) { int i,j; for(i=0;i<count;i++) for(j=0;j<1275;j++); } void lcd_command(unsigned char comm) { lcd_data_pin=comm; en=1; rs=0; rw=0; delay(1); en=0; } void lcd_data(unsigned char disp) { lcd_data_pin=disp; en=1; rs=1; rw=0; delay(1); en=0; } void lcd_dataa(unsigned char *disp) { int x; for(x=0;disp[x]!=0;x++) { lcd_data(disp[x]); } } void lcd_ini() { lcd_command(0x38); // for using 8-bit 2 row LCD delay(5); lcd_command(0x0F); // for display on, cursor blinking delay(5); lcd_command(0x80); delay(5); } void aknowledge() //acknowledge condition { scl=1; _nop_(); _nop_(); scl=0; } void start() //start condition { sda=1; scl=1; _nop_(); //No operation _nop_(); sda=0; scl=0; } void stop() //stop condition { sda=0; scl=1; _nop_(); _nop_(); sda=1; scl=0; } void send_byte(unsigned char value) //send byte serially { unsigned int i; unsigned char send; send=value; for(i=0;i<8;i++) { sda=send/128; //extracting MSB send=send<<1; //shiftng left scl=1; _nop_(); _nop_(); scl=0; } ack=sda; //reading acknowledge sda=0; } unsigned char read_byte() //reading from EEPROM serially { unsigned int i; sda=1; reead=0; for(i=0;i<8;i++) { reead=reead<<1; scl=1; _nop_(); _nop_(); if(sda==1) reead++; scl=0; } sda=0; return reead; //Returns 8 bit data here } void save() //save in EEPROM { start(); send_byte(0xA0); //device address aknowledge(); send_byte(0x00); //word address aknowledge(); send_byte(5); //send data aknowledge(); send_byte(65); aknowledge(); stop(); if(ack==0) { led1=1; delay(100); led1=0; delay(100); lcd_command(0x86); lcd_data('5'); lcd_command(0x87); lcd_data('A'); } else led1=1; aknowledge(); } void Read() { start(); send_byte(0xA0); aknowledge(); send_byte(0x00); aknowledge(); start(); send_byte(0xA1); //device address aknowledge(); i=read_byte(); aknowledge(); j=read_byte(); aknowledge(); stop(); if(i==5) { led=0; delay(100); led=1; delay(100); write=i+48; lcd_command(0xC6); lcd_data(write); } else led=1; if(j==65) { lcd_command(0xC7); lcd_data(j); } aknowledge(); } int main() { lcd_ini(); lcd_dataa("Sent :"); lcd_command(0xC0); lcd_dataa("Read :"); temp=0; while(1) { save(); Read(); } return 0; }