單片機(jī)第七章_第1頁
單片機(jī)第七章_第2頁
單片機(jī)第七章_第3頁
單片機(jī)第七章_第4頁
單片機(jī)第七章_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章 單片機(jī)串行口應(yīng)用 7.1 串行通信及其總線標(biāo)準(zhǔn) 7.2 單片機(jī)串行口及其控制 本章內(nèi)容: 【任務(wù)導(dǎo)入】 遠(yuǎn)程液位監(jiān)控系統(tǒng)的實(shí)現(xiàn):用串行通信方式實(shí)現(xiàn)對簡單液位指示系統(tǒng)的遠(yuǎn)程監(jiān)控。主要功能為:下位機(jī)(單片機(jī))每隔1s向上位機(jī)(PC機(jī))發(fā)送實(shí)時(shí)測量的液位數(shù)據(jù)?!救蝿?wù)分析】 根據(jù)設(shè)計(jì)要求,單片機(jī)在正常情況下每隔1s應(yīng)采集一次液位信息,并通過自帶的LED指示器進(jìn)行顯示,但遠(yuǎn)處監(jiān)管人員不能實(shí)時(shí)獲取液位信息。若把LED指示器安放在遠(yuǎn)處監(jiān)管人員處,則需要用9根長線來實(shí)現(xiàn)。若監(jiān)管人員需要用PC機(jī)對實(shí)時(shí)液位信息進(jìn)行監(jiān)控,又應(yīng)該怎么辦呢?學(xué)習(xí)了單片機(jī)的串行通信系統(tǒng)后,思路自然就有了。7.1 串行通信及其總線

2、標(biāo)準(zhǔn) 1數(shù)據(jù)通信 在實(shí)際應(yīng)用中,計(jì)算機(jī)需要與其他計(jì)算機(jī)或儀器儀表等進(jìn)行數(shù)據(jù)交換,這些數(shù)據(jù)交換均可稱為通信。通信方式有兩種:并行通信和串行通信。 并行通信比較簡單,根據(jù)計(jì)算機(jī)與外設(shè)一次可交換的數(shù)據(jù)最大位數(shù),一般常采用8位并行通信和16位并行通信。 其特點(diǎn)是數(shù)據(jù)的每位是被同時(shí)傳遞出去或接收進(jìn)來,如前面講到的信息交換基本都是采用并行通信方式。而串行通信的數(shù)據(jù)傳輸是逐位傳輸?shù)?,進(jìn)行單向數(shù)據(jù)傳輸僅需要一根口線,因而串行通信具有連接線少,但傳輸信息速度慢的特點(diǎn)。并行通信和串行通信的連接圖如圖7-1和圖7-2所示。7.1.1 串行通信的基本概念2. 異步串行通信與同步串行通信 在串行通信中,有異步串行通信和

3、同步串行通信兩種基本的通信方式。1)異步串行通信 異步串行通信規(guī)定了一個(gè)被傳送數(shù)據(jù)的傳送格式,即每個(gè)數(shù)據(jù)以相同的幀格式傳送。如圖7-3所示,每一幀信息由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。當(dāng)數(shù)據(jù)通信空閑時(shí),數(shù)據(jù)線上的電平為1。 采用異步通信方式時(shí),甲、乙兩機(jī)采用獨(dú)立的時(shí)鐘。甲機(jī)作為主機(jī)發(fā)送數(shù)據(jù),乙機(jī)作為從機(jī)接收數(shù)據(jù)。當(dāng)發(fā)送數(shù)據(jù)時(shí),甲機(jī)先發(fā)送一個(gè)起始位(0電平),再發(fā)送數(shù)據(jù)位、奇偶校驗(yàn)位,最后發(fā)送停止位(1電平)。乙機(jī)檢測到接收電平由1變0時(shí),在下一個(gè)時(shí)鐘開始依次接收數(shù)據(jù)位、奇偶校驗(yàn)位和停止位,最后通過串并轉(zhuǎn)換電路將接收到的串行數(shù)據(jù)轉(zhuǎn)變?yōu)椴⑿袛?shù)據(jù)。每個(gè)異步串行幀中的每一位彼此需嚴(yán)格同步,位周

