| ??? 06/08/11 14:38 Read: times Msg Score: -1 -1 Message Not Useful  | 
#182537 - See if this code is of any help! Responding to: ???'s previous message  | 
#ifndef IC2_h
#define IC2_h
/* DEFINATIONS FOR DS1307RTC */
#define	    sda     P0_0                     // Serial data pin
#define	    scl     P0_1                     // Serial clock pin
#define	    set_sda     (P0_0=0x01)          // Set Serial data pin
#define	    set_scl     (P0_1=0x01)          // Set Serial clock pin
#define	    clr_sda     (P0_0=0x00)          // Clear Serial data pin
#define	    clr_scl     (P0_1=0x00)          // Clear Serial clock pin
#define I2C_DELAY 0x0F	                    // For delay i2c bus 
/*------------------------------------------------------------------*/
/*-----------------------------------------------------------------*/
//Function prototypes
/*-----------------------------------------------------------------*/
void I2C_delay(void);
void I2C_clock(void);
void I2C_start(void);
void I2C_stop(void);
bit I2C_write(unsigned char dat);
unsigned char I2C_read(void);
/*------------------------------------------------------------------------
------------------------------------------------------------------------*/
void I2C_delay(void)
{
	unsigned char i;
	for(i=0; i<I2C_DELAY; i++);
}
void I2C_clock(void)
{
	I2C_delay();
	set_scl;		// Start clock 
	I2C_delay();    
	clr_scl;		// Clear SCL 
}
void I2C_start(void)
{
	if(scl)
	clr_scl;		// Clear SCL 
	set_sda;                // Set SDA 
	set_scl;		// Set SCL 
	I2C_delay(); 
	clr_sda;                // Clear SDA 
	I2C_delay(); 
	clr_scl;                // Clear SCL 
}
void I2C_stop(void)
{
	if(scl)	
	clr_scl;			// Clear SCL 
	clr_sda;			// Clear SDA 
	I2C_delay();
	set_scl;			// Set SCL
	I2C_delay();
	set_sda;			// Set SDA 
}
bit I2C_write(unsigned char dat)
{
	bit data_bit;		
	unsigned char i;	
	for(i=0;i<8;i++)		//sending 8 bits of data
	{
	 data_bit = dat & 0x80;		// Filter MSB bit keep to data_bit
	 sda = data_bit;		// Send data_bit to SDA
	I2C_clock();      		// Call for send data to i2c bus 
	dat = dat<<1;  
	}
	set_sda;			
	I2C_delay();	
	
	set_scl;			
	I2C_delay();	
	data_bit = sda;   	// Check acknowledge
	clr_scl;		
	I2C_delay();
	return data_bit;	// If send_bit = 0 i2c is valid 		 	
}
unsigned char I2C_read(void)
{
	bit rd_bit;	
	unsigned char i, dat;
	dat = 0x00;	
	for(i=0;i<8;i++)		//  read 8 bit data 
	{
	 I2C_delay();
	 set_scl;			
	 I2C_delay(); 
	 rd_bit = sda;		// Keep to check acknowledge
	 dat = dat<<1;		
	 dat = dat | rd_bit;	// Keep bit data in dat
	 clr_scl;		
	}
	return dat;
}
#endif
 
 | 
| Topic | Author | Date | 
| Help me ? 89C52 interfacing with EEPROM 24C02 | 01/01/70 00:00 | |
| Do *not* use 'for' loops for delays! | 01/01/70 00:00 | |
| 100k is the upper limit | 01/01/70 00:00 | |
| HLL delay loops - just don't do it! | 01/01/70 00:00 | |
| that may be difficult | 01/01/70 00:00 | |
| but there is a way | 01/01/70 00:00 | |
| See if this code is of any help! | 01/01/70 00:00 | |
| I doubt it very much | 01/01/70 00:00 | |
| No, it isn't | 01/01/70 00:00 | |
| doubts 1,2,3 | 01/01/70 00:00 | |
| code for 24c02 wih 89c52 | 01/01/70 00:00 | |
| Do *not* use 'for' loops for delays! | 01/01/70 00:00 | |
      code?        | 01/01/70 00:00 | 



