第五課 串口 IIC 1-WIRE_第1頁(yè)
第五課 串口 IIC 1-WIRE_第2頁(yè)
第五課 串口 IIC 1-WIRE_第3頁(yè)
第五課 串口 IIC 1-WIRE_第4頁(yè)
第五課 串口 IIC 1-WIRE_第5頁(yè)
已閱讀5頁(yè),還剩96頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、UART IIC 1-Wire原碼工作室原碼工作室通信的基本概念通信的基本概念 :傳輸方式:傳輸方式 單工方式單工方式:數(shù)據(jù)僅按一個(gè)固定方向傳送。因而:數(shù)據(jù)僅按一個(gè)固定方向傳送。因而這種傳輸方式的用途有限,常用于串行口的打印數(shù)這種傳輸方式的用途有限,常用于串行口的打印數(shù)據(jù)傳輸與簡(jiǎn)單系統(tǒng)間的數(shù)據(jù)采集。據(jù)傳輸與簡(jiǎn)單系統(tǒng)間的數(shù)據(jù)采集。 半雙工方式半雙工方式:數(shù)據(jù)可實(shí)現(xiàn)雙向傳送,但不能同:數(shù)據(jù)可實(shí)現(xiàn)雙向傳送,但不能同時(shí)進(jìn)行,實(shí)際的應(yīng)用采用某種協(xié)議實(shí)現(xiàn)收時(shí)進(jìn)行,實(shí)際的應(yīng)用采用某種協(xié)議實(shí)現(xiàn)收/發(fā)開(kāi)關(guān)發(fā)開(kāi)關(guān)轉(zhuǎn)換。(傳呼機(jī))轉(zhuǎn)換。(傳呼機(jī)) 全雙工方式全雙工方式:允許雙方同時(shí)進(jìn)行數(shù)據(jù)雙向傳送:允許雙方同時(shí)進(jìn)行

2、數(shù)據(jù)雙向傳送,但一般全雙工傳輸方式的線路和設(shè)備較復(fù)雜。但一般全雙工傳輸方式的線路和設(shè)備較復(fù)雜。傳輸方式傳輸方式單工單工 半雙工半雙工 全雙工全雙工計(jì)算機(jī)通信基本概念計(jì)算機(jī)通信基本概念計(jì)算機(jī)通信是將計(jì)算機(jī)技術(shù)和通信技術(shù)的相結(jié)合,計(jì)算機(jī)通信是將計(jì)算機(jī)技術(shù)和通信技術(shù)的相結(jié)合,完成計(jì)算機(jī)與外部設(shè)備或計(jì)算機(jī)與計(jì)算機(jī)之間的信息交完成計(jì)算機(jī)與外部設(shè)備或計(jì)算機(jī)與計(jì)算機(jī)之間的信息交換換 。可以分為兩大類(lèi):并行通信與串行通信??梢苑譃閮纱箢?lèi):并行通信與串行通信。并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳送時(shí)進(jìn)行傳送 。 并行通信控制簡(jiǎn)單、傳輸速度快;由于傳輸線

3、較多,并行通信控制簡(jiǎn)單、傳輸速度快;由于傳輸線較多,長(zhǎng)距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難。長(zhǎng)距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難。 串行通信串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個(gè)地傳送。一條傳輸線上逐個(gè)地傳送。 串行通信的特點(diǎn)串行通信的特點(diǎn):傳輸線少,長(zhǎng)距離傳送時(shí)成:傳輸線少,長(zhǎng)距離傳送時(shí)成本低,且可以利用電話(huà)網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的本低,且可以利用電話(huà)網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通信復(fù)雜。傳送控制比并行通信復(fù)雜。 串行數(shù)據(jù)通信基本概念串行數(shù)據(jù)通信基本概念 異步通信異步通信 是一種很常用的通信方式。異步通信在發(fā)送

4、字是一種很常用的通信方式。異步通信在發(fā)送字符時(shí),所發(fā)送的字符之間的時(shí)間間隔可以是任意的。符時(shí),所發(fā)送的字符之間的時(shí)間間隔可以是任意的。當(dāng)然,接收端必須時(shí)刻做好接收的準(zhǔn)備(如果接收當(dāng)然,接收端必須時(shí)刻做好接收的準(zhǔn)備(如果接收端主機(jī)的電源都沒(méi)有加上,那么發(fā)送端發(fā)送字符就端主機(jī)的電源都沒(méi)有加上,那么發(fā)送端發(fā)送字符就沒(méi)有意義,因?yàn)榻邮斩烁緹o(wú)法接收)。發(fā)送端可沒(méi)有意義,因?yàn)榻邮斩烁緹o(wú)法接收)。發(fā)送端可以在任意時(shí)刻開(kāi)始發(fā)送字符,因此必須在每一個(gè)字以在任意時(shí)刻開(kāi)始發(fā)送字符,因此必須在每一個(gè)字符的開(kāi)始和結(jié)束的符的開(kāi)始和結(jié)束的 地方加上標(biāo)志,即加上開(kāi)始位和地方加上標(biāo)志,即加上開(kāi)始位和停止位,以便使接收端能夠

5、正確地將每一個(gè)字符接停止位,以便使接收端能夠正確地將每一個(gè)字符接收下來(lái)。收下來(lái)。 異步通信的特點(diǎn):不要求收發(fā)雙方時(shí)鐘的嚴(yán)格異步通信的特點(diǎn):不要求收發(fā)雙方時(shí)鐘的嚴(yán)格一致,實(shí)現(xiàn)容易,設(shè)備開(kāi)銷(xiāo)較小,但每個(gè)字符要附一致,實(shí)現(xiàn)容易,設(shè)備開(kāi)銷(xiāo)較小,但每個(gè)字符要附加加23位用于起止位,各幀之間還有間隔,因此傳位用于起止位,各幀之間還有間隔,因此傳輸效率不高。輸效率不高。 同步通信同步通信 同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的距離均為的位之間的距離均為“位間隔位間隔”的

6、整數(shù)倍,同時(shí)傳的整數(shù)倍,同時(shí)傳送的字符間不留間隙,即保持位同步關(guān)系,也保持送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。發(fā)送方對(duì)接收方的同步可以通過(guò)兩字符同步關(guān)系。發(fā)送方對(duì)接收方的同步可以通過(guò)兩種方法實(shí)現(xiàn)。種方法實(shí)現(xiàn)。 傳輸速率與傳輸距離傳輸速率與傳輸距離 傳輸速率傳輸速率 比特率比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位秒(是:位秒(bps)。如每秒鐘傳送)。如每秒鐘傳送240個(gè)字符,而個(gè)字符,而每個(gè)字符格式包含每個(gè)字符格式包含10位位(1個(gè)起始位、個(gè)起始位、1個(gè)停止位、個(gè)停止位、8個(gè)數(shù)據(jù)位個(gè)數(shù)據(jù)位),這時(shí)的比特率為:,這時(shí)的比特率為: 10

7、位位240個(gè)個(gè)/秒秒 = 2400 bps 波特率波特率表示每秒鐘調(diào)制信號(hào)變化的次數(shù),單位表示每秒鐘調(diào)制信號(hào)變化的次數(shù),單位是:波特(是:波特(Baud)。)。 波特率和比特率不總是相同的,對(duì)于將數(shù)字信波特率和比特率不總是相同的,對(duì)于將數(shù)字信號(hào)號(hào)1或或0直接用兩種不同電壓表示的所謂基帶傳輸,直接用兩種不同電壓表示的所謂基帶傳輸,比特率和波特率是相同的。所以,我們也經(jīng)常用波比特率和波特率是相同的。所以,我們也經(jīng)常用波特率表示數(shù)據(jù)的傳輸速率。特率表示數(shù)據(jù)的傳輸速率。串口通信硬件電路設(shè)計(jì)串口通信硬件電路設(shè)計(jì) 1 RX232 協(xié)議協(xié)議 RS-232C是是EIA(美國(guó)電子工業(yè)協(xié)會(huì))(美國(guó)電子工業(yè)協(xié)會(huì))1

8、969年年修訂修訂RS-232C標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。RS-232C定義了數(shù)據(jù)終端設(shè)備定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備()與數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口)之間的物理接口標(biāo)準(zhǔn)。它適用于數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)。它適用于數(shù)據(jù)傳輸速率在020000bit/s范圍范圍內(nèi)的通信,這個(gè)標(biāo)準(zhǔn)對(duì)對(duì)串行通信接口的有關(guān)問(wèn)題,內(nèi)的通信,這個(gè)標(biāo)準(zhǔn)對(duì)對(duì)串行通信接口的有關(guān)問(wèn)題,如信號(hào)線功能、電器特性都做了明確規(guī)定。如信號(hào)線功能、電器特性都做了明確規(guī)定。 RS-232C接口規(guī)定使用接口規(guī)定使用25針和針和9針兩種連接器,針兩種連接器,連接器的尺寸及每個(gè)插針的排列位置都有明確的定連接器的尺寸及每個(gè)插針的排列位置都有明確的定

9、義。義。RS-232標(biāo)準(zhǔn)接口主要引腳定義標(biāo)準(zhǔn)接口主要引腳定義串口通信方式串口通信方式 根據(jù)通信距離不同,電路連接方式不同的。如根據(jù)通信距離不同,電路連接方式不同的。如果是單片機(jī)與單片機(jī)之間通信果是單片機(jī)與單片機(jī)之間通信 (近距離近距離),又不使用,又不使用握手信號(hào),只需要握手信號(hào),只需要3根信號(hào)線:根信號(hào)線:TXD,RXD,GND,見(jiàn)見(jiàn)(a)。如果距離在。如果距離在15m左右,通過(guò)左右,通過(guò)RS232接口,提接口,提高信號(hào)的幅度以加大傳送距離,高信號(hào)的幅度以加大傳送距離,(如單片機(jī)與如單片機(jī)與PC機(jī)機(jī)之間通信之間通信)連接方法見(jiàn)連接方法見(jiàn)(b)。單片機(jī)與單片機(jī)與PC機(jī)通信的硬件設(shè)計(jì)機(jī)通信的硬件

10、設(shè)計(jì) RX232規(guī)定:高電平(邏輯規(guī)定:高電平(邏輯1)為)為-3V-15V,低電,低電平(邏輯平(邏輯0)為)為+3V+15V; 當(dāng)傳輸電平的絕對(duì)值大于當(dāng)傳輸電平的絕對(duì)值大于3V時(shí),電路可以有效地檢時(shí),電路可以有效地檢測(cè)出來(lái),當(dāng)電平介于測(cè)出來(lái),當(dāng)電平介于-3V3V時(shí),電壓無(wú)意義,低于時(shí),電壓無(wú)意義,低于-15V+15V時(shí)電壓也認(rèn)為無(wú)意義。時(shí)電壓也認(rèn)為無(wú)意義。 單片機(jī)的電平為高電平(邏輯單片機(jī)的電平為高電平(邏輯1)為)為3.0V5V,低電,低電平(邏輯平(邏輯0)為)為0V0.7V; 所以必須設(shè)計(jì)電平轉(zhuǎn)換電路;所以必須設(shè)計(jì)電平轉(zhuǎn)換電路;通過(guò)觀察可知,通過(guò)觀察可知,RS-232使用正負(fù)電壓來(lái)表

11、示邏輯狀態(tài),使用正負(fù)電壓來(lái)表示邏輯狀態(tài),與與TTL以高低電壓表示邏輯狀態(tài)的規(guī)定不同。為了能夠同以高低電壓表示邏輯狀態(tài)的規(guī)定不同。為了能夠同計(jì)算機(jī)接口或者終端的計(jì)算機(jī)接口或者終端的TTL器件連接,必須在器件連接,必須在RS-232與與TTL電路之間進(jìn)行電平與邏輯之間的轉(zhuǎn)換。具體電平轉(zhuǎn)換電路之間進(jìn)行電平與邏輯之間的轉(zhuǎn)換。具體電平轉(zhuǎn)換電路如圖所示。電路如圖所示。電平轉(zhuǎn)換電路電平轉(zhuǎn)換電路單片機(jī)的串口結(jié)構(gòu)及寄存器設(shè)置單片機(jī)的串口結(jié)構(gòu)及寄存器設(shè)置80C51串行口的結(jié)構(gòu)串行口的結(jié)構(gòu) 有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器有兩個(gè)物理上獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一地址它們占用同一地址99H ;接收器

12、是雙緩沖結(jié)構(gòu);接收器是雙緩沖結(jié)構(gòu) ;發(fā);發(fā)送緩沖器,因?yàn)榘l(fā)送時(shí)送緩沖器,因?yàn)榘l(fā)送時(shí)CPU是主動(dòng)的,不會(huì)產(chǎn)生重是主動(dòng)的,不會(huì)產(chǎn)生重疊錯(cuò)誤。疊錯(cuò)誤。 80C51串行口的控制寄存器串行口的控制寄存器 SCON 是一個(gè)特殊功能寄存器,用以設(shè)定串行是一個(gè)特殊功能寄存器,用以設(shè)定串行口的工作方式、接收口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志:發(fā)送控制以及設(shè)置狀態(tài)標(biāo)志: SM0和和SM1為工作方式選擇位,可選擇四種工為工作方式選擇位,可選擇四種工作方式:作方式: 80C51串行口的工作方式串行口的工作方式 1、方式、方式0 方式方式0時(shí),串行口為同步移位寄存器的輸入輸時(shí),串行口為同步移位寄存器的輸入輸出

13、方式。主要用于擴(kuò)展并行輸入或輸出口。數(shù)據(jù)由出方式。主要用于擴(kuò)展并行輸入或輸出口。數(shù)據(jù)由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出。發(fā)送和接收均為)引腳輸出。發(fā)送和接收均為8位數(shù)據(jù),位數(shù)據(jù),低位在先,高位在后。波特率固定為低位在先,高位在后。波特率固定為fosc/12方式方式0輸出輸出 方式方式0輸入輸入 方式方式0接收和發(fā)送電路接收和發(fā)送電路方式方式1 方式方式1是是10位數(shù)據(jù)的異步通信口。位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)為數(shù)據(jù)發(fā)送引腳,發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如圖所示。其中

14、格式如圖所示。其中1位起始位,位起始位,8位數(shù)據(jù)位,位數(shù)據(jù)位,1位位停止位。停止位。方式方式2和方式和方式3 方式方式2或方式或方式3時(shí)為時(shí)為11位數(shù)據(jù)的異步通信口。位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳為數(shù)據(jù)接收引腳 。 方式方式2和方式和方式3時(shí)起始位時(shí)起始位1位,數(shù)據(jù)位,數(shù)據(jù)9位(含位(含1位位附加的第附加的第9位,發(fā)送時(shí)為位,發(fā)送時(shí)為SCON中的中的TB8,接收時(shí)為,接收時(shí)為RB8),停止位),停止位1位,一幀數(shù)據(jù)為位,一幀數(shù)據(jù)為11位。方式位。方式2的波的波特率固定為晶振頻率的特率固定為晶振頻率的1/64或或1/32,方式,方式3的波特率的波特

15、率由定時(shí)器由定時(shí)器T1的溢出率決定。的溢出率決定。 波特率的計(jì)算波特率的計(jì)算 在串行通信中,收發(fā)雙方對(duì)發(fā)送或接收數(shù)據(jù)的在串行通信中,收發(fā)雙方對(duì)發(fā)送或接收數(shù)據(jù)的速率要有約定。通過(guò)軟件可對(duì)單片機(jī)串行口編程為速率要有約定。通過(guò)軟件可對(duì)單片機(jī)串行口編程為四種工作方式,其中方式四種工作方式,其中方式0和方式和方式2的波特率是固定的波特率是固定的,而方式的,而方式1和方式和方式3的波特率是可變的,由定時(shí)器的波特率是可變的,由定時(shí)器T1的溢出率來(lái)決定。的溢出率來(lái)決定。 串行口的四種工作方式對(duì)應(yīng)三種波特率。由于串行口的四種工作方式對(duì)應(yīng)三種波特率。由于輸入的移位時(shí)鐘的來(lái)源不同,所以,各種方式的波輸入的移位時(shí)鐘的

16、來(lái)源不同,所以,各種方式的波特率計(jì)算公式也不相同。特率計(jì)算公式也不相同。方式方式0的波特率的波特率 = fosc/12方式方式1的波特率的波特率 =(2SMOD/32)(T1溢出率)溢出率)方式方式2的波特率的波特率 =(2SMOD/64) fosc 方式方式3的波特率的波特率 =(2SMOD/32)(T1溢出率)溢出率) 當(dāng)當(dāng)T1作為波特率發(fā)生器時(shí),最典型的用法是使作為波特率發(fā)生器時(shí),最典型的用法是使T1工作在自動(dòng)再裝入的工作在自動(dòng)再裝入的8位定時(shí)器方式(即方式位定時(shí)器方式(即方式2,且且TCON的的TR1=1,以啟動(dòng)定時(shí)器)。這時(shí)溢出率,以啟動(dòng)定時(shí)器)。這時(shí)溢出率取決于取決于TH1中的計(jì)數(shù)

17、值。中的計(jì)數(shù)值。 T1 溢出率溢出率 = fosc /12256 (TH1) 在單片機(jī)的應(yīng)用中,常用的晶振頻率為:在單片機(jī)的應(yīng)用中,常用的晶振頻率為:12MHz和和11.0592MHz。所以,選用的波特率也相。所以,選用的波特率也相對(duì)固定。對(duì)固定。 SM2,多機(jī)通信控制位,主要用于方式,多機(jī)通信控制位,主要用于方式2和方式和方式3。當(dāng)接收機(jī)的當(dāng)接收機(jī)的SM2=1時(shí)可以利用收到的時(shí)可以利用收到的RB8來(lái)控制是否激來(lái)控制是否激活活RI RB80 不激活不激活RI,收到的信息丟棄;,收到的信息丟棄; RB81時(shí)收到的數(shù)據(jù)進(jìn)入時(shí)收到的數(shù)據(jù)進(jìn)入SBUF,并激活,并激活RI,進(jìn)而,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從

18、在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。讀走)。 當(dāng)當(dāng)SM2=0時(shí),不論收到的時(shí),不論收到的RB8為為0和和1,均可以使收,均可以使收到的數(shù)據(jù)進(jìn)入到的數(shù)據(jù)進(jìn)入SBUF,并激活,并激活RI(即此時(shí)(即此時(shí)RB8不具有控不具有控制制RI激活的功能)。通過(guò)控制激活的功能)。通過(guò)控制SM2,可以實(shí)現(xiàn)多機(jī)通信。,可以實(shí)現(xiàn)多機(jī)通信。 在方式在方式0時(shí),時(shí),SM2必須是必須是0。在方式。在方式1時(shí),若時(shí),若SM2=1,則只有接收到有效停止位時(shí),則只有接收到有效停止位時(shí),RI才置才置1。REN,允許串行接收位。由軟件置,允許串行接收位。由軟件置REN=1,則啟動(dòng),則啟動(dòng)串行口接收數(shù)據(jù);若軟件置串行口接收數(shù)據(jù);若軟

19、件置REN=0,則禁止接收。,則禁止接收。 TB8,在方式,在方式2或方式或方式3中,是發(fā)送數(shù)據(jù)的第九中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶位,可以用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗(yàn)位,或在多機(jī)通信中,作為地址幀校驗(yàn)位,或在多機(jī)通信中,作為地址幀/數(shù)據(jù)幀的數(shù)據(jù)幀的標(biāo)志位。標(biāo)志位。 在方式在方式0和方式和方式1中,該位未用。中,該位未用。 RB8,在方式,在方式2或方式或方式3中,是接收到數(shù)據(jù)的第中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗(yàn)位或地址幀九位,作為奇偶校驗(yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位。數(shù)據(jù)幀的標(biāo)志位。在方式在方式1時(shí),若時(shí),若SM2=0,則,則RB8是接收到的

20、停止位是接收到的停止位 TI,發(fā)送中斷標(biāo)志位。在方式,發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)串行發(fā)時(shí),當(dāng)串行發(fā)送第送第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行發(fā)送停位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行發(fā)送停止位的開(kāi)始時(shí),由內(nèi)部硬件使止位的開(kāi)始時(shí),由內(nèi)部硬件使TI置置1,向,向CPU發(fā)中發(fā)中斷申請(qǐng)。在中斷服務(wù)程序中,必須用軟件將其清斷申請(qǐng)。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請(qǐng)。取消此中斷申請(qǐng)。 RI,接收中斷標(biāo)志位。在方式,接收中斷標(biāo)志位。在方式0時(shí),當(dāng)串行接時(shí),當(dāng)串行接收第收第8位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行接收停位數(shù)據(jù)結(jié)束時(shí),或在其它方式,串行接收停止位的中間時(shí),由內(nèi)部硬件使止位的中間時(shí),由

21、內(nèi)部硬件使RI置置1,向,向CPU發(fā)中發(fā)中斷申請(qǐng)。也必須在中斷服務(wù)程序中,用軟件將其清斷申請(qǐng)。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請(qǐng)。,取消此中斷申請(qǐng)。電源控制寄存器電源控制寄存器 PCON SMOD(PCON.7) 波特率倍增位。在串行口波特率倍增位。在串行口方式方式1、方式、方式2、方式、方式3時(shí),波特率與時(shí),波特率與SMOD有關(guān),有關(guān),當(dāng)當(dāng)SMOD=1時(shí),波特率提高一倍。復(fù)位時(shí),時(shí),波特率提高一倍。復(fù)位時(shí),SMOD=0。IE中斷允許控制寄存器結(jié)構(gòu)中斷允許控制寄存器結(jié)構(gòu) 中斷允許寄存器在前一節(jié)中已闡述,這里重述中斷允許寄存器在前一節(jié)中已闡述,這里重述一下對(duì)串行口有影響的位一

22、下對(duì)串行口有影響的位ES。ES為串行中斷允許為串行中斷允許控制位,控制位,ES=1允許串行中斷,允許串行中斷,ES=0,禁止串行中,禁止串行中斷。斷。串行通信的程序設(shè)計(jì)步驟串行通信的程序設(shè)計(jì)步驟 設(shè)置串口工作方式。此時(shí)需要對(duì)設(shè)置串口工作方式。此時(shí)需要對(duì)SCON中的中的SM0、SM1進(jìn)行設(shè)置。進(jìn)行設(shè)置。PC機(jī)與單片機(jī)的通信中一機(jī)與單片機(jī)的通信中一般選擇串口工作在方式般選擇串口工作在方式1中。中。 選擇波特率發(fā)生器。選擇定時(shí)器選擇波特率發(fā)生器。選擇定時(shí)器1作為波特率作為波特率發(fā)生器;同時(shí)設(shè)置定時(shí)器工作方式。當(dāng)選擇定時(shí)器發(fā)生器;同時(shí)設(shè)置定時(shí)器工作方式。當(dāng)選擇定時(shí)器1時(shí),需要設(shè)置其方式寄存器時(shí),需要設(shè)

23、置其方式寄存器TMOD為計(jì)數(shù)方式并為計(jì)數(shù)方式并選擇相應(yīng)的工作方式選擇相應(yīng)的工作方式(一般選擇方式一般選擇方式2以避免重裝定以避免重裝定時(shí)器初始值時(shí)器初始值); 設(shè)置波特率參數(shù)。波特率的參數(shù)有:特許寄設(shè)置波特率參數(shù)。波特率的參數(shù)有:特許寄存器存器PCON的的SMOD位和定時(shí)器的初始值;位和定時(shí)器的初始值;允許定時(shí)允許定時(shí)/計(jì)數(shù)器工作。開(kāi)啟定時(shí)計(jì)數(shù)器工作。開(kāi)啟定時(shí)/計(jì)數(shù)器。計(jì)數(shù)器。 允許串行中斷。程序中我們一般采用中斷接允許串行中斷。程序中我們一般采用中斷接收方式故設(shè)置收方式故設(shè)置EA=1和和ES=1; 編寫(xiě)相應(yīng)的中斷服務(wù)程序。當(dāng)有數(shù)據(jù)達(dá)到串編寫(xiě)相應(yīng)的中斷服務(wù)程序。當(dāng)有數(shù)據(jù)達(dá)到串口時(shí),系統(tǒng)自動(dòng)執(zhí)行

24、所編寫(xiě)的中斷服務(wù)程序;口時(shí),系統(tǒng)自動(dòng)執(zhí)行所編寫(xiě)的中斷服務(wù)程序; 收發(fā)相應(yīng)數(shù)據(jù)。注意發(fā)送操作完成時(shí)要將收發(fā)相應(yīng)數(shù)據(jù)。注意發(fā)送操作完成時(shí)要將TI清零,接收工作完成后需要將清零,接收工作完成后需要將RI清零。清零。 注意:接受數(shù)據(jù)時(shí),設(shè)置注意:接受數(shù)據(jù)時(shí),設(shè)置SCON中的中的REN等于等于1,表示允許串行口接收數(shù)據(jù)。,表示允許串行口接收數(shù)據(jù)。程序設(shè)計(jì)程序設(shè)計(jì) 設(shè)計(jì)串口收發(fā)程序,波特率為設(shè)計(jì)串口收發(fā)程序,波特率為4800bps,接收,接收采用中斷方式:采用中斷方式: 根據(jù)前面的講解,編寫(xiě)串口收發(fā)程序,首先要根據(jù)前面的講解,編寫(xiě)串口收發(fā)程序,首先要確定使用的方式,本次使用方式確定使用的方式,本次使用方式

25、1,PCON設(shè)置為設(shè)置為波特率提高一倍的模式,然后根據(jù)波特率公式計(jì)算波特率提高一倍的模式,然后根據(jù)波特率公式計(jì)算出波特率為出波特率為4800時(shí)給寄存器賦的初值:時(shí)給寄存器賦的初值:方式方式1的波特率的波特率 =(2SMOD/32)(T1溢出率)溢出率)TH1=0 xf3;TL1=0 xf3;因?yàn)橐笫瞻l(fā)同時(shí)進(jìn)行,而且接收采用中斷方因?yàn)橐笫瞻l(fā)同時(shí)進(jìn)行,而且接收采用中斷方式,所以需要開(kāi)相關(guān)中斷,以下是相關(guān)的初始化設(shè)式,所以需要開(kāi)相關(guān)中斷,以下是相關(guān)的初始化設(shè)置:置:SCON = 0 x50; / SCON: 模式模式 1, 8-bit UART, 使能接收使能接收 TMOD |= 0 x20;

26、/* TMOD: timer 1, mode 2, 8-bit */ TH1=0 xf3;TL1=0 xf3;PCON|= 0 x80; /波特率提高一倍波特率提高一倍 TR1 = 1; /* TR1: timer 1 run*/ EA = 1; /*打開(kāi)總中斷打開(kāi)總中斷*/ ES = 1; /*打開(kāi)串口中斷打開(kāi)串口中斷*/ 因?yàn)榇诎l(fā)送的原理都是將相關(guān)因?yàn)榇诎l(fā)送的原理都是將相關(guān)SBUF里的數(shù)據(jù)發(fā)出或里的數(shù)據(jù)發(fā)出或取出,為了方便,這里寫(xiě)出幾個(gè)發(fā)送的相關(guān)函數(shù),在使用時(shí)取出,為了方便,這里寫(xiě)出幾個(gè)發(fā)送的相關(guān)函數(shù),在使用時(shí)可直接給相關(guān)變量賦想要發(fā)送的字符即可,還可發(fā)送字符串可直接給相關(guān)變量賦想要發(fā)

27、送的字符即可,還可發(fā)送字符串和多位數(shù)字:和多位數(shù)字:l/*發(fā)送換行符發(fā)送換行符*/lvoid ComOutEnter(void) l l SBUF = 0 x00;l while(!TI);l TI = 0;l SBUF = 0 x0A; l while(!TI);l TI = 0;ll/*發(fā)送字符函數(shù)發(fā)送字符函數(shù)*/lvoid ComOutStr(unsigned char *Str)ll while(*Str != 0 x00) l l SBUF = *Str; l while(!TI); l TI = 0; l Str+; l ll/*發(fā)送數(shù)字函數(shù)發(fā)送數(shù)字函數(shù)*/ lvoid ComOu

28、tDec(unsigned int hex) llinttochar(hex);lComOutStr(DecStr);l 前面提到接收采用中斷方式,所以需要串口中前面提到接收采用中斷方式,所以需要串口中斷函數(shù),在中斷中將緩沖區(qū)的數(shù)據(jù)再利用串口發(fā)回?cái)嗪瘮?shù),在中斷中將緩沖區(qū)的數(shù)據(jù)再利用串口發(fā)回到到PC機(jī)上,過(guò)程中機(jī)上,過(guò)程中注意清楚標(biāo)志位注意清楚標(biāo)志位:l/*串口中斷程序串口中斷程序*/lvoid UART_SER (void) interrupt 4 /串行中斷服務(wù)程序串行中斷服務(wù)程序ll unsigned char Temp; /定義臨時(shí)變量定義臨時(shí)變量 l if(RI) /判斷是接收中斷產(chǎn)生

29、判斷是接收中斷產(chǎn)生l l RI=0; /標(biāo)志位清零標(biāo)志位清零l Temp=SBUF; /讀入緩沖區(qū)的值讀入緩沖區(qū)的值l SBUF=Temp; /把接收到的值再發(fā)回電腦端把接收到的值再發(fā)回電腦端ll 以上函數(shù)都完成之后即可寫(xiě)主函數(shù),主函數(shù)很簡(jiǎn)以上函數(shù)都完成之后即可寫(xiě)主函數(shù),主函數(shù)很簡(jiǎn)單,只要將初始化函數(shù)加到前面,然后發(fā)個(gè)測(cè)試數(shù)據(jù),單,只要將初始化函數(shù)加到前面,然后發(fā)個(gè)測(cè)試數(shù)據(jù),停止等中斷就可以了:停止等中斷就可以了:l/*主函數(shù)主函數(shù)*/lvoid main (void)ll SCON = 0 x50; / SCON: 模式模式 1, 8-bit UART, 使能接收使能接收l(shuí) TMOD |=

30、0 x20; / TMOD: timer 1, mode 2, 8-bit reload TH1=0 xf3;lTL1=0 xf3;lPCON|= 0 x80; /波特率提高一倍波特率提高一倍l TR1 = 1; /* TR1: timer 1 run */l EA = 1; /*打開(kāi)總中斷打開(kāi)總中斷*/l ES = 1; /*打開(kāi)串口中斷打開(kāi)串口中斷*/lComOutDec(200);ldelay(10);lComOutEnter();lwhile (1) /*主循環(huán)不做任何動(dòng)作主循環(huán)不做任何動(dòng)作*/l lI2C總線概述總線概述 I2C總線是總線是PHLIPS公司推出的一種串行總線,公司推出

31、的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器件同步功能的高性能串行總線。件同步功能的高性能串行總線。 I2C總線只有兩根雙向信號(hào)線。一根是數(shù)據(jù)線總線只有兩根雙向信號(hào)線。一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線,另一根是時(shí)鐘線SCL。 I2C總線通過(guò)上拉電阻接正電源。當(dāng)總線空閑總線通過(guò)上拉電阻接正電源。當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的任一器件輸時(shí),兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號(hào)變低,即各器件的出的低電平,都將使總線的信號(hào)變低,即各器件的SDA及及SCL都是線都是線“與與”關(guān)系。關(guān)系。 每個(gè)接到

32、每個(gè)接到I2C總線上的器件都有唯一的地址。總線上的器件都有唯一的地址。主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到其它器件,這時(shí)主機(jī)即為發(fā)送器。由總線上接據(jù)到其它器件,這時(shí)主機(jī)即為發(fā)送器。由總線上接收數(shù)據(jù)的器件則為接收器。收數(shù)據(jù)的器件則為接收器。 在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)。為了避免混亂,動(dòng)總線傳送數(shù)據(jù)。為了避免混亂, I2C總線要通過(guò)總線要通過(guò)總線仲裁,以決定由哪一臺(tái)主機(jī)控制總線。總線仲裁,以決定由哪一臺(tái)主機(jī)控制總線。 在在80C51單片機(jī)應(yīng)用系統(tǒng)的串行總線擴(kuò)展中,單片機(jī)應(yīng)用系

33、統(tǒng)的串行總線擴(kuò)展中,我們經(jīng)常遇到的是以我們經(jīng)常遇到的是以80C51單片機(jī)為主機(jī),其它接單片機(jī)為主機(jī),其它接口器件為從機(jī)的單主機(jī)情況??谄骷閺臋C(jī)的單主機(jī)情況。 I2C總線的數(shù)據(jù)傳送總線的數(shù)據(jù)傳送一、數(shù)據(jù)位的有效性規(guī)定一、數(shù)據(jù)位的有效性規(guī)定 I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。電平狀態(tài)才允許變化。I2C總線的數(shù)據(jù)傳送總線的數(shù)據(jù)傳送二、起始和終止信號(hào)二、起始和終止

34、信號(hào) SCL線為高電平期間,線為高電平期間,SDA線由高電平向低電線由高電平向低電平的變化表示起始信號(hào);平的變化表示起始信號(hào);SCL線為高電平期間,線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。線由低電平向高電平的變化表示終止信號(hào)。 起始和終止信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)起始和終止信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài);在終止信號(hào)產(chǎn)生后,生后,總線就處于被占用的狀態(tài);在終止信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)??偩€就處于空閑狀態(tài)。 連接到連接到I2C總線上的器件,若具有總線上的器件,若具有I2C總線的硬件總線的硬件接口,則很容易檢測(cè)到起始和終止信號(hào)。對(duì)于不

35、具備接口,則很容易檢測(cè)到起始和終止信號(hào)。對(duì)于不具備I2C總線硬件接口的有些單片機(jī)來(lái)說(shuō),為了檢測(cè)起始和總線硬件接口的有些單片機(jī)來(lái)說(shuō),為了檢測(cè)起始和終止信號(hào),必須保證在每個(gè)時(shí)鐘周期內(nèi)對(duì)數(shù)據(jù)線終止信號(hào),必須保證在每個(gè)時(shí)鐘周期內(nèi)對(duì)數(shù)據(jù)線SDA采采樣兩次。樣兩次。 接收器件收到一個(gè)完整的數(shù)據(jù)字節(jié)后,有可能需要接收器件收到一個(gè)完整的數(shù)據(jù)字節(jié)后,有可能需要完成一些其它工作,如處理內(nèi)部中斷服務(wù)等,可能無(wú)法完成一些其它工作,如處理內(nèi)部中斷服務(wù)等,可能無(wú)法立刻接收下一個(gè)字節(jié),這時(shí)接收器件可以將立刻接收下一個(gè)字節(jié),這時(shí)接收器件可以將SCL線拉成線拉成低電平,從而使主機(jī)處于等待狀態(tài)。直到接收器件準(zhǔn)備低電平,從而使主機(jī)

36、處于等待狀態(tài)。直到接收器件準(zhǔn)備好接收下一個(gè)字節(jié)時(shí),再釋放好接收下一個(gè)字節(jié)時(shí),再釋放SCL線使之為高電平,從線使之為高電平,從而使數(shù)據(jù)傳送可以繼續(xù)進(jìn)行。而使數(shù)據(jù)傳送可以繼續(xù)進(jìn)行。I2C總線的數(shù)據(jù)傳送總線的數(shù)據(jù)傳送三、數(shù)據(jù)傳送格式三、數(shù)據(jù)傳送格式 (1)字節(jié)傳送與應(yīng)答)字節(jié)傳送與應(yīng)答 每一個(gè)字節(jié)必須保證是每一個(gè)字節(jié)必須保證是8位長(zhǎng)度。數(shù)據(jù)傳送時(shí),位長(zhǎng)度。數(shù)據(jù)傳送時(shí),先傳送最高位(先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有都必須跟隨一位應(yīng)答位(即一幀共有9位)。位)。 由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)應(yīng)答時(shí)由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)

37、應(yīng)答時(shí)(如從機(jī)正在進(jìn)行實(shí)時(shí)性的處理工作而無(wú)法接收總(如從機(jī)正在進(jìn)行實(shí)時(shí)性的處理工作而無(wú)法接收總線上的數(shù)據(jù)),它必須將數(shù)據(jù)線置于高電平,而由線上的數(shù)據(jù)),它必須將數(shù)據(jù)線置于高電平,而由主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線的數(shù)據(jù)傳送。主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線的數(shù)據(jù)傳送。 如果從機(jī)對(duì)主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送一如果從機(jī)對(duì)主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送一段時(shí)間后無(wú)法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)可以通段時(shí)間后無(wú)法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)可以通過(guò)對(duì)無(wú)法接收的第一個(gè)數(shù)據(jù)字節(jié)的過(guò)對(duì)無(wú)法接收的第一個(gè)數(shù)據(jù)字節(jié)的“非應(yīng)答非應(yīng)答”通知通知主機(jī),主機(jī)則應(yīng)發(fā)出終止信號(hào)以結(jié)束數(shù)據(jù)的繼續(xù)傳主機(jī),主機(jī)則應(yīng)發(fā)出終止信號(hào)以結(jié)束數(shù)據(jù)

38、的繼續(xù)傳送。送。 當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號(hào)。這個(gè)信后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號(hào)。這個(gè)信號(hào)是由對(duì)從機(jī)的號(hào)是由對(duì)從機(jī)的“非應(yīng)答非應(yīng)答”來(lái)實(shí)現(xiàn)的。然后,從機(jī)來(lái)實(shí)現(xiàn)的。然后,從機(jī)釋放釋放SDA線,以允許主機(jī)產(chǎn)生終止信號(hào)。線,以允許主機(jī)產(chǎn)生終止信號(hào)。 (2)數(shù)據(jù)幀格式)數(shù)據(jù)幀格式 I2C總線上傳送的數(shù)據(jù)信號(hào)是廣義的,既包括總線上傳送的數(shù)據(jù)信號(hào)是廣義的,既包括地址信號(hào),又包括真正的數(shù)據(jù)信號(hào)。地址信號(hào),又包括真正的數(shù)據(jù)信號(hào)。 在起始信號(hào)后必須傳送一個(gè)從機(jī)的地址(在起始信號(hào)后必須傳送一個(gè)從機(jī)的地址(7位),第位

39、),第8位是數(shù)據(jù)的傳送方向位(位是數(shù)據(jù)的傳送方向位(R/),用),用“0”表示主機(jī)發(fā)送數(shù)據(jù)(表示主機(jī)發(fā)送數(shù)據(jù)(T),),“1”表示主機(jī)接收數(shù)據(jù)表示主機(jī)接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào))。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào)結(jié)束。但是,若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)結(jié)束。但是,若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生終止信號(hào),馬上再次發(fā)出起據(jù)傳送,則可以不產(chǎn)生終止信號(hào),馬上再次發(fā)出起始信號(hào)對(duì)另一從機(jī)進(jìn)行尋址。始信號(hào)對(duì)另一從機(jī)進(jìn)行尋址。 在總線的一次數(shù)據(jù)傳送過(guò)程中,可以有以下幾種組合在總線的一次數(shù)據(jù)傳送過(guò)程中,可以有以下幾種組合方式:方式: a、主機(jī)向從機(jī)發(fā)送數(shù)據(jù)

40、,數(shù)據(jù)傳送方向在整個(gè)傳送、主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過(guò)程中不變:過(guò)程中不變: 注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無(wú)陰影注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無(wú)陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。 A表示應(yīng)答,表示應(yīng)答, 表示非應(yīng)答(高電平)。表示非應(yīng)答(高電平)。S表示起表示起始信號(hào),始信號(hào),P表示終止信號(hào)。表示終止信號(hào)。_Ab、主機(jī)在第一個(gè)字節(jié)后,立即由從機(jī)讀數(shù)據(jù)、主機(jī)在第一個(gè)字節(jié)后,立即由從機(jī)讀數(shù)據(jù) c、在傳送過(guò)程中,當(dāng)需要改變傳送方向時(shí),、在傳送過(guò)程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀起始信號(hào)和從機(jī)

41、地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫(xiě)方向位正好反相。寫(xiě)方向位正好反相??偩€的尋址總線的尋址I2C總線協(xié)議有明確的規(guī)定:采用總線協(xié)議有明確的規(guī)定:采用7位的尋址字位的尋址字節(jié)(尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié))。節(jié)(尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié))。 (1)尋址字節(jié)的位定義)尋址字節(jié)的位定義 D7D1位組成從機(jī)的地址。位組成從機(jī)的地址。D0位是數(shù)據(jù)傳送位是數(shù)據(jù)傳送方向位,為方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫(xiě)數(shù)據(jù),為時(shí)表示主機(jī)向從機(jī)寫(xiě)數(shù)據(jù),為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。 主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行

42、比較,如果相同,則認(rèn)位地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,根據(jù)為自己正被主機(jī)尋址,根據(jù)R/位將自己確定為發(fā)送位將自己確定為發(fā)送器或接收器。器或接收器。 從機(jī)的地址由固定部分和可編程部分組成。在從機(jī)的地址由固定部分和可編程部分組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入總線該類(lèi)器件的最大址中可編程部分決定了可接入總線該類(lèi)器件的最大數(shù)目。如一個(gè)從機(jī)的數(shù)目。如一個(gè)從機(jī)的7位尋址位有位尋址位有4位是固定位,位是固定位,3位是可編程位,這時(shí)僅能尋址位是可編程位,這時(shí)僅能尋址8個(gè)同樣的器件,即個(gè)同樣的器

43、件,即可以有可以有8個(gè)同樣的器件接入到該個(gè)同樣的器件接入到該I2C總線系統(tǒng)中??偩€系統(tǒng)中。 (2)尋址字節(jié)中的特殊地址)尋址字節(jié)中的特殊地址 固定地址編號(hào)固定地址編號(hào)0000和和1111已被保留作為特殊用已被保留作為特殊用途。途。 起始信號(hào)后的第一字節(jié)的起始信號(hào)后的第一字節(jié)的8位為位為“0000 0000”時(shí),稱(chēng)為通用呼叫地址。通用呼叫地址的用意在第時(shí),稱(chēng)為通用呼叫地址。通用呼叫地址的用意在第二字節(jié)中加以說(shuō)明。格式為:二字節(jié)中加以說(shuō)明。格式為: 第二字節(jié)為第二字節(jié)為 06H時(shí),所有能響應(yīng)通用呼叫地址時(shí),所有能響應(yīng)通用呼叫地址的從機(jī)器件復(fù)位,并由硬件裝入從機(jī)地址的可編程的從機(jī)器件復(fù)位,并由硬件裝

44、入從機(jī)地址的可編程部分。能響應(yīng)命令的從機(jī)器件復(fù)位時(shí)不拉低部分。能響應(yīng)命令的從機(jī)器件復(fù)位時(shí)不拉低SDA和和SCL線,以免堵塞總線。線,以免堵塞總線。 第二字節(jié)為第二字節(jié)為 04H時(shí),所有能響應(yīng)通用呼叫地址時(shí),所有能響應(yīng)通用呼叫地址并通過(guò)硬件來(lái)定義其可編程地址的從機(jī)器件將鎖定并通過(guò)硬件來(lái)定義其可編程地址的從機(jī)器件將鎖定地址中的可編程位,但不進(jìn)行復(fù)位。地址中的可編程位,但不進(jìn)行復(fù)位。如果第二字節(jié)的方向位如果第二字節(jié)的方向位B為為“1”,則這兩個(gè)字,則這兩個(gè)字節(jié)命令稱(chēng)為硬件通用呼叫命令。節(jié)命令稱(chēng)為硬件通用呼叫命令。 在這第二字節(jié)的高在這第二字節(jié)的高7位說(shuō)明自己的地址。接在總位說(shuō)明自己的地址。接在總線上

45、的智能器件,如單片機(jī)或其他微處理器能識(shí)別線上的智能器件,如單片機(jī)或其他微處理器能識(shí)別這個(gè)地址,并與之傳送數(shù)據(jù)。硬件主器件作為從機(jī)這個(gè)地址,并與之傳送數(shù)據(jù)。硬件主器件作為從機(jī)使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為:使用時(shí),也用這個(gè)地址作為從機(jī)地址。格式為: 在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主在系統(tǒng)中另一種選擇可能是系統(tǒng)復(fù)位時(shí)硬件主機(jī)器件工作在從機(jī)接收器方式,這時(shí)由系統(tǒng)中的主機(jī)器件工作在從機(jī)接收器方式,這時(shí)由系統(tǒng)中的主機(jī)先告訴硬件主機(jī)器件數(shù)據(jù)應(yīng)送往的從機(jī)器件地址,機(jī)先告訴硬件主機(jī)器件數(shù)據(jù)應(yīng)送往的從機(jī)器件地址,當(dāng)硬件主機(jī)器件要發(fā)送數(shù)據(jù)時(shí)就可以直接向指定從當(dāng)硬件主機(jī)器件要發(fā)送數(shù)據(jù)時(shí)就可以直接向

46、指定從機(jī)器件發(fā)送數(shù)據(jù)了。機(jī)器件發(fā)送數(shù)據(jù)了。 (3)起始字節(jié))起始字節(jié) 起始字節(jié)是提供給沒(méi)有起始字節(jié)是提供給沒(méi)有I2C總線接口的單片機(jī)總線接口的單片機(jī)查詢(xún)查詢(xún)I2C總線時(shí)使用的特殊字節(jié)。總線時(shí)使用的特殊字節(jié)。 不具備不具備I2C總線接口的單片機(jī),則必須通過(guò)軟總線接口的單片機(jī),則必須通過(guò)軟件不斷地檢測(cè)總線,以便及時(shí)地響應(yīng)總線的請(qǐng)求。件不斷地檢測(cè)總線,以便及時(shí)地響應(yīng)總線的請(qǐng)求。單片機(jī)的速度與硬件接口器件的速度就出現(xiàn)了較大單片機(jī)的速度與硬件接口器件的速度就出現(xiàn)了較大的差別,為此,的差別,為此,I2C總線上的數(shù)據(jù)傳送要由一個(gè)較總線上的數(shù)據(jù)傳送要由一個(gè)較長(zhǎng)的起始過(guò)程加以引導(dǎo)。長(zhǎng)的起始過(guò)程加以引導(dǎo)。 引導(dǎo)過(guò)

47、程由起始信號(hào)、起始字節(jié)、應(yīng)答位、重引導(dǎo)過(guò)程由起始信號(hào)、起始字節(jié)、應(yīng)答位、重復(fù)起始信號(hào)(復(fù)起始信號(hào)(Sr)組成。)組成。 請(qǐng)求訪問(wèn)總線的主機(jī)發(fā)出起始信號(hào)后,發(fā)送起請(qǐng)求訪問(wèn)總線的主機(jī)發(fā)出起始信號(hào)后,發(fā)送起始字節(jié)(始字節(jié)(0000 0001),另一個(gè)單片機(jī)可以用一個(gè)比),另一個(gè)單片機(jī)可以用一個(gè)比較低的速率采樣較低的速率采樣SDA線,直到檢測(cè)到起始字節(jié)中的線,直到檢測(cè)到起始字節(jié)中的7個(gè)個(gè)“0”中的一個(gè)為止。在檢測(cè)到中的一個(gè)為止。在檢測(cè)到SDA線上的高電線上的高電平后,單片機(jī)就可以用較高的采樣速率,以便尋找平后,單片機(jī)就可以用較高的采樣速率,以便尋找作為同步信號(hào)使用的第二個(gè)起始信號(hào)作為同步信號(hào)使用的第二

48、個(gè)起始信號(hào)Sr。 在起始信號(hào)后的應(yīng)答時(shí)鐘脈沖僅僅是為了和總在起始信號(hào)后的應(yīng)答時(shí)鐘脈沖僅僅是為了和總線所使用的格式一致,并不要求器件在這個(gè)脈沖期線所使用的格式一致,并不要求器件在這個(gè)脈沖期間作應(yīng)答。間作應(yīng)答。80C51單片機(jī)單片機(jī)I2C串行總線器件的接口串行總線器件的接口 總線數(shù)據(jù)傳送的模擬總線數(shù)據(jù)傳送的模擬 主機(jī)可以采用不帶主機(jī)可以采用不帶I2C總線接口的單片機(jī),如總線接口的單片機(jī),如80C51、AT89C2051等單片機(jī),利用軟件實(shí)現(xiàn)等單片機(jī),利用軟件實(shí)現(xiàn)I2C總線的數(shù)據(jù)傳送,即軟件與硬件結(jié)合的信號(hào)模擬??偩€的數(shù)據(jù)傳送,即軟件與硬件結(jié)合的信號(hào)模擬。 一、典型信號(hào)模擬一、典型信號(hào)模擬 為了保證

49、數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的I2C總線總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信總線的起始信號(hào)、終止信號(hào)、發(fā)送號(hào)、終止信號(hào)、發(fā)送“0”及發(fā)送及發(fā)送“1”的模擬時(shí)序的模擬時(shí)序 : 典型信號(hào)模擬子程序典型信號(hào)模擬子程序(1)起始信號(hào))起始信號(hào)lVoid T2CStart(void)llSomeNop( );lSCL = 1;lSomeNop( );lSDA = 0;lSomeNop( );lSCL = 0;lSomeNop( );l(2)終止信號(hào))終止信號(hào)lvoid I2cStop(void)llSDA = 0;lSomeNop( )

50、;lSCL = 1;lSomeNop( );lSDA = 1;lSomeNop( );lSCL = 0;lI2C總線器件的擴(kuò)展總線器件的擴(kuò)展一、擴(kuò)展電路一、擴(kuò)展電路串行串行E2PROM的擴(kuò)展的擴(kuò)展 (1)串行)串行E2PROM典型產(chǎn)品典型產(chǎn)品ATMEL公司的公司的AT24C系列:系列:lAT24C01:128字節(jié)(字節(jié)(1288位);位);lAT24C02:256字節(jié)(字節(jié)(2568位);位);lAT24C04:512字節(jié)(字節(jié)(5128位)位)AT24C08:1K字節(jié)(字節(jié)(1K8位);位);lAT24C16:2K字節(jié)(字節(jié)(2K8位);位); 寫(xiě)入過(guò)程寫(xiě)入過(guò)程 AT24C系列系列E2PRO

51、M芯片地址的固定部分為芯片地址的固定部分為1010,A2、A1、A0引腳接高、低電平后得到確定引腳接高、低電平后得到確定的的3位編碼。形成的位編碼。形成的7位編碼即為該器件的地址碼。位編碼即為該器件的地址碼。 單片機(jī)進(jìn)行寫(xiě)操作時(shí),首先發(fā)送該器件的單片機(jī)進(jìn)行寫(xiě)操作時(shí),首先發(fā)送該器件的7位位地址碼和寫(xiě)方向位地址碼和寫(xiě)方向位“0”(共(共8位,即一個(gè)字節(jié)),位,即一個(gè)字節(jié)),發(fā)送完后釋放發(fā)送完后釋放SDA線并在線并在SCL線上產(chǎn)生第線上產(chǎn)生第9個(gè)時(shí)鐘個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后,信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后,在在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為相應(yīng),單片機(jī)收線上產(chǎn)

52、生一個(gè)應(yīng)答信號(hào)作為相應(yīng),單片機(jī)收到應(yīng)答后就可以傳送數(shù)據(jù)了。到應(yīng)答后就可以傳送數(shù)據(jù)了。 傳送數(shù)據(jù)時(shí),單片機(jī)首先發(fā)送一個(gè)字節(jié)的被寫(xiě)傳送數(shù)據(jù)時(shí),單片機(jī)首先發(fā)送一個(gè)字節(jié)的被寫(xiě)入器件的存儲(chǔ)區(qū)的首地址,收到存儲(chǔ)器器件的應(yīng)答入器件的存儲(chǔ)區(qū)的首地址,收到存儲(chǔ)器器件的應(yīng)答后,單片機(jī)就逐個(gè)發(fā)送各數(shù)據(jù)字節(jié),但每發(fā)送一個(gè)后,單片機(jī)就逐個(gè)發(fā)送各數(shù)據(jù)字節(jié),但每發(fā)送一個(gè)字節(jié)后都要等待應(yīng)答。字節(jié)后都要等待應(yīng)答。 AT24C系列器件片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)系列器件片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)字節(jié)地址后自動(dòng)加字節(jié)地址后自動(dòng)加1,在芯片的,在芯片的“一次裝載字節(jié)數(shù)一次裝載字節(jié)數(shù)”(不同芯片字節(jié)數(shù)不同)限度內(nèi),只需輸入首地址。(不同

53、芯片字節(jié)數(shù)不同)限度內(nèi),只需輸入首地址。裝載字節(jié)數(shù)超過(guò)芯片的裝載字節(jié)數(shù)超過(guò)芯片的“一次裝載字節(jié)數(shù)一次裝載字節(jié)數(shù)”時(shí),數(shù)時(shí),數(shù)據(jù)地址將據(jù)地址將“上卷上卷”,前面的數(shù)據(jù)將被覆蓋。,前面的數(shù)據(jù)將被覆蓋。 當(dāng)要寫(xiě)入的數(shù)據(jù)傳送完后,單片機(jī)應(yīng)發(fā)出終止當(dāng)要寫(xiě)入的數(shù)據(jù)傳送完后,單片機(jī)應(yīng)發(fā)出終止信號(hào)以結(jié)束寫(xiě)入操作。寫(xiě)入信號(hào)以結(jié)束寫(xiě)入操作。寫(xiě)入n個(gè)字節(jié)的數(shù)據(jù)格式個(gè)字節(jié)的數(shù)據(jù)格式 :讀出過(guò)程讀出過(guò)程 單片機(jī)先發(fā)送該器件的單片機(jī)先發(fā)送該器件的7位地址碼和寫(xiě)方向位位地址碼和寫(xiě)方向位“0”(“偽寫(xiě)偽寫(xiě)”),發(fā)送完后釋放),發(fā)送完后釋放SDA線并在線并在SCL線上產(chǎn)生線上產(chǎn)生第第9個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己

54、的個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后,在地址后,在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為相應(yīng)。線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為相應(yīng)。 然后,再發(fā)一個(gè)字節(jié)的要讀出器件的存儲(chǔ)區(qū)的首地然后,再發(fā)一個(gè)字節(jié)的要讀出器件的存儲(chǔ)區(qū)的首地址,收到應(yīng)答后,單片機(jī)要重復(fù)一次起始信號(hào)并發(fā)出器址,收到應(yīng)答后,單片機(jī)要重復(fù)一次起始信號(hào)并發(fā)出器件地址和讀方向位(件地址和讀方向位(“1”),收到器件應(yīng)答后就可以),收到器件應(yīng)答后就可以讀出數(shù)據(jù)字節(jié),每讀出一個(gè)字節(jié),單片機(jī)都要回復(fù)應(yīng)答讀出數(shù)據(jù)字節(jié),每讀出一個(gè)字節(jié),單片機(jī)都要回復(fù)應(yīng)答信號(hào)。當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回以信號(hào)。當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后,單片機(jī)應(yīng)返回以“非

55、應(yīng)答非應(yīng)答”(高電平),并發(fā)出終止信號(hào)以結(jié)束讀出操(高電平),并發(fā)出終止信號(hào)以結(jié)束讀出操作。作。 程序設(shè)計(jì)程序設(shè)計(jì) 利用利用EEPEROM(AT24C02)和)和IIC協(xié)議實(shí)現(xiàn)協(xié)議實(shí)現(xiàn)開(kāi)機(jī)計(jì)數(shù)功能,通過(guò)數(shù)碼管顯示開(kāi)機(jī)的次數(shù):開(kāi)機(jī)計(jì)數(shù)功能,通過(guò)數(shù)碼管顯示開(kāi)機(jī)的次數(shù): 分析可知,需要實(shí)現(xiàn)開(kāi)機(jī)計(jì)數(shù)功能,就需將前分析可知,需要實(shí)現(xiàn)開(kāi)機(jī)計(jì)數(shù)功能,就需將前一次開(kāi)機(jī)的數(shù)據(jù)存入一次開(kāi)機(jī)的數(shù)據(jù)存入24C02中,每次開(kāi)機(jī)的時(shí)候取中,每次開(kāi)機(jī)的時(shí)候取出加出加1再存入,掉電保存。這就需要知道再存入,掉電保存。這就需要知道24C02的操的操作方式。通過(guò)前面可知,作方式。通過(guò)前面可知,24C02可通過(guò)可通過(guò)IIC協(xié)議進(jìn)行

56、協(xié)議進(jìn)行相關(guān)操作,所以需要先了解相關(guān)的時(shí)序,然后通過(guò)相關(guān)操作,所以需要先了解相關(guān)的時(shí)序,然后通過(guò)時(shí)序圖寫(xiě)出相關(guān)的子函數(shù):時(shí)序圖寫(xiě)出相關(guān)的子函數(shù):l/*-啟動(dòng)啟動(dòng)IIC總線總線-*/lvoid Start(void)ll Sda=1;l _nop_();_nop_();l Scl=1;l _nop_();_nop_();_nop_();_nop_();_nop_();l Sda=0;l _nop_();_nop_();_nop_();_nop_();_nop_();l Scl=0;ll/*-停止停止IIC總線總線-*/lvoid Stop(void)llSda=0;l _nop_();l Scl

57、=1;l _nop_();_nop_();_nop_();_nop_();_nop_();l Sda=1;l _nop_();_nop_();_nop_();_nop_();_nop_();l Scl=0;ll/*-應(yīng)答應(yīng)答IIC總線總線-*/lvoid Ack(void)ll Sda=0;l_nop_();_nop_();_nop_();lScl=1;l_nop_();_nop_();_nop_();_nop_();_nop_();lScl=0;l_nop_();_nop_();ll/*-非應(yīng)答非應(yīng)答IIC總線總線-*/lvoid NoAck(void)llSda=1;l_nop_();_n

58、op_();_nop_();lScl=1;l_nop_();_nop_();_nop_();_nop_();_nop_();lScl=0;l_nop_();_nop_();ll/*-發(fā)送一個(gè)字節(jié)發(fā)送一個(gè)字節(jié)-*/lvoid Send(unsigned char Data)l lunsigned char BitCounter=8;lunsigned char temp;ldolltemp=Data;lScl=0;l_nop_();_nop_();_nop_();_nop_();_nop_();lif(temp&0 x80)=0 x80)l Sda=1;lelsel Sda=0;lScl

59、=1;ltemp=Data1;lData=temp;lBitCounter-;llwhile(BitCounter);lScl=0;ll/*-讀入一個(gè)字節(jié)并返回讀入一個(gè)字節(jié)并返回-*/lunsigned char Read(void)llunsigned char temp=0;lunsigned char temp1=0;lunsigned char BitCounter=8;lSda=1;ldollScl=0;l _nop_();_nop_();_nop_();_nop_();_nop_();lScl=1;l_nop_();_nop_();_nop_();_nop_();_nop_();lif(Sda)l temp=temp|0 x01;lelsel temp=temp&0 xfe;lif(BitCou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論