4、期相同,但幀與幀之間并不要求同步,也不必同步。2)同步串行通信 同步串行通信所傳輸?shù)囊粠瑪?shù)據(jù)是由多個(gè)數(shù)據(jù)構(gòu)成的,每幀有兩個(gè)同步字符作為起始,以觸發(fā)同步時(shí)鐘開始發(fā)送和接收。因此,同步串行通信中不僅位與位之間嚴(yán)格同步,數(shù)據(jù)之間也必須嚴(yán)格同步。3串行通信工作方式 串行通信要把數(shù)據(jù)由一個(gè)設(shè)備傳送到另一個(gè)設(shè)備上,必須使用通信線路。按照通信方式,可將數(shù)據(jù)傳輸線路分成三種:單工(Simplex)方式、半雙工(Half Duplex)方式和全雙工(Full Duplex)方式。 (1)單工方式是指甲、乙兩機(jī)在通信過程中數(shù)據(jù)傳輸方向是單向的,系統(tǒng)組成后,發(fā)送方和接收方即被固定。單工方式如圖7-4(a)所示。如實(shí)

5、現(xiàn)遠(yuǎn)程液位指示系統(tǒng)的基本功能就可采用此方式。 (2)半雙工方式是指甲、乙兩機(jī)都具有發(fā)送和接收功能,但對一個(gè)機(jī)器發(fā)送和接收不能同時(shí)進(jìn)行,必須是分時(shí)的,即一個(gè)機(jī)器發(fā)送數(shù)據(jù)時(shí),另一個(gè)機(jī)器只能接收數(shù)據(jù)。半雙工方式如圖7-4(b)所示。實(shí)現(xiàn)遠(yuǎn)程液位指示系統(tǒng)的提高功能可采用此方式。 (3)全雙工方式是指甲、乙兩機(jī)都具有發(fā)送和接收功能,且對于一個(gè)機(jī)器發(fā)送和接收可同時(shí)進(jìn)行。全雙工方式如圖7-4(c)所示。實(shí)現(xiàn)遠(yuǎn)程液位指示系統(tǒng)的提高功能也可采用此方式。 波特率(BAUD RATE)即數(shù)據(jù)傳輸?shù)乃俾?,一般表示每秒傳輸二進(jìn)制數(shù)的位數(shù),它的單位為b/s。假設(shè)數(shù)據(jù)傳輸速率為9600b/s,一幀數(shù)據(jù)的構(gòu)成為1位起始位、8

6、位數(shù)據(jù)位和1位停止位,則每秒中傳輸?shù)淖止?jié)數(shù)為: 9600(b/s)/10(b/字符)=960(字符/s) 每一位二進(jìn)制代碼傳輸?shù)臅r(shí)間為波特率的倒數(shù),即: 異步串行通信的常用傳輸速率有50b/s、75b/s、100b/s、150b/s、300b/s、600b/s、1200b/s、2400b/s、4800b/s、9600b/s、19200b/s等。 4波特率 在實(shí)現(xiàn)串行通信接口時(shí),必須根據(jù)需要選擇通信標(biāo)準(zhǔn)接口,并考慮傳輸介質(zhì)和電平轉(zhuǎn)換等問題。 目前常用的異步串行通信接口有以下兩種標(biāo)準(zhǔn)。 (1)RS-232C。 (2)RS-422和RS-485。1RS-232C串行通信標(biāo)準(zhǔn) EIA RS-232C是

