/*
http://bbs.21ic.com/icview-185258-1-1.html
http://www.zdh1909.com/html/pic/11054_4.html
http://www.daxia.com/bibis/moredata30_1349835_87810.shtml
*/
/************************************************************************************/
/* 程序名:AT24C02读写代码 */
/* */
/* 晶振: 4M CPU型号: PIC16F877A */
/* */
/* 作者: 陈辉 日期: 2008-07-12 */
/* */
/************************************************************************************/
#include <pic.h>
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
//--------------------------延时函数------------------------------------------//
void delay(unsigned int k)
{
unsigned int t;
for(;k!=0;k--)
for(t=110;t!=0;t--);
}
//-----------------------I2C初始化函数----------------------------------------//
void i2c_init(void)
{
TRISC3=1;// 设置 输入引脚
TRISC4=1;
SSPSTAT=0x80;
SSPCON=0x28;
SSPADD=0x09;
SSPCON2=0x00;
SSPEN=1;
SSPIF=0;
}
//-----------------------I2C写数据函数----------------------------------------//
void i2c_write (unsigned char address, unsigned char send_data)
{
SEN=1;//启动
while(SSPIF==0);
SSPIF=0;
SSPBUF=0xa0;//I2C写控制字节
while(SSPIF==0);
SSPIF=0;
SSPBUF=address; //写入I2C单元地址
while(SSPIF==0);
SSPIF=0;
SSPBUF=send_data; //写入数据
while(SSPIF==0);
SSPIF=0;
PEN=1;//产生停止条件
while(SSPIF==0);
SSPIF=0;
delay(5);//延时5MS
}
//-----------------------I2C读数据函数----------------------------------------//
unsigned char i2c_read(unsigned char address)
{
unsigned char dat=0;
SEN=1;//启动
while(SSPIF==0);
SSPIF=0;
SSPBUF=0xa0;//I2C写控制字节
while(SSPIF==0);
SSPIF=0;
SSPBUF=address;//写入I2C单元地址
while(SSPIF==0);
SSPIF=0;
RSEN=1;//启动,反复启动
while(SSPIF==0);
SSPIF=0;
SSPBUF=0xa1; //I2C读控制字节
while(SSPIF==0);
SSPIF=0;
RCEN=1;//允许接受
while(SSPIF==0);
SSPIF=0;
dat=SSPBUF;//读出数据
PEN=1;//产生停止条件
while(SSPIF==0);
SSPIF=0;
return(dat);
}
//----------------------------主函数------------------------------------------//
void main(void)
{
while(1)
{
i2c_init();
RC3=1;
RC4=1;
TRISB=0x00;
while(SSPSTAT&0x1f);
i2c_write(0x00,0x02);
// PORTB=i2c_read(0x00);
// while(1);
}
}