<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PIC:PIC 通信(2)I2C

2008年07月10日 | PIC・マイコン
                                              日記@BlogRanking
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
' ----------
これは、コンパイラ付属のサンプルと変わらないかも。


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 のフォーラムにあったものです。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。