E
elpintas
Guest
こんにちはすべて、
私は、(C18を)私は
、 マイクロチップからの例として
、 私の機能¥を実行することに注意991のアプリケーションを使用してプログラミング、私は読むことができると私の記憶に私が25MHzで
、 簡単なプログラムで動作するバイトを書き込む24LC1025 EEPROMの使用しています。
しかし
、 私はバイトを読み取ることができますが
、 私はバイトを書き込むことはできませんスタックのtcpipで自分の現在のコード内でこの関数を追加してください。私は、25MHzのための0x3Dです用のtcpip私は0x67が41.6MhzスタックSSP2ADDでdiferenceの2つのプログラムでは
、 同じ設定をしている。また
、 ビットレートは100kHzであり、また、私は4.7kのプルアップSCLおよびSDAの抵抗をしている。
もし私400kHzのような他のビットレートで動作する必要があります私は知らない。
これらは、MSSPは
、 モジュールの私の設定があります:
/ /ここで
、 外部メモリには、I2Cのセットアップです
DDRDbits.RD6 = 1; / /構¥成SCL2
/ /と入力
DDRDbits.RD5 = 1; / /構¥成sda2は
/ /と入力
/ / OpenI2C(マスター、SLEW_ON);
SSP2STATが0x80; / /無効にするSMBusは&
/ /スルーレート制御
SSP2CON1 =は0x28; / / MSSPはマスターを有効にする
SSP2ADD = 0x67; / /されるべき
/ / 100kHzのための
SSP2CON2 =は0x00; / /クリアMSSPはConrolビット
これらの書き込み私され
、 関数を読む:
unsigned char型ByteWriteI2C(unsigned char型ControlByte、unsigned char型HighAdd、unsigned char型LowAdd、unsigned char型のデータ)
(
IdleI2C2(); / /モジュールの確認がアイドル状態の
StartI2C2(); / / START条件を開始
中(SSP2CON2bits.SEN); / /スタートコンディションまで待つを超えている
WriteI2C2(ControlByte); / / 0でなければなりません1バイト- R / Wビットを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(HighAdd); / / EEPROMにバイトのアドレスを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(LowAdd); / / EEPROMにバイトのアドレスを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(データ); / /データEEPROMにバイトを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
StopI2C2(); / / STOP条件を送信する
中(SSPCON2bits.PEN); / /ストップコンディションまで待つを超えている
が完了するまで
、 書込みサイクルの(EEAckPolling2(ControlByte)); / /待って
を返す(0);エラーなしで/ /を返す
)
unsigned char型ByteReadI2C(unsigned char型ControlByte、unsigned char型HighAdd、unsigned char型LowAdd、unsigned char型*データは、unsigned char型の長さ)
(
IdleI2C2(); / /モジュールの確認がアイドル状態の
StartI2C2(); / / START条件を開始
中(SSP2CON2bits.SEN); / /スタートコンディションまで待つを超えている
WriteI2C2(ControlByte); / / 1バイトを書き込む
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(HighAdd); / / EEPROMへのワードアドレスのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
中(SSP2CON2bits.RSEN); / /再まで待ってスタート条件を超えている
WriteI2C2(LowAdd); / / EEPROMへのワードアドレスのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
RestartI2C2(); / / I2Cバスの状態を再生成する
中(SSP2CON2bits.RSEN); / /再まで待ってスタート条件を超えている
WriteI2C2(ControlByte |は0x01); / / 1読み込みする必要が1バイト- R / WビットのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
getsI2C2(データの長さ); / /複数のバイトで読む
NotAckI2C(); / /条件のACKは送信
中(SSP2CON2bits.ACKEN); / / ACKのシーケンスを待つを超えている
StopI2C2(); / / STOP条件を送信する
中(SSP2CON2bits.PEN); / /ストップコンディションまで待つを超えている
を返す(0);エラーなしで/ /を返す
)
私が書き込もうとすると、プログラムコードは
、 下記の太字の行で停止する
unsigned char型WriteI2C2(符号なしchar data_out)
(
SSP2BUF = data_out; / /書込みシングルバイトSSP2BUFする
場合(SSP2CON1bits.WCOL)/ /テストする場合
、 衝突の発生を書く
場合WCOLビットがセットさを返す(-1); / /負の戻り#
その他の
(
までの書込みサイクル中(SSP2STATbits.BF); / /待機完了です
IdleI2C2(); / /モジュールの確認がアイドル状態の
場合(SSP2CON2bits.ACKSTAT)/ ACKの状態を受け取った/テスト
を返す(-2);
他のリターン(0); / /場合WCOLビット以外を返します負に設定されていません#
)
)
誰か私に役立つだろうか?
私は、(C18を)私は
、 マイクロチップからの例として
、 私の機能¥を実行することに注意991のアプリケーションを使用してプログラミング、私は読むことができると私の記憶に私が25MHzで
、 簡単なプログラムで動作するバイトを書き込む24LC1025 EEPROMの使用しています。
しかし
、 私はバイトを読み取ることができますが
、 私はバイトを書き込むことはできませんスタックのtcpipで自分の現在のコード内でこの関数を追加してください。私は、25MHzのための0x3Dです用のtcpip私は0x67が41.6MhzスタックSSP2ADDでdiferenceの2つのプログラムでは
、 同じ設定をしている。また
、 ビットレートは100kHzであり、また、私は4.7kのプルアップSCLおよびSDAの抵抗をしている。
もし私400kHzのような他のビットレートで動作する必要があります私は知らない。
これらは、MSSPは
、 モジュールの私の設定があります:
/ /ここで
、 外部メモリには、I2Cのセットアップです
DDRDbits.RD6 = 1; / /構¥成SCL2
/ /と入力
DDRDbits.RD5 = 1; / /構¥成sda2は
/ /と入力
/ / OpenI2C(マスター、SLEW_ON);
SSP2STATが0x80; / /無効にするSMBusは&
/ /スルーレート制御
SSP2CON1 =は0x28; / / MSSPはマスターを有効にする
SSP2ADD = 0x67; / /されるべき
/ / 100kHzのための
SSP2CON2 =は0x00; / /クリアMSSPはConrolビット
これらの書き込み私され
、 関数を読む:
unsigned char型ByteWriteI2C(unsigned char型ControlByte、unsigned char型HighAdd、unsigned char型LowAdd、unsigned char型のデータ)
(
IdleI2C2(); / /モジュールの確認がアイドル状態の
StartI2C2(); / / START条件を開始
中(SSP2CON2bits.SEN); / /スタートコンディションまで待つを超えている
WriteI2C2(ControlByte); / / 0でなければなりません1バイト- R / Wビットを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(HighAdd); / / EEPROMにバイトのアドレスを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(LowAdd); / / EEPROMにバイトのアドレスを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(データ); / /データEEPROMにバイトを書く
IdleI2C2(); / /モジュールの確認がアイドル状態の
StopI2C2(); / / STOP条件を送信する
中(SSPCON2bits.PEN); / /ストップコンディションまで待つを超えている
が完了するまで
、 書込みサイクルの(EEAckPolling2(ControlByte)); / /待って
を返す(0);エラーなしで/ /を返す
)
unsigned char型ByteReadI2C(unsigned char型ControlByte、unsigned char型HighAdd、unsigned char型LowAdd、unsigned char型*データは、unsigned char型の長さ)
(
IdleI2C2(); / /モジュールの確認がアイドル状態の
StartI2C2(); / / START条件を開始
中(SSP2CON2bits.SEN); / /スタートコンディションまで待つを超えている
WriteI2C2(ControlByte); / / 1バイトを書き込む
IdleI2C2(); / /モジュールの確認がアイドル状態の
WriteI2C2(HighAdd); / / EEPROMへのワードアドレスのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
中(SSP2CON2bits.RSEN); / /再まで待ってスタート条件を超えている
WriteI2C2(LowAdd); / / EEPROMへのワードアドレスのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
RestartI2C2(); / / I2Cバスの状態を再生成する
中(SSP2CON2bits.RSEN); / /再まで待ってスタート条件を超えている
WriteI2C2(ControlByte |は0x01); / / 1読み込みする必要が1バイト- R / WビットのWRITE
IdleI2C2(); / /モジュールの確認がアイドル状態の
getsI2C2(データの長さ); / /複数のバイトで読む
NotAckI2C(); / /条件のACKは送信
中(SSP2CON2bits.ACKEN); / / ACKのシーケンスを待つを超えている
StopI2C2(); / / STOP条件を送信する
中(SSP2CON2bits.PEN); / /ストップコンディションまで待つを超えている
を返す(0);エラーなしで/ /を返す
)
私が書き込もうとすると、プログラムコードは
、 下記の太字の行で停止する
unsigned char型WriteI2C2(符号なしchar data_out)
(
SSP2BUF = data_out; / /書込みシングルバイトSSP2BUFする
場合(SSP2CON1bits.WCOL)/ /テストする場合
、 衝突の発生を書く
場合WCOLビットがセットさを返す(-1); / /負の戻り#
その他の
(
までの書込みサイクル中(SSP2STATbits.BF); / /待機完了です
IdleI2C2(); / /モジュールの確認がアイドル状態の
場合(SSP2CON2bits.ACKSTAT)/ ACKの状態を受け取った/テスト
を返す(-2);
他のリターン(0); / /場合WCOLビット以外を返します負に設定されていません#
)
)
誰か私に役立つだろうか?