您的位置 首页 嵌入式

怎么运用单片机模仿读写24C01EEPROM数据

如何使用单片机模拟读写24C01EEPROM数据-实验目的:

熟悉使用单片机模拟读写24C01EEPROM

1、首先向24C01EEPROM写入数据

2、在从24C01EEPROM中读取数据,并用LED显示

硬件设置:

1、SW4开关全部闭合

2、SW2开关1闭合,其它断开

3、SW3开关7和8闭合,其它断开

#include

__CONFIG(0x3545);

试验意图:

了解运用单片机模仿读写24C01EEPROM

1、首先向24C01EEPROM写入数据

2、在从24C01EEPROM中读取数据,并用LED显现

硬件设置:

1、SW4开关悉数闭合

2、SW2开关1闭合,其它断开

3、SW3开关7和8闭合,其它断开

#include

__CONFIG(0x3545);

//FLASH代码不维护,RB6和RB7为调试形式,FLASH不写维护,数据代码不维护

//RB3为数字IO口,低电压复位使能,上电延时开,看门狗开,4M晶体XT振荡器

#defineucharunsignedchar

#defineuintunsignedint

#defineSCLTRISC3

#defineSDATRISC4

界说写入EEPROM数据

ucharcode[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

界说读取EEPROM数据变量

ucharack,data[8];

//函数名:delayus(ucharTIme);

//进口参数:TIme

//出口参数:无

//函数效果:奇妙延时

//阐明:

voiddelayus(ucharTIme)

{

while(TIme–)

{

asm(“nop”);

}

}

//函数名:delayms(uchartime);

//进口参数:time

//出口参数:无

//函数效果:延时

//阐明:

//***********************************************

voiddelayms(uchartime)

{

uinti;

while(time–)

{

for(i=93;i》0;i–){;}

}

}

//***********************************************

//函数名:i2c_start(void);

//进口参数:无

//出口参数:无

//函数效果:发生发动信号

//阐明:

//***********************************************

voidi2c_start(void)

{

SDA=1;//当SCL为高电平时使SDA发生一个负跳变

delayus(1);

SCL=1;

delayus(5);

SDA=0;

delayus(2);

SCL=0;//钳住I2C总线,预备发送数据或接纳数据

delayus(2);

}

//***********************************************

//函数名:i2c_stop(void);

//进口参数:无

//出口参数:无

//函数效果:发生中止信号

//阐明:

//***********************************************

voidi2c_stop(void)

{

SDA=0;//当SCL为高电平时使SDA发生一个正跳变

delayus(1);

SCL=1;

delayus(5);

SDA=1;

delayus(4);

}

//***********************************************

//函数名:i2c_writebyte(uchardata);

//进口参数:data

//出口参数:无

//函数效果:写一个字节函数

//阐明:

//***********************************************

voidi2c_writebyte(uchardata)

{

uchari;

for(i=0;i《8;i++)//写8位数据

{

if(data&0x80){SDA=1;}//先写高位

else{SDA=0;}

delayus(1);

SCL=1;

delayus(5);

SCL=0;

data=data《《1;//写下一位

}

delayus(2);

SDA=1;

delayus(2);

SCL=1;

delayus(3);

while(RC4){;}//等候应对信号,RC4=0则有应对

SCL=0;

delayus(2);

}

//***********************************************

//函数名:i2c_writedata(ucharaddr,uchar*ptt);

//进口参数:addr,*ptt

//出口参数:无

//函数效果:按地址向EEPROM写数据块

//阐明:

//***********************************************

voidi2c_writedata(ucharaddr,uchar*ptt)

{

uchari;

i2c_start();//发生发动信号

i2c_writebyte(0XA0);//I2C写指令和IC地址

i2c_writebyte(addr);//写EEPROM地址

for(i=0;i《8;i++,ptt++)//写8个数据

{

i2c_writebyte(*ptt);

}

i2c_stop();//发生中止信号

}

//***********************************************

//函数名:i2c_readbyte(void);

//进口参数:无

//出口参数:SSPBUF

//函数效果:从EEPROM读取一个字节数据

//阐明:

//***********************************************

unsignedchari2c_readbyte(void)

{

uchardata,i;

data=0;

SDA=1;

for(i=0;i《8;i++)//读8位数据

{

delayus(1);

SCL=0;

delayus(5);

SCL=1;

delayus(2);

data=data《《1;

if(RC4)//判别读取数据是否为1

{

data=data|0x01;

}

delayus(2);

}

SCL=0;

delayus(2);

return(data);//回来读取的数据

}

//***********************************************

//函数名:i2c_readdata(ucharaddr);

//进口参数:addr

//出口参数:data[8]

//函数效果:按地址从EEPROM读取数据块

//阐明:

//***********************************************

voidi2c_readdata(ucharaddr)

{

uchari;

for(i=0;i《8;i++,addr++)

{

i2c_start();//发生发动信号

i2c_writebyte(0xA0);//I2C写指令和IC地址

i2c_writebyte(addr);//读EEPROM数据的地址

i2c_start();//从头发生发动信号

i2c_writebyte(0xA1);//I2C读指令和IC地址

data[i]=i2c_readbyte();//读取数据

i2c_stop();//发生中止信号

}

}

//***********************************************

//函数名:main(void);

//进口参数:无

//出口参数:无

//函数效果:MAIN函数

//阐明:

//***********************************************

voidmain(void)

{

uchari;

TRISA=0X00;//设置RA口为输出口

PORTA=0X00;//RA口输出低电平

ADCON1=0X07;//设置RA口和RE口为一般IO口

TRISC=0Xff;//RC3和RC4为输入,RC3为SCL线,RC4为SDA线。

TRISD=0X00;//RD口为输出

OPTION=0X8F;//分频给WDT,分频比为128

PORTC=0X00;

PORTD=0X00;

i2c_writedata(0x00,code);//调用写数据函数,写EEPROM地址,要写的数据

delayms(250);

CLRWDT();//清看门狗

i2c_readdata(0x00);//调用读数据函数,读EEPROM数据地址

while(1)

{

for(i=0;i《8;i++)

{

CLRWDT();//清看门狗

PORTD=data[i];//输出指示

delayms(250);

}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/345948.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部