7、美國電子工業(yè)協(xié)會(huì)正式公布的串行總線標(biāo)準(zhǔn),也是目前最常用的串行接口標(biāo)準(zhǔn),用來實(shí)現(xiàn)計(jì)算機(jī)與其他外設(shè)之間的數(shù)據(jù)通信。RS-232C串行接口總線適用于設(shè)備通信距離不大于15m的情況。1)RS-232接口引腳 RS-232C標(biāo)準(zhǔn)規(guī)定采用DB9和DB25連接器,并對連接器每個(gè)引腳的功能進(jìn)行了定義。PC機(jī)的RS-232C的DB9座(俗稱RS-232公頭)的定義如圖7-5所示。7.1.2 串行通信總線標(biāo)準(zhǔn)及其接口 2) RS-232C接口的電氣特性 RS-232C標(biāo)準(zhǔn)規(guī)定數(shù)據(jù)“1”用-5-15V表示, “0” 用+5+15V表示,可見RS-232C采用的是 負(fù)邏輯規(guī)定的信號。 單片機(jī)一般輸出都是TTL電平,因

8、此單片機(jī) 與PC機(jī)或符合RS-232C接口標(biāo)準(zhǔn)的設(shè)備相連 時(shí)都應(yīng)進(jìn)行電平轉(zhuǎn)換。圖7-6給出了用MAX202 實(shí)現(xiàn)的電平轉(zhuǎn)換電路。圖7-5 PC串口定義圖7-6 MAX202實(shí)現(xiàn)RS-232C電平轉(zhuǎn)換電路 2RS-422、RS-485串行通信標(biāo)準(zhǔn) 為了克服RS-232C傳輸距離近、通信速率低以及抗共模干擾能力較差等缺點(diǎn),EIA協(xié)會(huì)又推出了RS-422和RS-485兩種接口標(biāo)準(zhǔn)。RS-422、RS-485與RS-232C的一個(gè)顯著區(qū)別是它使用單一+5V作為工作電壓,同時(shí)采用差動(dòng)收發(fā)的方式。差動(dòng)收發(fā)需要一對平衡差分信號線,邏輯“1”和邏輯“0”是由兩根信號線之間的電位差來表示的。因此,RS-422、

9、RS-485在抗干擾性方面得到了明顯的改善。RS-422與RS-485的接口標(biāo)準(zhǔn)對比如表7-1所示。表7-1 RS-422和RS-485的接口標(biāo)準(zhǔn)對比規(guī) 格RS-422RS-485傳輸模式平衡平衡差動(dòng)輸出/V21.5驅(qū)動(dòng)器負(fù)載,最小/10060最大驅(qū)動(dòng)器數(shù)量132最大接收器數(shù)量1032最大傳輸速度/bps10M10M最大電纜長度90kbps/ft40004000最大電纜長度10Mbps/ft5050 1)RS-422的連接線路RS-422一般多采用1N的全雙工連接方式,如圖7-7所示。 圖7-7 一主多從RS-422通信電路 2)RS-485的連接線路RS-485采用半雙工的連接方式,如圖7-

10、8所示。 圖7-8 多機(jī)RS-485通信電路 89C51單片機(jī)內(nèi)部集成了一個(gè)全雙工異步串行通信接口。該接口可用作通用異步接收和發(fā)送器(Universal Asynchronous Receiver/Transmitter,UART)使用,也可用作同步移位寄存器使用。 89C51單片機(jī)的串行接口有兩個(gè)串行通信引腳RXD(P3.0)和TXD(P3.1),以單片機(jī)自身為參考分別作為接收和發(fā)送引腳。 為了實(shí)現(xiàn)全雙工串行通信,該硬件包含有串行數(shù)據(jù)發(fā)送緩沖器和接收緩沖器。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,但二者共用一個(gè)寄存器SBUF(99H)。 51單片機(jī)的串行通信有四種工作方式,使

11、用時(shí)可根據(jù)需要進(jìn)行軟件編程設(shè)定。7.2 單片機(jī)串行口及其控制7.2.1 89C51單片機(jī)串行口的結(jié)構(gòu) 89C51單片機(jī)串行口的控制寄存器有兩個(gè),分別為SCON和PCON??刂萍拇嫫鞯膬?nèi)容決定了串行口的工作方式和工作狀態(tài)。在使用串行口前必須對串行口的控制寄存器進(jìn)行初始化。 1串行口工作方式與狀態(tài)控制寄存器SCON(98H) SCON為8位寄存器,可位尋址,各位定義如表7-2所示。7.2.2 89C51單片機(jī)串行口控制寄存器表7-2 SCON寄存器結(jié)構(gòu)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI (1) SM0、SM1:串行口工作方式選擇位共有四種工作方式,如表7-

12、3所示。表7-3 SCON與串行口工作方式的對應(yīng)關(guān)系SM0 SM1工作方式功 能波 特 率0 008位移位寄存器方式0 118位數(shù)據(jù)UART方式可變,與定時(shí)器1或2的溢出率有關(guān)1 029位數(shù)據(jù)UART方式 或 1 139位數(shù)據(jù)UART方式可變,與定時(shí)器1或2的溢出率有關(guān)(2)SM2:工作在方式2、3下,多機(jī)進(jìn)行主-從式多機(jī)通信時(shí)的控制位。為1時(shí),接收到的信息為地址;為0時(shí),接收到的信息為數(shù)據(jù)。(3)REN:允許串行口接收控制位。為1時(shí),允許串行口接收RXD引腳上來的串行數(shù)據(jù);為0時(shí),禁止串行口接收RXD引腳上來的串行數(shù)據(jù)。(4)TB8:工作在方式2、3下,發(fā)送數(shù)據(jù)的最高位D8。(5)RB8:工

13、作在方式2、3下,接收數(shù)據(jù)的最高位D8。(6)TI:發(fā)送結(jié)束申請中斷標(biāo)志位。當(dāng)發(fā)送數(shù)據(jù)結(jié)束時(shí)由硬件對其置位(TI=1)并向CPU申請中斷。CPU在響應(yīng)中斷后在中斷服務(wù)程序中用軟件清除(TI=0)。(7)RI:接收結(jié)束申請中斷標(biāo)志位。當(dāng)接收數(shù)據(jù)結(jié)束時(shí)由硬件對其置位(RI=1)并向CPU申請中斷。CPU在響應(yīng)中斷后在中斷服務(wù)程序中用軟件清除(RI=0)。2電源控制寄存器PCON(87H) PCON的第7位定義了串行口波特率控制位SMOD。當(dāng)SMOD=0時(shí),串行口的波特率由SCON的內(nèi)容決定;當(dāng)SMOD=1,串行口工作于方式1、2、3時(shí),串行口的波特率加倍。在方式0下,SMOD的取值對波特率無影響。

14、上電復(fù)位后,SMOD為0。 1方式0:移位寄存器方式 在方式0下,串行口做移位寄存器使用,數(shù)據(jù)的輸入、輸出均通過RXD引腳來完成,TXD引腳以的頻率輸出同步移位脈沖。 (1)發(fā)送過程:當(dāng)將數(shù)據(jù)寫入SBUF時(shí),8位數(shù)據(jù)以的速度(一個(gè)機(jī)器周期的速度)按照先低后高的次序從RXD引腳發(fā)出,同時(shí)TXD輸出移位同步脈沖。當(dāng)8位數(shù)據(jù)發(fā)送完后,通過硬件置位TI,可在中斷服務(wù)程序中清除,也可通過軟件查詢到TI變高后再用軟件清除。 (2)接收過程:在接收允許控制位REN=1且RI=0的情況下,串行口接收緩沖器以的速度采樣RXD引腳上的信號,同時(shí)TXD輸出移位同步脈沖。當(dāng)8位數(shù)據(jù)接收完后,通過硬件置位RI,RI需軟

