电子产业
数字化服务平台

扫码下载
手机洽洽

  • 微信小程序

    让找料更便捷

  • APP

    随时找料

    即刻洽谈

    点击下载PC版
  • 公众号

    电子元器件

    采购信息平台

  • 移动端

    生意随身带

    随时随地找货

  • 华强商城公众号

    一站式电子元器件

    采购平台

  • 芯八哥公众号

    半导体行业观察第一站

24C32~24C512的51单片机读写程序

来源:-- 作者:-- 浏览:4391

标签:

摘要:AT89S52 晶振频率为11.0592MHz 指令周期:1.0852us 功能说明:24C32-512程序,能读写:24C32、24C64、24C128、24C256、24C512 读出的数据 送 P1 口显示 #include "reg52.h" #include "intrins.h" #defin

AT89S52 晶振频率为11.0592MHz 指令周期:1.0852us 功能说明:24C32-512程序,能读写:24C32、24C64、24C128、24C256、24C512
读出的数据 送 P1 口显示
#include "reg52.h"
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int sbit sda=P3^7;//;模拟I2C 数据
sbit scl=P3^6;//;模拟I2C 时钟 void delay1(uint z)//延时为 1ms
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
} void delay()//5us延时
{
_nop_();
_nop_();
_nop_();
} void star()//开始
{
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
sda=0;
delay();//5us延时 } void stop()//停止
{
sda=0;
delay();//5us延时
scl=1;
delay();//5us延时
sda=1;
delay();//5us延时 } void ack()//应答
{ uchar z=0;
while((sda==1)&&(z<50))z++;//条件判断, sda=1,则没有应答。如果没有应答则延时:z<50,z++;后返回
scl=0;
delay();//5us延时
} ///写一个数据函数
//器件写地址 slave_write_address
//字节高地址 byte_High_address
//字节低地址 byte_Low_address
//待写入数据 data_data
void write(uchar slave_write_address,uchar byte_High_address,uchar byte_Low_address,uchar data_data)//写一个数据
{
uchar temp,temp1,i,ii; star();//开始 for(ii=0;ii<4;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,数据
{
if(ii==0)
{
temp=slave_write_address;//送 器件写地址
temp1=slave_write_address;
}
else if(ii==1)
{
temp=byte_High_address;//送 字节高地址
temp1=byte_High_address;
}
else if(ii==2)
{
temp=byte_Low_address;//送 字节低地址
temp1=byte_Low_address;
}
else if(ii==3)
{
temp=data_data;//送 数据
temp1=data_data;
}
for(i=0;i<8;i++)
{
scl=0;
delay();//5us延时
temp=temp1;
temp=temp&0x80;// 相 与 后,把不相关的位清零 if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1 sda=1;
else
sda=0; delay();//5us延时
scl=1;
delay();//5us延时
scl=0;
delay();//5us延时
temp1=temp1<<1;//向左移出1位 }
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
ack();
}
stop();//停止
} ///读一个数据函数
//器件写地址 slave_write_address
//器件读地址 slave_read_address
//字节高地址 byte_High_address
//字节低地址 byte_Low_address
//读出的数据 data_data read(uchar slave_write_address,byte_High_address,byte_Low_address,uchar slave_read_address)//读一个数据
{
uchar temp,temp1,i,ii,x,data_data; star();//开始 for(ii=0;ii<4;ii++)//根据 24CXX文档资料,和时序图,按顺序送:器件写地址,字节地址,器件读地址
{
if(ii==0)
{
temp=slave_write_address;//送 器件写地址
temp1=slave_write_address;
}
else if(ii==1)
{
temp=byte_High_address;//送 字节高地址
temp1=byte_High_address;
}
else if(ii==2)
{
temp=byte_Low_address;//送 字节低地址
temp1=byte_Low_address;
}
else if(ii==3)
{
star();//开始 temp=slave_read_address;//送 器件读地址
temp1=slave_read_address;
} for(i=0;i<8;i++)//开始读数据
{
scl=0;
delay();//5us延时
temp=temp1;
temp=temp&0x80;// 相 与 后,把不相关的位清零 if(temp==0x80)//根据前面 相 与 后,判断 temp是否等于0x80,是则该位为 1 sda=1;
else
sda=0; delay();//5us延时
scl=1;
delay();//5us延时
scl=0;
delay();//5us延时
temp1=temp1<<1;//向左移出1位
}
sda=1;
delay();//5us延时
scl=1;
delay();//5us延时
ack();//应答
} for(x=0;x<8;x++)
{
data_data=data_data<<1;//向左移入1位 sda=1;
delay();//5us延时
scl=0;
delay();//5us延时
scl=1;
delay();//5us延时 if(sda==1)//判断 数据线是否是高电平
data_data|=0x01;//把读到的数据 或 0X01
//else
//data_data|=0x00;
}
ack();//应答
stop();//停止
return data_data;//返回读到的数据 } void main()
{ write(0xa0,0x00,0x01,0x66);//向器件写一个数据:
//(0xa0 是器件写地址;0x00 是字节高地址;0x01 是字节低地址;0x66 是待写入的数据) delay1(5);//写与读的时间间隔应大于5ms,取决于器件 24C02的响应速度 //向器件读一个数据
//把读出的数据送 P1口显示
P1=read(0xa0,0x00,0x01,0xa1);//向器件读一个数据:
//(0xa0 是器件写地址;0x00 是字节高地址;0x01 是字节低地址;0xa1 是器件读地址) while(1);//跳转,相当于汇编指令 JUMP $
} //0x66==亮 灭 灭 亮 亮 灭 灭 亮
型号 厂商 价格
EPCOS 爱普科斯 /
STM32F103RCT6 ST ¥461.23
STM32F103C8T6 ST ¥84
STM32F103VET6 ST ¥426.57
STM32F103RET6 ST ¥780.82
STM8S003F3P6 ST ¥10.62
STM32F103VCT6 ST ¥275.84
STM32F103CBT6 ST ¥130.66
STM32F030C8T6 ST ¥18.11
N76E003AT20 NUVOTON ¥9.67
Baidu
map