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

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

位變量批量保存??

作者:SZ338 欄目:單片機(jī)
位變量批量保存??
以下是一小段通過(guò)中斷進(jìn)行一位一位數(shù)據(jù)接收,請(qǐng)教各位DX如何將這些接收到的數(shù)據(jù)(位變量)保存到字節(jié)變量I2CByte??謝謝!
void ext_int1_isr(void) interrupt 2  
{
    RdBit = SDA;
    SWITCH (BitCounter)
          {
        case 8:
           I2CBit7 = RdBit;
          break;
        case 7:
            I2CBit6 = RdBit;
          break;
        case 6:
           I2CBit5 = RdBit;
          break;
        case 5:
           I2CBit4 = RdBit;
          break;
        case 4:
           I2CBit3 = RdBit;
          break;
        case 3:
           I2CBit2 = RdBit;
          break;
        case 2:
           I2CBit1 = RdBit;
          break;
        case 1:
           I2CBit0 = RdBit;
              break;
        case 0:
           I2CAck = RdBit;
           I2CState = I2C_STATE_ACK;
           BitCounter = 9;
           ByteEnd = TRUE;
          }
        BitCounter--;
            if (ByteEnd==1)
                if (I2CAck==0)
                  {
                     ByteEnd = FALSE;
                     I2CByte = I2CRead();
                  }    
unsigned CHAR I2CRead(void)
{
    ?????              ;;;如何編寫,使得程序能簡(jiǎn)潔而有效率!!
}



2樓: >>參與討論
su_mj000
程序可以簡(jiǎn)化一點(diǎn)
unsigned CHAR I2CByte;

void ext_int1_isr(void) interrupt 2  
{
    BitCounter--;
    if ( BitCounter != 0 )
    {
        I2CByte <<= 1;
        if ( SDA )
            I2C++;
    }
    else
    {
        I2CAck = SDA;
        _關(guān)閉中斷_;
    }
}


CHAR I2CRead (unsigned CHAR *cp)
{
    if ( ByteCounter == 0 )
    {
        *cp = I2CByte;

        ByteCounter = 9;
        _開(kāi)通中斷_;

        return (I2CAck != 0)? -1: 1;
    }

    return 0;
}


3樓: >>參與討論
su_mj000
打錯(cuò)了一個(gè)變量名...
打錯(cuò)了一個(gè)變量名,應(yīng)該是     

        I2CByte <<= 1;
        if ( SDA )
            I2CByte++;

4樓: >>參與討論
SZ338
程序可以簡(jiǎn)化一點(diǎn)!
多謝su_mj000的回復(fù)!
我的用意是監(jiān)測(cè)I2C的SDA和SCK數(shù)據(jù)線,通過(guò)串口(超級(jí)終斷)在電腦端將其顯示。通過(guò)中斷(SCK信號(hào)為高時(shí)產(chǎn)生中斷,接收一位數(shù)據(jù)。)累積接收9Bit后,然后在I2CRead()函數(shù)進(jìn)行位變量保存(保存為I2CByte字節(jié)),以使得在主函數(shù)里面可以訪問(wèn)。并將其(I2CByte)通過(guò)串口發(fā)送出去!I2CRead()函數(shù)并非進(jìn)行讀I2C數(shù)據(jù),而是將位變量保存為一個(gè)字節(jié)而已(I2CByte)。不過(guò)看你簡(jiǎn)化后的程序,
*cp = I2CByte,是什么用意?只怪本人新手入行,麻煩能解釋一下!
另:I2CRead ()函數(shù)中ByteCounter變量的操作是否有問(wèn)題??


5樓: >>參與討論
SZ338
程序可以簡(jiǎn)化一點(diǎn)!
unsigned CHAR I2CByte;

void ext_int1_isr(void) interrupt 2  
{
    I2CByte = SDA;           //////////讀數(shù)據(jù)???
    BitCounter--;
    if ( BitCounter != 0 )
    {
        I2CByte <<= 1;
        if ( SDA )
            I2C++;
    }
    else
    {
        I2CAck = SDA;
        _關(guān)閉中斷_;
    }
}


CHAR I2CRead (unsigned CHAR *cp)
{
    if ( ByteCounter == 0 )
    {
        *cp = I2CByte;

        ByteCounter = 9;
        _開(kāi)通中斷_;

        return (I2CAck != 0)? -1: 1;
    }

    return 0;
}


6樓: >>參與討論
su_mj000
回函倉(cāng)促
對(duì)不起,回函倉(cāng)促,沒(méi)有加解釋。

看得出,你是用51單片機(jī)監(jiān)控I2C總線.但我估計(jì)做起來(lái)難度
很大.一是I2C速度較高(標(biāo)準(zhǔn)100Kbit/S,加強(qiáng)型400Kbit/S);
也就是每10微秒或更短時(shí)間內(nèi)就要處理一次中斷.一般51單片
機(jī)難以勝任;二是你還得識(shí)別起始(START)和終止(STOP)信號(hào).

另外,我假設(shè)你的代碼中的SDA是一I/O引腳信號(hào),只需判別其
'1'或'0'即可. 而

       I2CByte = SDA;           //////////讀數(shù)據(jù)???

反而費(fèi)時(shí)且不合理.

(unsigned CHAR *cp)定義cp為一字符指針,所以

       *cp = I2CByte

即將I2CByte存入改指針?biāo)付ǖ貎?nèi)存單元.當(dāng)然,這一步驟可
改用其他方法實(shí)現(xiàn).



7樓: >>參與討論
shencai555
照你的編程思想,可以用聯(lián)合
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教高手,誰(shuí)有單片機(jī)的解碼程序(解碼2262芯片的)
初學(xué)PIC,用12C508,請(qǐng)指教
怎么把VB中的picturebox控件中的曲線轉(zhuǎn)成數(shù)據(jù)
大蝦們:那里有PIC的C編譯器DOWN?
誰(shuí)做過(guò)電爐控制系統(tǒng),請(qǐng)賜教!
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)