音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

24C02問題,防真讀出來的值為什么不對滴?

作者:piter_tan 欄目:單片機(jī)
24C02問題,防真讀出來的值為什么不對滴?
#include <REGX51.h>        //頭文件
#define uCHAR unsigned CHAR        //定義一下方便使用
#define uint unsigned int
#define uLONG unsigned LONG

//CHAR code dx516[3] _at_0x003b    //這是為了仿真設(shè)置

#define WriteDeviceAddress 0xa0    //定義器件在IIC總線中的地址
#define ReadDviceAddress 0xa1
sbit    SCL=P2^7;
sbit    SDA=P2^6;
sbit    P10=P1^0;

//定時函數(shù)
void DelayMs(unsigned int NUMBER)
{
    unsigned CHAR TEMP;
    for(;NUMBER!=0;NUMBER--)
    {
        for(TEMP=112;TEMP!=0;TEMP--);
    }
}

//開始總線
void start()
{
    SDA=1;
    SCL=1;
    SDA=0;
    SCL=0;
}
//結(jié)束總線
void stop()
{
    SCL=0;
    SDA=0;
    SCL=1;
    SDA=1;
}
//發(fā)ACKO
void NoAck()
{
    SDA=1;
    SCL=1;
    SCL=0;
}
//測試ACK
bit TestAck()
{
    bit ErrorBit;
    SDA=1;
    SCL=1;
    ErrorBit=SDA;
    SCL=0;
    return(ErrorBit);
}
//定入8個bit到24C02
Write8Bit(unsigned CHAR input)
{
    unsigned CHAR TEMP;
    for(TEMP=8;TEMP!=0;TEMP--)
    {
        SDA=(bit)(input&0x80);
        SCL=1;
        SCL=0;
        input=input<<1;
    }
}
//寫入一個字節(jié)到24C02
void Write24C02(uCHAR ch,uCHAR address)
{
    start();
    Write8Bit(WriteDeviceAddress);
    TestAck();
    Write8Bit(address);
    TestAck();
    Write8Bit(ch);
    TestAck();
    stop();
    DelayMs(10);
}
//從24C02中讀出8個bit

uCHAR Read8Bit()
{
    unsigned CHAR TEMP,rbyte=0;
    for(TEMP=8;TEMP!=0;TEMP--)
    {
        SCL=1;
        rbyte=rbyte<<1;
        rbyte=rbyte|((unsigned CHAR)(SDA));
        SCL=0;
    }
    return(rbyte);
}
//從24C02中讀出1個字節(jié)
uCHAR Read24C02(uCHAR address)
{
    uCHAR ch;
    start();
    Write8Bit(WriteDeviceAddress);
    TestAck();
    Write8Bit(address);
    TestAck();
    start();
    Write8Bit(ReadDviceAddress);
    TestAck();
    ch=Read8Bit();
    NoAck();
    stop();
    return(ch);
}
//***********************************
void main(void)        //主程序
{
    
    uCHAR c1,c2;
    P2=0xc0;
    while(1)        //主程序掛起
    {
    Write24C02(0x7c,0x02);
    c1=Read24C02(0x02);
    Write24C02(0x99,0x03);
    c2=Read24C02(0x03);
    P10=0;
    }
    
}

防真時,0x02,0x03讀出來的值都是FF!怪了.....

2樓: >>參與討論
piter_tan
這部分讀過后就不對了
uCHAR Read8Bit()
{
    unsigned CHAR TEMP,rbyte=0;
    for(TEMP=8;TEMP!=0;TEMP--)
    {
        SCL=1;
        rbyte=rbyte<<1;
        rbyte=rbyte|((unsigned CHAR)(SDA));
        SCL=0;
    }
    return(rbyte);
}
難道這樣讀不行嗎?

3樓: >>參與討論
NE5532
如下
你拿個電阻,330歐姆的,把SDA線拉到地,看能不能讀到0x00

4樓: >>參與討論
xplore
仿真時,比如單步運行時
可能太慢, 破壞了24C02的時序

5樓: >>參與討論
NE5532
不至于,I2C是同步總線,中間停下來都可以
 

* - 本貼最后修改時間:2006-12-17 17:36:35 修改者:NE5532

6樓: >>參與討論
piter_tan
呵呵,謝謝各位
真的是不能單步運行來看或是中間停下來的
直接燒寫到目標(biāo)板就OK啦

7樓: >>參與討論
千尋喬子
回復(fù)主題:24C02問題,防真讀出來的值為什么不對滴?
我是ATMEL一級代理,希望可以幫助到你,我手機(jī):13713758355,QQ:499340587

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于譯碼器
24C02調(diào)試中遇到的怪問題(高手請進(jìn))
1602LCD與89S52靜電脈沖干擾死機(jī)怎么辦?急死
7805兩邊的電容能互換位置嗎
飛思卡爾6PIN,8PIN高性能低成本單片機(jī)
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號