概要

I2CのサポートはXC8のライブラリに含まれている。
ただし、STARTコンディションの発行が成功しデーター送受信途中にエラーが発生した場合、ストップコンディションを発行しなければデバイスを解放できない。
1byte送信のたびにエラー処理を行うのは煩雑なので、1byte書き込み関数にエラー時のストップコンディション発行を追加した。
使用する場合はi2c_ex.hをインクルードしi2c_ex.cをプロジェクトに追加してください。
I2Cバスの仕様については、次のページに記述がある。
http://www.nxp.com/documents/user_manual/UM10204_JA.pdf

プログラムの説明

ソースファイル

以下のファイルで構成されている
i2c_ex.c   ・・・ I2C 拡張ライブラリー  Version 1.00
i2c_ex.h   ・・・ I2C 拡張ライブラリー  Version 1.00

サブルーチン

以下のサブルーチンをサポート

i2c_write

スレーブへ1byte書き込む。エラー発生時はSTOPコンディションを発行する

ソースコード

i2c_ex.h

/*
 * I2C 拡張ライブラリー  Version 1.00
 * File:        i2c_ex.h
 * Target:      PIC18F14K50 48Mhz
 * コンパイラ:   Microchip MPLAB XC8 C Compiler V1.20
 * 書き込み:     PICKit 3
 * リリース:     2013/09/29 15:00
 *
*/

#ifndef I2C_EX_H
#define	I2C_EX_H

signed char i2c_write(unsigned char d); // I2Cスレーブへ1byte送信する

#define TRY 2   //  エラー時のリトライ回数

#endif  //  I2C_EX_H

i2c_ex.c

/*
 * I2C 拡張ライブラリー  Version 1.00
 * File:        i2c_ex.c
 * Target:      PIC18F14K50 48Mhz
 * コンパイラ:   Microchip MPLAB XC8 C Compiler V1.20
 * 書き込み:     PICKit 3
 * リリース:     2013/09/29 15:00
 *
*/

#include <p18f14k50.h>
#include <plib\delays.h>
#include <plib\i2c.h>
#include "i2c_ex.h"

// I2Cスレーブへ1byte送信する
// コリジョン処理及びエラー時に確実にコマンドを終了できるようにSTOPコンディション出力を追加

signed char i2c_write(unsigned char d){
    signed char ret;
    ret=WriteI2C(d);
    if(ret){
        SSPCON1bits.WCOL=0;
        StopI2C();
        while(SSPCON2bits.PEN);
        return ret; // -1:WCOL -2:NACK
    }
    IdleI2C();
    return 0;
}