久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 關(guān)于24c256的一些問題 [打印本頁]

作者: zxc2216843    時間: 2018-6-28 09:29
標題: 關(guān)于24c256的一些問題
最近在調(diào)試24c256,出了點問題老是找不出毛病,就是對24C256寫數(shù)據(jù)的時候,前面有可能用得好好的,后面就突然數(shù)據(jù)開始錯位了
正常讀出來的數(shù)據(jù)應該是這樣的:1803041000030028130161
但是出現(xiàn)問題后讀出來的數(shù)據(jù)都是:
0627110546002812016100
0627110712000004000000
0627150724000004000000
(我是每次寫入16字節(jié)的數(shù)據(jù),前11個字節(jié)是有效,后5個是補零)
我每次只寫16個字節(jié)的數(shù)據(jù),寫入的間隔時間也不短,出問題是應該是地址錯位了。
但是程序里面是沒有問題的。所以想請問大神們,有什么原因可能導致我出現(xiàn)這個問題,謝謝

下面我貼下我的程序,請幫忙看下
這是main里使用的:
        IIC_Transmit(0xA0,Wddr, &Savedata[0], 16);//往24C256寫入數(shù)據(jù)
           Delayms(400);


下面是24c256的子程序:
**************************************************************************************************************************/
/*
********************************************************
函數(shù)名稱:void AT24C256_Init(void)
函數(shù)功能:初始化IO口
********************************************************
*/
void AT24C256_Init(void)
{
    DDRE  |= 0xC0;
        PORTE |= 0xC0;
}
/*
********************************************************
函數(shù)名稱:static void IIC_delay(void)
函數(shù)功能:延時
********************************************************
*/
static void IIC_delay(void)
{
   asm("nop");
}

/*
********************************************************
函數(shù)名稱:static void IIC_delay(void)
函數(shù)功能:主機發(fā)送開始信號
********************************************************
*/
static void IIC_Start(void)
{
    MODE_OUT;
        
        SDA_H;
                asm("nop");

        SCL_H;
                asm("nop");
                asm("nop");
                asm("nop");

        SDA_L;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");

        SCL_L;
                asm("nop");
                asm("nop");

}


/*
********************************************************
函數(shù)名稱:static void IIC_Stop(void)
函數(shù)功能:主機發(fā)送結(jié)束信號
********************************************************
*/
static void IIC_Stop(void)
{
    MODE_OUT;

    SCL_L;
                asm("nop");
                asm("nop");

        SDA_L;
                asm("nop");
                asm("nop");

        SCL_H;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");

        SDA_H;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");


}

/*
********************************************************
函數(shù)名稱: static unsigned char IIC_ACK_Check(void)
函數(shù)功能: 主機成功發(fā)送一個字節(jié)數(shù)據(jù)后,AT24C256會發(fā)送一
           應答信號。
返回值  : 1    沒有應答信號,即從機沒有成功接收到數(shù)據(jù)
           0    有應答信號,即從機已接收到了數(shù)據(jù)
********************************************************
*/
static unsigned char IIC_ACK_Check(void)
{
    unsigned char Bitmun;
        
        MODE_IN;
        
    SCL_L;
                asm("nop");
                asm("nop");

        SDA_H;
                asm("nop");
                asm("nop");
        
        SCL_H;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");

        Bitmun = PINE;
        
        SCL_L;
                asm("nop");
                asm("nop");

        
        Bitmun =(Bitmun >> 7)&0x01;
        
        
    return Bitmun;
}

/*
********************************************************
函數(shù)名稱: static void IIC_NO_ACK(void)
函數(shù)功能: 主機發(fā)送一個字節(jié)數(shù)據(jù)后,
           不會檢測從機的應答信號
********************************************************
*/
static void IIC_NO_ACK(void)
{
    MODE_OUT;

    SCL_L;
            asm("nop");
                asm("nop");

        SDA_H;
                asm("nop");
                asm("nop");

        SCL_H;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");

        SCL_L;
                asm("nop");
                asm("nop");

}

/*
********************************************************
函數(shù)名稱: static void IIC_ACK_Creat(void)
函數(shù)功能: 主機向從機請求一個字節(jié)數(shù)據(jù)后,
           發(fā)送應答信號,告訴從機繼續(xù)發(fā)送數(shù)據(jù)。(連讀讀模式)
********************************************************
*/
static void IIC_ACK_Creat(void)
{
    MODE_OUT;

        SCL_L;
                asm("nop");
                asm("nop");

        SDA_L;
                asm("nop");
                asm("nop");

    SCL_H;
                asm("nop");
                asm("nop");
                asm("nop");
                asm("nop");

        SCL_L;
                asm("nop");
                asm("nop");

}

