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

电子说

1.3w人已加入

描述

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阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分