版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、6.1 概述6.2 SPI總線6.3 RS-485總線6.4 I2C總線本章小結(jié)習(xí)題 微型計算機(jī)、單片機(jī)系統(tǒng)大都采用總線結(jié)構(gòu)。這種結(jié)構(gòu)采用一組公共的信號線作為微型計算機(jī)各部件之間的通信線,這組公共信號線就稱為總線。單片機(jī)的常用總線有并行總線與串行總線兩種。串行總線可以顯著減少引腳數(shù)量,簡化系統(tǒng)結(jié)構(gòu)。隨著外圍器件串行接口的發(fā)展,單片機(jī)串行接口的普遍化和高速化使得并行擴(kuò)展接口技術(shù)日漸衰退,后來推出了刪去并行總線的非總線單片微機(jī),需要外擴(kuò)器件(存儲器、I/O等)時,采用串行擴(kuò)展總線,甚至用軟件虛擬串行總線來實現(xiàn)。6.1 概 述常用的串行總線包括RS-232、CAN、RS-485、I2C總線、SPI總
2、線等。其中,RS-232、RS-485、CAN為外總線,它們是系統(tǒng)之間的通信用總線;I2C、SPI是內(nèi)總線,主要用于系統(tǒng)內(nèi)芯片之間的數(shù)據(jù)傳輸。本章主要介紹SPI、RS-485和I2C總線的原理。串行外圍設(shè)備接口(Serial Peripheral Interface,SPI)總線技術(shù)是 Motorola公司推出的一種同步串行外設(shè)接口,允許單片機(jī)等微控制器與各種外部設(shè)備以同步串行方式進(jìn)行通信以交換信息。由于SPI總線一共只需34條數(shù)據(jù)線和控制線即可實現(xiàn)與具有SPI總線功能的各種I/O器件的連接,而擴(kuò)展并行總線則需要8條數(shù)據(jù)線、816條地址線、23條控制線,因此,采用SPI總線接口可以簡化整個電路
3、的設(shè)計,節(jié)省更多常規(guī)電路中的接口器件和I/O口線,提高了系統(tǒng)的可靠性。6.2 SPI 總 線6.2.1 SPI總線的工作原理Motorola公司生產(chǎn)的絕大多數(shù)MCU(微控制器)都配有SPI硬件接口。SPI用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通信。這些外圍器件可以是簡單的TTL移位寄存器、復(fù)雜的LCD顯示驅(qū)動器、A/D和D/A轉(zhuǎn)換子系統(tǒng)或其他的MCU。SPI只需四條線就可以完成MCU與各種外圍器件的通信,這四條線是:串行時鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線(MISO)、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線(MOSI)、低電平有效從機(jī)選擇線()。當(dāng)SPI工作時,在移位寄存器中的數(shù)據(jù)逐位從輸出引腳
4、(MOSI)輸出(高位在前),同時從輸入引腳(MISO)接收的數(shù)據(jù)逐位移到移位寄存器(高位在前)。發(fā)送一個字節(jié)后,從另一個外圍器件接收的字節(jié)數(shù)據(jù)進(jìn)入移位寄存器中。主SPI的時鐘信號(SCK)用來保證傳輸?shù)耐?。SPI總線的典型系統(tǒng)結(jié)構(gòu)如圖6.1所示。圖6.1 SPI總線的典型系統(tǒng)框圖SPI總線的主要特點如下:(1) 全雙工三線同步傳送。(2) 可設(shè)置為主機(jī)或從機(jī)的工作方式。(3) 可程控串行時鐘的極性和相位。(4) 具有結(jié)束發(fā)送中斷標(biāo)志和寫沖突保護(hù)標(biāo)志。(5) 主機(jī)方式時,位頻率可以有四種(可編程設(shè)置),最高可達(dá)1.05 MHz;從機(jī)方式時,位頻率由外部時鐘決定,最高可達(dá)2.1 MHz。(6)
5、 有多主機(jī)方式出錯保護(hù),防止多個MCU同時成為串行總線的主機(jī)。(7) 可方便地與各種串行擴(kuò)展器件接口。6.2.2 SPI總線的通信時序SPI 模塊和外設(shè)進(jìn)行數(shù)據(jù)交換時,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘的極性和相位可以進(jìn)行配置。圖6.2為SPI總線工作的四種方式,其中使用最為廣泛的是SPI0和SPI3方式(實線表示)。圖6.2 SPI總線工作的四種方式時鐘極性(CPOL)對傳輸協(xié)議沒有重大影響,若CPOL=0,則串行同步時鐘的空閑狀態(tài)為低電平;若CPOL=1,則串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置為選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。若CPHA=0,則在串行同步時
6、鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;若CPHA=1,則在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)時鐘的相位和極性應(yīng)該保持一致。SPI總線接口時序如圖6.3和圖6.4所示。圖6.3 CPHA=0時SPI總線數(shù)據(jù)傳輸時序圖6.4 CPHA=1時SPI總線數(shù)據(jù)傳輸時序6.2.3 硬件電路設(shè)計MC14489是Motorola公司生產(chǎn)的5位7段LED譯碼驅(qū)動芯片,能直接驅(qū)動LED數(shù)據(jù)顯示器。MC14489使用一個外接電阻Rx即可控制每一段的輸出電流,有三線串行接口(SPI),可直接與具有SPI接口的CPU相連,也可通過軟件模擬與沒有SPI接口的CPU配合工作
7、。1. 工作原理MC14489芯片由24位輸入移位寄存器、位系統(tǒng)設(shè)置寄存器、位顯示寄存器以及位選開關(guān)、段選開關(guān)、位驅(qū)動器、段譯碼、驅(qū)動器、內(nèi)部振蕩器等組成。在串行輸入使能端為低有效時串行數(shù)據(jù)輸入到內(nèi)部移位寄存器,上升沿根據(jù)移位寄存器中的數(shù)據(jù)位數(shù)不同自動將8位數(shù)據(jù)裝入位系統(tǒng)設(shè)置寄存器或?qū)?4位數(shù)據(jù)裝入位顯示寄存器。2. 引腳介紹圖6.5給出了MC14489芯片的引腳圖。引腳3:VDD為電源的正極輸入,范圍為4.56 V。引腳14:VSS為地。引腳11:CLOCK為串行數(shù)據(jù)時鐘輸入端,時鐘頻率范圍為04 MHz。引腳12:DATAIN為串行數(shù)據(jù)輸入端。引腳18:DATAOUT為串行數(shù)據(jù)輸出端,用于
8、將MC14489各級級聯(lián)使用。引腳8:Rx為外接電流設(shè)置電阻,阻值范圍為700 至無窮大。引腳10:為使能信號輸入端,低電平有效。引腳7、6、5、4、2、1、20、19:ah為陽極驅(qū)動電流源,若接共陰極LED數(shù)碼管,則ag驅(qū)動7段筆畫,h驅(qū)動小數(shù)點;若接發(fā)光二極管,則應(yīng)采用非譯碼方式,使用a、b、c和d共可控制20只發(fā)光管,同時h也可控制5只,在此方式下e、f與g不使用。引腳9、13、15、16、17:BANK1BANK5為陰極開關(guān),可分別接至5組數(shù)碼管或者發(fā)光管的公共陰極。圖6.5 MC14489芯片的引腳圖3. 硬件連接電路圖6.6為AT89C52與MC14489的硬件連接電路。AT89C
9、52不帶SPI串行總線接口,所以使用軟件來模擬SPI的操作,包括串行時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出。圖6.6 AT89C52與MC14489接口設(shè)計電路原理圖AT89C52的P2.0、P2.1和P2.2引腳分別連到MC14489的DATAIN、CLOCK和,用來模擬SPI接口;BANK1BANK5連接到LED的陰極;ah連接到LED的陽極。6.2.4 軟件設(shè)計以下為在5位LED上顯示“HELLO”的程序代碼。#include#define uchar unsigned char sbit DATA=P20; /定義P2.0為DATAINsbit CLK=P21; /定義P2.1為CLOCKsbit
10、ENA=P22; /定義P2.2為 void DSPCMD(uchar CMD);/單字節(jié)命令函數(shù),寫入MC14489內(nèi)部設(shè)置寄存器void DSPDATA(uchar DSCMD,uchar DSDATA1,uchar DSDATA2);/多字節(jié)命令函數(shù),寫入MC14489顯示寄存器void main() DSPCMD(0 xEF); /寫內(nèi)部設(shè)置寄存器 DSPDATA(0 x82,0 xE5,0 x5F);/在5位LED上顯示HELLO,滿亮度顯示/*單字節(jié)命令函數(shù),寫入MC14489內(nèi)部設(shè)置寄存器*/void DSPCMD (uchar CMD) uchar i; ENA=0; /使能M
11、C14489 for (i=8;i=1;i-) /寫入單字節(jié)命令 DATA=CMD&0 x80; CMD=CMD1; CLK=0; CLK=1; ENA=1; /禁止MC144896.2.5 小結(jié)本節(jié)介紹了基于單片機(jī)AT89C52與MC14489的SPI接口設(shè)計的硬件連接與軟件設(shè)計,主要側(cè)重于用單片機(jī)接口模擬SPI接口時序。在進(jìn)行設(shè)計時應(yīng)注意以下幾個問題:(1) 由于SPI接口有四種時序方式,所以事先必須確定所選用的時序方式,一般SPI0和SPI3方式較為常用。(2) 如何用C程序?qū)崿F(xiàn)時序中的起始條件、停止條件等。RS-232是串行數(shù)據(jù)接口標(biāo)準(zhǔn),最初由電子工業(yè)協(xié)會(EIA)在1962年制定并發(fā)
12、布,命名為EIA-232-E,用于保證不同廠家產(chǎn)品之間的兼容。為了改進(jìn)RS-232通信距離短、速率低的缺點,RS-422定義了一種平衡通信接口,將傳輸速率提高到10 Mb/s,傳輸距離延長到1219.2米(4000英尺)(速率低于100 kb/s時),并允許在一條平衡總線上最多連接10個接收器。6.3 RS-485總線 為擴(kuò)展應(yīng)用范圍,EIA又于1983年在RS-422基礎(chǔ)上制定了RS-485標(biāo)準(zhǔn),增加了多點、雙向通信能力,即允許多個發(fā)送器連接到同一條總線上,同時增加了發(fā)送器的驅(qū)動能力和沖突保護(hù)特性,擴(kuò)展了總線共模范圍。后來EIA將RS-485標(biāo)準(zhǔn)重新命名為TIA/EIA-485-A標(biāo)準(zhǔn)。由于
13、EIA提出的建議標(biāo)準(zhǔn)都是以“RS”作為前綴的,所以在通信工業(yè)領(lǐng)域,仍然習(xí)慣將上述標(biāo)準(zhǔn)以RS作前綴表示。 RS-485具有以下特點:(1) RS-485的電氣特性:邏輯“1”以兩線間的電壓差為+(26) V表示;邏輯“0”以兩線間的電壓差為-(26) V表示。接口信號電平比RS-232-C有所降低,不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便地與TTL電路連接。RS-485的最高數(shù)據(jù)傳輸速率為10 Mb/s。(2) RS-485接口采用平衡驅(qū)動器和差分接收器的組合,抗共模干擾能力增強(qiáng),即抗噪聲干擾性好。RS-485接口的最大傳輸距離標(biāo)準(zhǔn)值為1219.2米(4000英尺),實際上可達(dá)3
14、000米。其總線接口上允許連接多達(dá)128個收發(fā)器,即具有多站能力,這樣用戶可以利用RS-485接口的特點方便地建立設(shè)備網(wǎng)絡(luò)。注意,RS-232-C接口在總線上只允許連接1個收發(fā)器,即單站能力。6.3.1 RS-485總線的工作原理下面以基于單片機(jī)AT89C52的RS-485總線現(xiàn)場監(jiān)測系統(tǒng)為例來說明RS-485總線的工作原理。圖6.7 MAX481芯片引腳圖MAX481接口芯片是MAXIM公司推出的一種RS-485芯片。該芯片采用單一電源+5V工作,額定電流為300A,采用半雙工通信方式,完成將TTL電平轉(zhuǎn)換為RS-485電平的功能。其引腳結(jié)構(gòu)圖如圖6.7所示。 從圖中可以看出,MAX481芯
15、片的結(jié)構(gòu)和引腳都非常簡單,內(nèi)部含有一個驅(qū)動器和接收器。圖6.7中,RO和DI端分別為接收器的輸出端和驅(qū)動器的輸入端,與單片機(jī)連接時只需分別與單片機(jī)的RXD和TXD相連即可;和DE端分別為接收和發(fā)送的使能端,當(dāng)為邏輯0時,器件處于接收狀態(tài),當(dāng)DE為邏輯1時,器件處于發(fā)送狀態(tài),因為MAX481工作在半雙工狀態(tài),所以只需用單片機(jī)的一個引腳控制這兩個引腳即可;A端和B端分別為接收和發(fā)送的差分信號端,當(dāng)A端的電平高于B時,代表發(fā)送的數(shù)據(jù)為1,當(dāng)A端的電平低于B端時,代表發(fā)送的數(shù)據(jù)為0。在與單片機(jī)連接時接線非常簡單,僅需要一個信號控制MAX481的接收和發(fā)送即可,同時將A和B端之間加匹配電阻,一般可選12
16、0的電阻。表6.1為MAX481引腳功能說明。圖6.7 MAX481芯片引腳圖表6.1 MAX481引腳功能說明用MAX481實現(xiàn)的半雙工485總線現(xiàn)場監(jiān)測系統(tǒng)結(jié)構(gòu)如圖6.8所示。圖6.8 MAX481實現(xiàn)的半雙工485總線現(xiàn)場監(jiān)測系統(tǒng)PC機(jī)作為主控機(jī),通過232/485轉(zhuǎn)接設(shè)備接入485總線,它使用查詢方式與各個從機(jī)通信;帶有485接口的單片機(jī)系統(tǒng)作為從機(jī),響應(yīng)主機(jī)的查詢命令,將采集到的數(shù)據(jù)回傳給主機(jī),從機(jī)之間的數(shù)據(jù)交換只能通過主機(jī)進(jìn)行轉(zhuǎn)發(fā)。由于是半雙工通信,所以主機(jī)發(fā)送與接收需要分開獨立運行,從機(jī)也是如此。A既是接收器的非反向輸入端,也是驅(qū)動器的非反向輸出端;B既是接收器的反向輸入端,也是
17、驅(qū)動器的反向輸出端;DE和引腳電平共同控制發(fā)送和接收的切換,這在后面的硬件、軟件設(shè)計中均有體現(xiàn)。6.3.2 RS-485總線的通信協(xié)議對于任何涉及到通信或者數(shù)據(jù)交換的系統(tǒng),通信協(xié)議的設(shè)計都是軟件設(shè)計的前提和關(guān)鍵。通信協(xié)議設(shè)計最重要的就是幀結(jié)構(gòu)的設(shè)計。485總線現(xiàn)場監(jiān)測系統(tǒng)中數(shù)據(jù)幀的結(jié)構(gòu)定義如表6.2所示。數(shù)據(jù)幀的內(nèi)容包括起始字節(jié)、地址字節(jié)、類型字節(jié)、數(shù)據(jù)長度字節(jié)、數(shù)據(jù)字節(jié)、校驗字節(jié)和結(jié)束字節(jié)。表6.2 485總線現(xiàn)場監(jiān)測系統(tǒng)中數(shù)據(jù)幀的結(jié)構(gòu)起始字節(jié)定義為“$”字符,其數(shù)值為0 x24;結(jié)束字節(jié)定義為“”字符,其數(shù)值為0 x2A。地址字節(jié)實際上存放的是從機(jī)對應(yīng)的設(shè)備號碼,此設(shè)備號在一開始由撥動開關(guān)
18、組予以設(shè)置。在工作時,每個設(shè)備都按規(guī)定已設(shè)定,一般不作改動,若需改動則重新設(shè)置開關(guān)即可。注意:地址碼應(yīng)避免重復(fù)。本系統(tǒng)的數(shù)據(jù)幀主要有4種,這由類型字節(jié)決定,它們分別為主機(jī)詢問從機(jī)是否在位的“ACTIVE”幀、主機(jī)發(fā)送讀設(shè)備請求的“GETDATA”幀、從機(jī)應(yīng)答在位的“READY”幀和從機(jī)發(fā)送設(shè)備狀態(tài)信息的“SENDDATA”幀。“SENDDATA”幀實際上是真正的數(shù)據(jù)幀,該幀中的數(shù)據(jù)字節(jié)存放的是設(shè)備狀態(tài)信息。其他3種是單純的指令幀,數(shù)據(jù)字節(jié)為0字節(jié)。這3種指令幀長度最短,僅為6個字節(jié)。所以,通信過程中幀長小于6個字節(jié)的幀都認(rèn)為是錯誤幀。幀結(jié)構(gòu)中類型字節(jié)的定義如表6.3所示。表6.3 幀結(jié)構(gòu)中類型
19、字節(jié)的定義下面采用簡單的校驗和方法來進(jìn)行幀的校驗,即先將所有的字節(jié)相加,然后將結(jié)果截短到所需的位長,例如,4個字節(jié)102、8、78和200的校驗和為132(經(jīng)過截短為1字節(jié)后)。發(fā)端將待發(fā)送的數(shù)據(jù)進(jìn)行校驗和計算,將校驗和值放在數(shù)據(jù)最后一起發(fā)送,在接收端對接收的數(shù)據(jù)進(jìn)行校驗和計算,然后與收到的校驗和字節(jié)比較來進(jìn)行誤碼判斷。設(shè)定要進(jìn)行校驗和計算的字節(jié)包括地址字節(jié)、類型字節(jié)、數(shù)據(jù)長度字節(jié)和數(shù)據(jù)字節(jié),但不包括起始字節(jié)和結(jié)束字節(jié)。除了幀結(jié)構(gòu)的定義以外,整個系統(tǒng)的通信還需要遵守下列規(guī)則:(1) 主控機(jī)(PC機(jī))主導(dǎo)整個通信過程。由主控機(jī)定時輪詢各個節(jié)點處的從機(jī),并要求這些從機(jī)提交其對應(yīng)設(shè)備的狀態(tài)信息。(2
20、) 主控機(jī)在發(fā)送完“ACTIVE”指令幀后進(jìn)入接收狀態(tài),同時開啟超時控制。如果接收到錯誤信息,則繼續(xù)等待;如果在規(guī)定時間里未能接收到從機(jī)的返回指令幀“READY”,則認(rèn)為從機(jī)不在位,取消這次查詢。(3) 主控機(jī)接收到從機(jī)返回指令幀“READY”后,發(fā)送“GETDATA”指令幀,進(jìn)入接收狀態(tài),同時開啟超時控制。如果接收到錯誤信息,則繼續(xù)等待;如果在規(guī)定時間內(nèi)未能接收到從機(jī)的返回信息,則超時計數(shù)加1,并且主控機(jī)重新發(fā)送“GETDATA”指令幀;如果超時3次,則返回錯誤信息,取消這次查詢。(4) 從機(jī)復(fù)位后,將等待主控機(jī)發(fā)送指令幀,并根據(jù)具體的指令內(nèi)容作出應(yīng)答。如果接收到的指令幀錯誤,則直接丟棄該幀
21、,不作任何處理。6.3.3 硬件電路設(shè)計在圖6.8所示的485總線現(xiàn)場監(jiān)測系統(tǒng)中,PC機(jī)為主控機(jī),它僅具有標(biāo)準(zhǔn)的RS-232接口,因此需有232/485轉(zhuǎn)接設(shè)備方可接入485總線網(wǎng)絡(luò),從而與網(wǎng)絡(luò)上的從設(shè)備進(jìn)行通信。圖6.9中,MC1488是驅(qū)動器,MC1489為接收器,它們的作用是實現(xiàn)TTL電平和RS-232通信電平的轉(zhuǎn)化;PC147為光電隔離器件;U7為DC-DC功能模塊,其作用是將電源隔離,降低直流電源的干擾;U1為485驅(qū)動收發(fā)芯片MAX481,它實現(xiàn)232/485電平轉(zhuǎn)接功能,其DE和引腳直接相連接,由于該芯片為半雙工芯片,所以要么驅(qū)動有效,要么接收有效,二者不能同時有效。圖6.9 2
22、32/485轉(zhuǎn)接卡原理圖485總線現(xiàn)場監(jiān)測系統(tǒng)中的單片機(jī)選用Atmel公司的AT89C52。系統(tǒng)的主要功能包括兩部分:數(shù)據(jù)采集和485總線接口,這兩個部分可以獨立設(shè)計。本節(jié)主要介紹與485的接口設(shè)計部分。圖6.10和圖6.11給出了AT89C52的485接口的硬件設(shè)計電路。圖6.10 單片機(jī)系統(tǒng)的485接口原理圖(1)圖6.11 單片機(jī)系統(tǒng)的485接口原理圖(2)圖6.11中,單片機(jī)的串口引腳RXD和TXD分別連接MAX481的RO和DI引腳,以進(jìn)行串行數(shù)據(jù)交換;控制引腳P1.6和P1.7分別連接MAX481的DE和引腳,以控制驅(qū)動器和接收器使能。注意:這4個引腳均應(yīng)接上拉電阻。S1為一個DI
23、P6開關(guān),和單片機(jī)AT89C52的P1.0P1.5引腳分別相連,用于設(shè)置本機(jī)的地址碼。由于MAX481實現(xiàn)的總線上最多帶32個負(fù)載,所以6位引腳足夠使用。應(yīng)當(dāng)注意,在讀取P1口獲取地址碼之前,需要先將其寄存器置1。MAX481的A和B引腳為485總線網(wǎng)絡(luò)的差分信號輸入/輸出端,二者之間應(yīng)串接一個120 的電阻。 6.3.4 軟件設(shè)計基于單片機(jī)AT89C52的485總線現(xiàn)場監(jiān)測系統(tǒng)的整個系統(tǒng)軟件分為主控機(jī)(PC機(jī))端和單片機(jī)端兩部分。主控機(jī)端軟件包括通信接口軟件、用戶界面、數(shù)據(jù)處理、后臺數(shù)據(jù)庫等。本節(jié)主要介紹通信接口軟件。主控機(jī)端通信接口部分的軟件流程圖如圖6.12所示。圖6.12 主控機(jī)端48
24、5通信接口部分的軟件流程圖單片機(jī)端軟件包括數(shù)據(jù)采集和基于485的通信程序。這兩個部分可以完全獨立。數(shù)據(jù)采集部分可設(shè)計為一個函數(shù),在主程序中調(diào)用即可。單片機(jī)系統(tǒng)的通信軟件流程圖如圖6.13所示??梢钥闯?,整個程序的流程和協(xié)議設(shè)計密切相關(guān)。對于從機(jī)而言,其工作與主機(jī)狀態(tài)密切相關(guān),是完全被動的,即根據(jù)主機(jī)的指令執(zhí)行相應(yīng)的操作。從機(jī)何時采集設(shè)備的狀態(tài)信息也取決于主機(jī),當(dāng)從機(jī)收到主機(jī)發(fā)送的讀設(shè)備狀態(tài)信息指令幀“GETDATA”時,才開始采集信息并發(fā)送“SENDDATA”上報主機(jī)。值得注意的是,若節(jié)點設(shè)備狀態(tài)發(fā)生變化,則它并不會主動通知主機(jī),主機(jī)也無法及時獲知并做出處理,因此需根據(jù)具體應(yīng)用設(shè)置主機(jī)使其定時
25、輪詢各從機(jī)。圖6.13 單片機(jī)端485總線通信軟件流程圖本實例的程序代碼與說明如下:#include /引用標(biāo)準(zhǔn)庫的頭文件#include #include #define uchar unsigned char #define uint unsigned int #define ACTIVE 0 x11#define GETDATA 0 x22#define READY 0 x33#define SENDDATA0 x44#define RECFRMMAXLEN 16 /接收幀的最大長度,超過此值則認(rèn)為幀超長錯誤#define STATUSMAXLEN 10/設(shè)備狀態(tài)信息的最大長度 #def
26、ine DATA0 0 x10/為簡化起見,假設(shè)采集了10位固定的數(shù)據(jù)#define DATA1 0 x20#define DATA2 0 x30#define DATA3 0 x40#define DATA4 0 x50#define DATA5 0 x60#define DATA6 0 x70#define DATA7 0 x80#define DATA8 0 x90#define DATA9 0 xA0uchar DevNo;/設(shè)備號xdata uchar StatusBufSTATUSMAXLEN;sbit DE = P16;/驅(qū)動器使能,1有效sbit RE = P17;/接收器使能
27、,0有效void init();/系統(tǒng)初始化void Get_Stat();/簡化的數(shù)據(jù)采集函數(shù)bit Recv_Data(uchar *type);/接收數(shù)據(jù)幀函數(shù)void Send(uchar m);/發(fā)送單字節(jié)數(shù)據(jù)void Send_Data(uchar type,uchar len,uchar *buf);/發(fā)送數(shù)據(jù)幀函數(shù)6.3.5 小結(jié)本節(jié)以基于單片機(jī)AT89C52的485總線現(xiàn)場監(jiān)測系統(tǒng)為例,詳細(xì)介紹了RS-485接口的硬件軟件設(shè)計。在本例的設(shè)計過程中,應(yīng)注意下列事項:(1) 采用MAX481芯片來實現(xiàn)485接口,決定了該例所實現(xiàn)的485總線網(wǎng)絡(luò)是半雙工通信網(wǎng)絡(luò)。若需要實現(xiàn)全雙工,
28、則可選擇MAX490、MAX491等其他支持全雙工的485總線驅(qū)動芯片。(2) 485總線網(wǎng)絡(luò)的傳輸物理介質(zhì)為雙絞線。(3) PC機(jī)無485接口,若要接入485總線網(wǎng)絡(luò),須對其進(jìn)行232/485接口電路轉(zhuǎn)換。(4) 由于需要通過485總線實現(xiàn)數(shù)據(jù)通信,因此和通信相關(guān)的協(xié)議設(shè)計亦為軟件設(shè)計的重要內(nèi)容。I2C總線(Inter IC Bus)是Philips公司推出的芯片間串行傳輸總線,與SPI、Microwire/Plus接口不同,它以兩根連線即可實現(xiàn)全雙工同步數(shù)據(jù)傳送,可方便地構(gòu)成多機(jī)通信系統(tǒng)或者外設(shè)擴(kuò)展系統(tǒng)。I2C總線采用了器件地址的硬件設(shè)計方法,通過軟件尋址完全避免了器件的片選尋址,從而使硬
29、件擴(kuò)展系統(tǒng)等變得簡單、靈活、方便。按照I2C總線規(guī)范,總線傳輸中所有狀態(tài)都生成相對應(yīng)的狀態(tài)碼,系統(tǒng)中的主機(jī)能夠依照這些狀態(tài)碼自動地進(jìn)行總線管理,啟動I2C總線就能自動完成規(guī)定的數(shù)據(jù)傳送操作。6.4 I2C 總 線6.4.1 I2C總線的工作原理在基于I2C總線特點的單片機(jī)系統(tǒng)中,其內(nèi)部資源具有I2C總線輸入/輸出接口的電氣結(jié)構(gòu)、可設(shè)置的相關(guān)特殊功能寄存器(SFR)以及所提供的標(biāo)準(zhǔn)程序模塊,為用戶采用I2C總線進(jìn)行系統(tǒng)設(shè)計和應(yīng)用軟件的編程帶來了極大的方便。I2C 總線的串行數(shù)據(jù)傳送與一般UART的串行數(shù)據(jù)傳送無論是從接口電氣特性、傳送狀態(tài)管理還是從程序的編制上都有很大的差異,其主要特點如下:(1
30、) 二線傳輸。I2C總線上所有的節(jié)點,如主器件(單片機(jī)、微處理器)、外圍器件、接口模塊等都連在同名端SCL(時鐘線)和SDA(數(shù)據(jù)線)上。(2) 系統(tǒng)中有多個主器件時,這些器件可以作為總線的主控制器(無中心主機(jī))。I2C總線工作時任何一個主器件都有可能成為主控制器,多機(jī)競爭時的時鐘同步與總線仲裁都由硬件與軟件模塊自動完成。(3) I2C總線傳輸時,采用狀態(tài)碼管理方法。對于總線傳輸時的任何一種狀態(tài),在狀態(tài)寄存器中都會出現(xiàn)相應(yīng)的狀態(tài)碼,并會自動進(jìn)入相應(yīng)的狀態(tài)處理程序進(jìn)行自動處理。(4) 系統(tǒng)中的所有外圍器件及模塊均采用器件地址和引腳地址的編址方法。系統(tǒng)中主控制器對任意節(jié)點的尋址采用純軟件的尋址方式
31、,避免了片選的連線方法。系統(tǒng)中若有地址編碼沖突,則可通過改變地址的引腳電平來解決。(5) 所有帶有I2C接口的外圍器件都具有應(yīng)答功能。片內(nèi)有多個單元地址時,數(shù)據(jù)讀/寫都具有自動加1功能。這樣,在I2C總線對某一器件讀/寫多個字節(jié)時很容易實現(xiàn)自動操作,即準(zhǔn)備好讀/寫入口條件后,只需啟動I2C總線就可以完成N個字節(jié)的讀/寫操作。(6) I2C總線電氣接口由漏極開路的晶體管組成,開路輸出端未連到電源的鉗位二極管,而是連到I2C 總線的每個器件上,其自身電源可以獨立,但必須共地??偩€上各個節(jié)點可以在系統(tǒng)帶電的情況下直接接入或撤出。I2C總線的時鐘線SCL和數(shù)據(jù)線SDA都是雙向數(shù)據(jù)線。總線備用時二者都必
32、須保持高電平狀態(tài),僅在關(guān)閉I2C總線時才能使SCL鉗位在低電平。在標(biāo)準(zhǔn)I2C模式下數(shù)據(jù)傳送速率可達(dá)100 kb/s,高速模式下可達(dá)400 kb/s??偩€驅(qū)動能力受總線電容限制,不加驅(qū)動擴(kuò)展時驅(qū)動能力為400 pF。6.4.2 I2C總線的通信時序I2C總線的工作時序如圖6.14所示。圖6.14 I2C總線的工作時序圖I2C總線時序工作的基本條件如下:(1) 起??刂啤.?dāng)SCL為高電平,SDA電平由高變低時,數(shù)據(jù)開始傳送。所有的操作均必須在開始之后進(jìn)行。當(dāng)SCL為高電平,SDA電平由低變?yōu)楦邥r,數(shù)據(jù)傳送結(jié)束。在結(jié)束條件下,所有操作都不能進(jìn)行。如果產(chǎn)生重復(fù)起始條件而不產(chǎn)生停止條件,則總線會一直處于
33、忙狀態(tài)。(2) 數(shù)據(jù)的有效轉(zhuǎn)換。當(dāng)時鐘線SCL為高電平時,數(shù)據(jù)線SDA必須保持穩(wěn)定。若數(shù)據(jù)線SDA改變,則必須在時鐘線SCL為低時方可進(jìn)行。(3) 總線空閑。當(dāng)數(shù)據(jù)總線SDA和時鐘總線SCL都為高電平時,為空閑狀態(tài)。(4) 發(fā)送到SDA線上的每個字節(jié)必須為8位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,每個字節(jié)后必須跟一個響應(yīng)位,首先傳輸?shù)氖菙?shù)據(jù)的最高位MSB。若從機(jī)需要完成某些其他功能后(例如一個內(nèi)部中斷服務(wù)程序)才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié),則此時可以使時鐘線SCL保持低電平從而迫使主機(jī)進(jìn)入等待狀態(tài),在從機(jī)準(zhǔn)備好接收下一個數(shù)據(jù)字節(jié)并釋放時鐘線SCL后使數(shù)據(jù)傳輸繼續(xù)。(5) 響應(yīng)。數(shù)據(jù)傳輸必
34、須帶響應(yīng),相關(guān)的響應(yīng)時鐘脈沖由主機(jī)產(chǎn)生,在響應(yīng)時鐘脈沖期間發(fā)送器釋放SDA線(高),在響應(yīng)的時鐘脈沖期間,接收器必須將SDA線拉低使它在這個時鐘脈沖的高電平期間保持穩(wěn)定的低電平。注意:必須考慮建立和保持時間。(6) 仲裁。主機(jī)只能在總線空閑時啟動傳輸,兩個或多個主機(jī)可能在起始條件的最小持續(xù)時間內(nèi)產(chǎn)生一個規(guī)定的起始條件。當(dāng)SCL線是高電平時仲裁在SDA線發(fā)生,這樣在其他主機(jī)發(fā)送低電平時發(fā)送高電平的主機(jī)將斷開它的數(shù)據(jù)輸出級,因為總線上的電平與其自身的電平不同。仲裁可以持續(xù)多位,它的第一個階段是比較地址位。如果每個主機(jī)都嘗試尋址相同的器件,則仲裁會繼續(xù)比較數(shù)據(jù)位(如果是主機(jī)-發(fā)送器),或者比較響應(yīng)位
35、(如果是主機(jī)-接收器)。因為I2C總線的地址和數(shù)據(jù)信息由贏得仲裁的主機(jī)決定,在仲裁過程中不會丟失信息。丟失仲裁的主機(jī)可以產(chǎn)生時鐘脈沖直到丟失仲裁的該字節(jié)末尾。在進(jìn)行數(shù)據(jù)傳送之前,I2C總線會首先發(fā)送一個字節(jié)進(jìn)行尋址。這個字節(jié)一般緊跟在起始條件之后發(fā)送,表示需要通信的從器件地址。其格式定義如下:地址信息是7bit,占用了地址字節(jié)的高7位,可以對127個器件進(jìn)行尋址。該字節(jié)的第0bit用于表示數(shù)據(jù)的傳送方向:當(dāng)該位是高電平時,表示由從器件向主器件發(fā)送數(shù)據(jù),即主器件對從器件進(jìn)行讀操作;當(dāng)該位為低電平時,表示由主器件向從器件發(fā)送數(shù)據(jù),即主器件對從器件進(jìn)行寫操作。起始條件后,總線中各個器件將自己的地址與
36、主器件送到總線上的器件地址進(jìn)行比較,如果發(fā)生匹配,則該器件認(rèn)為被主器件尋址。一般來說,從器件的地址由一部分固定地址和一部分可變地址組成,而可變地址確定了在I2C總線上可容納的此類器件的最多數(shù)目。 6.4.3 硬件電路設(shè)計由于標(biāo)準(zhǔn)的MCS-51單片機(jī)不具備I2C總線接口,MCS-51單片機(jī)在擴(kuò)展具有I2C總線的芯片時可利用單片機(jī)的I/O接口與之相連,在程序中利用位操作指令及移位指令模仿I2C總線的操作時序并編寫相應(yīng)的程序。圖6.15為89C52單片機(jī)實現(xiàn)I2C總線的硬件原理圖。 圖6.15 單片機(jī)實現(xiàn)I2C總線的硬件原理圖 6.4.4 軟件設(shè)計單片機(jī)模擬I2C總線向從器件發(fā)送數(shù)據(jù)和由從器件接收數(shù)據(jù)的程序流程圖分別如圖6.16(a)、(b)所示。圖6.16 程序流程圖程序如下:#include /引用標(biāo)準(zhǔn)庫的頭文件#include #define uchar unsigned char #define uint unsigned int sbit SDA = P12; /串行數(shù)據(jù)sbit S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣元中核職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 2026年河南職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試參考題庫帶答案解析
- 2026年巴音郭楞職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試備考題庫帶答案解析
- 2026年巴中職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 2026年廣西培賢國際職業(yè)學(xué)院單招綜合素質(zhì)考試參考題庫帶答案解析
- 碳中和認(rèn)證代理協(xié)議(企業(yè))2025年年度計劃
- 2026年深圳職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試備考題庫附答案詳解
- 2026年白銀礦冶職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫帶答案解析
- 2026年河北司法警官職業(yè)學(xué)院單招綜合素質(zhì)筆試模擬試題帶答案解析
- 2026年廣西體育高等專科學(xué)校高職單招職業(yè)適應(yīng)性測試備考題庫有答案解析
- DB11-T 1683-2019 城市軌道交通乘客信息系統(tǒng)技術(shù)規(guī)范
- 互聯(lián)網(wǎng)醫(yī)院服務(wù)平臺運營合作協(xié)議
- DB51T 2696-2020 四川省公共廁所信息標(biāo)志標(biāo)準(zhǔn)
- (高清版)JTG 3363-2019 公路橋涵地基與基礎(chǔ)設(shè)計規(guī)范
- 《調(diào)相機(jī)運行規(guī)程》
- 羅茨鼓風(fēng)機(jī)行業(yè)發(fā)展趨勢報告
- 慢性阻塞性肺疾病患者非肺部手術(shù)麻醉及圍術(shù)期管理的專家共識
- 中建辦公商業(yè)樓有限空間作業(yè)專項施工方案
- 急性胰腺炎護(hù)理查房課件ppt
- 初三數(shù)學(xué)期末試卷分析及中考復(fù)習(xí)建議課件
- GB/T 4074.8-2009繞組線試驗方法第8部分:測定漆包繞組線溫度指數(shù)的試驗方法快速法
評論
0/150
提交評論