找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2304|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

這個(gè)IIC總線單片機(jī)函數(shù)中的SDA怎么只有一位啊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:302886 發(fā)表于 2018-4-21 23:52 來(lái)自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
用軟件在51上模擬IIC
void delay10us(void)   //誤差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=10;a>0;a--);
}

void delay10ms(void)   //誤差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=47;a>0;a--);
}

void init()
{
    SCL=1;
    delay10us();
    SDA=1;
    delay10us();

}

void startIIC(void)     //啟動(dòng)IIC
{
    SDA=1;
    delay10us();
    SCL=1;
    delay10us();
    SDA=0;
}

void respond()  //等待應(yīng)答
{
    char i;
    SCL=1;
    delay10us();
    while(SDA==1&&i<256)         //SCL=1時(shí),若SDA接收到低電平則表明接收正常,至于i是防止程序在此處鎖死,防止IIC鎖死,一定時(shí)間未接收到型號(hào)后退出
        i++;
    SCL=0;
    delay10us();
}

void stopIIC()
{
    SCL=1;
    SDA=0;
    delay10us();
    SDA=1;
    delay10us();
    SCL=0;
}

void senddata(char udata)
{
    char i, temp;
    temp=udata;
    for(i=0;i<8;i++)
    {
        temp=temp<<1;
        SCL=0;
        delay10us();
        SDA=CY;
        SCL=1;
        delay10us();
    }

    SCL=0;                            //這之后還要發(fā)個(gè)1
    delay10us();
    SDA=1;
    delay10us();
}

char readdata()
{
    char i, k;
    SCL=0;
    delay10us();
    SDA=1;
    for(i=0;i<8;i++)
    {
        SCL=1;
        delay10us();
        k=(k<<1)|SDA;
        SCL=0;
        delay10us();
    }
    return k;
}
void write_address(char address, char udata)
{
    startIIC();
    senddata(0xa0);
    respond();
    senddata(address);
    respond();
    senddata(udata);
    respond();
    stopIIC();
}

char read_address(char address)
{
    char date;
    startIIC();
    senddata(0xa0);
    respond();
    senddata(address);
    respond();
    startIIC();
    senddata(0xa1);
    respond();
    date=readdata();
    respond();
    stopIIC();
    return date;
}   




這個(gè)函數(shù)中的這個(gè)的SDA怎么只有一位啊。發(fā)送的時(shí)候SDA都是一個(gè)字節(jié),怎么到讀取時(shí)就只有一位啊求指教

char readdata()
{
    char i, k;
    SCL=0;
    delay10us();
    SDA=1;
    for(i=0;i<8;i++)
    {
        SCL=1;
        delay10us();
        k=(k<<1)|SDA;
        SCL=0;
        delay10us();
    }
    return k;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:249026 發(fā)表于 2018-4-22 11:35 | 只看該作者
readdata()這個(gè)函數(shù)在讀取的過(guò)程中循環(huán)了8次,剛好是8個(gè)位,一個(gè)字節(jié)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表