??? 04/04/07 14:42 Read: times |
#136597 - I have Codded this in C,But still not working :-( Responding to: ???'s previous message |
Well i have codded the program in C but i am still unable to Write the Data,,,,,,,
the C program is this ... #include<AT89X051.H> #include <intrins.h> //Includes _nop_(); function sbit scl = P1^7; //Some BitWise Definations sbit sda = P1^6; sbit tst = P3^7; void iic_start (void); //Functions Prototypes void iic_stop (void); void ack (void); void no_ack (void); void send_data (unsigned char j); unsigned char read_data (void); void iic_write_word (unsigned char add,unsigned char dat); unsigned char iic_read_data (unsigned char add); void delay (void); void empty (void) {;} void main (void) { unsigned char dat,add; //Two Variables dat=DATA, add=ADDRESS tst=1; //set tst (Which is Button) P1=0xff; //Making P1 High add=0x00; //Set EEPROM add to 0xff; dat=0xf0; //Set Data to 0xff iic_write_word(add,dat); //Write the word at location add and data is dat P1=0x00; //When Data Written Succesffully then make P1 low while(1) { while(tst); //Wait for tst button to touch ground while(!tst); //when pressed then wait for Release add=0x00; //Set add to 0x00 of EEPROM dat=iic_read_data(add); //Read the Random Read at Location add (0x00) } } void iic_start (void) //iic start routine { sda=1; scl=1; _nop_(); sda=0; _nop_(); scl=0; } void iic_stop (void) //iic stop routine { scl=1; _nop_(); sda=1; } void send_data (unsigned char j) //Routine for Send data placed in "j" { unsigned char bit_pos; //j=0xf0; scl = 0; for(bit_pos = 0x80; bit_pos != 0; bit_pos >>= 1) // MSB first { if (j & bit_pos) sda = 1; else sda = 0; scl = 1; _nop_(); scl = 0; } } unsigned char read_data (void) //Routine for Reading the data, and return output { unsigned char index,x=0x00; for(index = 0x80; index != 0; index >>= 1) // MSB first { _nop_(); scl = 1; if (sda) x |= index; scl = 0; } sda = 1; _nop_(); scl= 1; _nop_(); scl = 0; return(x); } void ack (void) //Acknowledge Routine { sda=1; scl=1; //while(sda); _nop_(); scl=0; } void no_ack (void) //No Acknowledge Routine { sda=1; scl=0; //while(!sda); _nop_(); scl=1; } void iic_write_word (unsigned char add,unsigned char dat) //Routine for writing data=dat at Location=add { iic_start(); //start iic send_data(0xa0); //send Address with Write ack(); send_data(add); //send the EEPROM address ack(); send_data(dat); //send the Data to EEPROM ack(); iic_stop(); //stop iic delay(); } unsigned char iic_read_data (unsigned char add) //Routine for writing data=dat at Location=add { unsigned char value; iic_start(); //start iic send_data(0xa0); //send Address with Write ack(); send_data(add); //send the EEPROM address from Data should be collected ack(); iic_start(); //start iic again send_data(0xa1); //send Address with Read ack(); value=read_data(); //Get the Data and store it in value no_ack(); iic_stop(); //stop iic //delay(); return(value); } void delay (void) { unsigned int x; for(x=0;x<=1000;x++) empty(); } |