/*
********************************************************
函數(shù)名稱:  static void IIC_Send8Bit(unsigned char SendByte)
函數(shù)功能:  主機發(fā)送一個字節(jié)數(shù)據(jù)
********************************************************
*/
static void IIC_Send8Bit(unsigned char SendByte)
{
    char counter;
               
        MODE_OUT;
               
        SDA_L;
                asm("nop");
                asm("nop");
                asm("nop");

        for (counter = 8; counter >0; counter--)
        {
        SCL_L;
                asm("nop");
                asm("nop");

                        
            if (SendByte & 0x80)
                {
                    SDA_H;
                        asm("nop");
                }
                else
                {
            SDA_L;
                        asm("nop");
                        asm("nop");
                }
               
                SCL_H;
                        asm("nop");

                SendByte = SendByte << 1;

        }
SCL_L;
                asm("nop");
                asm("nop");
}

/*
********************************************************
函數(shù)名稱:   static unsigned char IIC_Receive8Bit(void)
函數(shù)功能:   主機接收一個字節(jié)數(shù)據(jù)
********************************************************
*/
static unsigned char IIC_Receive8Bit(void)
{
    char counter;
    unsigned char ReceiveByte=0;
        unsigned char IOstatus=0;
        
        MODE_IN;
        
        SCL_L;
                asm("nop");
                asm("nop");

    SDA_H;
                asm("nop");
                asm("nop");

        
    for (counter = 8; counter > 0; counter--)
        {
        SCL_L;
                        asm("nop");
                        asm("nop");

                SCL_H;
                        asm("nop");
                        asm("nop");

                IOstatus = PINE;
               
            ReceiveByte  = ReceiveByte<<1;
        ReceiveByte        |= (IOstatus >>7)& 0x01;
        }
        SCL_L;
        return ReceiveByte;
}
/*
********************************************************
函數(shù)名稱:   char IIC_Transmit(unsigned char lcv_device,unsigned int liv_addr,unsigned char *lcv_pdata, char counter)
函數(shù)功能:   主機往指定地址發(fā)送數(shù)據(jù)
             unsigned char lcv_device    從機地址
                         unsigned int liv_addr       從機內(nèi)部存儲地址
                         unsigned char *lcv_pdata    發(fā)送數(shù)據(jù)緩存區(qū)
                         char counter                發(fā)送多少個數(shù)據(jù)
                        
返回值 :    1    寫入數(shù)據(jù)失敗
             0    寫入成功

                         注: AT24C256在連續(xù)讀寫過程中,會自動增加地址,但是不會自動跳轉(zhuǎn)到下一頁,
                              所以要注意連續(xù)讀寫過程中不要超過頁的存儲空間,避免最先存儲的數(shù)據(jù)被覆蓋從而導致
                                  數(shù)據(jù)丟失。
********************************************************
*/
char IIC_Transmit(unsigned char lcv_device,unsigned int liv_addr,unsigned char *lcv_pdata, char counter)
{
    IIC_Start();
        
        /* 發(fā)送從機地址 */
        IIC_Send8Bit(lcv_device);
        if ( IIC_ACK_Check() ) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
        {
            IIC_Stop();
        return FAIL;
        }

        /* 發(fā)送內(nèi)存地址*/
    IIC_Send8Bit((unsigned char)(liv_addr >> 8) & 0x0FF);  //高八位
        if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
    {
        IIC_Stop();
                return FAIL;
    }        
    IIC_Send8Bit((unsigned char)((liv_addr)&0x0FF));  //低八位
        if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
        {
        IIC_Stop();
                return FAIL;
        }        
               
        /* 發(fā)送數(shù)據(jù) */
    for(;counter > 0;counter-- )               
    {
        IIC_Send8Bit(*lcv_pdata);
            if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
                {
                    IIC_Stop();
                    return FAIL;
                }        
            lcv_pdata++;
    }
               

        IIC_Stop();
               
        return SUCCEED;
}

