电子制作天地网站欢迎您的光临,欢迎提出宝贵意见或建议。本站信息产业部备案: 粤ICP备05114582号
AT24C02的读写程序
24C02 read / write process

时间:2010-1-25 21:18:18 来源:互联网 作者:不详 编辑: 【关闭


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停止*/
}
/***************************************************************************/
 
 
 
 


◆相关文章◆
◆ 编辑推荐 ◆
用户:
更多评论
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。60个字以内
留言:
验证码:

免责声明:
●本站所有内容均来自网络,以学习为目的,如果侵犯了您的利益,请来信告知,立即删除,站长邮件为"diy+dzdiy.com",请将"+"变更为"@"
●电子制作存在风险,请注意人身安全,如果您在根据本站电路进行制作过程中发生伤害,本站不负任何责任。

版权所有:www.dzdiy.com ? 2001-2019 本站信息产业部备案: 粤ICP备05114582号