《單片機(jī)嵌入式系統(tǒng)及應(yīng)用》課件-第8章 8051單片機(jī)的串行接口及串行總線_第1頁
《單片機(jī)嵌入式系統(tǒng)及應(yīng)用》課件-第8章 8051單片機(jī)的串行接口及串行總線_第2頁
《單片機(jī)嵌入式系統(tǒng)及應(yīng)用》課件-第8章 8051單片機(jī)的串行接口及串行總線_第3頁
《單片機(jī)嵌入式系統(tǒng)及應(yīng)用》課件-第8章 8051單片機(jī)的串行接口及串行總線_第4頁
《單片機(jī)嵌入式系統(tǒng)及應(yīng)用》課件-第8章 8051單片機(jī)的串行接口及串行總線_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1第8章8051單片機(jī)的串行接口及串行總線機(jī)械工業(yè)出版社28051中的串行接口是一個(gè)全雙工(fullduplex)通信接口,即能同時(shí)進(jìn)行發(fā)送和接收(若可以發(fā)送和接收,但不能同時(shí)進(jìn)行,則稱半雙工;只能發(fā)送或接收的稱為單工),它可以作UART通用異步接收和發(fā)送器用,也可以作同步移位寄存器用。8051串行口有4種工作方式,幀格式有8位、10位和11位,并能設(shè)置各種波特率。本章首先介紹8051單片機(jī)的串行接口,然后介紹了串行總線SPI和I2C通信原理以及單片機(jī)對(duì)SPI和I2C的模擬。3單工、半雙工、雙工的概念4本章內(nèi)容8.18051單片機(jī)的串行通信接口8.28051和RS-232-C標(biāo)準(zhǔn)總線的通信接口*8.3SPI總線及8051單片機(jī)的模擬*8.4I2C串行總線接口及其8051單片機(jī)模擬*8.5單總線1-Wire及其8051的模擬58.18051單片機(jī)的串行通信接口8051中的串行接口是一個(gè)全雙工(fullduplex)通信接口,其數(shù)據(jù)發(fā)送端為TXD,接收端為RXD。所謂全雙工即能同時(shí)進(jìn)行發(fā)送和接收,它可以作UART通用異步接收和發(fā)送器用,也可以作同步移位寄存器用。在8051的串行接口內(nèi)部有兩個(gè)獨(dú)立的接收、發(fā)送緩沖器SBUF,SBUF屬于特殊功能寄存器。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,二者共用一個(gè)字節(jié)地址(99H)。68.1.1串行接口的四種工作方式串行接口的四種工作模式由串行口控制寄存器SCON控制。采用定時(shí)器T1作為波特率發(fā)生器,特殊功能寄存器PCON控制波特率的倍率。中斷允許寄存器IE控制其中斷,中斷優(yōu)先級(jí)寄存器IP控制其中斷優(yōu)先級(jí)。串行接口的中斷入口地址為0023H。7模式0(MODE0):

同步移位寄存器方式。8位數(shù)據(jù)(先為LSB)從引腳RXD接收/移出,引腳TXD輸出移位時(shí)鐘,波特率固定為晶振頻率的1/12。模式0通常用來擴(kuò)展輸入輸出口。圖8-1串行口工作模式0示意圖模式1(MODE1):10位數(shù)據(jù)被發(fā)送(從引腳TXD)或接收(從引腳RXD):1個(gè)啟動(dòng)位,8個(gè)數(shù)據(jù)位,1個(gè)停止位。在接收時(shí),停止位被送入特殊功能寄存器的SCON的RB8位。波特率是可變的。8圖8-2串口工作模式1示意圖9模式2(MODE2):11位數(shù)據(jù)被發(fā)送(從引腳TXD)或接收(從引腳RXD):1個(gè)啟動(dòng)位,8個(gè)數(shù)據(jù)位,可編程的第9個(gè)數(shù)據(jù)位,1個(gè)停止位。發(fā)送時(shí),第9位(SCON的TB8位)可被賦予0或1。例如,可將奇偶校驗(yàn)位送至TB8位。在接收時(shí),停止位被送入特殊功能寄存器SCON的RB8位。模式2的波特率可為1/32或1/64晶振頻率。圖8-3串口工作模式2示意圖1011模式3(MODE3):11位數(shù)據(jù)被發(fā)送(從引腳TXD)或接收(從引腳RXD):1個(gè)啟動(dòng)位,8個(gè)數(shù)據(jù)位,可編程的第9個(gè)數(shù)據(jù)位,1個(gè)停止位。發(fā)送時(shí),第9位(SCON的TB8位)可被賦予0或1。實(shí)際上,除了波特率之外,模式2和模式3是相同的。模式3的波特率是可變的。圖8-4串口工作模式3示意圖12138.1.2串行口控制寄存器1.串行口控制寄存器SCON

串行口控制寄存器SCON,字節(jié)地址98H,所有位均可位尋址,位地址98H~9FH。

9FH9EH9DH9CH9BH9AH99H98H

圖8-5串行口控制寄存器SCON的格式SM0SM1SM2RENTB8RB8TIRI14SM0SM1工作模式功能說明000同步移位寄存器方式,波特率為fosc/12,常用于輸入輸出的擴(kuò)展.011串行通信方式,8位異步收發(fā),波特率可變(由定時(shí)器控制:T1溢出率/n)102串行通信方式,9位異步收發(fā),波特率為fosc/64或fosc/32113串行通信方式,9位異步收發(fā),波特率可變(由定時(shí)器控制:T1溢出率/n)(1)SM0、SM1是串行口4種工作模式選擇位,所對(duì)應(yīng)的工作方式如表8-1:表8-18051串行口的四種工作方式15(2)SM2是多機(jī)通信控制位若SM2=1,則模式2和模式3可用于多機(jī)通訊,9個(gè)數(shù)據(jù)位被收到,第9位數(shù)據(jù)被送入RB8,然后是停止位。僅當(dāng)RB8=1,單片機(jī)在收到停止位后,串行口中斷被激活。若SM2=0,則不論收到的第9位數(shù)據(jù)是“1”還是“0”,都將前8位數(shù)據(jù)送入SBUF,并產(chǎn)生中斷請(qǐng)求。在模式1時(shí),如果SM2=1,則只有收到有效的停止位才會(huì)激活RI;在模式0,SM2必須為0。16(3)REN允許串行接收位,由軟件置“1”或清“0”。

REN=1,允許串行接收