/*
********************************************************
函數(shù)名稱 :  char IIC_Receive(unsigned char lcv_device, unsigned int liv_addr, unsigned char *lcv_pdata, char counter)
函數(shù)功能 :  主機接收數(shù)據(jù)
             unsigned char lcv_device    從機地址
                         unsigned int liv_addr       從機內(nèi)部存儲地址
                         unsigned char *lcv_pdata    發(fā)送數(shù)據(jù)緩存區(qū)
                         char counter                發(fā)送多少個數(shù)據(jù)

返回值 :    1      讀數(shù)據(jù)失敗
             0      讀成功
                        
                         注: AT24C256在連續(xù)讀寫過程中,會自動增加地址,但是不會自動跳轉(zhuǎn)到下一頁,
                              所以要注意連續(xù)讀寫過程中不要超過頁的存儲空間,避免最先存儲的數(shù)據(jù)被覆蓋從而導致
                                  數(shù)據(jù)丟失。               
                                 
                                  讀模式:  需要先配置為寫模式,然后才能改為讀模式
********************************************************
*/
char IIC_Receive(unsigned char lcv_device, unsigned int liv_addr, unsigned char *lcv_pdata, char counter)
{

        /* 先將從機配置為寫模式 */
    IIC_Start();
        /* 發(fā)送從機地址 */
    IIC_Send8Bit(lcv_device);
        if ( IIC_ACK_Check())//調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
        {
        IIC_Stop();
        return FAIL;
        }
               
           /*    發(fā)送內(nèi)存地址   */
    IIC_Send8Bit((unsigned char)((liv_addr >> 8)&0x0FF));
        if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
        {
            IIC_Stop();
                return FAIL;
        }        
    IIC_Send8Bit((unsigned char)((liv_addr)&0x0FF));               
        if ( IIC_ACK_Check()) //調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
        {
            IIC_Stop();
                return FAIL;
        }        
        
        
            /* 然后將從機配置為寫模式 */        
            IIC_Start();
        /* 發(fā)送從機地址 */
            IIC_Send8Bit(lcv_device+1);
            if ( IIC_ACK_Check()) ////調(diào)用函數(shù)char IIC_ACK_Check(void),沒有從機回應則結(jié)束本次發(fā)送。
            {
            IIC_Stop();
                    return FAIL;
        }        
               
        for( ; counter > 0; )
        {

        *lcv_pdata = IIC_Receive8Bit();
            counter--;
            if ( counter >0)
                {
                    IIC_ACK_Creat();
                    lcv_pdata++ ;
                }
               
        }
        
        IIC_NO_ACK();
        IIC_Stop();
        
        return SUCCEED;
}


作者: zxc2216843    時間: 2018-6-29 09:15
能不能有大佬幫幫忙
作者: xhaity    時間: 2018-10-27 13:29
return SUCCEED;之前加個5ms的延時;另外,24lc256 連續(xù)只能寫1頁,不能跨頁寫,比如:地址0-15為一頁,地址16-31為一頁;地址只能是0開始;或者地址16開始連續(xù)寫16字節(jié);不能是地址1-15,17-31開始連續(xù)寫16個字節(jié)的;




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久草视频在线播放 | 午夜欧美一区二区三区在线播放 | 精品久久久久久亚洲精品 | 免费欧美 | 91精品国产欧美一区二区成人 | 久草视频观看 | 免费国产视频 | 玖草资源| 久久亚洲欧美日韩精品专区 | 色婷婷精品国产一区二区三区 | 毛片网站在线观看 | 日韩欧美中文字幕在线观看 | 国内精品视频在线观看 | 免费毛片www com cn | 99久久久国产精品 | 欧美一级精品片在线看 | 日本免费一区二区三区 | 国产精品欧美精品日韩精品 | 国产一区二区在线视频 | 91九色视频在线 | 国产成人短视频在线观看 | 精品国产18久久久久久二百 | 天天操网 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 欧美日韩国产三级 | 欧美午夜影院 | 一区影院 | 午夜免费视频 | h片在线免费观看 | 蜜臀久久 | 欧美精品一区在线发布 | 色在线免费 | 欧美国产日韩一区二区三区 | 国户精品久久久久久久久久久不卡 | 天天操网 | 欧美一区二区大片 | 久久亚洲欧美日韩精品专区 | 伊人焦久影院 | 狠狠干影院 | 五月天天丁香婷婷在线中 | 日韩精品一区二区三区 |