导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→AT24C04[我是一条鱼]

 *第15685篇: AT24C04

  
楼 主:我是一条鱼 2003年8月21日17:26
 AT24C04
请问:
     AT24C04中的A2  A1  A0三脚应该怎么用!
  
2楼:huzimax 2003年8月21日18:19
 地址选择,目的是为了装多片,如果只有一片,随便怎么用都行
  
3楼:我是一条鱼 2003年8月21日19:43
 多片
如果是多片的话,是不是该片这三个引脚的值和设备地址中的A2 A1 A0相同就选中该片
  
4楼:tanxiangrong 2003年8月22日11:41
 
/*使用11.0592MHZ晶体


/*使用11.0592MHZ晶体
   因此每个机器周期是1.085uS
   5个机器周期约为5.4us*/
#include "Branch.h"
/* 全局符号定义 */
#define HIGH 1
#define LOW 0
#define function
#define end_if
#define end_for
#define byte unsigned char
extern unsigned int Count;
extern  union datai Addr;
/****************************************************************************
*    函数原型: void function delay(void);
*    功    能: 本函数实际上只有一条返回指令, 在具体应用中可视具体要求增加延时
*              指令。
****************************************************************************/
void function delay( void )
{
    _nop_();
    _nop_();
    _nop_();
}


/****************************************************************************
*    函数原型: void function I_start(void);
*    功    能: 提供I2C总线工作时序中的起始位。
****************************************************************************/
void function I_start( void )
{
    SDA = HIGH ;
    SCL = HIGH ;
    delay() ;
    SDA = LOW ;
    delay() ;
    SCL = LOW ;
    delay() ;
}


/****************************************************************************
*    函数原型: void function I_stop(void);
*    功    能: 提供I2C总线工作时序中的停止位。
****************************************************************************/
void function I_stop( void )
{
    SDA = LOW ;
    delay() ;
    SCL = HIGH ;
    delay() ;
    SDA = HIGH ;
    delay() ;
}


/****************************************************************************
*    函数原型: void function I_init(void);
*    功    能: I2C总线初始化。在main()函数中应首先调用本函数, 然后再调用
*              其它函数。
****************************************************************************/
void  I_init( void )
{
    SDA = HIGH ;
    SCL = HIGH ;
}


/****************************************************************************
*    函数原型: bit function I_send(byte I_data);
*    功    能: 向I2C总线发送8位数据, 并请求一个应答信号ACK。如果收到ACK应答
*              则返回1(TRUE), 否则返回0(FALSE)。
****************************************************************************/
bit function I_send( byte I_data )
{
    register byte i ;
    bit Ack;
    /* 发送8位数据 */
    for ( i=0 ; i  <8 ; i++ )
    {
        if(I_data & 0x80)SDA = HIGH ;
        else SDA = LOW ;
        I_data   <  <= 1 ;
        delay();
        SCL = HIGH ;
        delay();
        SCL = LOW ;
        delay();
    }
    SDA = HIGH ;
    delay();
    SCL = HIGH ;
    delay();
    Ack = SDA ;
    SCL = LOW ;
    delay();
    return (Ack);
}


/****************************************************************************
*    函数原型: byte function I_receive(void);
*    功    能: 从I2C总线上接收8位数据信号, 并将接收到8位数据作为一个字节
*              返回, 不回送应答信号ACK。主函数在调用本函数之前应保证SDA信
*              号线处于浮置状态, 即使8051的P3.5脚置1。
****************************************************************************/
byte function I_receive( void )
{
    byte I_data = 0 ;
    register byte i ;
    for ( i=0 ; i  <8 ; i++ )
    {
        SCL = HIGH ;
        delay();
        I_data   <  <= 1 ;
        if (SDA) I_data |= 0x01 ;
        SCL = LOW ;
        delay();
    }
    return ( I_data ) ;
}


/****************************************************************************
*    函数原型: void function I_Ack(void);
*    功    能: 向I2C总线发送一个应答信号ACK, 一般用于连续数据读取时。
*****************************************************************************/
void function I_Ack( unsigned char Ack )
{
    SDA = Ack ;
    SCL = HIGH ;
    delay();
    SCL = LOW ;
}


//写24C04函数,带三个参数,第一个参数为24C04的外部地址和读写命令码
//第二个参数为24C04的存储地址,第三个参数为写入的字符,写入成功返回1;
bit WR_24C04(unsigned char addr1,unsigned char addr2,unsigned char Num)
{
    unsigned char i;
    bit Ack;
    bit FgTimeout=LOW;
    I_init();    //I2C总线初始化 
    for (i=0;i  <10;i++)
    {
        I_start();
        Ack=I_send(addr1);     //24C的外部地址,0xa0
        if(Ack)
        {
            I_stop();
            continue;
        }
        Ack=I_send(addr2);  //24C的存储地址,0
        if(Ack)
        {
            I_stop();
            continue;
        }
        Ack=I_send(Num);
        if(Ack)
        {
            I_stop();
            continue;
        }
        I_stop();
        FgTimeout = HIGH ;
        if (!Ack ) break;
    }
    D1ms(10);
    return(FgTimeout);
}


//读24C04函数,带二个参数,第一个参数为24C的外部地址和读写命令码
//第二个参数为24C的存储地址,返回读入的值
unsigned char RD_24C04(unsigned char addr1,unsigned char addr2)
{
    unsigned char Temp;
    I_start();
    I_send(addr1);
    I_send(addr2);
    I_start();
    I_send(addr1|0x01); //修改为读入
    Temp=I_receive();
    I_Ack(1);
    I_stop();
    return (Temp) ;
}


>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:有什么办法把微弱的模拟交流信号(0---400mv)转化成一个标准的直流信号,可以让ad转换器采样

[下一篇主题]:各位高手,这个问题怎么处理?