a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 專題 > I2C串行總線標準驅動程序(C51)-萬能程序

I2C串行總線標準驅動程序(C51)-萬能程序

作者: 時間:2008-02-01 來源: 收藏
*------------------------------------------------------------------------------------------
[文件名] .c
[版本] 1.1b
[作者] 鞠春陽
===========================================================================================*/#include "reg51.h"
#include "intrins.h"
unsigned char SystemError;
sbit SCL= P1^6; //定義串行時鐘線所在口 使用時根據自己的需要來定義
sbit SDA= P1^7; //定義串行數據線所在口 使用時根據自己的需要來定義
#define SomeNOP(); {_nop_();_nop_();_nop_();_nop_();}
/*--------------------------------------------------------------------------------
調用方式:void AD7416_Start(void) 2003/05/04
函數說明:私有函數,專用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();//數據線保持高,時鐘線從高到低一次跳變,I2C通信開始
SDA=0; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:void AD7416_I2CStop(void) 2003/05/04
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL=0; SDA=0; SomeNOP(); //數據線保持低,時鐘線從低到高一次跳變,I2C通信停止
SCL=1; SomeNOP(); SDA=1;
EA=1;
}
/*--------------------------------------------------------------------------------
調用方式:I2CAck(void) 2003/05/13
函數說明:私有函數,I2C專用,等待從器件接收方的應答
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;
}
/*--------------------------------------------------------------------------------
調用方式:void SendAck(void) ﹫2003/05/13
函數說明:私有函數,I2C專用,主器件為接收方,從器件為發送方時,應答信號。
---------------------------------------------------------------------------------*/
void SendAck(void)
{
SDA=0; SomeNOP(); //數據線保持低,時鐘線發生一次從高低的跳變 發送一個應答信號
SCL=1; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:void SendAck(void) ﹫2003/05/13
函數說明:私有函數,I2C專用,主器件為接收方,從器件為發送方時,非應答信號。
--------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA=1; SomeNOP(); //數據線保持高,時鐘線發生一次從高低的跳變 沒有應答
SCL=1; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:void I2CSend(uchar ch) 2003/05/13
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
void I2CSendByte(Byte ch)
{
unsigned char i=8;
while (i--)
{
SCL=0;_nop_();
SDA=(bit)(ch&0x80); ch


關鍵詞: I2C 串行總線 C51

評論


相關推薦

技術專區

關閉