REN=0,禁止串行接收(4)TB8為要發(fā)送的第9位數(shù)據(jù),在模式2和3時(shí),TB8是要發(fā)送數(shù)據(jù)的第9位數(shù)據(jù)。由軟件置“1”或清“0”。雙機(jī)通信時(shí),TB8一般作為奇偶校驗(yàn)位使用;多機(jī)通信中用來表示主機(jī)發(fā)送的數(shù)據(jù)是地址幀還是數(shù)據(jù)幀。TB8=1,為地址幀,TB8=0為數(shù)據(jù)幀。17(5)RB8為接收到的第9位,在模式2和3時(shí),RB8存放接收到的第9位數(shù)據(jù)。在模式1,如果SM2=0,RB8是收到的停止位。在模式0,不使用RB8。(6)TI發(fā)送中斷標(biāo)志位,串行口工作在模式0時(shí),串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí)由硬件置“1”。在其他工作模式,串行口發(fā)送停止位的開始時(shí)置“1”。TI=1,表示一幀數(shù)據(jù)發(fā)送結(jié)束,TI的狀態(tài)可供軟件查詢,也可申請(qǐng)中斷。CPU相應(yīng)中斷后,向SBUF寫入要發(fā)送的下一幀數(shù)據(jù)。TI必須由軟件清“0”。18(7)RI接收中斷標(biāo)志位,串行口工作在模式0時(shí),接受完第8位數(shù)據(jù)結(jié)束時(shí)由硬件置“1”。在其他工作模式,串行口接收到停止位的開始時(shí)置“1”。RI=1,表示一幀數(shù)據(jù)接收完畢,并申請(qǐng)中斷,要求CPU從SBUF取走數(shù)據(jù)。RI的狀態(tài)也可供軟件查詢,RI必須由軟件清“0”。192.特殊功能寄存器PCON

特殊功能寄存器PCON字節(jié)地址為87H,不能位尋址。

D7D6D5D4D3D2D1D0SMODSMOD:波特率選擇位,也稱SMOD位為波特率倍增位,在串行口方式1、方式2、方式3時(shí),波特率與SMOD有關(guān),當(dāng)SMOD=1時(shí),波特率提高一倍。復(fù)位時(shí),SMOD=0。20波特率(baudrate)

波特率為每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為bit/s,即位/秒。波特率用于表征數(shù)據(jù)傳輸?shù)乃俣?,波特率越高,?shù)據(jù)傳輸速度越快。但波特率和字符的實(shí)際傳輸速率不同,字符的實(shí)際傳輸速率是每秒內(nèi)所傳字符幀的幀數(shù),和字符幀格式有關(guān)。218.1.3波特率的產(chǎn)生1.模式0的波特率

模式0的波特率是固定的,即:2.模式2的波特率

模式2的波特率取決于特殊功能寄存器PCON的SMOD位。如SMOD=0,波特率是晶振頻率的1/64;如果SMOD=1,則波特率等于晶振頻率的1/32。即模式2的波特率按下式計(jì)算:223.模式1和模式3的波特率在8051系統(tǒng)中,模式1和模式3的波特率取決于定時(shí)器1的溢出率;在8052中,波特率取決于定時(shí)器1或定時(shí)器2。(1)利用定時(shí)器1產(chǎn)生波特率模式1和模式3的波特率取決于定時(shí)器1的溢出率和SMOD位的值,即:23實(shí)際上,當(dāng)定時(shí)器T1作為波特率發(fā)生器使用時(shí),通常是工作在模式2,即自動(dòng)重裝計(jì)數(shù)初值的8位定時(shí)器,此時(shí)TL1作計(jì)數(shù)用,自動(dòng)重裝的值在TH1內(nèi)。假設(shè)計(jì)數(shù)的預(yù)置值(初始值)為X,那么每過256-X個(gè)機(jī)器周期,定時(shí)器溢出一次。為了避免溢出而產(chǎn)生不必要的中斷,此時(shí)應(yīng)禁止T1中斷。在這種情況下,串口的波特率由下式?jīng)Q定:

另外,用戶只要將定時(shí)器1配置為16位定時(shí)器方式(TMOD的高4位等于0001B,即定時(shí)器T1工作模式MODE=1),且利用定時(shí)器1中斷實(shí)現(xiàn)軟件重載,就可得到非常低的波特率。表8-2列出了用定時(shí)器1可能得到的波特率。2425波特率晶振頻率(MHz)SMOD定時(shí)器1MODE重裝值(TH1)MODE0最大:1M12××××MODE2最大:375K121×××MODE1MODE362.5K19.2K9.6K4.8K2.4K1.2K137.51101211.05911.05911.05911.05911.059126110000000000000022222222FFHFDHFDHFAHF4HE8H1DH72H表8-2定時(shí)器1產(chǎn)生的波特率26串行口工作之前,應(yīng)對(duì)其進(jìn)行初始化,主要是設(shè)置產(chǎn)生波特率的定時(shí)器1、串行口控制和中斷控制。具體步驟如下:確定T1的工作方式(編程TMOD寄存器);計(jì)算T1的初值,裝載TH1、TL1;啟動(dòng)T1(編程TCON中的TR1位);確定串行口控制(編程SCON寄存器);串行口在中斷方式工作時(shí),要進(jìn)行中斷設(shè)置(編程IE、IP寄存器)。27(2)用定時(shí)器2產(chǎn)生波特率

定時(shí)器2波特率發(fā)生器模式和自動(dòng)重裝模式是類似的。在自動(dòng)重裝模式中,TH2的溢出是由軟件預(yù)置的在寄存器RCAP2H和RCAP2L的16位值裝入定時(shí)器2。模式1和模式3的波特率取決于定時(shí)器2的溢出率,如下式所示:28定時(shí)器2作為定時(shí)器運(yùn)行和波特率發(fā)生器略有區(qū)別:作為定時(shí)器運(yùn)行時(shí),計(jì)時(shí)單位為機(jī)器周期(一個(gè)機(jī)器周期=12個(gè)時(shí)鐘周期),而作為波特率發(fā)生器的計(jì)時(shí)單位則是狀態(tài)周期(一個(gè)狀態(tài)周期=2個(gè)振蕩周期)。因而模式1和模式3的波特率也可由下式給出:說明1:在作為波特率發(fā)生器時(shí),TH2的溢出并不置位TF2,也不產(chǎn)生中斷。因而定時(shí)器2作為波特率發(fā)生器時(shí)不需要禁止定時(shí)器2中斷。說明2:如果EXEN2被置位,引腳T2EX上從1到0的跳變將置位EXF2,但不會(huì)導(dǎo)致重裝。因此,定時(shí)器2作為波特率發(fā)生器時(shí),T2EX可作為擴(kuò)展外部中斷。說明3:定時(shí)器2在運(yùn)行中,不要試圖讀或?qū)慣H2(或TL2)??梢宰x寄存器RCAP,但不能寫RCAP,因?yàn)檫@可能導(dǎo)致寫操作和重裝操作重疊而導(dǎo)致錯(cuò)誤,用戶應(yīng)該在對(duì)定時(shí)器2操作前關(guān)閉定時(shí)器2。29308.1.4多個(gè)單片機(jī)之間的通信1.多機(jī)通訊控制位(SCON中的SM2)

要保證主機(jī)與所選擇的從機(jī)實(shí)現(xiàn)可靠地通訊,必須保證串口具有識(shí)別功能。SCON中的SM2位就是滿足這一條件而設(shè)置的多機(jī)通訊控制位。⑴若SM2=1,在串行口以模式2(或模式3)接收時(shí),表示置多機(jī)通訊功能位,這時(shí)有兩種可能情況:第一種情況:接收到的第9位數(shù)據(jù)為1時(shí),數(shù)據(jù)才裝入SBUF,并置中斷標(biāo)志RI=1向CPU發(fā)出中斷請(qǐng)求;第二種情況:接收到的第9位數(shù)據(jù)為0時(shí),則不產(chǎn)生中斷標(biāo)志,信息將拋棄。

31⑵若SM2=0,則接收的第9位數(shù)據(jù)不論是0還是1,都產(chǎn)生RI=1中斷標(biāo)志,接收到的數(shù)據(jù)裝入SBUF中。2.多機(jī)通訊工作過程(1)從機(jī)串行口編程為模式2或模式3接收,且置“1”SM2和REN位;(2)主機(jī)先將從機(jī)地址發(fā)給各從機(jī),主機(jī)發(fā)出的地址信息的第9位為1,各從機(jī)接收到的第9位信息RB8為1,且由于SM2=1,則置“1”RI,各從機(jī)響應(yīng)中斷,執(zhí)行中斷程序。在中斷服務(wù)子程序中,判主機(jī)送來的地址是否和本機(jī)地址相符合,相符則該從機(jī)清“0”SM2位,準(zhǔn)備接收主機(jī)的數(shù)據(jù)或命令;若不符,則保持SM2=1狀態(tài)。32(3)接著主機(jī)發(fā)送數(shù)據(jù)幀,此時(shí)各從機(jī)串行口接收到的RB8=0,只有地址相符合的從機(jī)系統(tǒng)(即已清“0”SM2位的從機(jī))才能激活RI,從而進(jìn)入中斷,在中斷程序中接收主機(jī)的數(shù)據(jù)(或命令);其它的從機(jī)因SM2=1,又RB8=0不激活中斷標(biāo)志RI,不能進(jìn)入中斷,接收的數(shù)據(jù)丟失。33圖8-7多機(jī)系統(tǒng)示意圖

3.多機(jī)通信舉例從機(jī)的地址分別為00H,01H和02H,從機(jī)系統(tǒng)由初始化程序(或相關(guān)處理程序)將串行口編程為模式2或模式3接收,即9位異步通訊方式,且置“1”SM2和REN,允許串行口中斷。在主機(jī)和某一個(gè)從機(jī)通訊之前,先將從機(jī)地址發(fā)送給各個(gè)從機(jī)系統(tǒng),接著才傳送數(shù)據(jù)或命令。主機(jī)發(fā)出的地址信息的第9位為1,數(shù)據(jù)(包括命令)信息的第9位為0。圖8-7的多機(jī)系統(tǒng)是主從式,由主機(jī)控制處理器之間的通訊,從機(jī)和從機(jī)之間的通訊只能經(jīng)主機(jī)才能實(shí)現(xiàn)。34358.28051和RS-232-C標(biāo)準(zhǔn)總線的通信接口

8.2.1RS-232-C接口引腳描述

RS-232-C標(biāo)準(zhǔn)規(guī)定接口有25根連線,D型插頭和插座,采用25芯引腳或9芯引腳的連接器,RS-232-C標(biāo)準(zhǔn)接口如圖8-8所示:圖8-8RS-232-C標(biāo)準(zhǔn)接口圖雖然RS-232-C標(biāo)準(zhǔn)接口定義了25條連線,但通常只有以下9個(gè)信號(hào)經(jīng)常使用,其對(duì)應(yīng)關(guān)系如表8-3所示。36DB9引腳DB25引腳功能簡寫說明18DataCarrierDetectDCD數(shù)據(jù)載波檢出23ReceiveRXD接收數(shù)據(jù)32TransmitTXD發(fā)送數(shù)據(jù)420DataTerminalReadyDTR數(shù)據(jù)終端準(zhǔn)備57GroundGND地線66DataSetReadyDSR數(shù)據(jù)準(zhǔn)備好74RequestToSendRTS請(qǐng)求發(fā)送85ClearToSendCTS清除發(fā)送922RingIndicatorRI振鈴指令

表8-3RS-232-C標(biāo)準(zhǔn)接口引腳功能(DB9/DB25)378.2.2RS-232-C接口的具體規(guī)定RS-232-C標(biāo)準(zhǔn)(協(xié)議)的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中EIA(ElectronicIndustryAssociation)代表美國電子工業(yè)協(xié)會(huì),RS(RecommendStandard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識(shí)號(hào),C代表RS232的最新一次修改(1969),在這之前,有RS232B、RS232A。它規(guī)定連接電纜和機(jī)械、電氣特性、信號(hào)功能及傳送過程。381.電氣特性

EIA-RS-232-C對(duì)電氣特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。在TXD和RXD上采用負(fù)邏輯:邏輯1=-3V~-15V;邏輯0=+3~+15V;在RTS、CTS、DSR、DTR和DCD等控制線上:信號(hào)有效(接通,ON狀態(tài),正電壓)=+3V~+15V

信號(hào)無效(斷開,OFF狀態(tài),負(fù)電壓)=-3V~-15V392.傳輸距離RS-232-C標(biāo)準(zhǔn)適用于DCE和DTE之間的串行二進(jìn)制通信,最高的數(shù)據(jù)速率為19.2kbit/s,在使用此波特率進(jìn)行通信時(shí),最大傳送距離在20m之內(nèi)。降低波特率可以增加傳輸距離。RS-232-C標(biāo)準(zhǔn)規(guī)定,驅(qū)動(dòng)器允許有2500pF的電容負(fù)載,通信距離將受此電容限制,例如,采用150pF/m的通信電纜時(shí),最大通信距離約為17m;若每米電纜的電容量減小,通信距離可以增加。傳輸距離短的另一原因是RS-232-C屬單端信號(hào)傳送,存在共地噪聲和不能抑制共模干擾等問題,因此一般用于20m以內(nèi)的通信。408.2.38051和RS-232-C的接口由于單片機(jī)輸入、輸出為TTL電平,而PC配置的是RS-232-C標(biāo)準(zhǔn)串行接口,兩者的電氣特性不一致,因此,要完成PC與單片機(jī)之間的數(shù)據(jù)通信,必須進(jìn)行電平轉(zhuǎn)換。MC1488負(fù)責(zé)將TTL電平轉(zhuǎn)換為RS-232-C電平;而MC1489則是把RS-232-C電平轉(zhuǎn)換為TTL電平。如圖8-9所示。41圖8-98051單片機(jī)和PC采用MC1488和MC1489通信連線圖當(dāng)電路的傳輸距離較遠(yuǎn)時(shí),即使使用雙絞線也容易引起干擾,所以在MC1488的輸出端最好外加電容濾波,電容的值通常為0.01μF,此電路結(jié)構(gòu)簡單,可靠性好。它的缺點(diǎn)是需要提供DC±12V和DC5V雙電源,因而存在著一定的局限性。圖8-10是單片機(jī)與計(jì)算機(jī)之間采用MAX232芯片通信的連接示意圖。MAX232是MAXIM公司生產(chǎn)的包含兩路接收器和驅(qū)動(dòng)器的IC芯片,其芯片內(nèi)部具有電源電壓變換器,可以把輸入的+5V電壓變換成為RS-232-C輸出電平所需要的±10V。此芯片只需+5V供電,因此它的適應(yīng)性更強(qiáng)。42圖8-10單片機(jī)和PC采用MAX232通信連線圖

43采用RS-232-C接口存在的問題傳輸距離短,傳輸速率低

RS-232-C總線標(biāo)準(zhǔn)受電容允許值的約束,使用時(shí)傳輸距離一般不要超過15米(線路條件好時(shí)也不超過幾十米)。最高傳送速率為20Kbps。2.有電平偏移 RS-232-C總線標(biāo)準(zhǔn)要求收發(fā)雙方共地。通信距離較大時(shí),收發(fā)雙方的地電位差別較大,在信號(hào)地上將有比較大的地電流并產(chǎn)生壓降。3.抗干擾能力差

RS-232-C在電平轉(zhuǎn)換時(shí)采用單端輸入輸出,在傳輸過程中當(dāng)干擾和噪聲混在正常的信號(hào)中。為了提高信噪比,RS-232-C總線標(biāo)準(zhǔn)不得不采用比較大的電壓擺幅。4445

*8.3SPI總線及8051單片機(jī)的模擬

采用串行總線技術(shù)可以使系統(tǒng)的硬件設(shè)計(jì)大大簡化、系統(tǒng)的體積減小、可靠性提高。同時(shí),系統(tǒng)的更改和擴(kuò)充極為容易。常用的串行擴(kuò)展總線有:I2C(InterICBUS)總線、單總線(1-WIREBUS)、SPI(SerialPeripheralInterface)總線及Microwire/PLUS等。

SPI是一種高速全雙工同步通信總線,支持這種總線的器件很多,包括I/O擴(kuò)展,EEPROM、ADC、DAC、時(shí)鐘以及LCD顯示驅(qū)動(dòng)器件等。在以單片機(jī)為基礎(chǔ)的嵌入式應(yīng)用系統(tǒng)中,如果傳輸速度要求不是太高,使用SPI總線可以增加應(yīng)用系統(tǒng)接口器件的種類,提高應(yīng)用系統(tǒng)的性能。但是,有的單片機(jī)硬件上沒有SPI總線接口,不便于系統(tǒng)設(shè)計(jì)。本節(jié)利用時(shí)序模擬,實(shí)現(xiàn)了8051單片機(jī)對(duì)SPI總線的控制。8.3.1SPI總線規(guī)范1.SPI總線的電氣特征

SPI串行通信接口需要使用4條線,如圖8-11:串行時(shí)鐘線(SCLK);主器件數(shù)據(jù)輸入/從器件數(shù)據(jù)輸出MISO;主器件數(shù)據(jù)輸出/從器件數(shù)據(jù)輸入MOSI;從器件使能信號(hào)SS,低電平有效。46圖8-11SPI總線器件連接圖4748主要特點(diǎn)是:(1)支持全雙工同步傳輸;(2)2種工作模式:主模式、從模式;(3)提供可編程串行時(shí)鐘;(4)4種可編程串行時(shí)鐘;(5)發(fā)送數(shù)據(jù)傳送結(jié)束標(biāo)志;(6)寫沖突保護(hù)、總線競爭保護(hù)。492.SPI數(shù)據(jù)傳輸時(shí)序 SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,對(duì)于不同的串行接口芯片,其時(shí)鐘極性是不同的。有的是在時(shí)鐘SCLK的上升沿接收數(shù)據(jù),在下降沿發(fā)送數(shù)據(jù);而有的器件則相反。50圖8-12SPI時(shí)序圖513.SPI接口模擬對(duì)于在SCK的上升沿輸入(接收)數(shù)據(jù)和在下降沿輸出(發(fā)送)數(shù)據(jù)的器件,一般應(yīng)將其串行時(shí)鐘輸出口P1.1的初始狀態(tài)設(shè)置為1,而在允許接口后再置P1.1為0。這樣,MCU在輸出1位SCK時(shí)鐘的同時(shí),將使接口芯片串行左移,從而輸出1位數(shù)據(jù)至8051單片機(jī)的P1.3口(模擬MCU的MISO線),此后再置P1.1為1,使8051系列單片機(jī)從P1.0(模擬MCU的MOSI線)輸出1位數(shù)據(jù)(先為高位)至串行接口芯片。至此,模擬1位數(shù)據(jù)輸入輸出便宣告完成。此后再置P1.1為0,模擬下1位數(shù)據(jù)的輸入輸出……,依此循環(huán)8次,即可完成1次通過SPI總線傳輸8位數(shù)據(jù)的操作。52對(duì)于在SCK的下降沿輸入數(shù)據(jù)和上升沿輸出數(shù)據(jù)的器件,則應(yīng)取串行時(shí)鐘輸出的初始狀態(tài)為0,即在接口芯片允許時(shí),先置P1.1為1,以便外圍接口芯片輸出1位數(shù)據(jù)(MCU接收1位數(shù)據(jù)),之后再置時(shí)鐘為0,使外圍接口芯片接收1位數(shù)據(jù)(MCU發(fā)送1位數(shù)據(jù)),從而完成1位數(shù)據(jù)的傳送。538.3.2SPI總線的8051單片機(jī)模擬1.單片機(jī)串行輸入子程序SPI2N

從MISO線上接收8位數(shù)據(jù)并放入寄存器R0中的應(yīng)用子程序如下:SPI2N: SETBP1.1 ;使P1.1(時(shí)鐘)輸出為1 CLRP1.2 ;選擇從機(jī) MOVR1,#08H ;置循環(huán)次數(shù)MISO: CLRP1.1;使P1.1(時(shí)鐘)輸出為0,產(chǎn)生下降沿 NOP ;延時(shí) NOP MOVC, P1.3 ;從機(jī)輸出MISO送進(jìn)位C RLCA ;左移至累加器ACC SETBP1.1 ;使P1.0(時(shí)鐘)輸出為1 DJNZR1,MISO ;判斷是否循環(huán)8次(8位數(shù)據(jù)) MOVR0,A ;8位數(shù)據(jù)送R0 RET542.單片機(jī)串行輸出子程序SPIOUT

將8051單片機(jī)中R0寄存器的內(nèi)容傳送到MOSI線上的程序如下:SPIOUT: SETBP1.1 ;使P1.1(時(shí)鐘)輸出為1 CLRP1.2 ;選擇從機(jī) MOVR1,#08H ;置循環(huán)次數(shù) MOVA,R0 ;8位數(shù)據(jù)送累加器ACCMOSI: CLRP1.1 ;使P1.1(時(shí)鐘)輸出為0,產(chǎn)生下降沿 NOP ;延時(shí) NOP RLCA ;左移至累加器ACC最高位至C MOVP1.0,C ;進(jìn)位C送從機(jī)輸入MOSI線上 SETBP1.1 ;使P1.1(時(shí)鐘)輸出為1 DJNZR1,MOSI ;判是否循環(huán)8次(8位數(shù)據(jù)) RET553.單片機(jī)串行輸入/輸出子程序SPI2O

將8051單片機(jī)R0寄存器的內(nèi)容傳送到MOSI,同時(shí)從MISO接收8位數(shù)據(jù)的程序如下:SPI2O: SETBP1.1 ;使P1.1(時(shí)鐘)輸出為1 CLRP1.2 ;選擇從機(jī) MOVR1,#08H ;置循環(huán)次數(shù) MOVA,R0 ;8位數(shù)據(jù)送累加器ACCMSIO: CLRP1.1 ;使P1.1(時(shí)鐘)輸出為0,產(chǎn)生下降沿 NOP ;延時(shí) NOP MOVC,P1.3 ;從機(jī)輸出MISO送進(jìn)位C RLCA ; MOVP1.0,C ;進(jìn)位C送從機(jī)輸入 SETBP1.1 ;使P1.1(時(shí)鐘)輸出為1 DJNZR1,MSIO;判斷是否循環(huán)8次(8位數(shù)據(jù)) RET56*8.4I2C串行總線接口及其8051單片機(jī)模擬8.4.1I2C串行總線結(jié)構(gòu)和基本特性I2C總線結(jié)構(gòu)I2C總線是PHLIPS公司推出的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器件同步功能的高性能串行總線。

I2C總線只有兩根雙向信號(hào)線。一根是數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。如下圖所示。57I2C總線結(jié)構(gòu)58I2C總線的SDA和SCL管腳都是漏極開路(或集電極開路)輸出結(jié)構(gòu)。因此實(shí)際使用時(shí),SDA和SCL信號(hào)線都必須要加上拉電阻Rp(Pull-UpResistor),上拉電阻一般取值3~10KΩ。如圖8-13所示。I2C總線通過上拉電阻接正電源。當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號(hào)變低,即各器件的SDA及SCL都是線“與”關(guān)系。59圖8-13I2C總線信號(hào)連接示意圖602.開漏結(jié)構(gòu)的優(yōu)點(diǎn)(1)當(dāng)總線空閑時(shí),這兩條信號(hào)線都保持高電平,不會(huì)消耗電流。(2)電氣兼容性好,上拉電阻接5V(或3V)電源就能與5V(或3V)邏輯器件接口。(3)不同器件的SDA之間、SCL之間分別可以直接相連,不需要額外的轉(zhuǎn)換電路。613.I2C總線的優(yōu)點(diǎn)(1)地址唯一:每個(gè)接到I2C總線上的器件都有唯一的地址。器件之間是靠不同的編址來區(qū)分的,而不需要附加的I/O線或地址譯碼部件。(2)總線仲裁:在多主機(jī)系統(tǒng)中,可能同時(shí)有幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)。為了避免混亂,I2C總線要通過總線仲裁,以決定由哪一臺(tái)主機(jī)控制總線。(3)增減方便:總線上不僅可以同時(shí)掛接多個(gè)器件,而且可以隨時(shí)新增或者刪除器件。用軟件可以很容易實(shí)現(xiàn)I2C總線的自檢功能,能夠及時(shí)發(fā)現(xiàn)總線上的變動(dòng)。62(4)電氣兼容:因器件之間以開漏I/O互聯(lián),只要選取適當(dāng)?shù)纳侠娮杈湍茌p易實(shí)現(xiàn)3V/5V邏輯電平的兼容,而不需要額外的轉(zhuǎn)換。(5)通信方式:支持多種通信方式,一主多從是最常見的通信方式。此外還支持雙主機(jī)通信、多主機(jī)通信以及廣播模式等等。(6)其它優(yōu)點(diǎn):通信速率高(I2C總線標(biāo)準(zhǔn)傳輸速率為100kbps),兼顧低速通信(也可以低至幾kbps以下,用以支持低速器件)。634.I2C總線的基本特性(1)數(shù)據(jù)位的有效性規(guī)定I2C總線協(xié)議規(guī)定數(shù)據(jù)在時(shí)鐘信號(hào)的高電平期間有效,即高電平有效。除在I2C總線的起始和結(jié)束點(diǎn)外,I2C總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定;只有在時(shí)鐘線上的信號(hào)為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。

64圖8-14數(shù)據(jù)位的有效性示意圖65(2)起始和終止信號(hào)SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號(hào);SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)。起始信號(hào)和終止信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài);在終止信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)。66圖8-15數(shù)據(jù)位的起始信號(hào)和終止信號(hào)示意圖678.4.2I2C串行總線時(shí)序和數(shù)據(jù)傳輸

1.字節(jié)的傳送與應(yīng)答數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位,來告知發(fā)送器接收器接收數(shù)據(jù)的情況,應(yīng)答位的時(shí)鐘脈沖仍由主機(jī)產(chǎn)生,而應(yīng)答位的數(shù)據(jù)狀態(tài)則遵循“誰接收誰產(chǎn)生”的原則,即總是由接收器產(chǎn)生應(yīng)答位。如果由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)應(yīng)答或者從機(jī)雖然對(duì)主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送一段時(shí)間后無法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)必須將數(shù)據(jù)線置于高電平(即“非應(yīng)答”),而由主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線的數(shù)據(jù)傳送。如圖8-16所示。68圖8-16字節(jié)的傳送與應(yīng)答示意圖692.幀格式數(shù)據(jù)傳輸I2C總線上傳送的數(shù)據(jù)信號(hào)是廣義的,既包括地址信號(hào),又包括真正的數(shù)據(jù)信號(hào)。在起始信號(hào)(用S表示)后,傳送的前7位是一個(gè)從機(jī)的地址;第8位是數(shù)據(jù)的傳送方向位(R/),用“0”表示主機(jī)向從機(jī)寫入數(shù)據(jù)(),即主機(jī)發(fā)送數(shù)據(jù),“1”表示主機(jī)從從機(jī)讀入數(shù)據(jù)(R),即主機(jī)接收數(shù)據(jù);第9位為應(yīng)答信號(hào)(應(yīng)答用A表示,不應(yīng)答用

表示),每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào)(用P表示)結(jié)束。如果主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,就可以不產(chǎn)生終止信號(hào),而是再次發(fā)出起始信號(hào)對(duì)另一從機(jī)進(jìn)行尋址。

70I2C串行總線的幀格式71(1)主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過程中不變。若連續(xù)發(fā)送多個(gè)字節(jié)的數(shù)據(jù),從機(jī)每收到1個(gè)字節(jié)的數(shù)據(jù)后就要向主機(jī)發(fā)一個(gè)應(yīng)答信號(hào);否則,主機(jī)發(fā)出停止信號(hào),中斷數(shù)據(jù)的傳輸。如果從機(jī)接收的是最后一個(gè)字節(jié)的數(shù)據(jù),可以不做應(yīng)答,主機(jī)就會(huì)發(fā)出停止信號(hào),數(shù)據(jù)的傳輸和接收完成。主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的基本格式如圖8-17所示、數(shù)據(jù)的時(shí)序圖如圖8-18(僅發(fā)送1個(gè)字節(jié))、如圖8-19(連續(xù)發(fā)送n個(gè)字節(jié))所示。S從機(jī)地址0A數(shù)據(jù)A數(shù)據(jù)A/

P72圖8-17主機(jī)向從機(jī)發(fā)送數(shù)據(jù)的基本格式圖8-18主機(jī)向從機(jī)發(fā)送1個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖圖8-19主機(jī)向從機(jī)發(fā)送n個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖73(2)主機(jī)由從機(jī)讀取數(shù)據(jù),數(shù)據(jù)傳送方向在整個(gè)傳送過程中不變主機(jī)由從機(jī)讀取數(shù)據(jù)的基本格式如圖8-20所示、數(shù)據(jù)的時(shí)序圖如圖8-21(僅讀取1個(gè)字節(jié))、如圖8-22(連續(xù)讀取n個(gè)字節(jié))所示。若連續(xù)讀取多個(gè)字節(jié)的數(shù)據(jù),主機(jī)每收到1個(gè)字節(jié)的數(shù)據(jù)后就要向從機(jī)發(fā)一個(gè)應(yīng)答信號(hào);否則,主機(jī)發(fā)出停止信號(hào),中斷數(shù)據(jù)的傳輸。當(dāng)主控器接收數(shù)據(jù)時(shí),在最后一個(gè)數(shù)據(jù)字節(jié),必須發(fā)送一個(gè)非應(yīng)答信號(hào),使受控器釋放數(shù)據(jù)線,以便主控器產(chǎn)生一個(gè)停止信號(hào)來終止總線的數(shù)據(jù)傳送。S從機(jī)地址1A數(shù)據(jù)A數(shù)據(jù)P74圖8-20主機(jī)由從機(jī)讀取數(shù)據(jù)的基本格式圖8-21主機(jī)由從機(jī)讀取1個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖圖8-22主機(jī)由從機(jī)讀取n個(gè)字節(jié)數(shù)據(jù)的時(shí)序圖(3)在傳送過程中,當(dāng)需要改變傳送方向時(shí),起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反相。數(shù)據(jù)的基本格式如圖8-23所示,數(shù)據(jù)傳輸?shù)臅r(shí)序圖讀者可以參照前面的進(jìn)行繪制。75S從機(jī)地址0A數(shù)據(jù)A/S從機(jī)地址1A數(shù)據(jù)P圖8-23起始信號(hào)和地址重復(fù)的格式768.4.3I2C總線尋址與通信過程

1.總線的尋址(1)尋址字節(jié)的位定義尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié),其中D7~D1位組成從機(jī)的地址,D0位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫數(shù)據(jù),為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)。從機(jī)地址R/D7D6D5D4D3D2D1D0圖8-24尋址字節(jié)的位定義77

(2)尋址字節(jié)中的特殊地址從機(jī)的地址由固定部分和可編程部分組成。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入總線該類器件的最大數(shù)目。如一個(gè)從機(jī)的7位尋址位有4位是固定位,3位是可編程位,這時(shí)僅能尋址8個(gè)同樣的器件,即可以有8個(gè)同樣的器件接入到該I2C總線系統(tǒng)中。固定地址編號(hào)0000和1111已被保留作為特殊用途。

78固定地址可編程地址R/說明D7D6D5D4D3D2D1D000000000通用呼叫地址00000001起始字節(jié)0000001×CBUS地址(詳見說明1、說明2)0000010×為不同總線的保留地址0000011×保留00001×××保留11111×××保留11110×××十位從機(jī)地址表8-9I2C總線特殊地址表說明1:在混合的總線結(jié)構(gòu)中I2C總線器件必須不能響應(yīng)CBUS的報(bào)文。因此,保留了一個(gè)兼容I2C總線器件不會(huì)響應(yīng)的特殊CBUS地址(0000001X)。發(fā)送CBUS地址后,DLEN線被激活。在停止條件后,所有器件再次準(zhǔn)備好接收數(shù)據(jù)。說明2:CBUS地址已被保留,使可以在相同的系統(tǒng)內(nèi)部混合兼容CBUS和兼容I2C總線的器件,在接收到這個(gè)地址時(shí)I2C總線兼容的設(shè)備不能響應(yīng)。792.通信過程

I2C總線是由數(shù)據(jù)線SDA和時(shí)鐘線SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在單片機(jī)與被控IC之間,最高傳送速率100kbps。各種I2C器件均并聯(lián)在這條總線上,每一個(gè)I2C模塊都有唯一地址。每一個(gè)接在I2C總線上的模塊,既可以是主控器(或被控器),也可以是發(fā)送器(或接收器),這取決于它所要完成的功能。I2C總線在傳送數(shù)據(jù)過程中共有四種類型信號(hào),它們分別是:起始信號(hào)、停止信號(hào)﹑應(yīng)答信號(hào)與非應(yīng)答信號(hào)。(1)寫操作通信過程

寫操作就是主控器件向受控器件發(fā)送數(shù)據(jù),如圖8-17、圖8-18、圖8-19所示。首先,主控器會(huì)對(duì)總線發(fā)送起始信號(hào),隨后緊跟一個(gè)字節(jié)的8位數(shù)據(jù)(D7~D1位為受控器件的從地址,D0位為受控器約定的數(shù)據(jù)方向位“0”,表示“寫”)。其次,如圖8-19所示,發(fā)送完一個(gè)8位數(shù)之后應(yīng)該是一個(gè)受控器的應(yīng)答信號(hào)。再次,應(yīng)答信號(hào)過后就是第二個(gè)字節(jié)的8位數(shù)據(jù),這個(gè)數(shù)多半是受控器件的寄存器地址,寄存器地址過后就是要發(fā)送的數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)送完后就是一個(gè)應(yīng)答信號(hào),每啟動(dòng)一次總線,傳輸?shù)淖止?jié)數(shù)沒有限制,一個(gè)字節(jié)地址或數(shù)據(jù)過后的第9個(gè)脈沖是受控器件應(yīng)答信號(hào)。最后,當(dāng)數(shù)據(jù)傳送完之后由主控器發(fā)出停止信號(hào)來停止總線。80(2)讀操作通信過程

讀操作指受控器件向主控器件發(fā)送數(shù),如圖8-20、圖8-21、圖8-22所示。首先,主控器會(huì)對(duì)總線發(fā)送起始信號(hào),隨后緊跟一個(gè)字節(jié)的8位數(shù)據(jù)(D7~D1位為受控器件的從地址,D0位為受控器約定的數(shù)據(jù)方向位“1”,表示“讀”)。其次,如圖8-20所示,發(fā)送完包含有從器件地址信號(hào)的8位數(shù)之后,接下來是一個(gè)受控器的應(yīng)答信號(hào)。再次,之后就是要接收的數(shù)據(jù)。后面要接收的N個(gè)數(shù)據(jù)則是指向主控器件,所以應(yīng)答信號(hào)應(yīng)由主控器件發(fā)出,當(dāng)N個(gè)數(shù)據(jù)接收完成之后,主控器件應(yīng)發(fā)出一個(gè)非應(yīng)答信號(hào),告知受控器件數(shù)據(jù)接收完成,不用再發(fā)送。最后,當(dāng)數(shù)據(jù)傳送完之后由主控器發(fā)出停止信號(hào)來停止總線。81828.4.4I2C接口模擬

為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)S、終止信號(hào)P、發(fā)送“0”(含應(yīng)答信號(hào)A)及發(fā)送“1”(含非應(yīng)答信號(hào))的模擬時(shí)序如圖8-25所示。圖8-25I2C典型信號(hào)模擬時(shí)序圖下面給出典型信號(hào)模擬子程序。參照?qǐng)D8-25,用89S52芯片的P2.0、P2.1分別做SCL、SDA來模擬典型信號(hào)的程序。

①頭文件定義部分 #include<reg52.h> #include<intrins.h> #defineucharunsignedchar #defineuintunsignedint sbitSCL=P2^0; //時(shí)鐘引腳 sbitSDA=P2^0; //數(shù)據(jù)引腳83②延時(shí)子程序voiddelay(void)//延時(shí)子程序,約延時(shí)10μs { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

voiddelay_ms(unsignedinttime) //延時(shí)子程序,延時(shí)約1ms{ unsignedinti,j; for(i=time;i>0;i--) //i不斷減1,一直到i>0條件不成立為止 for(j=112;j>0;j--) //j不斷減1,一直到j(luò)>0條件不成立為止 {;}}84③起始信號(hào)子程序 VoidI2C_start(void) { SCL=1; //發(fā)送起始條件時(shí)鐘信號(hào) SDA=1; //發(fā)送起始條件數(shù)據(jù)信號(hào) delay(); //起始條件信號(hào)大于4.7us SDA=0; delay(); //間隔大于4us SCL=0; //鎖住總線,準(zhǔn)備發(fā)送數(shù)據(jù) }85④終止信號(hào)子程序voidI2C_stop(void){ SCL=1; //發(fā)送結(jié)束條件時(shí)鐘信號(hào) SDA=0; //發(fā)送結(jié)束條件數(shù)據(jù)信號(hào) delay(); //間隔大于4us SDA=1; delay(); //終止條件信號(hào)大于4.7us SCL=0;}86⑤應(yīng)答信號(hào)子程序voidAck(void) //應(yīng)答信號(hào){ SCL=0; //準(zhǔn)備發(fā)送應(yīng)答信號(hào) SDA=0; delay(); SCL=1; //時(shí)鐘信號(hào)保持高電平為大于4us delay(); SCL=0; //時(shí)鐘線置低電平 delay(); SDA=1; //結(jié)束應(yīng)答信號(hào)}87⑥非應(yīng)答信號(hào)

子程序voidNoAck(void) //非應(yīng)答信號(hào){ SCL=0; //準(zhǔn)備發(fā)送非應(yīng)答信號(hào) SDA=1; delay(); SCL=1; //時(shí)鐘線與數(shù)據(jù)線為高電平,則為非應(yīng)答信號(hào) delay(); //保持高電平為大于4us SCL=0; //結(jié)束非應(yīng)答信號(hào) delay(); SDA=0;}888.5單總線1-Wire及其8051的模擬

8.5.1概述1-Wire總線技術(shù)是美國DALLAS半導(dǎo)體公司推出的新技術(shù),是一種特殊串行數(shù)據(jù)通信方式。它將地址線、數(shù)據(jù)線、控制線合并為1根信號(hào)線,允許在這根信號(hào)線上掛接多個(gè)1-Wire總線器件。該總線技術(shù)具有節(jié)省I/O資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn),因此,在分布式測控系統(tǒng)中有著廣泛應(yīng)用。891-Wire總線由一個(gè)總線主節(jié)點(diǎn)、一個(gè)或多個(gè)從節(jié)點(diǎn)組成系統(tǒng),通過一根信號(hào)線對(duì)從芯片進(jìn)行數(shù)據(jù)的讀取。每個(gè)1-Wire單總線器件在制作時(shí)都激光刻錄一個(gè)64位的二進(jìn)制ROM代碼,標(biāo)志著器件的ID號(hào),是唯一的芯片序列號(hào)。每一個(gè)符合

1-Wire協(xié)議的從芯片都有一個(gè)唯一的地址,包括8位的家族代碼(占1個(gè)字節(jié),表示生產(chǎn)的分類編號(hào))、48位的序列號(hào)(占6個(gè)字節(jié),是每個(gè)器件唯一的序列號(hào))和8位的CRC代碼(占1個(gè)字節(jié),是前面56位的循環(huán)冗余校驗(yàn)碼,用以確保數(shù)據(jù)傳輸?shù)目煽啃?,如圖8-26。主芯片對(duì)各個(gè)從芯片的尋址依據(jù)這64位的不同來進(jìn)行。90家族代碼(8位)序列號(hào)(48位)CRC代碼(8位)圖8-261-Wire總線器件的64位ROM代碼911-Wire單總線適用于單個(gè)主機(jī)系統(tǒng),能夠控制一個(gè)或多個(gè)從機(jī)設(shè)備。主機(jī)可以是微控制器,從機(jī)可以是單總線器件,它們之間的數(shù)據(jù)交換只通過一條信號(hào)線。當(dāng)只有一個(gè)從機(jī)位于總線上時(shí)系統(tǒng)可按照單節(jié)點(diǎn)系統(tǒng)操作;而當(dāng)多個(gè)從機(jī)位于總線上,時(shí)則系統(tǒng)按照多節(jié)點(diǎn)系統(tǒng)操作。1-Wire單總線器件存在248個(gè)序列號(hào)碼總量,在總線上不會(huì)出現(xiàn)器件相互沖突或相同的節(jié)點(diǎn)地址。1-Wire總線利用一根線實(shí)現(xiàn)雙向通信。因此其協(xié)議對(duì)時(shí)序的要求較嚴(yán)格,如應(yīng)答等時(shí)序都有明確的時(shí)間要求?;镜臅r(shí)序包括復(fù)位及應(yīng)答時(shí)序、寫一位時(shí)序、讀一位時(shí)序。

在復(fù)位及應(yīng)答時(shí)序中,主器件發(fā)出復(fù)位信號(hào)后,要求從器件在規(guī)定的時(shí)間內(nèi)送回應(yīng)答信號(hào);在位讀和位寫時(shí)序中,主器件要在規(guī)定的時(shí)間內(nèi)讀回或?qū)懗鰯?shù)據(jù)。8.5.2單總線1-Wire的硬件結(jié)構(gòu)92圖8-271-Wire單總線器件內(nèi)部結(jié)構(gòu)示意圖圖8-281-Wire單總線硬件接口示意圖938.5.3單總線1-Wire供電方式因?yàn)閱慰偩€器件采用CMOS技術(shù),耗電量很小,所以不用單獨(dú)供電??刹捎眉纳绞焦╇?,這樣在單總線空閑時(shí)給電容充電就可以工作。在寄生方式供電時(shí),為了保證單總線器件在溫度轉(zhuǎn)換期間、EEPROM寫入等工作狀態(tài)下具有足夠的電源電流,必須在總線上提供MOSFET強(qiáng)上拉。948.5.4單總線1-Wire通信流程1-Wire總線是一種簡單的信號(hào)交換架構(gòu),通過一條線路在主機(jī)與外圍器件之間進(jìn)行雙向通信。一旦器件的序列號(hào)已知,通過尋址該序列號(hào),就可以唯一地選出該器件進(jìn)行通信。95主機(jī)對(duì)1-Wire總線的基本操作分為復(fù)位、讀和寫三種,其中所有的讀寫操作均為低位在前高位在后。所有通信的第一步都需要總線控制器發(fā)出一個(gè)復(fù)位信號(hào)以使總線同步,然后選擇一個(gè)受控器件進(jìn)行隨后的通信。一旦一個(gè)器件被用于總線通信,主機(jī)就能向它發(fā)出特定的器件指令,對(duì)它進(jìn)行數(shù)據(jù)讀寫。這是因?yàn)槊款惼骷哂胁煌墓δ芎筒煌挠猛?,而且一旦器件被選定,就有了唯一的協(xié)議。雖然每類器件具有不同的協(xié)議和特征,但其工作過程卻是相同的并且遵循如圖8-29所示的工作流程。96圖8-29典型的1-Wire通信流程978.5.5單總線1-Wire的時(shí)序圖復(fù)位、讀和寫是1-Wire總線通信的基礎(chǔ),1-Wire協(xié)議定義了復(fù)位脈沖、應(yīng)答脈沖、寫1、寫0、讀0和讀1時(shí)序等幾種信號(hào)類型。所有的單總線命令序列(初始化,ROM命令,功能命令)都是由這些基本的信號(hào)類型組成的。在這些信號(hào)中,除了應(yīng)答脈沖外,其他均由主機(jī)發(fā)出同步信號(hào),并且發(fā)送的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。單總線上的所有數(shù)據(jù)傳輸均以初始化開始,初始化由主機(jī)發(fā)出的復(fù)位脈沖和從機(jī)響應(yīng)的應(yīng)答脈沖組成,應(yīng)答脈沖使主機(jī)知道總線上有從機(jī)設(shè)備且準(zhǔn)備就緒。98復(fù)位和應(yīng)答脈沖時(shí)序:如圖8-30(a)所示,在主機(jī)初始化時(shí),主機(jī)通過拉低總線至少480μs以產(chǎn)生復(fù)位脈沖,接著主機(jī)釋放總線并進(jìn)入接收模式。當(dāng)總線被釋放后,上拉電阻將單總線拉高,而且在單總線器件檢測到上升沿后,延時(shí)15~60μs,接著通過拉低總線60~240μs,以產(chǎn)生應(yīng)答脈沖。99主機(jī)寫時(shí)序:由于只有一條I/O線,主機(jī)1-Wire總線的寫操作只能逐位進(jìn)行,連續(xù)寫8次即可寫入總線一個(gè)字節(jié)。寫操作包括寫0和寫1兩種,如圖8-30(b)和(d)所示。主機(jī)每個(gè)寫時(shí)序至少需要60μs,而且兩次連續(xù)的寫操作之間要有1μs以上的間隔(即恢復(fù)時(shí)間)。在寫時(shí)序起始后15~60μs期間,單總線器件采樣總線電平狀態(tài)。若在此期間采樣為高電平,則該器件被寫入邏輯1;若為0,則寫入邏輯0。寫0時(shí),在主機(jī)拉低總線后,只需保持低電平時(shí)間不少于60μs即可。寫1時(shí),主機(jī)在拉低總線后,接著必須在15μs之內(nèi)釋放總線,由上拉電阻將總線拉至高電平。100主機(jī)讀時(shí)序:與寫操作類似,主機(jī)對(duì)1-Wire總線的讀操作也只能逐位進(jìn)行,連續(xù)讀8次,即可讀入主機(jī)一個(gè)字節(jié)。讀操作包括讀1和讀0兩種,如圖8-30(c)和(e)所示。主機(jī)每個(gè)讀時(shí)序至少需要60μs,而且兩次連續(xù)的讀操作之間要有1μs以上的間隔(即恢復(fù)時(shí)間)。每個(gè)讀時(shí)序都由主機(jī)發(fā)起,至少拉低總線1μs。在主機(jī)發(fā)起讀時(shí)序之后,單總線器件才開始在總線上發(fā)送0或1。從機(jī)發(fā)送0時(shí),拉低總線;從機(jī)發(fā)送1,則保持總線為高電平。從總線讀數(shù)據(jù)時(shí),主機(jī)首先拉低總線1μs以上然后釋放,在釋放總線后的1~15μs內(nèi)主機(jī)對(duì)總線的采樣值即為讀取到的數(shù)據(jù)。101圖8-30初始化(復(fù)位)、寫、讀時(shí)序圖1028.5.6單總線1-Wire的8051模擬如圖8-30所示,1-Wire總線上的數(shù)據(jù)傳輸是通過1-Wire總線協(xié)議最底層的操作時(shí)隙完成的。每個(gè)通信周期起始于主控器發(fā)出復(fù)位脈沖,然后,1-Wire器件以應(yīng)答脈沖做出響應(yīng)。當(dāng)主控器將總線從空閑狀態(tài)的邏輯高拉為邏輯低時(shí),即啟動(dòng)了一個(gè)讀寫時(shí)隙。在寫“0”時(shí)隙中,主控器在整個(gè)時(shí)隙期間將總線拉低;而后在15μs之內(nèi)釋放總線為高。在讀時(shí)隙中,主控器將總線拉低1μs,接著釋放總線,這樣,1-Wire從器件就能夠接管總線,輸出有效數(shù)據(jù)。所有的讀寫時(shí)隙在60μs至120μs內(nèi)完成,并且每個(gè)時(shí)隙之間至少需要1μs的恢復(fù)時(shí)間。1

溫馨提示

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

評(píng)論

0/150

提交評(píng)論