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