15、件清除。7.2.3 89C51單片機(jī)串行口工作方式 2方式1:8位數(shù)據(jù)UART方式 在方式1下,串行口為8位UART方式。一幀數(shù)據(jù)由8位數(shù)據(jù)位、1位起始位和1位停止位構(gòu)成。發(fā)送數(shù)據(jù)由TXD送出,接收數(shù)據(jù)由RXD輸入,串口的波特率由定時(shí)器1的溢出率及PCON中SMOD位的取值決定,有 方式1的波特率=的溢出率 (1)發(fā)送過程:當(dāng)TI=0時(shí),CPU向SBUF寫入一個(gè)數(shù)據(jù),就開始了數(shù)據(jù)的發(fā)送。串行口自動(dòng)在8位數(shù)據(jù)的前面加入一位的起始位“0”,再在后面加入一位的停止位“1”。在移位脈沖的作用下依次由TXD送出。在8位數(shù)據(jù)發(fā)送完以后,在停止位開始發(fā)送前,將TI置1。 (2)接收過程:當(dāng)CPU采樣到RXD

16、端的電平由高變低,且REN=1、RI=0的情況下,就啟動(dòng)接收。當(dāng)接收完畢后,硬件將RI置1。 3方式2、3:9位數(shù)據(jù)UART方式 在方式2和方式3下,串行口為9位UART方式。一幀數(shù)據(jù)由9位數(shù)據(jù)位、1位起始位和1位停止位構(gòu)成。發(fā)送數(shù)據(jù)由TXD送出,接收數(shù)據(jù)由RXD輸入。二者的發(fā)送和接收過程完全一樣,只是波特率不同,有: 方式2的波特率= 方式3的波特率= 或T2的溢出率 (1)發(fā)送過程:和方式1基本相同,附加的第9位為TB8,發(fā)送完1位起始位、9位數(shù)據(jù)位后將TI置1。 (2)接收過程:和方式1基本相同,接收完8位數(shù)據(jù)位后,再接收第9位數(shù)據(jù)D8,將接收到的前8位數(shù)據(jù)裝入SBUF,第9位數(shù)據(jù)存入R

17、B8后,將RI置1。 從以上的內(nèi)容來看,只要單片機(jī)允許接收,不管工作在何種狀態(tài)下,都必須將REN置1。 1串行口波特率的設(shè)定 (1)在方式0下,串行通信的波特率僅和單片機(jī)振蕩器的工作頻率 有關(guān),其波特率為 。 (2)在方式1、3下,串行口的波特率是可變的,其值與定時(shí)器1或2的溢出率以及SMOD的數(shù)值有關(guān),具體計(jì)算公式如下: BAUD= 或T2的溢出率 定時(shí)器的溢出率為 定時(shí)器的溢出率=定時(shí)器的溢出次數(shù)/秒 例如,定時(shí)器T1采用8位自動(dòng)重裝入時(shí)間常數(shù)的定時(shí)方式2,定時(shí)器T1的溢出率可由下式給出: 定時(shí)器T1的溢出率= 式中,N為定時(shí)器T1的自動(dòng)重裝入時(shí)間常數(shù)。 當(dāng)給定波特率時(shí),N可由下式得出:式

18、中, 為系統(tǒng)晶體振蕩器頻率;BAUD為波特率。7.2.4 波特率的設(shè)定及串行口初始化 【例7.1】 系統(tǒng)晶振為11.0592MHz,波特率為9600b/s,試確定自動(dòng)重裝入時(shí)間常數(shù)。解:(3)在方式2下,串行口的波特率和單片機(jī)振蕩器的工作頻率 和SMOD的值有關(guān),其波特率為 方式2的波特率= 2串行口初始化 串行口初始化主要是完成對SCON、PCON以及定時(shí)器的初始化,啟動(dòng)定時(shí)器,并根據(jù)是否允許串行口中斷來決定是否打開串行口中斷控制位ES和總中斷開關(guān)EA。下面給出了一個(gè)系統(tǒng)晶振頻率=11.0592MHz,波特率為9600b/s的串行口初始化函數(shù)的C51代碼。void uart_init(voi

19、d) /串行口初始化函數(shù)TMOD|=0 x20; /定時(shí)器T1工作在方式2TH1=0 xfd; /設(shè)定定時(shí)器1自動(dòng)重裝入時(shí)間常數(shù) TL1=0 xfd; TR1=1; /啟動(dòng)定時(shí)器SCON=0 x50; /串行口工作在方式1,允許串行接收 ES=1; /允許串行通信中斷在主程序中應(yīng)開啟總中斷允許控制位,即EA=1。若在上述程序中加入PCON|=0 x80語句,則SMOD=1,此時(shí)系統(tǒng)串行通信的波特率為19200b/s。 在進(jìn)行51單片機(jī)串行口編程時(shí),用定時(shí)器T1作為波特率發(fā)生器,可以按照以下幾個(gè)要點(diǎn)來完成串行通信的程序編寫。設(shè)置TMOD,使得定時(shí)器T1工作在方式2。根據(jù)波特率確定定時(shí)器的初值,并

