TDA2030功放電路圖 電動(dòng)車(chē)充電器電路圖 電子電路 功放電路 電子制作 集成塊資料 電子報 pcb 變壓器 元器件知識 逆變器電路圖 電路圖 開(kāi)關(guān)電源電路圖 傳感器技術(shù) led 電磁兼容
電子電路圖
當前位置: 首頁(yè) > 電子電路 > 設計編程

單片機的I2C通信設計

時(shí)間:2019-12-05 09:15:30來(lái)源:電子發(fā)燒友 作者:admin 點(diǎn)擊:
I2C每一位信號的時(shí)序流程,而I2C通信在字節級的傳輸中,也有固定的時(shí)序要求。I2C通信的起始信號(Start)后,首先要發(fā)送一個(gè)從機的地址,這個(gè)地址一共有 7位,緊跟著(zhù)的第 8

bit I2CAddressing(unsigned char addr);

extern void InitLcd1602();

extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);

void main(){

bit ack;

unsigned char str[10];

InitLcd1602(); //初始化液晶

ack = I2CAddressing(0x50); //查詢(xún)地址為 0x50 的器件

str[0] = ‘5’; //將地址和應答值轉換為字符串

str[1] = ‘0’;

str[2] = ‘:’;

str[3] = (unsigned char)ack + ‘0’;

str[4] = ‘’;

LcdShowStr(0, 0, str); //顯示到液晶上

ack = I2CAddressing(0x62); //查詢(xún)地址為 0x62 的器件

str[0] = ‘6’; //將地址和應答值轉換為字符串

str[1] = ‘2’;

str[2] = ‘:’;

str[3] = (unsigned char)ack + ‘0’;

str[4] = ‘’;

LcdShowStr(8, 0, str); //顯示到液晶上

while (1);

}

/* 產(chǎn)生總線(xiàn)起始信號 */

void I2CStart(){

I2C_SDA = 1; //首先確保 SDA、SCL 都是高電平

I2C_SCL = 1;

I2CDelay();

I2C_SDA = 0; //先拉低 SDA

I2CDelay();

I2C_SCL = 0; //再拉低 SCL

}

/* 產(chǎn)生總線(xiàn)停止信號 */

void I2CStop(){

I2C_SCL = 0; //首先確保 SDA、SCL 都是低電平

I2C_SDA = 0;

I2CDelay();

I2C_SCL = 1; //先拉高 SCL

I2CDelay();

I2C_SDA = 1; //再拉高 SDA

I2CDelay();

}

/* I2C 總線(xiàn)寫(xiě)操作,dat-待寫(xiě)入字節,返回值-從機應答位的值 */

bit I2CWrite(unsigned char dat){

bit ack; //用于暫存應答位的值

unsigned char mask; //用于探測字節內某一位值的掩碼變量

for (mask=0x80; mask!=0; mask》》=1){ //從高位到低位依次進(jìn)行

if ((mask&dat) == 0){ //該位的值輸出到 SDA 上

I2C_SDA = 0;

}else{

I2C_SDA = 1;

}

I2CDelay();

}

I2C_SCL = 1; //拉高 SCL

I2CDelay();

I2C_SCL = 0; //再拉低 SCL,完成一個(gè)位周期

I2C_SDA = 1; //8 位數據發(fā)送完后,主機釋放 SDA,以檢測從機應答

I2CDelay();

I2C_SCL = 1; //拉高 SCL

ack = I2C_SDA; //讀取此時(shí)的 SDA 值,即為從機的應答值

I2CDelay();

I2C_SCL = 0; //再拉低 SCL 完成應答位,并保持住總線(xiàn)

return ack; //返回從機應答值

}

/* I2C 尋址函數,即檢查地址為 addr 的器件是否存在,返回值-從器件應答值 */

bit I2CAddressing(unsigned char addr){

bit ack;

I2CStart(); //產(chǎn)生起始位,即啟動(dòng)一次總線(xiàn)操作

//器件地址需左移一位,因尋址命令的最低位

//為讀寫(xiě)位,用于表示之后的操作是讀或寫(xiě)

ack = I2CWrite(addr《《1);

I2CStop(); //不需進(jìn)行后續讀寫(xiě),而直接停止本次總線(xiàn)操作

return ack;

}

