資源簡介
I2C軟件模擬時序,獨立文件,可以直接調用,移植性高,只需修改數(shù)據(jù)時鐘線
代碼片段和文件信息
sbit ??SCL=P1^0;??????//IIC時鐘引腳定義
sbit? ??SDA=P1^1;??????//IIC數(shù)據(jù)引腳定義
#define???uchar?unsigned?char
#define???uint?unsigned?int
#define SlaveAddress???0xA6 ??//定義器件在IIC總線中的從地址根據(jù)ALT??ADDRESS地址引腳不同修改
??????????????????????????????//ALT??ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3A
typedef?unsigned?char??BYTE;
typedef?unsigned?short?WORD;
void?Delay5us()
{
????_nop_();_nop_();_nop_();_nop_();
????_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void?Delay5ms()
{
????WORD?n?=?560;
????while?(n--);
}
void?I2C_Start()
{
????SDA?=?1;????????????????????//拉高數(shù)據(jù)線
????SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????SDA?=?0;????????????????????//產生下降沿
????Delay5us();?????????????????//延時
????SCL?=?0;????????????????????//拉低時鐘線
}
void?I2C_Stop()
{
????SDA?=?0;????????????????????//拉低數(shù)據(jù)線
????SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????SDA?=?1;????????????????????//產生上升沿
????Delay5us();?????????????????//延時
}
void?I2C_SendACK(bit?ack)
{
????SDA?=?ack;??????????????????//寫應答信號
????SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????SCL?=?0;????????????????????//拉低時鐘線
????Delay5us();?????????????????//延時
}
bit?I2C_RecvACK()
{
????SCL?=?1;????????????????????//拉高時鐘線
????Delay5us();?????????????????//延時
????CY?=?SDA;???????????????????//讀應答信號
????SCL?=?0;????????????????????//拉低時鐘線
????Delay5us();?????????????????//延時
????return?CY;
}
void?I2C_SendByte(BYTE?dat)
{
????BYTE?i;
????for?(i=0;?i<8;?i++)?????????//8位計數(shù)器
????{
????????dat?<<=?1;??????????????//移出數(shù)據(jù)的最高位
????????SDA?=?CY;???????????????//送數(shù)據(jù)口
????????SCL?=?1;????????????????//拉高時鐘線
????????Delay5us();?????????????//延時
????????SCL?=?0;????????????????//拉低時鐘線
????????Delay5us();?????????????//延時
????}
????ADXL345_RecvACK();
}
BYTE?I2C_RecvByte()
{
????BYTE?i;
????BYTE?dat?=?0;
????SDA?=?
評論
共有 條評論