20、裝入時(shí)間常數(shù)寄存器TH1和TL1中。啟動(dòng)定時(shí)器T1。當(dāng)T1用作波特率發(fā)生器時(shí),不要再做定時(shí)器使用。根據(jù)系統(tǒng)要求,對SCON進(jìn)行初始化,若允許接收,一定要對REN置1。若允許串行中斷,則應(yīng)加入ES=1指令,且應(yīng)保證EA=1。串行中斷的服務(wù)函數(shù)應(yīng)用關(guān)鍵字interrupt進(jìn)行定義,且中斷向量為4。在中斷函數(shù)中,應(yīng)首先清除對應(yīng)的中斷標(biāo)志,再進(jìn)行數(shù)據(jù)處理。若采用查詢方式進(jìn)行數(shù)據(jù)發(fā)送,必須將被發(fā)送數(shù)據(jù)送入SBUF后,判斷TI標(biāo)志,直至TI=1,再清除TI,才可發(fā)送下一個(gè)數(shù)據(jù)。7.2.5 串行口C51語言編程要點(diǎn)【任務(wù)實(shí)施】 1)設(shè)計(jì)方案 為了用上位機(jī)對液位指示系統(tǒng)進(jìn)行遠(yuǎn)程監(jiān)控,可采用RS-232C串行通

21、信方式實(shí)現(xiàn)。在硬件上,由于單片機(jī)已經(jīng)具有了串行通信外設(shè),因此僅需加入通信電平轉(zhuǎn)換電路和物理連接即可。在軟件上,只需按規(guī)定的通信協(xié)議完成下位機(jī)的軟件編程。 2)硬件電路實(shí)現(xiàn) 硬件上,可在第3章的硬件基礎(chǔ)上再加上RS-232C串行通信電平轉(zhuǎn)換電路即可,電路的具體實(shí)現(xiàn)見圖7-6。將單片機(jī)的P3.0(RXD)與MAX202的12腳相連,P3.1(TXD)與MAX202的11腳相連,就構(gòu)成了全雙工通信硬件電路。系統(tǒng)的晶振建議選擇11.0592MHz晶振,可實(shí)現(xiàn)無誤差的常用波特率。 3)系統(tǒng)程序?qū)崿F(xiàn)(1) 程序流程圖 為了實(shí)現(xiàn)每隔1s向上位機(jī)傳送一次液位信息,僅需采用查詢方式進(jìn)行實(shí)時(shí)液位信息的串行發(fā)送,此

22、部分可安排在定時(shí)器的中斷服務(wù)程序中實(shí)現(xiàn),程序流程圖如圖所示。(2)源程序/*-遠(yuǎn)程液位監(jiān)控系統(tǒng)-*/#include #include /包含頭文件unsigned char num;/定時(shí)次數(shù)單元/*-系統(tǒng)初始化程序-*/void sys_init(void)/*定時(shí)器0初始化*/TMOD=0 x21; /T0工作在定時(shí)方式1TH0=0 x4c; TL0=0 xf7; /裝入50ms的定時(shí)常數(shù)TR0=1; /啟動(dòng)定時(shí)器0ET0=1; /允許定時(shí)器0中斷/*串行口初始化*/TMOD|=0 x20; /定時(shí)器1工作在定時(shí)方式2SCON=0 x40; /串行口工作在方式1 TH1=0 xfd;TL