我們把這個(gè)程序在 KST-51開(kāi)發(fā)板上運行完畢,會(huì )在液晶上邊顯示出來(lái)我們預想的結果,主機發(fā)送一個(gè)存在的從機地址,從機會(huì )回復一個(gè)應答位,即應答位為 0;主機如果發(fā)送一個(gè)不存在的從機地址,就沒(méi)有從機應答,即應答位為 1。

前面的章節中已經(jīng)提到利用庫函數_nop_()可以進(jìn)行精確延時(shí),一個(gè)_nop_()的時(shí)間就是一個(gè)機器周期,這個(gè)庫函數包含在 intrins.h 這個(gè)文件中,如果要使用這個(gè)庫函數,只需要在程序最開(kāi)始,和包含 reg52.h 一樣,include之后,程序中就可以使用這個(gè)庫函數了。

還有一點(diǎn)要提一下,I2C通信分為低速模式 100kbit/s、快速模式 400kbit/s 和高速模式3.4Mbit/s。因為所有的 I2C 器件都支持低速,但卻未必支持另外兩種速度,所以作為通用的I2C 程序我們選擇 100k 這個(gè)速率來(lái)實(shí)現,也就是說(shuō)實(shí)際程序產(chǎn)生的時(shí)序必須小于等于 100k的時(shí)序參數,很明顯也就是要求 SCL 的高低電平持續時(shí)間都不短于 5us,因此我們在時(shí)序函數中通過(guò)插入 I2CDelay()這個(gè)總線(xiàn)延時(shí)函數(它實(shí)際上就是 4 個(gè) NOP 指令,用 define 在文件開(kāi)頭做了定義),加上改變 SCL 值語(yǔ)句本身占用的至少一個(gè)周期,來(lái)達到這個(gè)速度限制。如果以后需要提高速度,那么只需要減小這里的總線(xiàn)延時(shí)時(shí)間即可。

此外我們要學(xué)習一個(gè)發(fā)送數據的技巧,就是I2C通信時(shí)如何將一個(gè)字節的數據發(fā)送出去。大家注意函數 I2CWrite 中,用的那個(gè) for 循環(huán)的技巧。for (mask=0x80; mask!=0; mask》》=1),由于 I2C 通信是從高位開(kāi)始發(fā)送數據,所以我們先從最高位開(kāi)始,0x80 和 dat 進(jìn)行按位與運算,從而得知 dat 第 7 位是 0 還是 1,然后右移一位,也就是變成了用 0x40 和 dat 按位與運算,得到第 6 位是 0 還是 1,一直到第 0 位結束,最終通過(guò) if 語(yǔ)句,把 dat 的 8 位數據依次發(fā)送了出去。其它的邏輯大家對照前邊講到的理論知識,認真研究明白就可以了。容-源-電-子-網(wǎng)-為你提供技術(shù)支持

本文地址:http://0u2438cq.cn/dz/22/15755085833520.shtml


本文標簽:


.
首頁(yè) 上一頁(yè)123下一頁(yè)尾頁(yè)
頂一下
0%
返回首頁(yè)
0
0%

