?? i2c.lst
字號:
226 1 I2C_SET_CLK(LOW);
227 1 I2C_LOW;
228 1
229 1 return( fResult );
230 1 } /* I2C_GetACK */
231
232
233 /* -------------------------------------------------------------------
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 5
234 Name: I2C_Init -
235 Purpose: .
236 Passed: None.
237 Returns: None.
238 Notes:
239 ------------------------------------------------------------------- */
240 void I2C_Init (void)
241 {
242 1 I2C_SET_DAT(HIGH);
243 1 I2C_SET_CLK(HIGH);
244 1 } /* I2C_Init */
245
246
247 #if (I2C_RX_BURST)
/* -------------------------------------------------------------------
Name: I2C_RxBurst -
Purpose: To receive bulk data from I2C slave device.
Passed:
bIdx: 1..255. (Excludes slave address and sub-address)
Returns: None.
Notes:
The bSLA should be the slave device's 'WRITE' module addres,
not 'READ' one.
------------------------------------------------------------------- */
void I2C_RxBurst (
UB8 bSLA, /* I2C slave address */
UB8 bREG, /* I2C sub-address */
UB8 bCNT, /* The number of data which will be transmitted */
UB8 *pbDATA /* Point to the first DATA item */
)
{
UB8 bIdx;
I2C_Start();
/* --------------------------------
Write
-------------------------------- */
I2C_TxData(bSLA);
I2C_GetACK();
I2C_TxData(bREG);
I2C_GetACK();
/* --------------------------------
Read
-------------------------------- */
I2C_Start();
I2C_TxData(bSLA | 0x01);
I2C_GetACK();
for (bIdx = 0; bIdx < (bCNT - 1); bIdx++)
{
*pbDATA++ = I2C_RxData();
I2C_SetACK();
} /* for */
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 6
/* --------------------------------
Last Read
-------------------------------- */
*pbDATA = I2C_RxData();
I2C_SetNAK();
I2C_Stop();
} /* I2C_RxBurst */
#endif
305
306
307 #if (I2C_RX_BYTE)
/* -------------------------------------------------------------------
Name: I2C_RxByte -
Purpose: To receive one byte data from I2C slave device.
Passed:
UB8 bSLA, I2C slave address
UB8 bREG I2C sub-address
Returns:
One byte received data.
Notes:
The bSLA should be the slave device's 'WRITE' mode address,
not 'READ' one.
------------------------------------------------------------------- */
UB8 I2C_RxByte (
UB8 bSLA, /* I2C slave address */
UB8 bREG /* I2C sub-address */
)
{
UB8 bDATA;
I2C_Start();
/* --------------------------------
Write
-------------------------------- */
I2C_TxData(bSLA);
I2C_GetACK();
I2C_TxData(bREG);
I2C_GetACK();
/* --------------------------------
Read
-------------------------------- */
I2C_Start();
I2C_TxData(bSLA | 0x01);
I2C_GetACK();
/* --------------------------------
Last Read
-------------------------------- */
bDATA = I2C_RxData();
I2C_SetNAK();
I2C_Stop();
return( bDATA );
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 7
} /* I2C_RxByte */
#endif
360
361
362 /* -------------------------------------------------------------------
363 Name: I2C_RxData -
364 Purpose:
365 To do I2C parallel serial conversion for reception.
366 Passed: None.
367 Returns:
368 Notes:
369 ------------------------------------------------------------------- */
370 UB8 I2C_RxData (void)
371 {
372 1 UB8 bResult;
373 1 UB8 bMask;
374 1
375 1
376 1 bResult = 0x00; /* Clear value */
377 1
378 1 I2C_SET_DAT(HIGH);
379 1
380 1 /* MSB is read first */
381 1 for (bMask = 0x80; bMask; bMask >>= 1)
382 1 {
383 2 I2C_SET_CLK(HIGH);
384 2 I2C_HIGH;
385 2
386 2 if ( I2C_GET_DAT_HIGH )
387 2 bResult |= bMask;
388 2
389 2 I2C_SET_CLK(LOW);
390 2 } /* for */
391 1
392 1 return( bResult );
393 1 } /* I2C_RxData */
394
395
396 #if (I2C_RX_WORD)
/* -------------------------------------------------------------------
Name: I2C_RxWord -
Purpose: To receive one WORD data from I2C slave device.
Passed:
Returns: one WORD data.
Notes:
1) Only for little-endian storage format devices !!!
2) Keil C51 uses *big-endian* storage format. [1]144
------------------------------------------------------------------- */
UW16 I2C_RxWord (
UB8 bSLA, /* I2C slave address */
UB8 bREG /* I2C sub-address */
)
{
UW16 wDATA;
I2C_Start();
/* --------------------------------
Write
-------------------------------- */
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 8
I2C_TxData(bSLA);
I2C_GetACK();
I2C_TxData(bREG);
I2C_GetACK();
/* --------------------------------
Read
-------------------------------- */
I2C_Start();
I2C_TxData(bSLA | 0x01);
I2C_GetACK();
/* --------------------------------
Last Read
-------------------------------- */
wDATA = I2C_RxData();
I2C_SetACK();
wDATA = (I2C_RxData() << 8) + wDATA;
I2C_SetNAK();
I2C_Stop();
return( wDATA );
} /* I2C_RxWord */
#endif
449
450
451 /* -------------------------------------------------------------------
452 Name: I2C_SetACK -
453 Purpose: .
454 Passed: None.
455 Returns: None.
456 Notes:
457 ------------------------------------------------------------------- */
458 void I2C_SetACK (void)
459 {
460 1 I2C_SET_DAT(LOW);
461 1 I2C_SU_DAT; // Added by JC 01:53PM 2005/11/23
462 1
463 1 I2C_SET_CLK(HIGH);
464 1 I2C_HIGH;
465 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -