|
/*
程序說明: IIC總線驅(qū)動程序
軟件環(huán)境: Keil uVision 4.10
硬件環(huán)境: CT107單片機綜合實訓(xùn)平臺 8051,12MHz
日 期: 2011-8-9
*/
#include "reg52.h"
#include "intrins.h"
#define DELAY_TIME 5
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
//總線引腳定義
sbit SDA = P2^1; /* 數(shù)據(jù)線 */
sbit SCL = P2^0; /* 時鐘線 */
void IIC_Delay(unsigned char i)
{
do{_nop_();}
while(i--);
}
//總線啟動條件
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 0;
}
//總線停止條件
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
IIC_Delay(DELAY_TIME);
SDA = 1;
IIC_Delay(DELAY_TIME);
}
//發(fā)送應(yīng)答
void IIC_SendAck(bit ackbit)
{
SCL = 0;
SDA = ackbit; // 0:應(yīng)答,1:非應(yīng)答
IIC_Delay(DELAY_TIME);
SCL = 1;
IIC_Delay(DELAY_TIME);
SCL = 0;
SDA = 1;
IIC_Delay(DELAY_TIME);
}
//等待應(yīng)答
bit IIC_WaitAck(void)
{
bit ackbit;
SCL = 1;
IIC_Delay(DELAY_TIME);
ackbit = SDA;
SCL = 0;
IIC_Delay(DELAY_TIME);
return ackbit;
}
//通過I2C總線發(fā)送數(shù)據(jù)
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0; i<8; i++)
{
SCL = 0;
IIC_Delay(DELAY_TIME);
if(byt & 0x80) SDA = 1;
else SDA = 0;
IIC_Delay(DELAY_TIME);
SCL = 1;
byt <<= 1;
IIC_Delay(DELAY_TIME);
}
SCL = 0;
}
//從I2C總線上接收數(shù)據(jù)
unsigned char IIC_RecByte(void)
{
unsigned char i, da;
for(i=0; i<8; i++)
{
SCL = 1;
IIC_Delay(DELAY_TIME);
da <<= 1;
if(SDA) da |= 1;
SCL = 0;
IIC_Delay(DELAY_TIME);
}
return da;
}
|
-
-
iic.rar
2019-3-21 09:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
966 Bytes, 下載次數(shù): 3, 下載積分: 黑幣 -5
|