Hey, i have written code for i2c program for 24c08 with my uc 89c51.....If i am writing single character and then reading to the lcd then i am getting proper response but if i am writing string of character one by one then i am only getting last character of string at the lcd........
pls help me... Here is my code:
#include<reg51.h> sfr lcddata=0xa0; sbit rs=P0^7; sbit e=P0^6; #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit SCL=P3^3; sbit SDA=P3^2; void delay_s(uchar n) { uint i; uchar j; for(j=0;j<n;j++) for(i=0;i<6000;i++); } void sta() { SDA=1; SCL=1; _nop_(); SDA=0; _nop_(); SCL=0; } void stop( ) { SDA=0; SCL=1; delay_s(1); SDA=1; delay_s(1); } void mack( ) { SDA=0; SCL=1; _nop_(); SCL=0; SDA=1; } void mnack( ) { SDA=1; SCL=1; _nop_(); SCL=0; SDA=0; } void cack( ) { SDA=1; SCL=1; F0=0; if(SDA==1) F0=1; SCL=0; _nop_( ); } void wrbyt(uchar shu) { uchar i; for(i=0;i<8;i++) { if((shu&0x80)>0) { SDA=1; SCL=1; _nop_(); SCL=0; SDA=0; } else { SDA=0; SCL=1; _nop_(); SCL=0; } shu=shu<<1; } } uchar rdbyt( ) { uchar nn=0xff,mm=0x80,uu=0x7f; uchar j; for(j=0;j<8;j++) { SDA=1; SCL=1; if(SDA==0) {nn=(nn&uu);} else {nn=(nn|mm);} nn=_crol_(nn,1); SCL=0; } return(nn); } void wrnbyta(uchar slaw,uchar gg[],uchar n) { do { sta( ); wrbyt(slaw); cack( ); } while(F0==1); wrbyt(gg[n]); cack( ); } void wrnbyt(uchar slaw,uchar ff[],uchar number) { uchar idata k; do { sta( ); wrbyt(slaw); cack( ); } while(F0==1); for(k=0;k<number;k++) { wrbyt(ff[k]); cack( ); while(F0==1) wrnbyta(slaw,ff,k); } stop( ); } void rdnbyt(uchar slar,uchar qq[],uchar number) { uchar idata data0,l; do { sta( ); wrbyt(slar); cack( ); } while(F0==1); for(l=0;l<number-1;l++) { data0=rdbyt( ); qq[l]=data0; mack( ); } data0=rdbyt( ); qq[l]=data0; mnack( ); stop( ); } char eeprom_read(uchar addr_h,uchar addr_l) { char a[2],temp[1]; a[0]=addr_h; a[1]=addr_l; wrnbyt(0xa0,a,2); rdnbyt(0xa1,temp,1); return(temp[0]); } void eeprom_write(uchar addr_h,uchar addr_l,uchar data1) { char a[3]; a[0]=addr_h; a[1]=addr_l; a[2]=data1; wrnbyt(0xa0,a,3); } void delay1() { int i,j; for(i=0;i<=100;i++) for(j=0;j<=1000;j++); } void delay() { int i,j; for(i=0;i<=10;i++) for(j=0;j<=10;j++); } lcd_cmd() //command function for lcd { rs=0; e=0; delay(); e=1; delay(); e=0; } lcd_data() //data function for lcd { rs=1; e=0; delay(); e=1; delay(); e=0; } lcd_init() //lcd initialzation { lcddata=0x38; lcd_cmd(); delay(); lcddata=0x01; lcd_cmd(); delay(); lcddata=0x0e; lcd_cmd(); delay(); lcddata=0x06; lcd_cmd(); delay(); } void proname(unsigned char d[]) //function to display all lcd data { e=0; lcd_init(); lcddata=0x80; lcd_cmd(); delay(); lcddata=d[0]; lcd_data(); delay(); lcddata=d[1]; lcd_data(); delay(); lcddata=d[2]; lcd_data(); delay(); lcddata=d[3]; lcd_data(); delay(); lcddata=d[4]; lcd_data(); delay(); lcddata=d[5]; lcd_data(); delay(); lcddata=d[6]; lcd_data(); delay(); lcddata=d[7]; lcd_data(); delay(); lcddata=d[8]; lcd_data(); delay(); lcddata=d[9]; lcd_data(); delay(); lcddata=d[10]; lcd_data(); delay(); lcddata=d[11]; lcd_data(); delay(); lcddata=d[12]; lcd_data(); delay(); lcddata=d[13]; lcd_data(); delay(); lcddata=d[14]; lcd_data(); delay(); lcddata=d[15]; lcd_data(); delay(); lcddata=0xc0; lcd_cmd(); delay(); lcddata=d[16]; lcd_data(); delay(); lcddata=d[17]; lcd_data(); delay(); lcddata=d[18]; lcd_data(); delay(); lcddata=d[19]; lcd_data(); delay(); lcddata=d[20]; lcd_data(); delay(); lcddata=d[21]; lcd_data(); delay(); lcddata=d[22]; lcd_data(); delay(); lcddata=d[23]; lcd_data(); delay(); lcddata=d[24]; lcd_data(); delay(); lcddata=d[25]; lcd_data(); delay(); lcddata=d[26]; lcd_data(); delay(); lcddata=d[27]; lcd_data(); delay(); lcddata=d[28]; lcd_data(); delay(); lcddata=d[29]; lcd_data(); delay(); lcddata=d[30]; lcd_data(); delay(); lcddata=d[31]; lcd_data(); delay(); } void main() { char ab[32],i; char d[5]="ANKIT"; for(i=0;i<=4;i++) { eeprom_write(0x00,(0x10+i),d[i]); } for(i=0;i<=4;i++) { ab[i]=eeprom_read(0x00,"(0x10+i)); } proname(ab); while(1); }
Please rply as soon as possible.....
.