------分隔線(xiàn)----------------------------

    猜你感興趣:

  • 新手教程:?jiǎn)纹瑱C的學(xué)習實(shí)踐步驟

    運用單片機便是了解單片機硬件結構,以及內部資源的運用,在匯編或C語(yǔ)言中學(xué)會(huì )各種功用的初始化設置,以及完成各種功用的程序編制。 運用按鈕輸入信號,發(fā)光二極管顯現輸出
    關(guān)鍵詞:51單片機PIC單片機單片機   所屬欄目:設計編程

  • 應用單片機實(shí)現CAN總線(xiàn)與LIN總線(xiàn)間的傳輸設計方案

    現場(chǎng)總線(xiàn)技術(shù)已經(jīng)廣泛應用于工業(yè)控制中,尤其是CAN(Controler Area Nerwork)總線(xiàn)由于具有可靠性高、成本低、容易實(shí)現等優(yōu)點(diǎn),在現場(chǎng)總線(xiàn)實(shí)際工程應用中占有了較大份額。
    關(guān)鍵詞:單片機   所屬欄目:設計編程

  • 學(xué)習單片機可不可以只用軟件仿真而不做實(shí)驗

    我的答案是:不可以原因如下:一、軟件仿真多用于教學(xué),把更多精力用在軟件的實(shí)現上由于學(xué)生學(xué)習時(shí)間寶貴,焊接一套單片機實(shí)驗板又比較花時(shí)間,并且實(shí)驗項目太多,所以為了
    關(guān)鍵詞:PIC單片機51單片機單片機   所屬欄目:設計編程

  • 怎樣選擇最適合的單片機

    對于新手來(lái)說(shuō),首先根據自己學(xué)的什么樣單片機就選什么類(lèi)型的單片機,熟悉什么類(lèi)型的單片機就選什么類(lèi)型的單片機。因為單片機不僅要設計電路,還要設計控制軟件。選自己熟悉的單片機上手最快,也最容易獲得成功。下面介紹如何選擇最適合的單片機。
    關(guān)鍵詞:   所屬欄目:設計編程

  • 單片機晶振的作用是什么

    單片機晶振的作用是什么
    在初學(xué)單片機的時(shí)候,總是伴隨很多有關(guān)于晶振的問(wèn)題,其實(shí)晶振就是如同人的心臟,是血液的脈搏,把單片機的晶振問(wèn)題搞明白了,51單片機的其他問(wèn)題
    關(guān)鍵詞:51單片機PIC單片機單片機   所屬欄目:設計編程

  • 用keil軟件編寫(xiě)單片機程序的步驟

    Keil單片機編程軟件Keil C51是單片機C語(yǔ)言軟件開(kāi)發(fā)系統,與匯編相比,C語(yǔ)言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯
    關(guān)鍵詞:51單片機PIC單片機   所屬欄目:設計編程

  • 詳解51單片機運行過(guò)程

    詳解51單片機運行過(guò)程 注:1.ROM:只讀存儲器,單片機的只讀存儲區大多用于存儲程序固又稱(chēng)程序存儲器。51單片機是EPROM,所謂的EPROM是可擦除的只
    關(guān)鍵詞:   所屬欄目:設計編程

  • pic單片機和c51有什么區別

    pic單片機和c51有什么區別(區別1)總線(xiàn)結構:MCS-51單片機的總線(xiàn)結構是馮-諾依曼型,計算機在同一個(gè)存儲空間取指令和數據,兩者不能同時(shí)進(jìn)行;而PIC單片機的總線(xiàn)結構是哈佛結構
    關(guān)鍵詞:單片機PIC單片機51單片機   所屬欄目:設計編程

  • 51單片機出現故障及解決辦法

    實(shí)例分析51單片機出現故障及解決辦法。詳細如下:
    故障現象:做了一個(gè)單片機溫度監測系統,仿真機上一切正常,燒寫(xiě)芯片無(wú)法工作。相關(guān)電路框圖: 用51做處理器,外圍電路如
    關(guān)鍵詞:單片機51單片機   所屬欄目:設計編程

  • PIC單片機匯編語(yǔ)言指令詳解

    PIC單片機匯編語(yǔ)言指令詳解
    pic單片機為最常用單片機之一,許多程序均基于pic單片機進(jìn)行開(kāi)發(fā)。因此,熟練pic單片機編程尤為重要。為保證大家能準確、熟練掌握pic單片機的使
    關(guān)鍵詞:PIC單片機單片機   所屬欄目:設計編程

  • 三種51單片機程序下載方法介紹

    三種51單片機程序下載方法介紹
    一般只能通過(guò)三種方式下載程序到單片機中:1.JTAG 2.ISP 3.IAP1.JTAG要使用JTAG方式下載程序,不管是使用J-LINK、ULINK、ST-LINK,只需要把
    關(guān)鍵詞:PIC單片機51單片機單片機   所屬欄目:設計編程

  • AT89C51單片機的RS232-GPIB控制器設計

    越來(lái)越多的測量?jì)x器提供GPIB(General Purpose Intefface Bus)總線(xiàn)接口,通過(guò)該總線(xiàn)可以方便快捷地連接帶有GPIB接口的儀器及計算機,組成一個(gè)GPlB網(wǎng)絡(luò )。GPIB設備與計算機連
    關(guān)鍵詞:PIC單片機51單片機單片機   所屬欄目:設計編程

  • 單片機晶振的作用以及原理解析

    每個(gè)單片機系統里都有晶振,全程是叫晶體震蕩器,在單片機系統里晶振的作用非常大,他結合單片機內部的電路,產(chǎn)生單片機所必須的時(shí)鐘頻率,單片機的一切指令的執行都是建立
    關(guān)鍵詞:51單片機PIC單片機單片機   所屬欄目:設計編程

  • 數字電位器在單片機控制變頻器中的應用

    引言變頻調速作為交流電機調速的主要手段已經(jīng)在工業(yè)領(lǐng)域中應用的十分廣泛,其具有的調速范圍寬、穩速精度高、動(dòng)態(tài)響應快、適用范圍廣、運行可靠等技術(shù)性能,已逐步取代直流
    關(guān)鍵詞:單片機變頻器   所屬欄目:設計編程

  • 如何用單片機制作電子密碼鎖電路

    電子密碼鎖按照輸入密碼方式的不同可分為好多種,其中最常用的一種是用數字鍵盤(pán)輸入密碼的電子密碼鎖。這一講主要介紹用ATmega8和LCD1602液晶顯示器等組成的電子密碼鎖,這
    關(guān)鍵詞:單片機   所屬欄目:設計編程

  • 單片機控制LED亮滅電路

    1.實(shí)驗任務(wù)如圖所示,監視開(kāi)關(guān)K1(接在P3.0端口上),用發(fā)光二極管L1(接在單片機P1.0端口上)顯示開(kāi)關(guān)狀態(tài),如果開(kāi)關(guān)合上,L1亮,開(kāi)關(guān)打開(kāi),L1熄滅。2.電路原理圖3.系統
    關(guān)鍵詞:單片機LEDLED電路圖   所屬欄目:設計編程

  • 超詳細的FPGA芯片解讀(圖文)

    近日,有媒體報道稱(chēng),北京微電子技術(shù)研究所日前成功研制出國內首個(gè)自主可控的宇航用千萬(wàn)門(mén)級高性能高可靠FPGA(現場(chǎng)可編程門(mén)陣列)芯片。FPGA一直是國內的短板,市場(chǎng)基本被
    關(guān)鍵詞:單片機   所屬欄目:設計編程

  • 單片機要這么學(xué)?八條謹記!

    怎么學(xué)單片機?也?吹接腥苏f(shuō)學(xué)了好幾個(gè)月可就是沒(méi)有什么進(jìn)展。當然,受限于每個(gè)人受到的教育水平不同和個(gè)人理解能力的差異,學(xué)習起來(lái)會(huì )有快慢之分,但我感覺(jué)最重的就是學(xué)
    關(guān)鍵詞:單片機   所屬欄目:設計編程

  • 單片機的特殊功能寄存器(圖文)

    在單片機中有一些獨立的存儲單元是用來(lái)控制這些器件的,被稱(chēng)之為特殊功能寄存器(SFR)! <特殊功能寄存器地址映象表(一)>  <特殊功能寄存器地址映象表(二)>  <
    關(guān)鍵詞:單片機寄存器   所屬欄目:設計編程

  • 單片機在倒立擺控制系統的應用

    倒立擺作為一種典型的控制系統實(shí)驗裝置,具有非線(xiàn)性、自然不穩定等特性,常用來(lái)作為檢驗某種控制理論或方法是否合理的典型方案。一階倒立擺系統能用多種理論和方法來(lái)實(shí)現其
    關(guān)鍵詞:單片機   所屬欄目:設計編程

發(fā)表評論
請自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規,嚴禁發(fā)布色情、暴力、反動(dòng)的言論。
表情:
名稱(chēng): E-mail: 驗證碼: 匿名發(fā)表
發(fā)布文章,推廣自己產(chǎn)品。
国产成人精品免高潮在线观看_免费人成视频观看18_亚洲AV乱码一区二区三区林ゆな_91精品国产91久久久