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