⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avr_i2c.h

📁 AVR iic调试 AVR iic调试AVR iic调试
💻 H
字号:
#define uchar unsigned char
#define uint  unsigned int 

#define ICSDA  PORTE.1
#define ICSCK  PORTE.0

#define HIGH  1
#define LOW   0


void InitialIC(void)
{
       	DDRE.1=1;
     	DDRE.0=1;
       	ICSDA= LOW;
       	delay_us(5);
       	ICSCK=LOW;
        delay_us(5);
      	ICSDA= HIGH;
      	ICSCK= HIGH;
        delay_us(5);
}

 void StartIC(void)
 {

        DDRE.0=1;
        DDRE.1=1;
	    ICSCK= HIGH;
	    ICSDA=1;
        delay_us(10);
	ICSDA=0;
	delay_us(10);
	ICSCK=0;

 }

 void StopIC(void)
 {

        DDRE.0=1;
        DDRE.1=1;
        ICSCK=0;
        delay_us(5);
	ICSDA=0;
	delay_us(5);

	ICSCK=1;

        delay_us(5);
	ICSDA=1;
 }




unsigned char SendByteToIC(unsigned char byte)
{
	unsigned char i=0;

	DDRE.1=1;
	DDRE.0=1;
	ICSCK=0;
        ICSDA=0;

	for(i=0;i<8;i++)
	{

		if(byte&0x80)ICSDA=1;
		else ICSDA=0;
		delay_us(10);
		ICSCK=LOW;
		delay_us(10);
		ICSCK=HIGH;
		delay_us(10);
		ICSCK=LOW;
		delay_us(10);
		byte<<=1;
	}

	        //ICSDA=1;
                DDRE.1=0;

	        ICSCK=LOW;
	        delay_us(10);

		ICSCK=HIGH;
		delay_us(10);
               //check ans here
                 delay_us(10);
		ICSCK=LOW;

		ICSDA=0;
		DDRE.1=1;
                return 0;

}






unsigned char ReadByteFromIC()
{
	unsigned char temp1=0;

	ICSDA=0;
	DDRE.1=0;

	delay_us(10);

	temp1=0;
	ICSCK=HIGH;
        delay_us(10);

	if(PINE.1)temp1 +=0x80;
	else  temp1 +=0x00;
	  delay_us(10);
	ICSCK=LOW;
	delay_us(10);


	ICSCK=HIGH;
	delay_us(10);
		if(PINE.1)temp1 +=0x40;
		else  temp1 +=0x00;
	       	delay_us(10);
		ICSCK=LOW;
	        delay_us(10);

	        ICSCK=HIGH;
	        delay_us(10);
		if(PINE.1)temp1 +=0x20;
		else  temp1 +=0x00;
	        	delay_us(10);
		ICSCK=LOW;
	       delay_us(10);

	       ICSCK=HIGH;
	       delay_us(10);
		if(PINE.1)temp1 +=0x10;
		else  temp1 +=0x00;
	       	delay_us(10);
		ICSCK=LOW;
	       delay_us(10);



	        ICSCK=HIGH; delay_us(10);
		if(PINE.1)temp1 +=0x8;
		else  temp1 +=0x00;
	       delay_us(10);
		ICSCK=LOW;

	       delay_us(10);

	        ICSCK=HIGH;   delay_us(10);
		if(PINE.1)temp1 +=0x4;
		else  temp1 +=0x00;
	        	delay_us(10);
		ICSCK=LOW;
	        delay_us(10);

	        ICSCK=HIGH;    delay_us(10);
		if(PINE.1)temp1 +=0x2;
		else  temp1 +=0x00;
	        	delay_us(10);
		ICSCK=LOW;
	       delay_us(10);

	        ICSCK=HIGH;  delay_us(10);
		if(PINE.1)temp1 +=0x1;
		else  temp1 +=0x00;
	          delay_us(10);
		ICSCK=LOW;
               delay_us(10);

	ICSCK=HIGH;
 	delay_us(10);
	ICSCK=LOW;//send Nack to ....
	delay_us(10);
       // DDRF.1=0;


	return(temp1);

}

int WriteByteToICAdd(int address, unsigned char byte)
{
	unsigned char addm,addl;
	StartIC();delay_us(10);
	//slave =DEVICE_CODE_Memory&WR_CMD;;
	SendByteToIC(0xa0);
	delay_us(10);
	addm = (unsigned char)(address>>8);
	SendByteToIC(addm);
	delay_us(10);
	addl = (unsigned char)address;
	SendByteToIC(addl);
	delay_us(10);
	SendByteToIC(byte);
	delay_us(10);
	StopIC();
	delay_us(10);
}

unsigned char ReadByteFromICAdd(int address)
 {
	unsigned char addm,addl;
	unsigned char data1;
	StartIC();
	delay_us(30);
	SendByteToIC(0xa0);//send slave address
	delay_us(30);
	addm = (unsigned char)(address>>8);
	SendByteToIC(addm);//send MSB of the address
	delay_us(30);
	addl = (unsigned char)address;
	SendByteToIC(addl);//send LSB of the address
	delay_us(30);

	StartIC();

	delay_us(30);
	SendByteToIC(0xa1);
        delay_us(30);
       	data1=ReadByteFromIC();
	delay_us(30);

	StopIC();
	return(data1);

}





 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -