标题:
IIC总线24C02.H文件下载
[打印本页]
作者:
daniu
时间:
2014-12-25 20:37
标题:
IIC总线24C02.H文件下载
本帖最后由 daniu 于 2014-12-25 20:51 编辑
24C02.H文件是iic总线存储器的驱动 大家可以另存为到硬盘下载到电脑
#ifndef __24C02_H__
#define __24C02_H__
#define uchar unsigned char
#define uint unsigned int
sbit at24c04_scl=P3^2;//时钟端口
sbit at24c04_sda=P3^3;//数据端口
unsigned char temp_1;//定义全局变量存放暂时值
unsigned char biao;
void delayic(uchar t)
{
uchar i,j;
for(i=0;i<t;i++)
{
for(j=0;j<255;j++);
}
}
void delayic_m(uchar t)
{
uchar i;
for(i=0;i<t;i++);
}
void sta(void)//启动模块
{
at24c04_sda=1;
at24c04_scl=1;
delayic_m(1);
at24c04_sda=0;
delayic_m(1);
at24c04_scl=0;
}
void stop(void)//停止模块
{
at24c04_sda=0;
at24c04_scl=1;
delayic_m(1);
at24c04_sda=1;
delayic_m(1);
at24c04_scl=0;
}
uchar cack(void)//应答检测模块,有应答返回值是0
{
uchar i;
i=0;
at24c04_sda=1;
at24c04_scl=1;
if(at24c04_sda==1)i=1;
at24c04_scl=0;
return i;
}
void mnack(void)//发非应答模块
{
at24c04_sda=1;
at24c04_scl=1;
delayic_m(1);
at24c04_scl=0;
at24c04_sda=0;
}
void wrbyt(uchar date_w24)//写入一个字节
{
uchar i,j;
j=0x80;
for(i=0;i<8;i++)
{
if((date_w24&j)==0)
{
at24c04_sda=0;
at24c04_scl=1;
delayic_m(1);
at24c04_scl=0;
}
else
{
at24c04_sda=1;
at24c04_scl=1;
delayic_m(1);
at24c04_scl=0;
at24c04_sda=0;
}
j=j>>1;
}
}
uchar rdbyt(void)//读出一个字节
{
uchar i,j;
j=0x00;
for(i=0;i<8;i++)
{
at24c04_sda=1;
at24c04_scl=1;
if(at24c04_sda==0)
{
j=j&0xfe;
}
else
{
j=j|0x01;
}
if(i!=7)j=j<<1;
at24c04_scl=0;
}
return j;
}
void WRITE_IIC(uchar addr_ic,uchar data_ic)//写入数据操作
{
for(biao=0;biao<1;biao++)
{
sta();//启动
wrbyt(0xa0);//写入,写指令
if(cack()!=0)
break;
wrbyt(addr_ic);//写入要写地址
if(cack()!=0)
break;
wrbyt(data_ic);//写设定的值
if(cack()!=0)
break;
stop();
delayic(20);
delayic(20);//间隔
}
}
uchar READ_IIC(uchar addr_ic)//读取数据操作
{
uchar mid_ic;//中间变量
for(biao=0;biao<1;biao++)
{
sta();//启动
wrbyt(0xa0);//写入,写指令,写指令是0xa0(片选地址线全部接地)
if(cack()!=0)//检测应答,正常情况下返回值都是0,忙时除外
break;
wrbyt(addr_ic);//写入要读地址
if(cack()!=0)//检测应答
break;
sta();//单字节读取需要重新启动
wrbyt(0xa1);//写入,读命令,读指令是0xa1(片选地址线全部接地)
if(cack()!=0)//检测应答
break;
mid_ic=rdbyt();//将读出的数据存放在中间变量中
mnack();//发非应答信号
stop();//停止IC读写
delayic(20);
delayic(20);//IC的重新启动读写要间隔较长的时间
}
return mid_ic;
}
#endif
复制代码
作者:
wrty0
时间:
2016-1-17 05:36
感觉不错
作者:
红尘有你
时间:
2016-1-18 15:37
本帖最后由 红尘有你 于 2016-1-18 15:40 编辑
for(biao=0;biao<1;biao++)求这个biao的含义
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1