新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 專題 > I2C串行總線標(biāo)準(zhǔn)驅(qū)動程序(C51)-萬能程序

I2C串行總線標(biāo)準(zhǔn)驅(qū)動程序(C51)-萬能程序

作者: 時間:2008-02-01 來源: 收藏
*------------------------------------------------------------------------------------------
[文件名] .c
[版本] 1.1b
[作者] 鞠春陽
===========================================================================================*/#include "reg51.h"
#include "intrins.h"
unsigned char SystemError;
sbit SCL= P1^6; //定義串行時鐘線所在口 使用時根據(jù)自己的需要來定義
sbit SDA= P1^7; //定義串行數(shù)據(jù)線所在口 使用時根據(jù)自己的需要來定義
#define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();}
/*--------------------------------------------------------------------------------
調(diào)用方式:void AD7416_Start(void) 2003/05/04
函數(shù)說明:私有函數(shù),專用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();//數(shù)據(jù)線保持高,時鐘線從高到低一次跳變,I2C通信開始
SDA=0; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void AD7416_I2CStop(void) 2003/05/04
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL=0; SDA=0; SomeNOP(); //數(shù)據(jù)線保持低,時鐘線從低到高一次跳變,I2C通信停止
SCL=1; SomeNOP(); SDA=1;
EA=1;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:I2CAck(void) 2003/05/13
函數(shù)說明:私有函數(shù),I2C專用,等待從器件接收方的應(yīng)答
ACK BY AD7416
---------------------------------------------------------------------------------*/
WaitAck(void)
{
unsigned char errtime=255;//因故障接收方無ACK,超時值為255。
SDA=1;
SCL=1;
SystemError=0x10;
while(SDA)
{ errtime--;
if(!errtime)
{ AD7416_I2CStop();
AD7416_SystemError=0x11; //出錯后給全局變量賦值
return;
}
}
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void SendAck(void) ﹫2003/05/13
函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時,應(yīng)答信號。
---------------------------------------------------------------------------------*/
void SendAck(void)
{
SDA=0; SomeNOP(); //數(shù)據(jù)線保持低,時鐘線發(fā)生一次從高低的跳變 發(fā)送一個應(yīng)答信號
SCL=1; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void SendAck(void) ﹫2003/05/13
函數(shù)說明:私有函數(shù),I2C專用,主器件為接收方,從器件為發(fā)送方時,非應(yīng)答信號。
--------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA=1; SomeNOP(); //數(shù)據(jù)線保持高,時鐘線發(fā)生一次從高低的跳變 沒有應(yīng)答
SCL=1; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調(diào)用方式:void I2CSend(uchar ch) 2003/05/13
函數(shù)說明:私有函數(shù),I2C專用
---------------------------------------------------------------------------------*/
void I2CSendByte(Byte ch)
{
unsigned char i=8;
while (i--)
{
SCL=0;_nop_();
SDA=(bit)(ch&0x80); ch


關(guān)鍵詞: I2C 串行總線 C51

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