23、1=0 xfd; /設(shè)定波特率為9600TR1=1; /啟動(dòng)定時(shí)器1EA=1; /總中斷允許/*-定時(shí)器T0中斷服務(wù)程序-*/void T0_ISR(void) interrupt 1 unsigned char temp;TH0=0 x4c; TL0=0 xf7; /裝入50ms的定時(shí)常數(shù) num+; /50ms中斷次數(shù)單元加1 if(num=20) /1s時(shí)間到 num=0; temp=sample_Liquid();/采集液位信息 SBUF=temp; while(TI=0); /發(fā)送液位信息 TI=0; /發(fā)送完成后程序清TI,為下一次 /發(fā)送做準(zhǔn)備 /*-主程序-*/void mai

24、n(void) num=0; sys_init(); while(1);【拓展訓(xùn)練:上位機(jī)可控的遠(yuǎn)程液位監(jiān)控系統(tǒng)的實(shí)現(xiàn)】 1) 功能要求 當(dāng)上位機(jī)發(fā)送請求信號時(shí),下位機(jī)回發(fā)實(shí)時(shí)測量的液位數(shù)據(jù)。 為了保證通信數(shù)據(jù)的可靠,必須要規(guī)定一個(gè)較可靠的串行通信軟件協(xié)議,在通信協(xié)議中不僅包含實(shí)時(shí)液位系統(tǒng),還應(yīng)包含液位采樣的采樣次數(shù)信息。 2)硬件電路實(shí)現(xiàn) 硬件見本章任務(wù)實(shí)施中的硬件電路實(shí)現(xiàn),無須做出任何修改。 3)系統(tǒng)程序?qū)崿F(xiàn)(1)通信協(xié)議的制定 為了按要求實(shí)時(shí)可靠地傳輸液位信息和液位采樣次數(shù)信息,可規(guī)定如下的一幀數(shù)據(jù)作為遠(yuǎn)程液位指示系統(tǒng)的通信幀(Frames in Communication)。起始幀:0

25、 xff,占一個(gè)字節(jié)。液位數(shù)據(jù)幀:0 x000 x08,占一個(gè)字節(jié)。采樣次數(shù)幀:0 x010 xffff,占兩個(gè)字節(jié)。校驗(yàn)幀:液位數(shù)據(jù)幀和采樣次數(shù)幀的字節(jié)和,占一個(gè)字節(jié)??梢?,只有當(dāng)上位機(jī)(PC機(jī))完整收到一幀數(shù)據(jù)(共5個(gè)字節(jié))時(shí),才作為一次有效數(shù)據(jù),否則作為無效數(shù)據(jù)拋棄。為了實(shí)現(xiàn)對下位機(jī)遠(yuǎn)程可控,上位機(jī)需發(fā)送一個(gè)請求命令,可規(guī)定為“STA”。當(dāng)下位機(jī)收到三個(gè)字節(jié)的字符串“STA”時(shí),按照上面規(guī)定的通信幀回發(fā)信息。(2)程序流程圖 為了實(shí)現(xiàn)對上位機(jī)請求信號“STA”的響應(yīng),軟件需采用中斷方式進(jìn)行上位機(jī)請求信號的響應(yīng),收到正確的響應(yīng)信號后,再通過查詢方式實(shí)時(shí)發(fā)送液位信息的通信幀。主程序流程圖如圖

26、7-10所示,串行中斷服務(wù)程序如圖7-11所示。圖7-10 主程序流程圖圖7-11 串行中斷服務(wù)程序(3)源程序#include #include /包含頭文件union uint_uchar unsigned int Bint; unsigned char Bchar2;sample_num; /采樣次數(shù)單元unsigned char rev_statu; /接收狀態(tài)單元/*- 系統(tǒng)初始化程序-*/void sys_init(void)/*串行口初始化*/TMOD|=0 x20; /定時(shí)器1工作在定時(shí)方式2SCON=0 x50; /串行口工作在方式1,允許接收 TH1=0 xfd;TL1=0 xfd; /設(shè)定波特率為9

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論