天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

PIC16F7x 單片機和 I2C master mode

更新時間: 2019-03-23
閱讀量:1966

十年專注單片機方案開發的方案公司英銳恩,分享PIC16F7x 單片機和 I2C master mode。英銳恩現提供服務產品涉及主控芯片:8位單片機、16位單片機、32位單片機及各類運算放大器等。

#define SCL TRISC3 //I2c數據通訊頻率口

#define SDA TRISC4 //I2c數據通訊數據口

//================================================================================================= //i2c操作 部分 /*八個子程序組成 i2c 基本操作單元 等待子程序 delay_4us() 啟動i2c總線 start_i2c() 關閉i2c總線 stop_i2c() 發送應答位 send_ack() 發送單字節 send_byte() 接收單字節 receive_byte() i2c多字節讀 read_i2c(uchar sla,uchar suba,uchar *s,uchar no) i2c多字節寫 write_i2c(uchar sla,uchar suba,uchar *s,uchar s_add,uchar no) */ /*------------------------------------------------------------------------------ 等待4us */

delay_4us() {uchar i;i=4; while(i--){;}} /*------------------------------------------------------------------------------

起動總線函數啟動波形

SDA

SCL

*/

void start_i2c() { SDA=1; delay_4us(); SCL=1; delay_4us(); SDA=0; delay_4us(); SCL=0; delay_4us(); }

/*--------------------------------------------------------------------------------- 停止總線函數函數原型: void stop_i2c(); Function: stop the I2C bus */ void stop_i2c() {

SDA=0; //發送結束條件的數據信號 delay_4us();

SCL=1; delay_4us(); SDA=1; delay_4us(); }

/*--------------------------------------------------------------------------------- 發送ACK 函數原型: void send_ack(); Function: */ void send_ack() { SDA=0;//發送ack信號 delay_4us(); SCL=1;//鉗住I2C總線,準備發送數據或接收數據 delay_4us(); SCL=0; }

/*--------------------------------------------------------------------------------- 字節數據傳送函數函數原型: void send_byte(uchar c); Function: 將數據C發送出去,可以是地址,也可以是數據,發完后等待回應,并對此狀態位進行操作(不應答或非應答都使ack=0 ),發送數據正常,ack=1;ack=0 表示被控器無應答或損壞。 */ void send_byte(uchar c) { uchar bit_count; for (bit_count=0;bit_count<8;bit_count++) { if ((c<<bit_count)&0x80) {sda="1;}" scl="1;">

SDA=1; delay_4us();

SCL=1; delay_4us();

if (RC4==1) ack=0; else ack=1; //用ACK=1為有應答信號 SCL=0; delay_4us();

}

/* 字節數據接收函數函數原型:uchar receive_byte(); FUNCTION: 用來接收從器件傳來的數據,并判斷總線錯誤(不發應答信號),發完后請用應答函數。 ===================================================================*/ uchar receive_byte() { uchar retc,bit_count; retc=0;

SDA=1; for(bit_count=0;bit_count<8;bit_count++) { delay_4us(); SCL=0; delay_4us(); SCL=1; delay_4us(); retc=retc<<1; if (RC4==1)retc=retc+1; delay_4us(); } SCL=0; delay_4us(); return (retc); }

/*-----------------------------------------------------------------------------

*/ write_i2c(uchar sla,uchar suba,uchar *s,uchar s_add,uchar no) { uchar i; no=no+s_add; start_i2c(); //啟動i2c總線 send_byte(sla); //發送寫命令和器件地址 send_byte(suba); //發送數據地址 s=s+s_add; for(i=s_add;i<no;i++)>

*/

read_i2c(uchar sla,uchar suba,uchar *s,uchar no) { uchar i; start_i2c(); //啟動i2c總線 send_byte(sla); //發送寫命令和器件地址 send_byte(suba); //發送數據地址 start_i2c(); //重新啟動總線。 send_byte(sla+1); //發送讀命令和器件地址DEVICE ADDRESS。 *s=receive_byte(); //讀當前地址數據 for(i=1;i<no;i++) *s="receive_byte();">

} //i2c操作部分結束 //=================================================================================================

(文源網絡,侵刪)

联系我们: 滦平县| 孝感市| 博罗县| 天门市| 丹寨县| 商城县| 温州市| 锦屏县| 西和县| 许昌市| 莱阳市| 湘潭县| 罗甸县| 锡林浩特市| 安乡县| 桐柏县| 迁西县| 武夷山市| 兴业县| 密山市| 东光县| 马鞍山市| 通辽市| 林州市| 徐闻县| 醴陵市| 建瓯市| 北宁市| 赤峰市| 谢通门县| 文化| 塔城市| 旬邑县| 凯里市| 泉州市| 韩城市| 咸阳市| 湖北省| 富顺县| 钟山县| 军事|