3 ?
T |?
!y?
3 ?
T C?y# 
?
"d 7?
?
?
?
?
**$9LI?/
I2C9Leo
I2C 9L
^B
L1?9L
4Bl??
"d
19L
¥è
^
Z
¥9Lb9L
¥ qμ?
a LCD z? [#
 E2PROM ??b1Vc ?

34 I2C9LS[ ? I2C q¤?
<W¥?¨b
I2C q¥?¨vvh

è
^W ?Lhl
è
^e
j??
?q?'i4ú
"d V L?b
o
 I2C 9LS
?
_ 8 ê¥
3 e??¨
è ?
*t1 p¨± e? ¥
1y ?Bt
!9S
?B???¥"dYè?à
B?± e?  
e?? 
q è ?i%  I/O ?Z F?b
?"d??] q¥ ?¤?'A?Klb
?3? e??
¥"d?1 pú
¥
.
{b
?9¥rm?ê4¥ qo ?9L2¥? ? %?

3B?
@?tS¥"d31B?1?¥9L2
D51?9L
àμi?9L¥
}s
??
ìo
1
¥
¥L IC ?¤5? ?79L???
^o ?¥L
c"dY?¥
μì
TV?b
*$9L¥à
Q
*$9L|? ?*$
3áV?/.04$.04
?
L
&·&·1?
4%"1?
Hò4$-L ?¤?9L¥
qW.??
? q?μB?·B¥1?
MYí
^± e? -$% z? i% o
¤ g7 O? V[
T1B??
¤
l ? q¥?
%?
üA-$%
z? o
^B?¤
l 7i% 5; V[¤
l? V[
?
"
?
¤
l ? q3?
.
{
H9 V[$ AT
^?Vb ?
^
S9L¥
.
{iá
3
?.
{¥
Hò?|¥ qN
H ?
$ù?¥ q?$ a1
^V
*$9L
M3
d
?
?
?9L
¥ q

l V9L
¤
l
¥ q
? q ?
.
iá
3
Hò?|¥ q
V q$? qù?¥ q
*$9L
H??l

Sê4$-"
H4%"
μ/?ü
T?ê4$-"
H4%"
μ

6ü

? q?T??|óV qT¨?
PV q)1
!

^X?¥


V?s4%""



H
?s¥ q???
Hò?
ù|4%"L ??
V
UX
l?B?ê

iV
U V??¤
lb?_
VB3?a¤
lV?sé?a??T B?? I
nV?sê¥ 8′??s_?
H¨?
V q
^??? 
=??
ù

??s4%"" ¨



H
?

lVB?3?
?
^Ka
B?
Rí??s"$, 4%"

^KaB?3?
HR
íí3?s/0@"$,
4%""
?VyT?

T
H_??
B?ê

a
db4%"LiS
jB??s?|B?¤
l??
¥?s?|V???
 ?? q
àμ?
?s?|VT?.
i??B?T??|
? qA??B?T??|óV
P é ?!¨è÷

Ti
P q)?X?¥
?s_??¨?s_?

7?
kV
^?:
2
YVV?s ?
MY


?V q??
=??
ùa|?
B??s?| V
?s
ó? q[L V[??é?/BQ?T
98+?
4%"4$-?
^
_L
^?YVB?è
@÷
 ?è
E ?¤??¥è÷èab?9L b=
H?
HL
^?
^úè
ü ?¤?9L¥ q
{)A?
^
P 7
^
"è 7
^?
3?LD¥?
*$9L

¥.
{
qS

T/ VrLCJUT y

T/ V
rLCJUTú

T/ Vr.CJUT ?¤?9
L¥¤ g
o?9Lè ?
^Q'¥K? %?
Bê.
{
?? ?¤? I2C 9L¥ qμ?]? ?¥y\ CMOS
NMOS
?
 0 ? 1ú¥è
ü?
^%?¥
? VDD
¥M1è
ü %?n? 15 c¥è S
.
{B?

üá
3B?
Hò

¥μr?
SDA L
¥
A?
Hò¥úè
ü?
ù ?×?

L¥ú?è
ü
oμ SCL L¥
Hò?|
^?è
ü
H?
?M

ST?Hq
I2C 9L?·BC¥
^$?l1 
S ST? P Hq ¥ f
?b ? B? f ?
^ SCL L
^úè
ü
H SDA LVúè
ü_
?è
ü MD?? f ?V
U 
SH q ? SCL
^úè
ü
H SDA
L??è
ü_úè
ü MDV
UT?Hq 
ST?HqB?
??á
39L 
SHqa$ a1)?
¥
T?Hq
¥

HWa9L$ a1Q)? b=
?T á
3 ×ˉ 
S4S Hq7?á
3T?Hq9LB°)?
¥
N
H¥ 
SHq4×ˉ 
S4 S H q?

^B
"¥byN'ó?¥
:??s?|4 |T1B?Y¨¥
?;V
U 
SHq?V
U×ˉ 
SHq"dμ+Y
2
ü¥4 S
?T ?¤?9L¥ qi
A 1¥¤ g?q
*
1¨
ì_
? 
ST?Hq
EseL?
^
àμ??¤ g¥± e? 
?
H ò?
ù à
1? "4%"L
 Q ?
Y μ
à μ ?
3è
ü
MD
.
{

3?ì
T
?
?4%"L
¥
?3?A?1ê
Q.
{ V[?
¥3?
?
sK?
?3?aA??B?Y?ê
n5.
{¥
^
¥Kúê.4#b ?TV1??Bt 
e?
a è ?B?
=??????

l?
/B???
¥
3? V[
P
HòL4$- ??è
ü
P?é ??
?
?V!z¤
l/B?
3?i
db
HòL
4$-a
.
{??Bt f ?/ V[¨D*$9Lì
T
?B"¥ì
T è ?Y ?$#64¥ q
.à.
{B?3?
H¨?"¥1? 
S¥ó V[YVá
3T?Hq ???
N
H?á
3Y?b
Y?
.
{A?{Y?M1¥Y?
Hò

??á
3Y?¥
Hò

ùW?

db4 %"L ?úY?¥
Hò

ù W

l A?|4 %"L ??
P
??
Hò

¥úè
ü
ù W
 ?×?¥?è
ü ? ?A? I
ny ? ?
HWb
?V?
Y?V1?
H è ?
?3?Bt
L
Hf
?

l?
VA?
P
L  ?úè
ü? ?aá
3B?T
?Hq??.
{?á
3×ˉ 
SHq 7
S?¥.
{b
?TV¤
l Y?
V1 ??
^.
{
B
HWa?

l÷
3??A? BQ??.
{?? f ?¨V
?B?3?a
àμá
3Y? ? V
UV
P
L ?úè
ü?
á
3B?T?×ˉ 
SHqb
*$ q$??
?l
a
ü
sbit sda=P0^0; //I2C q SDA
L
sbit scl=P0^1; //I2C q SCL
HòL
#define nops() {_nop_();_nop_();_nop_();_nop_();_nop_();}
//nop·
7?
?l
uchar i2c_ad_main; // qV1?
uchar i2c_ad_sub; // q01?
uchar *i2c_buf; //?
/¤
l

u
uchar i2c_num; //?
/¤
l
?
a
ü V[
F¥?¨?????

′
P 
a?
F¥
demo
!9
0f
a
ü
2μf
?
?¨
void i2c_start(void) //

Sê
void i2c_stop(void) //
T?ê
void i2c_ack_main(bit ack_main) //??s
a
ü ack_main=1:ack??s
ack_main=0:no_ackí3?s
void send_byte(uchar c) //?
??3?
uchar read_byte(void) //¤
l??3?
a
üNf
31
¥??s ?¨
 vf
a
ü
I2C??¤ gf
 V$?¨???¨
void send_to_byte(uchar ad_main,uchar c) //_í01? 
q?
?3?

void send_to_nbyte(uchar ad_main,uchar ad_sub,uchar
*buf,uchar num)
//_μ01? q?
3?

void read_from_byte(uchar ad_main,uchar *buf) //Ví01
? q?3?

void read_from_nbyte(uchar ad_main,uchar ad_sub,uchar
*buf,uchar num)
//Vμ01? q?3?

C51??÷}

hóq <i2cbus.h>?l
#define uchar unsigned char
#define uint unsigned int
//nop·
7?
?l
#define nops()
{_nop_();_nop_();_nop_();_nop_();_nop_();}
//
gê?l V??
sbit sda=P0^0;
sbit scl=P0^1;
//
=?
?l
uchar i2c_ad_main; // qV1?
uchar i2c_ad_sub; // q01?
uchar *i2c_buf; //?
|¤
l

u
uchar i2c_num; //?
|¤
l
?
#define ack 1 //??s
#define no_ack 0 //V?s
C51?? <i2cbus.c>}
,
 i nclude <reg51.h>
 i nclude <intrins.h>
 i nclude <i2cbus.h>
//**********************************
************
//

Sê sda=1->0
void i2c_start(void){
scl=0;
sda=1;
_nop_();
scl=1;
nops();
sda=0;
nops();
scl=0;
}
//
T?ê sda=0->1
void i2c_stop(void){
scl=0;
_nop_();
sda=0;
_nop_();
scl=1;
nops();
sda=1;
nops();
scl=0;
}
//??s (c ack:sda=0
no_ack:sda=0)
void i2c_ack_main(bit ack_main){
scl=0;
if(ack_main)sda=0; //ack??s
else sda=1; //no_ackí3?s
nops();
scl=1;
nops();
scl=0;
}
//3??
??
//?
c( V[
^
9 V
^1? )
?a¤
l
V?s
//? I
nV?sê
void send_byte(uchar c){
uchar i;
for(i=0;i<8;i++){
scl=0;
if((c<<i) & 0x80)sda=1; //
?

else sda=0;
_nop_();
scl=1;
nops();
scl=0;
}
nops();
sda=1; //?
? 8bit
db9L!¤
l?sê
_nop_();
scl=1;
nops(); //sda

'
^V?sê
scl=0; //? I
nV?sê |?1 e?z
H?
}
//3?¤
l??
//¤
l q. ?¥
N???
¥ |??sf
|i2c_ack_main()
P¨
//return,uchar? 13?
uchar read_byte(void){
uchar i;
uchar c;
c=0;
scl=0;
_nop_();
sda=1; //?
L1
{ ?Z
T
for(i=0;i<8;i++){
_nop_();
scl=0; //?
HòL1?!¤
l

nops();
scl=1; //?
HòL1ú
P
L

μr
_nop_();
c<<=1;
if(sda)c+=1; //
ê|¤
l¥
i c
}
scl=0;
return c;
}
//_í01? q?
?3?

void send_to_byte(uchar ad_main,uchar c){
i2c_start();
send_byte(ad_main); //?
q1?
send_byte(c); //?
c
i2c_stop();
}
//***************************************************
//_μ01? q?
3?

void send_to_nbyte(uchar ad_main,uchar ad_sub,uchar
*buf,uchar num){
uchar i;
i2c_start();
send_byte(ad_main); //?
q1?
send_byte(ad_sub); //?
q01?
for(i=0;i<num;i++){
send_byte(*buf); //?
*buf
buf++;
}
i2c_stop();
}
//Ví01? q?3?

//function: q1?

i¤
l
u? -3?
void read_from_byte(uchar ad_main,uchar *buf){
i2c_start();
send_byte(ad_main); //?
q1?
*buf=read_byte();
i2c_ack_main(no_ack); //í3?s <no_ack=0>
i2c_stop();
}
//***************************************************
//Vμ01? q?3?

//function,
void read_from_nbyte(uchar ad_main,uchar ad_sub,uchar
*buf,uchar num){
uchar i;
i2c_start();
send_byte(ad_main);
send_byte(ad_sub);
for(i=0;i<num-1;i++){
*buf=read_byte();
i2c_ack_main(ack); //??s <ack=1>
buf++;
}
*buf=read_byte;
buf++; //'Q·???íil
"¥
^?Ta buf·_/
B1?
i2c_ack_main(no_ack); //í3?s <no_ack=0>
i2c_stop();
}
1a *

$1?"%???¨è
^
*

$1?"%?
1$'
]
H μ"%a%"D?
b
a1$'???
4%"a4$-*

$9L
La
HòL
"a"a"??1?
{ ?

"*/j"*/

E?|
{ ?

04$??
Hò
{ ?

=?
Hò
{

&95
=??
Hòê4
&95
Hê4
=?
Hò
7%%a744è÷a¤1

"(/%

E?|1
63&'èa
{ ?

"065%"D

E

{

??
; V¨? "%D

E?|V "*/j"*/
{
?? V¨? %"D
%"D

E
V "065
{
 q1?1  ? """¤1 %"Dù?
3? 4-"8)"%Dù?3? 4-"3)b
a?qè
^
!9
1a *

$1? %"???¨è
^
a???¨ ?¤è
^
a?T

T
4 4-"8 " $0," EBUB "
?£ ??s?$?
1$'¤
l
??s?1$'?
$¤
l
a èqI?
} è~ ?m
C
!9B?%"D0??X?%"
D
Xi ?
=3".)?b
!7**$ èqX
?30.74%"a
74$-a4-"a/6.#a.5%a.3% (X? èql2?xp
?lb
3
7%4".074-"
)??
ù?3?
.07.5%
)?%"D e?

7
.07)
)%"D

?.5% ?í
.07/6.#
??
3?
-$"--83/#?¨*$9L?
/3?
0??
3&5
a ?Z ?¤Z
T
*

$9L1? ?Z/
Ba*

$9L1? ?Zà
μ*

$9L2¥ q?
43".a&

130.a
"%$%"$a*0 g.$6 ( VYV4%"a4$- ?¤

]

M ?b
í*

$9L2¥ q ?-&%-$%A
U ao
a
au??9 VYV μ*

$9L2¥
*0¤ gè
^?11? ?Z qb
a qù?Z
T
*

$9L q1? 4-"ì
T ?/
%%%%%%%%
4-"
%" %" %" %" " " " 38
q%μ1?I
q??1?
 /
ò %"j%"ê q 1 ?
^ *

$9L q%μ¥1?I

qì
HüXó?¨?
1?
!?b
ó """ê??1?¨?M]1? q¥
MY b ?*

$9L
+μM]1?¥ q]
H+μ
M] q
H V¨?
q ?¤Z
Tê??"""¤7DD¤1??1?
b
? 38
.
Z_ b38
H?¤
l

38
H??

b
V è¨ *

$ q1? 4-"
? ? ?| q1? 4-" ??1?!?
1$' """38 ê
3??1? """
1$'$ """38 ê
3??1? """
1$' """38 ê
3??1? """
"5$ """38 ê
3??1? """
"5$ ""138 ê
3??1? ""
"5$ "1138 ê
3??1? "
"5$ 11138 í??1? """? b) ?
1$' """38 ê
3??1? """
1$'" """38 ê
3??1? """
4"" ""38 ê
3??1? ""
1$' "38 ê
3??1? "
1$' "38 ê
3??1? "
"%$%"$ 1$' """38 ê
3??1? """
° ?
Hò 1$' "38 ê
3??1? "
-&%-$%
z? e? 
*0 g
&

130.

3".
a¤ gè 2
*

$9L
g
{1 7
P29L
A?
?¤
 ?èE 3Q E′Yè Vê j,$ b
a9L z?
?
?? *

$9L q (1 $.04 q9L μ
@¥è
@ z?
?b
*

$9L¥è ?μ
?1 Q'
YV z
? ?Z Vr Q'b
*

$9L.
{
q1 ,CT
?éa¥
?éa¥
S1 ,CTb
a*

$9L
H?
BQ??¥
.
V?? ? 
S
4 a
?
ù?3?
4 -"38a?sa?
a?
sa …a?
a?sa??
1b
?C¤ gè
^
!9#I?
EEPROM?
o

" -,Y¨i% ?
1 EEPTOM, 訥xp?1μ
L1? ?¤xp (?C) ?L1? ?¤xpb
{
{
?C9L¤ g¥ EEPROMμ??|, ? AT24Cxx"

P

Es
R,á
 ? AT2401/02/04/08/16?
?
,  ?
 (3?
?,)
sY1 128?8/256?8/512?8/1024?8/2048?8
a¨? 2~5V¥
¥
?èa?T μ??{ú V L??a?b
AT24"
i% ?
?¨ CMOSy\?/
=?μúa,,
V?èaèHq/yTb S
1 8?? DIP
?
T,
?m
U b
1,SCL
1?
HòbN? ISO/IEC7816]?xp
P 7
^3¤
 ?èE ???¥

6
"d|

{ ??
? EEPROM q
/?
{b
2,SDA
_1?
L
P 7
^3¤
 ?è
E VD 
7
^ q,L,b
3,A0aA1aA2
q /:
ù?1?
{ ?
b
AT24C01/02???$? ?¤b 
e
AT24Cxx ( V¤ù?1?Lb
4,WP


/ 1b¤?è
ü
H V?
bWé
? / ¤úè
ü
H?

s 1 ué?
/b
5,VCC/GND
+5V¥yTèab
EEPROM?T
1,AT24C042D?¨e
AT24C04?
{ ?
 EEPROM?
F?b
?? EEPROM¥??8y\+? ?
HW1 5j10
ms ?TV??°¤ ? EEPROM5
B?3?
?1? 5~10ms?
 ?
Hü1?÷é
HW b
μ SRAM
{ ?
¥ EEPROM q  ??T
M? SRAM
¥
b
?a  ?B ? 1?
? ?
 ?
 |
?¥ ??
BQ ? EEPROM?b

¥
{ |?1 : 
¥ ?
 ?1 :
3?
bAT24C04¥:3?
1 8]¨K? 3ê
1?b? ???V:3?
H EEPROM q
¥ ??TD SRAM¥ ??TM] ??V:
3?
H?? 5~10 msa ?BQ?Tb
?? EEPROM q
u ?
?l (o] K? 3
ê ) O? !néê_??

[Vd
,1
? ? 8?3?
V
,1? ??V 8?3?
?
?1?J ?á ?pb
2,
!!1? (DADDR)
AT24C04xx¥ q1?
^ 1010b
3,AT24Cxx¥
?Tì
T
IIC9L?, AT24C04
=?i%?í
"
1ó q¥
!!1? (DADDR)
?,?·?¥:
1? (PADDR)b

?F??T1? (OPADDR) ?/
1010 A2 A1 – R/W (“–”1ír )
"d??? A2A1A01 000yN"d V
ù? AT24C04 ??:

4Kêb?v
AT24C04 q
m¨1? (ADDR"1010
A2 A1–R/W)?¥
?Tì
T ?/
(1)  ??Tì
T
?iB?3??1? ADDR_W 
H
?m ?m
U  ??Tì
T1
START_C OPADDR_W ACK ADDR_W
ACK data ACK STOP_C
V1?
V1?
ADDR_W  ?? | n?3? (]B
:
) 
H?m ?m
U, |ì
T1
START_C OPADDR_W ACK
ADDR_W ACK data1 ACK data2
ACK...datan ACK STOP_C
(2) ?Tì
T
V ?i1? ADDR_RB?3?¥
H?
m ?m
U?Tì
T1
START_C OPADDR_W ACK ADDR_R
ACK OPADDR_R ACK data STOP_C
V1?
V1?
ADDR_R  ?? n?3? (]B
:
) 
H?m ?m
U ?Tì
T1
START_C OPADDR_R ACK data1 ACK
data2 ACK,.,datan ACK STOP_C
 ?i1??T?"
?
1?
?1?
:
1? (PADDR)
yN ?? 72?3??T -1é
? 1?3? PADDR ??T ?a×? ?
?Tb
?i?T??a
àμ ACKb
I?
1,I/O
g IIC?
!?

ì?¨ PF0 g PF1 gyT? 2?

T/sYT1 IIC9L¥ SCL

SDAD
24LC04BM ?b
yN31
!? PF0

PF1yT? 2?

T/b?¨[/? 
rPCONF |= 0xa; //PF0:IICSCL,PF1:IICSDA
rPUPF |= 0x3; //pull-up disable
2,IIC?
P
??
^?¨?¥Z
T
3
?3?¥
.
{
^???b
yN31?l?) ??? ? gi O
P
?b?¨[/? 
LC
pISR_IIC= (unsigned)IIC_Int;
//|
|
IIC ?) ???·?·_ IIC_Int
rINTMSK= ~ (BIT_GLOBAL|BIT_IIC);
//
P
?
3,
S IIC ¤ g
 IICCON é?
!?
rIICCON = (1<<7) | (0<<6 ) | (1<<5) | (0xf );
//
P
ACK¥á
3,IICCLK=MCLK/16,
P
?
/¤
l? b" pending ê[LY?
//? Tx clock"
64MHz/16/
15+1
= 250KHz
4,_ 24LC04B? ?
0??
#define IICBUFSIZE 0x20
U8 _iicData[IICBUFSIZE]; //
i
volatile int _iicDataCount; //
é
volatile int _iicStatus;
volatile int _iicMode;
int _iicPt;
void Wr24LCxx(U32 slvAddr,U32 addr,U8 data)
{
_iicMode=WRDATA; //


T
_iicPt=0;
_iicData[0]=(U8)addr; //3? ?

T

T
? I??
= ?
_iicData[1]=data;
_iicDataCount=2;
rIICDS=0xa0 // e?3?
rIICSTAT=0xf0; //?
!!?

Tá
3 
SHq
P
?
/¤
l
while(_iicDataCount != -1);
_iicMode=POLLACK;
while(1)
{
rIICDS=slvAddr;
_iicStatus=0x100;
rIICSTAT=0xf0; //MasTx,Start
rIICCON=0xaf; //resumes IIC operation.
while(_iicStatus==0x100);
if(!(_iicStatus&0x1))
break; // ??¤
l?
??¤
l?
ACK
}
rIICSTAT=0xd0; //á
3T?Hq
rIICCON=0xaf; //
db IIC ?T
Delay(1); }
5,V
V
24LC04B
0??
void Rd24LCxx(U32 slvAddr,U32 addr,U8 *data)
{
_iicMode=SETRDADDR;
_iicPt=0;
_iicData[0]=(U8)addr;
_iicDataCount=1;
rIICDS=slvAddr;
rIICSTAT=0xf0; //MasTx,Start
while(_iicDataCount != -1);
_iicMode=RDDATA;
_iicPt=0;
_iicDataCount=1;
rIICDS=slvAddr;
rIICSTAT=0xb0; //MasRx,Start
rIICCON=0xaf; //resumes IIC operation.
while(_iicDataCount != -1);
*data=_iicData[1];
}
6,IIC?) ?0??
void __irq IIC_Int (void)
{
U32 iicSt,i ;
rI_ISPC=BIT_IIC; // b"pending ê
iicSt=rIICSTAT; // ? IIC 9L? -
[
Lé?ò?p) ?
if(iicSt&0x8){} // when bus arbitration is failed.
if(iicSt&0x4){} // when a slave address is
matched with IICADD
if(iicSt&0x2){} // when a slave address is
0000000b
if(iicSt&0x1){} // when ACK isn't received
switch(_iicMode) //? ? -?T

Té?M?) ?
{
case POLLACK,//?? ACK

T
_iicStatus=iicSt; // ? IICSTAT?
?
0 êV
U
^?

l?

l?
ACK
break;
case RDDATA,//


T
if((_iicDataCount --)==0) //o1 | 1 3?

{
_iicData[_iicPt++]=rIICDS;
rIICSTAT=0x90; //T??
!! |

T
rIICCON=0xaf; //
db IIC ?T
Delay(1); //??°?T?Hq T¨
break;
}
_iicData[_iicPt++]=rIICDS;
//??

KaB?3??

3 ACK
if((_iicDataCount)==0) // ?T?



KaB?3
?
rIICCON=0x2f; // á
3 NOACK.
db IIC ?T
else
rIICCON=0xaf; // á
3 ACK
db IIC ?T
break;
case WRDATA,//


T
if((_iicDataCount--)==0) // ?T
?
{
rIICSTAT=0xd0; //T??
!!?
.
{
rIICCON=0xaf; //ˉ

IIC ?T
Delay(1); //??°?T?Hq r
break;
}
rIICDS=_iicData[_iicPt++]; //_iicData[0] has dummy.
for(i=0;i<10;i++);
//for setup time until rising edge of IICSCL
rIICCON=0xaf; //
db IIC 9L?T
break;
case SETRDADDR,//
!?1?

T
//Uart_Printf("[S%d]",_iicDataCount);
if((_iicDataCount--)==0)
{
break;
//IIC operation is stopped because of IICCON[4]
}
rIICDS=_iicData[_iicPt++]
for(i=0;i<10;i++);
//for setup time until rising edge of IICSCL
rIICCON=0xaf; //
db IIC 9L?T
break;
default:
break;
}
}
L
? IIC
L
? 
Sê SCL"1
H SDA
μ/?ü
? T?ê SCL"1
H SDA
μ

6ü
? 

H,?s¥ q???
Hò?
ù|
SDAL ??V
UX
l?B? 8ê
,iV
U V??¤
lb?_VB3?a

lV?sé?a??T (B?? I
n
V?sê¥ 8′??s_?
H¨?
V q
^??? 
=??
ù )
? 

H,?

lVB?3?
(?
^Ka
B? )Rí??s ACK(SDA=0)
?
^KaB?3?
HRíí3?s NO_ACK
SDA
"1
? ?VyT?

T
H_??
B? 8ê
a
db SDALiS
jB??s?|B?¤
l
??¥?s?|V???
 ?? 
q
àμ?
?s?|VT?.
i??
B?T??|? qA??B?T??|óV

P é ?!¨è÷

Ti
P q)?X?¥