datasheet

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

2018-01-14 20:22:46来源: eefocus 关键字:24C32~24C512  51单片机  读写程序

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==亮 灭 灭 亮 亮 灭 灭 亮 


关键字:24C32~24C512  51单片机  读写程序

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018011437349.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:1602液晶电子时钟程序
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
24C32~24C512
51单片机
读写程序

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved