|
歡迎指出錯(cuò)誤或提出問(wèn)題。此例為例程解釋的一點(diǎn)錯(cuò)誤,請(qǐng)以紅色說(shuō)明文字為準(zhǔn)。書(shū)上193頁(yè)說(shuō)明:每一位的寫(xiě)入是用時(shí)鐘上升沿同步數(shù)據(jù),也就是說(shuō)時(shí)鐘上升沿后從器件(指24C02)開(kāi)始檢測(cè)輸入的數(shù)據(jù),每一位的讀取是用時(shí)鐘下降沿同步數(shù)據(jù),也就是說(shuō)時(shí)鐘下降沿后從器件開(kāi)始輸出數(shù)據(jù)。
下面是例程代碼。
//*********************************************************************
// 功能描述:主設(shè)備向從設(shè)備發(fā)送個(gè)一字節(jié)
// 返回值: 0->成功 1->失敗
//*********************************************************************/
unsigned char IIC_SendByte(unsigned char Data)
{
unsigned char i; // 位數(shù)控制
for (i=0;i<8;i++) // 寫(xiě)入時(shí)是用時(shí)鐘上升沿同步數(shù)據(jù)
{
if (Data & 0x80)
SDA = 1;
else
SDA = 0;
delay(tt); // 保持0.2uS以上(TSU.DAT)
SCL = 1;
delay(tt); // 保持4.0uS以上(THIGH)
SCL = 0;
delay(tt); // 保持4.7uS以上(TLOW)
Data <<= 1;
}
return IIC_GetACK();
}
//*********************************************************************
// 功能描述:主設(shè)備向從設(shè)備讀取一個(gè)字節(jié)
// 返回值: 讀到的字節(jié)
// *********************************************************************/
unsigned char IIC_RecByte(void) // 接收單字節(jié)的數(shù)據(jù),并返回該字節(jié)值
{
unsigned char i,rbyte=0;
SDA=1;
for(i=0;i<8;i++) // 讀出時(shí)是用時(shí)鐘下降沿同步數(shù)據(jù)
{
SCL=0;
delay(tt); // 保持4.7uS以上(TLOW)
SCL=1;
delay(tt); // 保持4.0uS以上(THIGH)
if(SDA) rbyte|=(0x80>>i);
}
SCL=0;
return rbyte;
}
|
|