#define sda 254 //定義sda所對應的gpio介面編號
#define scl 255 //定義scl所對應的gpio介面編號
#define outp 1 //表示gpio介面方向為輸出
#define inp 0 //表示gpio介面方向為輸入
/* i2c起始條件 */
int i2c_start()
/* i2c終止條件 */
void i2c_stop()
/*
i2c讀取ack訊號(寫資料時使用)
返回值 :0表示ack訊號有效;非0表示ack訊號無效
*/
unsigned char i2c_read_ack()
/* i2c發出ack訊號(讀資料時使用) */
int i2c_send_ack()
/* i2c位元組寫 */
void i2c_write_byte(unsigned char b)
i2c_send_ack(); //向目標裝置傳送ack訊號
return r;
} /*
i2c讀操作
buf:讀緩衝區
len:讀入位元組的長度
*/
void i2c_read(unsigned char addr, unsigned char* buf, int len)
{ int i;
unsigned char t;
i2c_start(); //起始條件,開始資料通訊
//傳送位址和資料讀寫方向
t = (addr << 1) | 1; //低位為1,表示讀資料
i2c_write_byte(t);
//讀入資料
for (i=0; i
gpio口模擬iic通訊的時候sda線時而作為輸入埠,時而 作為輸出埠,在傳送位元組的時候sda是作為輸出埠的,但是接受ack的時候以及讀取資料的時候是作為輸入端來動作的!
C51 GPIO口模擬串列埠方法
隨著微控制器的使用日益頻繁,用其作前置機進行採集和通訊也常見於各種應用,一般是利用前置機採集各種終端資料後進行處理 儲存,再主動或被動上報給管理站。這種情況下下,採集會需要乙個串列埠,上報又需要另乙個串列埠,這就要求微控制器具有雙串列埠的功能,但我們知道一般的51系列只提供乙個串列埠,那麼另乙個串列...
模擬IIC通訊(沒有用應答)
include include typedef unsigned char uint8 typedef unsigned int uint16 sbit scl p3 7 sbit sda p3 6 void delay void iic init void iic start void iic s...
用s5pc100的GPIO模擬IIC
先來看看lm75硬體的上的連線 其中i2c sda0是資料線,i2c scl0是時鐘線,它們分別接到s5pc100的gpd3和gpd4,如下圖所示 在模擬iic的時候,用gpd3引腳傳送資料或讀取資料,用gpd4引腳提供時鐘訊號即可。由於s5pc100的gpd這一組的引腳很多,不好單獨對其中的某乙個...