访问手机版页面
你的位置:老古开发网 > 51单片机与I2C总线 > 正文  
24C512程序
内容导读:

#include <REG52.H>
#include <stdio.h>

sbit escl=P0^3;      
sbit esda=P0^2;
void w24c512(uchar pageadr,uchar wdataadr,uchar wdata);//一个字节写入24C512子程序,入口:uchar pageadr,uchar wdataadr,uchar wdata
uchar r24c512(uchar pageadr,uchar wdataadr);//从24C512中读取一个字节,入口uchar pageadr,uchar wdataadr,有返回值
void delay_10us(void);

 //==================//写24C512子程序单字节//==================
//============//入口:uchar pageadr,uchar wdataadr,uchar wdata========
void w24c512(usigned char device,unsigned int wdataadr,uchar wdata)
{
uchar i,msb,lsb;
uchar deviceadr;
escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//开始时序

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//msb高字节

 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//lsb低字节

 order=wdata;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//want to write a byte

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
}
//stop

 


//==================//读24C512子程序单字节//==================
//==================//入口:uchar pageadr,uchar wdataadr,有返回值======
uchar r24c16(usigned char device,unsigned int wdataadr,uchar wdata){
uchar i,msb,lsb,deviceadr;


escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//start sequ

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;

    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ


 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ

 


 

 escl=0;
 delay_10us();
 esda=1;
 delay_10us();
 escl=1;
 delay_10us();
 esda=0;
 delay_10us();
 escl=0;
//restart

if (device==0)
{
deviceadr=0xa1;
}
else
{
deviceadr=0xa3;
}
 order=deviceadr;
 for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ

 order=0x00;
 esda=1;

 for(i=0;i<8;i++)
 {
 order=order<<1; 
 escl=1;
 delay_10us();
 order0=esda;
 delay_10us();
 escl=0;
 delay_10us();
  }
 //read data
  esda=1;
 escl=1;
 delay_10us();
 escl=0;
 //ack

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
wdataadr=order;
return(wdataadr);
}
//stop

void delay_10us(void)
{
 unsigned int  i;
 for(i=0;i<600;i++)
 {
 
 }
}


标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