日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]UART 屬于異步通信,比如電腦發(fā)送給單片機,電腦只負責把數據通過TXD 發(fā)送出來即可,接收數據是單片機自己的事情。而 I2C 屬于同步通信, SCL 時鐘線負責收發(fā)雙方的時鐘節(jié)拍, SDA 數據線負責傳輸數據。 I2C 的發(fā)送方和接收方都以 SCL 這個時鐘節(jié)拍為基準進行數據的發(fā)送和接收。I2C總線包括SCL,SDA 兩根信號線,其中SCL是時鐘線,SDA是數據線。

UART 屬于異步通信,比如電腦發(fā)送給單片機,電腦只負責把數據通過TXD 發(fā)送出來即可,接收數據是單片機自己的事情。而 I2C 屬于同步通信, SCL 時鐘線負責收發(fā)雙方的時鐘節(jié)拍, SDA 數據線負責傳輸數據。 I2C 的發(fā)送方和接收方都以 SCL 這個時鐘節(jié)拍為基準進行數據的發(fā)送和接收。

I2C總線包括SCL,SDA 兩根信號線,其中SCL是時鐘線,SDA是數據線。

 

1、起始信號

UART 通信是從一直持續(xù)的高電平出現(xiàn)一個低電平標志起始位;而 I2C 通信的起始信號的定義是 SCL 為高電平期間, SDA 由高電平向低電平變化產生一個下降沿,表示起始信號。

2、數據傳輸

UART 是低位在前,高位在后;而 I2C 通信是高位在前,低位在后。UART 通信數據位是固定長度,波特率分之一,一位一位固定時間發(fā)送完畢就可以了。而 I2C 沒有固定波特率,但是有時序的要求,要求當 SCL 在低電平的時候, SDA 允許變化。

3、停止信號

UART 通信的停止位是一位固定的高電平信號; 而 I2C 通信停止信號的定義是 SCL 為高電平期間, SDA 由低電平向高電平變化產生一個上升沿,表示結束信號。

4、寫完從器件之后等待從器件的應答

在主器件完成對從器件的寫操作時候(每次會有一個字節(jié)的數據),主器件會等待從器件發(fā)送指示信號,這個指示信號是說從器件已經接受到了主器件的數據,這是由從器件的硬件來完成的,不需要主器件來軟件操作,只需要等待;

5、主器件讀完數據后向從器件發(fā)送應答信號

這其實包括兩種情況,一種是主器件讀完后還要繼續(xù)讀就要發(fā)送一個繼續(xù)讀的信號(其實就是發(fā)送0),另一種就是不再繼續(xù)讀了,就要發(fā)送停止讀信號(其實就是發(fā)送1)。

6、I2C尋址模式

I2C 通信的起始信號(Start)后,首先要發(fā)送一個從機的地址,這個地址一共有 7位,緊跟著的第 8 位是數據方向位(R/W),“ 0”表示接下來要發(fā)送數據(寫),‘“ 1”表示接下來是請求數據(讀)。第九位 ACK應答。

#include

#include

#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}

sbit I2C_SCL = P3 ^ 7;

sbit I2C_SDA = P3 ^ 6;

/* 產生總線起始信號 */

void I2CStart()

{

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

I2C_SCL = 1;

I2CDelay();

I2C_SDA = 0; //先拉低SDA

I2CDelay();

I2C_SCL = 0; //再拉低SCL

}

/* 產生總線停止信號 */

void I2CStop()

{

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

I2C_SDA = 0;

I2CDelay();

I2C_SCL = 1; //先拉高SCL

I2CDelay();

I2C_SDA = 1; //再拉高SDA

I2CDelay();

}

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

bit I2CWrite(unsigned char dat)

{

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

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

for (mask = 0x80; mask != 0; mask >>= 1) //從高位到低位依次進行

{

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

{

I2C_SDA = 0;

}

else

{

I2C_SDA = 1;

}

I2CDelay();

I2C_SCL = 1; //拉高SCL

I2CDelay();

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

}

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

I2CDelay();

I2C_SCL = 1; //拉高SCL

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

I2CDelay();

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

return (~ack); //應答值取反以符合通常的邏輯:

//0=不存在或忙或寫入失敗,1=存在且空閑或寫入成功

}

/* I2C總線讀操作,并發(fā)送非應答信號,返回值-讀到的字節(jié) */

unsigned char I2CReadNAK()

