1

MCU をコーディングして I2C バス上のアドレスをリッスンし、それに応じて実行する方法を理解できていません。C のサンプル コードの多くは、マスター デバイス用です。スレーブ デバイスのコードを記述する方法をよりよく理解したいと思います。SMB0STA ステータス レジスタを使用しますか? データを開始して出力するキューを「リッスン」すると思われる関数を以下に投稿しました。0xA8は「自分のアドレス + R 受信。ACK 送信」のステータスコードです。私のC8051F020 MCUデータシートによると。

unsigned char i2c_Slave_Read (void)
{
    unsigned char data_out[8];

    data_out[8] = "LED 1 ON";

    while (SI)
    if (SMB0STA == 0xA8)
    {
        P5 = 0x10;
        SMB0DAT = data_out;
    }
}
4

1 に答える 1

2

スレーブ動作については、データシートのセクション 18.3.3 から説明されています。

SMB0ADRスレーブ アドレスでレジスタをプログラムします。アドレス検出はハードウェアによって行われ、データが到着すると割り込みが発生します。次に、ステータスを読み取ってSMB0STA何が起こっているかを確認し、 を使用してデータの読み取り/書き込みを行うことができますSMB0DAT。表 18.1 を参照してください。これは、SMB0STAステート マシンとコードが実行するアクションを説明しています。

于 2012-10-20T06:22:38.643 に答える