I2CR
I2CR I2Cスレーブデバイスからのデータ受信(数値関数)
書式
I2CR( デバイスアドレス , コマンドアドレス , コマンド長 , 受信データアドレス, データ長 )
引数
デバイスアドレス :0 ~ 127 ($00 ~ $7F)(7ビット指定)
I2Cスレーブアドレスを7ビット形式で指定
コマンドアドレス :0 ~ 32767($0000 ~ $1FFFF)
送信するコマンドが格納されている仮想アドレス
コマンド長 :0 ~ 32767
送信するコマンドのバイト数
受信データアドレス:0 ~ 32767($0000 ~ $1FFFF)
受信データを格納するSRAM内仮想アドレス
データ長 :0 ~ 32767
受信するデータのバイト数
説明
I2Cスレーブデバイスからデータを受信します。
送信先はデバイスアドレスにてI2Cスレーブアドレスを指定します。
受信において、コマンド等の制御データの送信が必要な場合は、コマンドアドレス、コマンド長にて送信するデータを指定します。受信のみを行う場合は、コマンドアドレス、コマンド長に0を設定します。
送信受信するデータは仮想アドレスにて指定します。
仮想アドレスの指定には次の定数を利用することが出来ます。
VRAM :画面表示用メモリ(CW×CH) サイズは利用する画面デバイスにより可変
VAR :変数領域 サイズ 420バイト
ARRAY :配列変数領域(@(0)~@(99) ) サイズ200バイト
PRG :プログラム領域 サイズ 4096バイト
MEM :ユーザーワーク領域 サイズ1024バイト
GRAM :グラフィック表示用メモリ サイズは利用する画面デバイスにより可変
I2C通信には次の接続ピンを利用します。
PB6:SCL(I2Cクロック)
PB7:SDA(I2Cデータ)
戻り値
0:正常終了
1:通信バッファに対してデータが長すぎる
2:アドレス送信にNACKが返された
3:データ送信にNACKが返された
4:その他のエラー
エラーメッセージ
Syntax error :文法エラー、書式と異なる利用を行った
Illegal value :指定した引数の値が不当である
Out of range value :指定した値が有効範囲を超えている
Overflow :指定した数値が-32768 ~ 32767を超えている
利用例
I2C EEPROM(AT24C256 スレーブアドレス $50)にデータの読み書きを行う
code:i2cr_sample.bas
100 POKE MEM+0,$00,$00
110 POKE MEM+2,64,65,66,67
120 R=I2CW($50,MEM,2,MEM+2,4)
130 ? "snd r=";R
140 POKE MEM+6,0,0,0,0
150 WAIT 5
160 R=I2CR($50,MEM,2,MEM+6,4)
170 ? "rcv r=";R
180 ? "rcv data:";
190 FOR I=0 TO 3
200 ? PEEK(MEM+6+I);" ";
210 NEXT I
220 ?
実行結果
code:i2cr_sample2.bas
run
snd r=0
rcv r=0
rcv data:64 65 66 67
OK
関連項目