#include<reg51.h> #include<stdio.h> sbit check=P2^3; sbit SDA = P2^0; sbit SCL = P2^1; //declare function void delay(void); void I2C_Start(void); void I2C_Stop(void); bit I2C_Write(unsigned char dat); unsigned char I2C_Read(bit ack); //RTC DS1307 //void rtc_write(unsigned char add , unsigned char dataa); void rtc_read(char); void main() { while(1) { char a,b,c,d,e,f; a=0x00; b=0x01; c=0x02; d=0x04; e=0x05; f=0x06; rtc_read(a); rtc_read(b); rtc_read(c); rtc_read(d); rtc_read(e); rtc_read(f); } } void delay(void) { unsigned char i; for (i = 0; i < 20; i++) { ; } } void I2C_Start(void) { SDA=1; // i2c start bit sequence delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; delay(); P3=0x00; } void I2C_Stop(void) { SDA=0; // i2c stop bit sequence delay(); SCL=1; delay(); SDA=1; delay(); P3=0x01; } bit I2C_Write(unsigned char dat) { unsigned char i; bit outbit; for (i = 1; i <= 8; i++) { outbit=dat&0x80; SDA=outbit; dat = dat << 1; SCL=1; SCL=0; } SDA=1; // set SDA to receive Acknowledge SCL=0; outbit = SDA; // check busy or not SCL=0; return(outbit); // if outbit=1 ,A=1: error // if outbit=0 ,A=0: ok P3=0x03; } unsigned char I2C_Read(bit ack) { unsigned char i, dat; bit inbit; dat = 0; for(i=1;i<=8;i++) { SCL=1; inbit = SDA; dat = dat << 1; dat = dat | inbit; SCL=0; } if(ack) { SDA=0; // set SDA = 0 (ACK) } else { SDA=1; // set Non ACK } SCL=1; SCL=0; SDA=1; // Set SDA = 1 for next read delay(); return(dat); P3=0x04; } void rtc_read(char add) { bit ch1,ch2,ch3; unsigned char dataa ; I2C_Start(); ch1=I2C_Write(0xd0); // check=ch1; ch2=I2C_Write(add); // check=ch2; I2C_Start(); // restart ch3=I2C_Write(0xd1); // check=ch3; dataa = I2C_Read(0); I2C_Stop(); dataa = (dataa & 0x0f) + (dataa>>4)*10; // P1=dataa; } I have written this code for read value from rtc.I am not getting any syntax error but its not working.Someone pls help me to correct code and if I have made any logical error to write this code.
MY BACKSIDE is that what is sitting on the shift key?
Erik