?? iic_pca8574.c
字號(hào):
#include<reg51.h>
#include"Config.h"
#include"IOCfg.c"
#include"TimeDLY.h"
#include"IIC_PCA8574.h"
//IC起始信號(hào):
void StartIIC(void)
{
IIC_SDA = 1;
nNop(20);
IIC_SCL = 1;
nNop(20);
IIC_SDA = 0;
nNop(20);
IIC_SCL = 0;
//nNop(50);
}
//IIC停止信號(hào):
void StopIIC(void)
{
IIC_SDA = 0;
nNop(20);
IIC_SCL = 1;
nNop(20);
IIC_SDA = 1;
nNop(50);
}
//讀取從機(jī)應(yīng)答信號(hào)函數(shù):
bit GetACK(void)
{
bit ack;
IIC_SDA = 1;
IIC_SCL = 1;
nNop(50);
ack = IIC_SDA;
IIC_SCL = 0;
nNop(50);
return(ack);
}
//向IIC總線發(fā)出應(yīng)答信號(hào)函數(shù):
void PutACK(bit ack)
{
IIC_SDA = ack;
IIC_SCL = 1;
nNop(50);
IIC_SCL = 0;
nNop(50);
}
//初始化IIC總線函數(shù):
void InitIIC(void)
{
IIC_SCL = 1;
nNop(10);
IIC_SDA = 1;
nNop(50);
}
//功能向IIC總線寫一字節(jié)數(shù)據(jù)函數(shù):
void IIC_WriteByte(INT8U temp)
{
INT8U i;
for(i=0;i<8;i++)
{
IIC_SDA = (bit)(temp & 0x80);
temp = temp << 1;
nNop(20);
IIC_SCL = 1;
nNop(20);
IIC_SCL = 0;
//nNop(50);
}
}
//從IIC總線讀一字節(jié)數(shù)據(jù)函數(shù):
INT8U IIC_ReadByte(void)
{
INT8U i;
INT8U temp;
IIC_SDA = 1;
for(i=0;i<8;i++)
{
temp = temp << 1;
IIC_SCL = 1;
while(IIC_SDA) temp++;
IIC_SCL = 0;
nNop(20);
}
return(temp);
}
//向PCA8574寫一字節(jié)數(shù)據(jù)函數(shù):
bit PCA8574_PutOne(INT8U SlaveAddr,INT8U dat)
{
//確保從機(jī)地址最低位是0
SlaveAddr &= 0xfe;
//啟動(dòng)I2C總線
StartIIC();
//發(fā)送數(shù)據(jù)
IIC_WriteByte(dat);
if ( GetACK() )
{
StopIIC();
return 1;
}
//發(fā)送完畢,停止I2C總線,返回
StopIIC();
return 0;
}
//從PCA8574讀一字節(jié)數(shù)據(jù)函數(shù):
bit PCA8574_GetOne(INT8U SlaveAddr,INT8U dat)
{
while(IIC_INT!=0);
SlaveAddr |= 0x01;
//啟動(dòng)I2C總線
StartIIC();
//發(fā)送從機(jī)地址
IIC_WriteByte(SlaveAddr);
if ( GetACK() )
{
StopIIC();
return 1;
}
//接收數(shù)據(jù)
dat = IIC_ReadByte();
PutACK(1);
//接收完畢,停止I2C總線,返回
StopIIC();
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -