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

📄 24c16.c

📁 ATMEGA单片机对24c016的读写程序
💻 C
字号:
#include <iom88v.h>
#include <macros.h>
//24c01-24c16读写驱动程序,

#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char

#define i2c_data  (1<<0)
#define i2c_clk   (1<<7)
#define eeprom_wp (1<<6)
void delay1(uchar ms);
void delay(uint us);
void i2cwait(void){
     delay(100);
}
void i2cstart(void){ //开始
     PORTB|=i2c_data; //1
     PORTD|=i2c_clk;  //1
     //i2cwait();
     PORTB&=~i2c_data;//0
     //i2cwait();
     PORTD&=~i2c_clk; //0
}

void i2cstop(void){//停止
     PORTB&=~i2c_data; //0
     //i2cwait(); 
     PORTD|=i2c_clk;   //1
     //i2cwait(); 
     PORTB|=i2c_data;  //1
}
void ack(void)//应答
 {
     PORTD|=i2c_clk;   //1
     PORTD&=~i2c_clk;  //0
 }
void i2csentbyte(temp12){//8位输出
    unsigned char i=8;
    while (i--){
        if (temp12&0x80)
		 {PORTB|=i2c_data;}
        else
		 {PORTB&=~i2c_data;}
        PORTD|=i2c_clk; //1
        PORTD&=~i2c_clk;//0 
		temp12<<=1;
    }
   // DDRB|=i2c_data;  //设置data为输出
}
void i2cbytewrite(uint addr,uchar value){//字节写入
     unsigned char i;
     DDRB|=i2c_data;
     DDRD|=i2c_clk;
     DDRD|=eeprom_wp;
	 i=((addr&0x7ff)/256)<<1;//页选 择
     PORTD&=~eeprom_wp; //0
	 PORTB|=i2c_data;
	 PORTD&=~i2c_clk;
         i2cstart();
         i2csentbyte(0xA0|i); 
         ack();
         i2csentbyte(addr);
         ack();
         i2csentbyte(value);
		 ack();
         i2cstop();
		 WDR();
		 PORTD|=eeprom_wp;
 }

uchar i2cbyteread(uint addr){//字节读出
     uchar  i,value;
     DDRB|=i2c_data;
     DDRD|=i2c_clk;
     DDRD|=eeprom_wp;       //数据方向,输出
	 value=((addr&0x7ff)/256)<<1;
	 PORTB|=i2c_data;//1
	 PORTD&=~i2c_clk;//0
     i2cstart();
     i2csentbyte(0xa0|value);
	 ack();
     i2csentbyte(addr); 
	 ack();
     i2cstart();
     i2csentbyte(0xa1|value);
	 ack();
	 DDRB&=~i2c_data;//数据方向,输入
	 PORTB|=i2c_data;
	 PORTD|=i2c_clk;
	 value=0;
	 for(i=0;i<8;i++)
	 {
	  value<<=1;
	  PORTD|=i2c_clk;
	  if(PINB&i2c_data)
	  value++;
	  PORTD&=~i2c_clk;
	 }
	DDRB|=i2c_data;//数据方向,切换回输出
	i2cstop();
     return value;
}

⌨️ 快捷键说明

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