?? i2c_s.c
字號(hào):
#include<REG66x.H>
/* 主器件函數(shù)庫(kù) */
/*******************************************
設(shè)置總線函數(shù)
用于設(shè)置I2C控制寄存器,包括總線時(shí)鐘,速率及從地址.不接受廣播地址
********************************************/
void setbus(unsigned char addr)
{
S1ADR=addr&0xfe; // 設(shè)置從地址,屏蔽高7位即廣播地址響應(yīng)位復(fù)位
S1CON=0XC5; // 啟動(dòng)硬件I2C
}
/*******************************************
接收數(shù)據(jù)
讀取總線傳來(lái)的字節(jié)數(shù)據(jù)并發(fā)送應(yīng)答位.
正常接收返回1,此時(shí)讀入的數(shù)據(jù)寫入變量c.
接收到總線結(jié)束信號(hào)或重新啟動(dòng)總線信號(hào)時(shí)返回0,此時(shí)不破壞變量c的數(shù)據(jù)
********************************************/
bit recvbyte(unsigned char *c)
{
S1CON = 0XC5; // 清除標(biāo)志位
while(SI == 0); // 放開(kāi)總線等待接收
if(S1STA == 0xa0)
{
S1CON = 0XC5; // 先放開(kāi)總線再返回0
return 0;
}
*c = S1DAT; // 取數(shù)據(jù)
return 1;
}
/*******************************************
發(fā)送數(shù)據(jù)
向總線發(fā)送數(shù)據(jù)c,當(dāng)接收到非應(yīng)答位時(shí)返回0,否則返回1
********************************************/
bit sendbyte(unsigned char c)
{
if(S1STA == 0xc0)
{
S1CON = 0XC5;
return 0;
}
S1DAT = c; // 發(fā)送數(shù)據(jù)
S1CON = 0XC5; // 釋放總線
while(SI == 0); // 等待字節(jié)數(shù)據(jù)發(fā)送完成
return 1;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -