jantw996 发表于 2012-12-9 20:12:51

fm24c04求助

弄了一个星期,还没出来,这个程序在24C02上出来的,现在到24C04就出不来了。
我曾今在at24C512上用AVR 8M 晶振 都测试通过了,移植到 STC 晶振是11.0592上就出不来了,修改了延时时间,还是出不来。感谢哥哥姐姐们帮助下,要不又要挨老板批了。
#include "stc11.h"
#include "at24c04.h"
void Delay5us()                //@11.0592MHz
{
        unsigned char i;

        _nop_();
        i = 11;
        while (--i);
}//开始总线
void Start(void)
{
        SDA=1;
        SCL=1;
                Delay5us();
        SDA=0;
        SCL=0;
}



/*-----------------------------------------*/
//结束总线
void Stop(void)
{
        SCL=0;
        SDA=0;
               Delay5us();
        SCL=1;
        SDA=1;
}



/*-----------------------------------------*/
//发送ACk0
void NoAck(void)
{
        SDA=1;
        SCL=1;
                Delay5us();
        SCL=0;
}



/*-----------------------------------------*/
//测试ACk
bit TestAck(void)
{
        bit ErrorBit;
        SDA=1;
        SCL=1;
                Delay5us();
        ErrorBit=SDA;
        SCL=0;
        return (ErrorBit);
}



/*-----------------------------------------*/
//写入8个Bit 到24C04
void Write8Bit(unchar input)
{
        unchar temp;
        for(temp=8;temp!=0;temp--)
        {
                SDA=(bit)(input&0x80);
                SCL=1;
                              Delay5us();
                SCL=0;
                input<<=1;
        }
}



/*-----------------------------------------*/
//写入一个字到24C04中的指定地址中
void Write24C04(unsigned int address,unchar ch)
{
        unsigned char addr_h,addr_l;
        addr_h=address>>8;
        addr_l=address&0xff;
        Start();
        Write8Bit(WriteDeviceAddress);
        TestAck();
        Write8Bit(addr_h);
        TestAck();
        Write8Bit(addr_l);
        TestAck();
        Write8Bit(ch);
        TestAck();
        Stop();
        Delay_10ms(1);                                        //延迟时间最大10ms!!!
}



/*-----------------------------------------*/
//从24C04中读出8个Bit
unchar Read8Bit(void)
{
        unchar temp,rbyte=0;
        for(temp=8;temp!=0;temp--)
        {
                SCL=1;
                              Delay5us();
                rbyte<<=1;
                rbyte|=((unchar)(SDA));
                SCL=0;
        }
        return (rbyte);
}



/*-----------------------------------------*/
//从24C04指定地址位置中读出1个字节
unchar Read24C04(unsigned int address)
{
        unchar ch;
        unsigned char addr_h,addr_l;
        addr_h=address>>8;
        addr_l=address&0xff;
        Start();
        Write8Bit(WriteDeviceAddress);
        TestAck();
        Write8Bit(addr_h);
        TestAck();
        Write8Bit(addr_l);
        TestAck();
        Start();
        Write8Bit(ReadDeviceAddress);
        TestAck();
        ch=Read8Bit();
        NoAck();
        Stop();
        return (ch);
}

wzhenhua 发表于 2012-12-11 11:38:19

调通了吗?

夜月fire 发表于 2022-3-5 07:36:25

本帖最后由 夜月fire 于 2022-3-5 07:50 编辑

24c04每页能存16字节,还有翻页功能,好像是A0引脚控制,我也卡住了,现在只能存256字节
页: [1]
查看完整版本: fm24c04求助