![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)
PIC:PIC間のI2C通信のコーディング例を示す。
Swordfish BASIC による Master の例。
---------------- <Swordfish BASIC> -- 18F -------------
I2C.Initialize // initialize I2C 100kHz
// send_I2C ----- 1Byte
I2C.Start ' issue start signal
I2C.WriteByte($D6) ' address of slave
I2C.WriteByte(aa) ' send data
I2C.Stop ' issue stop signal
// recv_I2C ----- 2Byte
I2C.Start
I2C.WriteByte($D7) ' address of slave
aa=I2C.ReadByte(I2C_ACKNOWLEDGE)
bb=I2C.ReadByte(I2C_NOT_ACKNOWLEDGE)
I2C.Stop
' ----------
これは、コンパイラ付属のサンプルと変わらないかも。
![](https://blogimg.goo.ne.jp/img_emoji/hiyo_oro.gif)
mikro BASIC による Slave の例。(受けた2バイトに1加えて返すもの)
(段付けのために、先頭に2B空白がある)
---------------- <mikro BASIC> ----- 16F --------------
Dim aa, bb, dummy As Byte
'
sub procedure I2Cslave_init
SSPADD = $D6 ' Make our address D6 (7bit)
SSPCON = $36 ' Set to I2C slave with 7-bit address
TRISB.4 = 1 ' SCL (input)
TRISB.1 = 1 ' SDA (input)
end sub
'
sub procedure WaitForPIR1SSPIFset ' Waits till interrupt flag is set
do
loop UNTIL TESTBIT(PIR1,SSPIF) = 1
end sub
'
sub function ReceiveByteI2C as BYTE ' Receives one byte via I2C
SETBIT(SSPCON,CKP) ' Release clock
WaitForPIR1SSPIFset
RESULT = SSPBUF
CLEARBIT(PIR1,SSPIF) ' Clear interrupt flag
end sub
'
sub procedure SendByteI2C(dim TByte as BYTE) ' Sends the TByte via I2C
do
loop UNTIL TESTBIT(SSPSTAT,BF) = 0 ' Wait for empty buffer
NOP ' ???
SSPBUF = TByte ' Put TByte in buffer
NOP ' ???
SETBIT(SSPCON,CKP) ' Release the clock. starts the transmission.
WaitForPIR1SSPIFset
CLEARBIT(PIR1,SSPIF) ' Clear interrupt flag
end sub
' ------------- Main -------------
I2Cslave_init
'
WaitForPIR1SSPIFset ' Wait for address match
dummy = SSPBUF ' Get rid of Address
aa = ReceiveByteI2C
bb = ReceiveByteI2C
Inc(aa)
Inc(bb)
SETBIT(SSPCON,CKP) ' Release clock
WaitForPIR1SSPIFset ' Wait for RepeatedStart
dummy = SSPBUF ' Get rid of Address
CLEARBIT(PIR1,SSPIF)
SendByteI2C(aa)
SendByteI2C(bb)
' ----------
mikro BASIC のフォーラムにあったものです。
![](https://blogimg.goo.ne.jp/img_emoji/kaeru_shock1.gif)
お手数をおかけします。2クリック(投票を)お願いします ⇒
![日記@BlogRanking](http://img.diary-ranking.com/banner03s.gif)