Datasheet
PIC16C6X
DS30234E-page 104 1997-2013 Microchip Technology Inc.
FIGURE 11-27: OPERATION OF THE I
2
C MODULE IN IDLE_MODE, RCV_MODE OR XMIT_MODE
IDLE_MODE (7-bit):
if (Addr_match) { Set interrupt;
if (R/W
= 1) { Send ACK = 0;
set XMIT_MODE;
}
else if (R/W
= 0) set RCV_MODE;
}
RCV_MODE:
if ((SSPBUF=Full) OR (SSPOV = 1))
{ Set SSPOV;
Do not acknowledge;
}
else { transfer SSPSR SSPBUF;
send ACK
= 0;
}
Receive 8-bits in SSPSR;
Set interrupt;
XMIT_MODE:
While ((SSPBUF = Empty) AND (CKP=0)) Hold SCL Low;
Send byte;
Set interrupt;
if ( ACK
Received = 1) { End of transmission;
Go back to IDLE_MODE;
}
else if ( ACK
Received = 0) Go back to XMIT_MODE;
IDLE_MODE (10-Bit):
If (High_byte_addr_match AND (R/W
= 0))
{ PRIOR_ADDR_MATCH = FALSE;
Set interrupt;
if ((SSPBUF = Full) OR ((SSPOV = 1))
{ Set SSPOV;
Do not acknowledge;
}
else { Set UA = 1;
Send ACK
= 0;
While (SSPADD not updated) Hold SCL low;
Clear UA = 0;
Receive Low_addr_byte;
Set interrupt;
Set UA = 1;
If (Low_byte_addr_match)
{ PRIOR_ADDR_MATCH = TRUE;
Send ACK
= 0;
while (SSPADD not updated) Hold SCL low;
Clear UA = 0;
Set RCV_MODE;
}
}
}
else if (High_byte_addr_match AND (R/W
= 1)
{ if (PRIOR_ADDR_MATCH)
{ send ACK
= 0;
set XMIT_MODE;
}
else PRIOR_ADDR_MATCH = FALSE;
}
Applicable Devices
61 62 62A R62 63 R63 64 64A R64 65 65A R65 66 67