unsigned char I2cSendByte(unsigned char dat)
{
unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。
for(a=0;a<8;a++)//要发送8位,从最高位开始
{
SDA=dat>>7; //起始信号之后SCL=0,所以可以直接改变SDA信号
dat=dat<<1;
Delay10us();
SCL=1;
Delay10us();//建立时间>4.7us
SCL=0;
Delay10us();//时间大于4us
}
unsigned char I2cReadByte()
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
请问这发送的过程是不是 主机发送DAT这个数据 然后通过SDA的数据线给到从机,那这时不用像读取函数那样先给SDA=1吗?
读取函数这个的过程 是不是从机通SDA给到主机数据DATA 那这一步dat<<=1; dat|=SDA;什么意思 将data 0000 0000 变为1111 1111 ?, |