{

unsigned char mask;

unsigned char dat;

I2C_SDA = 1; //首先確保主機釋放SDA

for (mask = 0x80; mask != 0; mask >>= 1) //從高位到低位依次進行

{

I2CDelay();

I2C_SCL = 1; //拉高SCL

if(I2C_SDA == 0) //讀取SDA的值

{

dat &= ~mask; //為0時,dat中對應位清零

}

else

{

dat |= mask; //為1時,dat中對應位置1

}

I2CDelay();

I2C_SCL = 0; //再拉低SCL,以使從機發(fā)送出下一位

}

I2C_SDA = 1; //8位數據發(fā)送完后,拉高SDA,發(fā)送非應答信號

I2CDelay();

I2C_SCL = 1; //拉高SCL

I2CDelay();

I2C_SCL = 0; //再拉低SCL完成非應答位,并保持住總線

return dat;

}

/* I2C總線讀操作,并發(fā)送應答信號,返回值-讀到的字節(jié) */

unsigned char I2CReadACK()

{

unsigned char mask;

unsigned char dat;

I2C_SDA = 1; //首先確保主機釋放SDA

for (mask = 0x80; mask != 0; mask >>= 1) //從高位到低位依次進行

{

I2CDelay();

I2C_SCL = 1; //拉高SCL

if(I2C_SDA == 0) //讀取SDA的值

{

dat &= ~mask; //為0時,dat中對應位清零

}

else

{

dat |= mask; //為1時,dat中對應位置1

}

I2CDelay();

I2C_SCL = 0; //再拉低SCL,以使從機發(fā)送出下一位

}

I2C_SDA = 0; //8位數據發(fā)送完后,拉低SDA,發(fā)送應答信號

I2CDelay();

I2C_SCL = 1; //拉高SCL

I2CDelay();

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

return dat;

}

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

采用51單片機最小開發(fā)板,由8位自制獨立按鍵控制。單片機芯片為STC89C52RC,晶振為@12.000 mhz。8X8LED點陣屏模塊由MAX7219驅動,MAX7219包含一個自動掃描電路。你只需要把要顯示的數據發(fā)送...

關鍵字: 51單片機 MAX7219 寄存器

在嵌入式系統(tǒng)開發(fā)的廣闊領域,51單片機和STM32無疑是兩種極具代表性的微控制器。對于初學者而言,選擇學習路徑時往往會面臨一個抉擇:是直接跨越51單片機,挑戰(zhàn)更高層次的STM32,還是從51開始,逐步進階?本文旨在探討直...

關鍵字: 51單片機 STM32

在嵌入式系統(tǒng)開發(fā)中,特別是在使用8051系列單片機(簡稱C51)進行編程時,數據類型的選擇與定義對程序的性能和可讀性至關重要。C51語言在標準C語言的基礎上進行了擴展,以適應單片機特有的硬件結構和操作需求。本文將深入探討...

關鍵字: C51數據 51單片機

在嵌入式系統(tǒng)領域,51單片機作為一種經典的微控制器,廣泛應用于各種自動化控制系統(tǒng)中。其外部引腳作為單片機與外界交互的接口,承載著數據傳輸、控制信號輸出等重要功能。本文將通過對51單片機外部引腳的案例分析,結合實際代碼,深...

關鍵字: 51單片機 單片機

在電子技術的浩瀚星空中,LED(發(fā)光二極管)以其獨特的魅力成為了一顆璀璨的明星。而結合51單片機這一經典的嵌入式開發(fā)平臺,LED的應用更是被賦予了無限可能,其中,花樣流水燈便是一個生動而富有創(chuàng)意的實例。本文將帶您深入探索...

關鍵字: 51單片機 LED

在現(xiàn)代嵌入式系統(tǒng)設計中,51單片機作為一種經典的微控制器,憑借其豐富的功能和廣泛的應用領域,仍然受到工程師們的青睞。定時器中斷是51單片機中一個非常實用的功能,它可以在特定的時間間隔內自動觸發(fā)中斷,執(zhí)行預設的操作,從而提...

關鍵字: 51單片機 定時器

STM32與51單片機之間有什么差異呢?兩者可以說是一場科技與性能的較量了。在科技飛速發(fā)展的今天,微控制器(MCU)已廣泛應用于各類電子設備和系統(tǒng)中,發(fā)揮著舉足輕重的作用。其中,STM32和51單片機作為兩種常見的微控制...

關鍵字: STM32 51單片機 MCU

51單片機將是下述內容的主要介紹對象,通過這篇文章,小編希望大家可以對51單片機的相關情況以及信息有所認識和了解,詳細內容如下。

關鍵字: 單片機 51單片機

在嵌入式系統(tǒng)開發(fā)中,單片機是不可或缺的重要組成部分。其中,STM32單片機和51單片機是兩種常見的單片機芯片。本文將對比分析這兩種單片機的區(qū)別,并探討STM32單片機的優(yōu)勢。

關鍵字: stm32單片 51單片機

51單片機是指由美國INTEL公司生產的一系列單片機的總稱,這一系列單片機包括了許多品種,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的產品,該系列其它單片機都是在8051的基...

關鍵字: 51單片機 串行通信
關閉