打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
AT24C02的读写程序

AT24C02的读写程序,24C02 read / write process

关键字:AT24C02的读写程序

AT24C02的读写程序
#include
#include 
#include "INTRINS.H"
#define  uchar unsigned char
#define _NOP_() _nop_()
/***************************************************************************/
#define WriteDeviceAddress 0xa0 /*24c02的写地址*/
#define ReadDviceAddress 0xa1   /*24c02的读地址*/
/***************************************************************************/
sbit    SCL=P1^6;
sbit    SDA=P1^7;
sbit    P1_5=P1^5;
sbit    P1_4=P1^4;
sbit    P1_3=P1^3;
sbit    P1_2=P1^2;
unsigned char code table[]={0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};
unsigned char table1[8];
/*********************延时程序*******************************************/
void DelayMs(unsigned int number) {
     unsigned char temp;
    for(;number!=0;number--)
    {
        for(temp=112;temp!=0;temp--);
      
    }
}
/***************************************************************************
***************************24c02开始程序************************************
***************************************************************************/
void Start()
{
    SDA=1;
    SCL=1;
    SDA=0;
    SCL=0;
}
/***************************************************************************
***************************24c02停止程序************************************
***************************************************************************/
void Stop()
{
    SCL=0;
    SDA=0;
    SCL=1;
    SDA=1;
}
/***************************************************************************/
void Ack()
{
    SDA=0;
    SCL=1;
    SCL=0;
    SDA=1;
}
/***************************************************************************/
void NoAck()
{
    SDA=1;
    SCL=1;
    SCL=0;
}
/***************************************************************************
*返回错误标志,ErrorBit=SDA,为1错误,0正确*********************************
***************************************************************************/
bit TestAck()
{
    bit ErrorBit;
    SDA=1;
    SCL=1;
    ErrorBit=SDA;
    SCL=0;
    return(ErrorBit);
}
/***************************************************************************
***************************24c02写一个字节程序******************************
***************************************************************************/
void Write8Bit(unsigned char input)
{
    unsigned char temp;
    for(temp=8;temp!=0;temp--)
   {
        SDA=(bit)(input&0x80);/*从高位依次取input的各位*/
        SCL=1;
        SCL=0;
        input=input<<1; /*相等与RLC,取了CY位*/
    }
}
/***************************************************************************
***************************24c02写程序**************************************
***************************************************************************/
void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)
{ /*Wdata对准要写的数据的首地址   RomAddress单元地址      number几个Byte*/
    Start();/*IIC开始*/
    Write8Bit(WriteDeviceAddress);/*写入器件地址0xa0*/
    TestAck();/*测试ACK位*/
    Write8Bit(RomAddress);/*写入器件控制单元地址*/
    TestAck();/*测试ACK位*/
    for(;number!=0;number--)
    {
        Write8Bit(*Wdata);
        TestAck();
        Wdata++;
    }
    Stop();/*IIC停止*/
    DelayMs(10);/*延长10MS,保证数据写入*/
}
/***************************************************************************
***************************24c02读一个字节程序******************************
***************************************************************************/
unsigned char Read8Bit()
{
    unsigned char temp,rbyte=0;
    for(temp=8;temp!=0;temp--) 
  {
        SCL=1;
        rbyte=rbyte<<1;
        rbyte=rbyte|((unsigned char)(SDA));     
        SCL=0;
    }
     /*   for(temp=8;temp!=0;temp--)
  {
        SCL=1;
        rbyte=rbyte<<1;
        if(SDA==1)     
        rbyte=rbyte|0x01;
        SCL=0;
    } */
    return(rbyte);  /*把数据返回*/
}
/***************************************************************************
***************************24c02读程序**************************************
***************************************************************************/
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes)
{
    /*unsigned char temp,rbyte;*/
    Start(); /*IIC开始*/
    Write8Bit(WriteDeviceAddress);/*写入器件地址0xa0*/
    TestAck();/*测试ACK位*/
    Write8Bit(RomAddress);/*写入器件控制单元地址*/
    TestAck();/*测试ACK位*/
    Start();/*IIC再次发送开始*/
    Write8Bit(ReadDviceAddress);
    TestAck();/*测试ACK位*/
    while(bytes!=1)
    {
    *RamAddress=Read8Bit();/*存一个读到的数据到RamAddress+I*/
    Ack();/*发送IIC再读*/
    RamAddress++;/*存取地址加一*/
    bytes--;
    }
    *RamAddress=Read8Bit();
    NoAck();/*发送IIC停止读*/
    Stop();/*IIC停止*/
}
/***************************************************************************/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MSP430F149模拟IIC读写24C02程序
51单片机”光控窗帘“简易版c(带视频)
解析I2C通信协议
I2c通讯介绍及代码演示
学51单片机-基于PCF8591的AD采样和DA输出【实际应用篇】
ADXL345程序。 (amoBBS 阿莫电子论坛)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服