日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CC2541 软件I2C

發(fā)布時(shí)間:2024/3/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CC2541 软件I2C 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在CC2541上硬件I2C不是很穩(wěn)定,因此寫了個(gè)軟件I2C例程

宏定義軟件I2C中I\O及操作

#define SCL P1_5 //定義模擬IIC的時(shí)鐘線 #define SDA P1_6 //定義模擬IIC的數(shù)據(jù)線#define SDA_0 (P1_6=0) //SDA=0 #define SDA_1 (P1_6=1) //SDA=1 #define SCL_0 (P1_5=0) //SCL=0 #define SCL_1 (P1_5=1) //SCL=1#define SDA_IN P1DIR &= ~BIT6 //SDA INPUT #define SDA_OUT P1DIR |= BIT6 //SDA OUTPUT #define SCL_IN P1DIR &= ~BIT5 //SCL INPUT #define SCL_OUT P1DIR |= BIT5 //SCL OUTPUT#define I2C_SDA_READ (P1 & BIT6)

I2C間斷延時(shí)函數(shù)

void delay_1ms(void) //誤差 0us 延時(shí)1ms {uint8 a,c; for(c=4;c>0;c--){ //for(b=142;b>0;b--){for(a=2;a>0;a--){}}} }

I2C初始化函數(shù)

void IIC_Init(void)//IIC初始化 {P1DIR |= 0x60; //P1.5、P1.6定義為輸出SDA_0;SCL_0;delay_1ms();SCL_1;SDA_1;delay_1ms();}

I2C起始信號(hào)

/** 啟動(dòng)iic*/ // static void start(void) { void start(void){SDA_OUT; //開路輸出,并輸出0.SCL_OUT;SDA_1; //SDA = 1;SCL_1; //SCL = 1;delay_1ms();SDA_0; //SDA = 0;delay_1ms();SCL_0; //SCL = 0; //START }

I2C停止信號(hào)

/**停止iic*/ void stop(void){SDA_OUT; //開路輸出,并輸出0.SCL_0; //SCL = 0;delay_1ms();SCL_1; //SCL = 1; STOPdelay_1ms();SDA_1; //SDA = 1;SDA_IN;SCL_IN; }

I2C主機(jī)發(fā)送無(wú)應(yīng)答信號(hào)

//*********************************************************************************** //*名稱:i2c_send_noack() * //*功能:無(wú)應(yīng)答I2C總線 * //*參數(shù):無(wú) * //*返回:1 有NOACK信號(hào) 0 無(wú)NOACK信號(hào) * //*********************************************************************************** void send_noack(void){ SDA_OUT; //開路輸出, SDA_1; //SDA = 1; NO ACK delay_1ms(); SCL_1; //SCL = 1; delay_1ms(); SCL_0; //SCL = 0; //START }

I2C主機(jī)發(fā)送應(yīng)答信號(hào)

// iic 應(yīng)答 for slaver void send_ack(void) {SDA_OUT; //開路輸出,SDA_0; //OUT 0 ACKdelay_1ms();SCL_1;delay_1ms();SCL_0; }

I2C檢測(cè)從機(jī)應(yīng)帶信號(hào)

uint8 check_ack(void) {uint8 ack_flag;SDA_IN; //開路輸入,delay_1ms();SCL_1; //read ask begindelay_1ms();if(I2C_SDA_READ == BIT6){ //if (SDA==1)ack_flag = 0; //1: err}else{ack_flag = 1; //0: ok}SCL_0; //read ask endreturn ack_flag; }

I2C讀一個(gè)字節(jié)

/** iic讀一個(gè)字節(jié)*/ uint8 iic_read(void) {uint8 j, dat = 0;SDA_IN; //開路輸入,for (j = 0; j < 8; j++) {SCL_1; //read TDOS_SDA begin. delay 0.7usdat <<= 1;delay_1ms();delay_1ms();if(I2C_SDA_READ == BIT6){ //if (SDA==1)dat |= 0x01; //input TDOS_SDA}SCL_0; //read TDOS_SDA end. delay 1.4us}return dat; }

I2C寫一個(gè)字節(jié)

/** iic寫一個(gè)字節(jié)*/ void iic_write(uint8 datIn) {uint8 dat, j;dat = datIn;SDA_OUT;SCL_0;for (j = 0; j < 8; j++) {if((dat & 0x80)) SDA_1;else SDA_0;delay_1ms();delay_1ms();SCL_1; //write TDOS_SDA begindelay_1ms();dat <<= 1;SCL_0; //write TDOS_SDA enddelay_1ms();} }

頭文件函數(shù)聲明

void delay_1ms(void); void IIC_Init(void); void stop(void); void start(void); void send_noack(void); void send_ack(void); void iic_write(uint8 datIn); uint8 check_ack(void); uint8 iic_read(void);

GitHub工程源代碼:

https://github.com/lanhaixuan/CC2541_VL6180X_BMA250

總結(jié)

以上是生活随笔為你收集整理的CC2541 软件I2C的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。