?? i2c_drv.c
字號:
/*C**************************************************************************
* NAME: I2C_drv.c
*----------------------------------------------------------------------------
* Copyright (c) 2006 Atmel.
*----------------------------------------------------------------------------
* RELEASE: C51 Sample
* REVISION: 1.00
*----------------------------------------------------------------------------
*
*****************************************************************************/
#include "system\reg51.h"
#include "system\compiler.h"
#include "system\config.h"
#include "Driver\io_def.h"
#include "Driver\i2c_drv.h"
/*F**************************************************************************
* NAME: I2c_ReadByte
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 從24c02的地址address中讀取一個(gè)字節(jié)數(shù)據(jù)
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte I2c_ReadByte (Byte address)
{
Byte bTemp = 0x00;
I2c_start();
I2c_getLSB(I2C_ID0);
I2c_getLSB(address);
I2c_start();
I2c_getLSB(I2C_ID1);
bTemp = I2c_scanLSB();
I2c_ack();
I2c_stop();
return(bTemp);
}
/*F**************************************************************************
* NAME: I2c_WriteByte
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 向24c02的address地址中寫入一字節(jié)數(shù)據(jù)info
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_WriteByte (Byte address, Byte bByte)
{
I2c_start();
I2c_getLSB(address);
I2c_getLSB(bByte);
I2c_stop();
}
/*F**************************************************************************
* NAME: I2c_scanLSB
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
Byte I2c_scanLSB (void)
{
Byte i;
char bByte = 0x00,temp;
for (i=0; i<8; i++){
ISCL = High;
I2c_wait();
if (DTS_DIN){
temp = 0x01;
temp <<= i;
bByte |= temp;
}
ISCL = Low;
I2c_wait();
}
return (bByte);
}
/*F**************************************************************************
* NAME: I2c_getLSB
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_getLSB (Byte bByte)
{
Byte i;
for (i=0; i<8; i++)
{
if (bByte & 0x80) ISDA = High;
else ISDA = Low;
bByte <<= 1;
I2c_wait();
ISCL = High;
I2c_wait();
ISCL = Low;
I2c_wait();
}
ISDA = High;
I2c_wait();
ISCL = High;
I2c_wait();
I2c_wait();
ISCL = Low;
I2c_wait();
}
/*F**************************************************************************
* NAME: I2c_start
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_start (void)
{
ISDA = High;
ISCL = High;
I2c_wait();
ISDA = Low;
I2c_wait();
ISCL = Low;
}
/*F**************************************************************************
* NAME: I2c_stop
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_stop (void)
{
ISDA = Low;
I2c_wait();
ISCL = High;
I2c_wait();
ISDA = High;
I2c_wait();
}
/*F**************************************************************************
* NAME: I2c_ack
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_ack (void)
{
ISDA = Low;
I2c_wait();
ISDA = High;
I2c_wait();
}
/*F**************************************************************************
* NAME: I2c_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_init (void)
{
ISDA = High;
I2c_wait();
ISCL = High;
I2c_wait();
}
/*F**************************************************************************
* NAME: I2c_wait
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void I2c_wait (void)
{
char i;
for(i=0; i<2; i++){
i = i;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -