微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于24C256读出全是0xff的问题,使用LPC单片机,认真看了程序发现I2C时序没有问题,找不出原因

关于24C256读出全是0xff的问题,使用LPC单片机,认真看了程序发现I2C时序没有问题,找不出原因

时间:10-02 整理:3721RD 点击:
unsigned char ErrorBit = 0;  //?áD′′í?ó±ê??£?1-′í?ó£?0-?yè·
void delay()
{
        unsigned char j;
        for(j =0;j <254; j++)
        ;
}
void Start(void)
{
        I2C_INIT2;
        SDA_1;
        SCL_1;
        delay();
        SDA_0;
        delay();
        SCL_0;
}
void Stop()
{
        SCL_0;
        SDA_0;
        delay();
        SCL_1;
        delay();
        SDA_1;
        delay();
}
unsigned char Write_I2c(unsigned char dat)
{
        unsigned char i;
        for(i =0;i <8;i++)
        {
                SCL_0;
                delay();
                if(dat&0x80) SDA_1;
                else SDA_0;
                dat <<= 1;
                SCL_1;
                delay();
               
        }
        SCL_0;
        SDA_1;
        delay();
        SCL_1;
        delay();
        SCL_0;
        if(ReadSDA)
                return FALSE;
        else
                return TRUE;
       
}
unsigned char Read_I2c(void)
{
        unsigned char i;
        unsigned char byte = 0;
       
        SCL_0;
        SDA_1;
        for(i =0;i <8;i++)
        {
                byte = byte <<1;
                SCL_0;
                delay();
                SCL_1;
                delay();
                if(ReadSDA) byte = (byte|0x01);
                               
        }
                SCL_0;
        return (byte);
}
void Ack(void)
{
        SCL_0;
        SDA_0;       
        delay();
        SCL_1;
        delay();
        SCL_0;
}
void NoAck(void)
{
        SCL_0;
        SDA_1;
        delay();
        SCL_1;
        delay();
        SCL_0;
}
void Write_Dat(unsigned char StartAddress,unsigned char *dat,unsigned char bytes)
{
        unsigned char i;
       
        Start();
        Write_I2c(Write24C256);
        Write_I2c(StartAddress>>8);
        Write_I2c(StartAddress);
        for(i =0;i <bytes;i++)
        {
                Write_I2c(*dat++);
        }
        Stop();
}
       
void Read_Dat(unsigned char StartAddress,unsigned char *dat,unsigned char bytes)
{
        unsigned char i;
       
        Start();
        Write_I2c(Write24C256);
        Write_I2c(StartAddress>>8);
        Write_I2c(StartAddress);
        Start();
        Write_I2c(Read24C256);
       
        if(bytes > 1)
        {
                for(i =0;i <bytes-1;i++)
                {
                        *dat++ = Read_I2c();
                        Ack();
                }       
                *dat = Read_I2c();
                NoAck();
        }
                else
                        *dat = Read_I2c();
                                NoAck();               
}
头文件
#define CSI24C256_Addr 0xa0   //?÷?tμ??·
#define Write24C256 0xa0  //D′êy?Yμ??·
#define Read24C256 0xa1  //?áêy?Yμ??·
#define SDA_H  IOSET0|=0x00000020
#define SDA_L  IOCLR0|=0x00000020
#define SCL_H  IOSET0|=0x00000004        
#define SCL_L  IOCLR0|=0x00000004
#define SDA_0 IODIR0|=0x00000020            //SDAéè?aê?3??£ê?
#define SDA_1  IODIR0&=(~0x00000020)        //SDAéè?aê?è??£ê?
#define SCL_0 IODIR0|=0x00000004            //SCLéè?aê?3??£ê?
#define SCL_1  IODIR0&=(~0x00000004)        //SCLéè?aê?è??£ê?
#define I2C_INIT2 IOSET0 &= ~(0x00000024)
#define ReadSDA IOPIN0&0x00000020
#define SDA_Val IOPIN0&0x00000020      //è?SDA???μ
#define TRUE 1
#define FALSE 0
//void delay(unsigned char i);
//extern void InitIIC();
void Start();                                //???ˉIIC×ü??
void Stop();                                //í£?1IIC×ü??
void Ack(void);                            //íê3éIICμ??÷?úó|′e2ù×÷
void NoAck(void);                         //íê3éIICμ??÷?ú?Tó|′e2ù×÷

unsigned char  Write_I2c(unsigned char data);
unsigned char Read_I2c(void);
extern void Write_Dat(unsigned char StartAddress,unsigned char *dat,unsigned char bytes);
extern void Read_Dat(unsigned char StartAddress,unsigned char *dat,unsigned char bytes);

大家好,请问这个I2C程序有什么问题吗?为什么写进去的数据读出来全是0xff

没看见主函数啊,首先确认写命令和读命令是否正确,可以用示波器看波形,确认后在看你的主程序是否正确

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top