亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版
標題:
I2C通信協議時序解讀
[打印本頁]
作者:
benbens
時間:
2015-7-15 02:14
標題:
I2C通信協議時序解讀
void IIC_Strat(void) //起始條件
{
SDA=1; /*當SCL為高電平時SDA的下降沿(從高到低)--START*/
SCL=1;
SDA=0;
SCL=0;
}
void IIC_Stop(void) //終止條件
{
SDA=0; /*當SCL為高電平時SDA的上降沿(從高到低)--STOP*/
SCL=1;
SDA=1;
SCL=0;
}
/*接收器拉低SDA線表示應答,并在應答脈沖期間保持穩定的低電平。當主器件作接收器時,必須發出數據傳輸結束的信號給發送器,即它在最后一個字節之后的應答脈沖期間不會產生應答信號(不拉低SDA)。這種情況下,發送器必須釋放SDA線為高以便產生停止條件*/
void IIC_Ack(void) //主器件接收應答
{
SDA=0;
SCL=1;
SDA=1;
}
void IIC_NoAck(void) //主器件接收非應答
{
SDA=1;
SCL=1;
SDA=0;
}
void IIC_WriteByte(uchar date) //單字節寫
{
uchar i;
for(i=0;i<8;i++)
{
if((date<<i)&0x80) SDA=1;
else SDA=0;
SCL=1;
SCL=0;
}
SDA=1;
SCL=1;
if(SDA==0) ack=1; /*從器件應答,接收器在收到一個字節后就會產生一個應答信號(拉低SDA),這里是檢測接收器是否收到數據*/
else ack=0;
SCL=0;
}
bit IIC_PegeWrite(uchar add,uchar add_x,uchar *str,uchar num) //頁寫
{
uchar i;
IIC_Strat();
IIC_WriteByte(add);
if(ack==0) return 0; //從器件應答信號
IIC_WriteByte(add_x);
if(ack==0) return 0;
for(i=0;i<num;i++)
{
IIC_WriteByte(*str);
if(ack==0) return 0;
str++;
}
IIC_Stop();
return 1;
}
/*在讀操作中小編采用的是"序列讀(Sequential Read)",但在"序列讀"中采用的是通過"隨機讀(Random Read)"啟動的,也可以嘗試采用"當前地址讀"*/
uchar IIC_ReadByte(void) //單字節讀
{
uchar i;
uchar value;
SDA=1;
for(i=0;i<8;i++)
{
SCL=0;
SCL=1;
value<<=1;
if(SDA) value|=0x01;
}
SCL=1;
return value;
}
bit IIC_SequenceRead(uchar add,uchar add_x,uchar *str,uchar num) //順序讀
{
uchar i;
IIC_Strat();
IIC_WriteByte(add);
if(ack==0) return 0;
IIC_WriteByte(add_x);
if(ack==0) return 0;
IIC_Strat();
IIC_WriteByte(add+1);
if(ack==0) return 0;
for(i=0;i<num-1;i++)
{
*str=IIC_ReadByte();
IIC_Ack(); //主器件應答
str++;
}
*str=IIC_ReadByte();
IIC_NoAck(); //主器件非應答
IIC_Stop();
return 1;
}
作者:
917106794
時間:
2019-12-13 15:25
樓主好人,很有幫助,多謝分享
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1