版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
江蘇大學畢業(yè)設(shè)計供油系統(tǒng)控制軟件的開發(fā)PAGEPAGE33摘要碼頭的油水電監(jiān)控系統(tǒng)是船艇學院和我院聯(lián)合研究的總后勤部的科研項目,該課題主要研究碼頭供油的子系統(tǒng)。原有的碼頭人工供油方式已經(jīng)不能適應(yīng)現(xiàn)代碼頭快節(jié)奏,高精確要求,在使用嵌入式系統(tǒng)控制后可以廣泛用于對碼頭船艇的供油以及碼頭供油過程中的泵房現(xiàn)場的環(huán)境油氣濃度檢測。機器與一次儀表配合使用的精度可以達到3‰,操作簡單,顯示直觀清晰,可聯(lián)網(wǎng)使用,也可單獨使用,具有實際的應(yīng)用價值。下位機采用了Cygnal單片機C8051F020,它極大擴充了下位機的功能,如下位機對供油參數(shù)的設(shè)定更加方便,“查詢鍵”的設(shè)置方便了下位機對PC機進行數(shù)據(jù)查詢;此外,“開始發(fā)油”鍵和“緊急暫停”鍵功能的運用,可以使供油緊急暫停,并且按“開始發(fā)油”鍵,可以恢復(fù)發(fā)油;下位機還具有了掉電保護功能和自動報警功能;遠程通訊的應(yīng)用使得系統(tǒng)可以進行遠程供油。關(guān)鍵詞:碼頭供油,嵌入式系統(tǒng),CygnalC8051F020,掉電保護AbstractTheoilwaterandelectricitymonitoringsystemofthequayisthescientificresearchprojectofGeneralLogisticsDepartmentwhichtheshipandlightboatinstituteandouracademyjointlystudy,thismainresearchquayofsubjectsupportsthesubsystemoftheoil.Alreadyexistingquayartificialtosupportoilwaytocanmeetthemodernfastrhythmofquayalready,requirehighandaccurate,inuseembeddedsystemcanisitfortheoilandquaytosupporttoquayshipandlightboattouseforextensivelyaftercontrolling,thedensityofenvironmentaloilgasofunloadingthesceneofpumphouseintheoilcourseismeasured.Themachinecooperateswithaappearancetheprecisionusedcanreach3‰,itissimpletooperate,showocularlyandclearly,cannetworkanduse,canalsousealone,usingvaluewithreality.Thenextmachinehasadoptedone-chipcomputerC8051F020ofCygnal,ithasexpandedthefunctionofthenextmachinegreatly,themachinetosupportoilsettlementofparameterconvenient,establishmentthat"inquirekey"helpthenextmachinegoondatuminquirytothePC;Inaddition"beginhairoil"keyand"suspendpromptly"keyapplicationoffunction,canmakeandisfortheoiltosuspendpromptly,press"beginthehairoil"key,canresumehairoil;Thenextmachinealsohastheelectricityoflosingtoprotectthefunctionandautoalarmfunction;Theapplicationofthetelecommunicationmakesthesystemabletosupporttheoillong-rangly.Keywords:Thequaysupportstheoil,theembeddedsystem,Cygnal,C8051F020,losestheelectricitytoprotect目錄TOC\o"1-3"\h\z第1章緒論 11.1系統(tǒng)設(shè)計的提出 11.2系統(tǒng)需求分析 21.3系統(tǒng)方案設(shè)計 3第2章系統(tǒng)開發(fā)環(huán)境 52.1Cygnal單片機C8051F020 52.2IDE調(diào)試環(huán)境簡介 62.3KEILC51簡介 6第3章底層功能模塊設(shè)計 83.1鍵盤的操作與顯示 83.1.1鍵盤、指示燈、報警代碼的定義 83.1.2鍵盤顯示芯片HD7279A簡介 83.1.3程序的實現(xiàn) 93.2數(shù)據(jù)采集 113.2.1系統(tǒng)采集參數(shù) 113.2.2模擬量的采集 113.2.2脈沖量的采集 133.3數(shù)據(jù)存儲 153.3.1數(shù)據(jù)存儲的主要參數(shù) 153.3.2外擴RAM工作原理 153.3.3數(shù)據(jù)存儲實現(xiàn)的方法 163.4實時時鐘 173.4.1S-3530時鐘芯片 173.5多機通訊 183.5.1C8051F020串行口UART 183.5.2通訊協(xié)議 193.5.3通訊程序的實現(xiàn) 223.6FLASH存儲器 233.6.1FLASH的特性和寄存器 233.6.2FLASH讀寫方法和實現(xiàn) 243.78位移位寄存器74ls166 25第4章系統(tǒng)主程序設(shè)計 254.1程序流程及狀態(tài)轉(zhuǎn)換 254.2運行效果 29第5章總結(jié)和相關(guān)討論 31參考文獻 32致謝 33第1章緒論1.1系統(tǒng)設(shè)計的提出碼頭的油水電監(jiān)控系統(tǒng)是船艇學院和我院聯(lián)合研究的總后勤部的科研項目,該課題主要研究碼頭供油的子系統(tǒng)。原有的碼頭人工供油方式已經(jīng)不能適應(yīng)現(xiàn)代碼頭快節(jié)奏,高精確要求,在使用嵌入式系統(tǒng)控制后可以廣泛用于對碼頭船艇的供油以及碼頭供油過程中的泵房現(xiàn)場的環(huán)境油氣濃度檢測。機器與一次儀表配合使用的精度可以達到3‰,操作簡單,顯示直觀清晰,可聯(lián)網(wǎng)使用,也可單獨使用,具有實際的應(yīng)用價值。我設(shè)計的主要任務(wù)是碼頭供油系統(tǒng)控制軟件的開發(fā),能夠設(shè)計出一個合理可靠的碼頭供油的監(jiān)控模塊。所謂碼頭供油監(jiān)控模塊就是碼頭油水電供給監(jiān)控系統(tǒng)中安裝于碼頭現(xiàn)場泵房監(jiān)控箱中的供給監(jiān)控單元,相當于是監(jiān)控系統(tǒng)的下位監(jiān)控機。其實這一系統(tǒng)的開發(fā)也是嵌入式系統(tǒng)在我們生活中又一次的應(yīng)用,縱觀嵌入式系統(tǒng)與我們的生活的確是越來越近,我們平常生活中所使用的手機就是嵌入式系統(tǒng)的應(yīng)用之一。我們也有理由相信它的發(fā)展也將越來越迅速。碼頭系統(tǒng)控制軟件的設(shè)計對碼頭進一步控制油、水、電的供應(yīng)是極為方便的,不僅省去了大量的人力,而且工作更加高效,步驟清晰、方便快捷。下位機以單片機為核心,配以大規(guī)模集成電路和嚴密的程序組成。適合工作于-10-50度的工作現(xiàn)場,壽命大大加長。為提高機器的可靠性,用于數(shù)據(jù)輸入的鍵盤采用了壽命達1000萬次以上的按鍵。考慮到下位機直接安裝在發(fā)貨現(xiàn)場,處于防爆殼內(nèi)的微機電路增加了專門防電磁干擾的屏蔽盒,電路和軟件設(shè)計同時采用看門狗(WDT)的處理技術(shù)。為提高流體的結(jié)算和控制精度,溫度補償兩秒進行一次。為提高下位機的透明度,機內(nèi)所有參數(shù)都對用戶開放,即操作者通過鍵盤能知道機器內(nèi)的一參數(shù)。下位機是集散型控制系統(tǒng)中的主要設(shè)備,它直接控制和完成發(fā)貨的全過程。下位機具有遠地聯(lián)機(工作于遠地工作方式)發(fā)油和本地單機(工作于本地工作方式)發(fā)油兩種工作方式。遠地聯(lián)機工作方式,主要接收來自通訊網(wǎng)的數(shù)據(jù)和命令,機器鍵盤可修改任參數(shù)。本地單機工作方式,下位機可直接進入到用本機鍵盤單獨操作控制的本地工作方式,使用靈活、方便。下位機不論工作于遠地聯(lián)機或本地單機工作方式,其發(fā)貨記錄都將準確無誤地通訊網(wǎng)進入計算機,便于數(shù)據(jù)的統(tǒng)計和打印。1.2系統(tǒng)需求分析對于供油系統(tǒng)需求分析我們先分析該系統(tǒng)的主要的特性,整個供油系統(tǒng)很重要的部分就是供油監(jiān)控箱,而供油監(jiān)控箱主要實現(xiàn)對雙路供油船艇進行自動定量加油、供油管路工作參數(shù)、環(huán)境油氣濃度的自動檢測、管路伐門的自動控制和與系統(tǒng)主控計算機的數(shù)據(jù)通訊等。我細化分析一下它的主要功能,可知:1、一臺供油監(jiān)控箱可分時(或同時)控制兩路油管自動定量發(fā)貨。2、對于管道介質(zhì)溫度補償,按照國標GB/T1885-98執(zhí)行3、具有“遠地聯(lián)機發(fā)油”和“本地單機發(fā)油”功能。4、具有掉電保護的功能。5、具有自動監(jiān)控管路壓力、泵房內(nèi)可燃氣體油氣混合物濃度功能。6、具有自動報警功能(1)當供油管路壓力超過設(shè)定極限時,發(fā)出報警信號。(2)泵房內(nèi)油氣濃度超過設(shè)定極限時,發(fā)出報警信號。(3)當機器啟動后,12秒鐘內(nèi)沒接收到流量計發(fā)出的流量信號(如閥門沒有打開,或者流量計卡死等造成的管路不通),自動切斷電液閥等執(zhí)行裝備,并發(fā)出報警信號。(4)當供油溢出時,接收溢油發(fā)信器發(fā)出的信號,自動切斷電液閥,停止供油,并發(fā)出警報。7、具有遠程通訊功能,能按標準RS485/RS422通訊協(xié)議將油場采集的信號送到主控計算機并能接收到主控計算機發(fā)出的控制信號,控制控油過程的運行。8、具有“開始發(fā)油”鍵和“緊急暫停”鍵功能,緊急暫停后,按“開始發(fā)油”鍵,可以恢復(fù)發(fā)油。1.3系統(tǒng)方案設(shè)計整個供油系統(tǒng)中,中央處理器(CPU)采用先進的單片機(C8051F020),整機由中央控制單元,顯示報警單元,鍵盤單元,接口單元和電源單元共五部分組成(內(nèi)部輸入接口如圖1.2.1所示)。此外,現(xiàn)場還要配備流量計,溫度變送器、壓力變送器、油氣濃度變送器、電液(磁)閥、聲光報警器等組成開環(huán)控制系統(tǒng)。信號的采集主要是靠流量計、溫度變送器、壓力變送器、油氣濃度和環(huán)境溫度信號,通過接口輸入到微機進行數(shù)字量處理和模擬量到數(shù)字量的轉(zhuǎn)換。信號的處理則根據(jù)國家標準GB/T1885-98規(guī)定換算公式:M=Vt*pt=V*L*pt其中pt:為實際溫度下的介質(zhì)密度(千克/升)V:為流量變送器發(fā)出的脈沖數(shù)L:為流量變送器的脈沖當量(升/脈沖)模擬量模擬量輸入單元開關(guān)量輸入單元脈沖量輸入單元報警顯示單元中央控制單元數(shù)據(jù)通訊單元開關(guān)量輸出單元控制按紐及顯示圖1.2.1 內(nèi)部對整體系統(tǒng)功能模塊的劃分,我們可以分出:鍵盤??臁?shù)據(jù)采集、實時時鐘、數(shù)據(jù)存儲和多機通訊。這樣對于我們可以有針對性的規(guī)劃編程和調(diào)試,從整體上把握系統(tǒng)結(jié)構(gòu)。圖1.2.2為系統(tǒng)總體聯(lián)網(wǎng)圖。主機主機(PC機) 串行通訊供油一體機供水一體機體供電一體機供油一體機供水一體機體供電一體機圖1.2.2系統(tǒng)總體聯(lián)網(wǎng)圖根據(jù)要求我們可以畫出它的流程雛形,比較詳細的流程將在第四章進行探討。報警開始(自檢系統(tǒng)是否正常) N報警開始(自檢系統(tǒng)是否正常) YIC在下位機刷卡IC在下位機刷卡卡號傳送到PC主控機卡號傳送到PC主控機驗證卡號合法性禁止供油 N驗證卡號合法性禁止供油是否有供油指標 是否有供油指標 Y顯示“允許供油”顯示“允許供油”發(fā)送領(lǐng)油量及IC卡號發(fā)送領(lǐng)油量及IC卡號一體機返回確認 一體機返回確認 Y主控計算機再確定主控計算機再確定啟動閥門,開始供油啟動閥門,開始供油下位機計數(shù),傳實發(fā)量至主機下位機計數(shù),傳實發(fā)量至主機主機顯示實發(fā)量,定時把數(shù)據(jù)傳至下位機主機顯示實發(fā)量,定時把數(shù)據(jù)傳至下位機檢查是否達到定量 N檢查是否達到定量 Y關(guān)閉路閥,撤軟管關(guān)閉路閥,撤軟管結(jié)束結(jié)束第2章系統(tǒng)開發(fā)環(huán)境2.1Cygnal單片機C8051F020我們使用的開發(fā)工具是Cygnal的開發(fā)工具,Cygnal的開發(fā)工具實質(zhì)上就是計算機IDE調(diào)試環(huán)境軟件及計算機RS232到C8051F單片機JTAG口的協(xié)議轉(zhuǎn)換器(EC2)的組合。CygnalC8051F系列所有的單片機片內(nèi)均設(shè)計有調(diào)試電路該調(diào)試電路,通過邊界掃描方式獲取單片機片內(nèi)信息,通過4線的JTAG接口與開發(fā)工具連接以便于進行對單片機在片編程調(diào)試。NCD-CIP51F020系統(tǒng)實驗設(shè)備中的NMC-20XX核心模塊上的單片機為C8051F系列中的F020。適配器(EC2)一端與計算機相連,另一端與C8051F單片機JTAG口相連,應(yīng)用Cygnal提供的IDE調(diào)試環(huán)境,全速的在系統(tǒng)編程(ISP)和調(diào)試。Cygnal開發(fā)工具支持觀察和修改存儲器和寄存器支持斷點觀察點堆棧指示器單步運行和停止命令調(diào)試時不需要額外的目標RAM程序存儲器定時器或通信通道并且所有的模擬和數(shù)字外設(shè)都正常工作。本系統(tǒng)下位機是以單片機為核心,而我們采用的高速SOC單片機C8051F020型單片機。從單片機選型的原則出發(fā),我們所選用的單片機必須經(jīng)濟、工作可靠、功能強大。從總體原則上概括就是芯片所含有的功能要大與設(shè)計需求,主要表現(xiàn)在技術(shù)性、實用性、可開發(fā)性,而我們所使用的C8051F020滿足以上的需求,實踐也證明它是足以勝任的。1)它具有與MCS-51單片機內(nèi)核及指令集完全兼容的控制器2)采用CIP-51內(nèi)核可使用標準ASM-51,KEIL-C高級語言開發(fā)和編譯3)它具有高速指令處理能力以下是C8051F020片上系統(tǒng)單片機片內(nèi)資源模塊外設(shè)1)逐次逼近型8路12位ADC02)8路8位ADC1輸入與P1口復(fù)用3)兩個12位DAC4)兩個模擬電壓比較器5)電壓基準內(nèi)部提供2.43V外部基準可輸入6)精確的VDD監(jiān)視器高速8051微控制器內(nèi)核流水線式指令結(jié)構(gòu)速度可達25MIPS22個矢量中斷源7)存儲器片內(nèi)4352字節(jié)數(shù)據(jù)RAM,64KBFlash程序存儲器可作非易失性存儲,外部可擴展的64KB數(shù)據(jù)存儲器接口。8)數(shù)字外設(shè)8個8位的端口I/O,I2CSPI2個增強型UART串口,可編程的16位計數(shù)器/定時器陣列(PCA),5個通用16位計數(shù)器/定時器,專用的看門狗WDT。由以上我們可以得出單片機C8051F020功能強大,工作可靠,經(jīng)濟,可完全勝任開發(fā)供油系統(tǒng)。2.2IDE調(diào)試環(huán)境簡介首先讓我們來看看CYGNALIDE的主界面如圖2.2.1所示:圖2.2.1IDE的主界面Cygnal集成開發(fā)環(huán)境軟件提供了開發(fā)和測試項目所必須的工具具有如下特點:1)源代碼編輯器2)項目管理器3)集成8051宏匯編器4)FLASH編程器5)支持Cygnal的全速非侵入在線調(diào)試邏輯6)實時斷點7)比使用ICE芯片目標仿真頭電纜與仿真插座的仿真系統(tǒng)有更優(yōu)越的性能8)源程序級調(diào)試9)有條件的存儲器觀察點10)存儲器與寄存器檢查與修改11)單步與連續(xù)單步執(zhí)行方式12)支持第三方開發(fā)工具13)MCU程序代碼初始化配置向?qū)?.3KEILC51簡介KEILC51標準C編譯器為8051微控制器的軟件開發(fā)提供了C語言環(huán)境,同時保留了匯編代碼高效,快速的特點。KEILC51編譯器在遵循ANSI標準的同時,為8051微控制器系列特別設(shè)計。語言上的擴展能讓用戶使用系統(tǒng)中的所有資源。1)存儲器和特殊功能寄存器的存取
C51編譯器可以實現(xiàn)對8051系列所有資源的操作。SFR的存取由sfr和sbit兩個關(guān)鍵字來提供。變量可旋轉(zhuǎn)到任一個地址空間。用關(guān)鍵字-at-還能把變量放入固定的存儲器.存儲模式(大,中,?。Q定了變量的存儲類型。
連接定位器支持的代碼區(qū)可達32個,這就允許用戶在原有64KROM的8015基礎(chǔ)上擴展程序。在V2的編譯器和許多高性能仿真器中,可以支持應(yīng)用程序的調(diào)試。
2)中斷功能
C51允許用戶使用C語言編寫中斷服務(wù)程序,快速進、出代碼和寄存器區(qū)的轉(zhuǎn)換功能使C語言中斷功能更加高效。可再入功能是用關(guān)鍵字來定義的。多任務(wù),中斷或非中斷的代碼要求必須具備可再入功能。
3)靈活的指針
C51提供了靈活高效的指針。通用指針用3個字節(jié)來存儲存儲器類型及目標地址,可以在8051的任意存儲區(qū)內(nèi)存取任何變量。特殊指針在聲明的同時已指定了存儲器類型,指向某一特定的存儲區(qū)域。由于地址的存儲只需1-2字節(jié),因此,指針存取非常迅速。至于C51語言,我們可以說它相對于匯編語言來,它是一種高級程序設(shè)計語言,它提供了十分完備的規(guī)范化流程控制結(jié)構(gòu)。因此采用C51語言設(shè)計單片機應(yīng)用系統(tǒng)程序時,首先要盡可能地采用結(jié)構(gòu)化的程序設(shè)計方法,這樣可使整個應(yīng)用系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。對于一個較大的程序,可將整個程序按功能分成若干個模塊,不同的模塊完成不同的功能。對于不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和出口參數(shù),而經(jīng)常使用的一些程序最好編成函數(shù),這樣既不會引起整個程序管理的混亂,還可增強可讀性,移植性也好。在程序設(shè)計過程中,要充分利用C51語言的預(yù)處理命令。對于一些常用的常數(shù),如TRUE,F(xiàn)ALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據(jù)外界條件可變的常量,可采用宏定義"#define"或集中起來放在一個頭文件中進行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當需要修改某個參量時,只須修改相應(yīng)的包含文件或宏定義,而不必對使用它們的每個程序文件都作修改,從而有利于文件的維護和更新??傮w來說,C51編譯器不但可以縮短單片機控制系統(tǒng)的開發(fā)周期,而且易于調(diào)試和維護。此外,C51語言還有許多強大的功能,如提供豐富的庫函數(shù)供用戶直接調(diào)用,完整的編譯控制指令為程序調(diào)試提供必要的符號信息等等。綜上所述,C51語言具有強大的功能,并且C51編譯器功能在不斷的增強,所以我們在系統(tǒng)設(shè)計中采用KEILC51。第3章底層功能模塊設(shè)計3.1鍵盤的操作與顯示3.1.1鍵盤、指示燈、報警代碼的定義數(shù)字鍵0—9,用于輸入?yún)?shù)和密碼。確定鍵,用于輸入?yún)?shù)和密碼后的確定,相當PC機的回車鍵。設(shè)置鍵,用于管理員輸入?yún)?shù)和修改密碼。供油/暫停鍵,開始供油時需要按該鍵,遇緊急情況時,按該鍵暫停供油(水、電)。如需恢復(fù),再次按該鍵即可恢復(fù)供應(yīng)。停止鍵,如遇緊急情況需停止供應(yīng)按該鍵。本次供應(yīng)結(jié)束。正常工作時,用低5位LED實時顯示供應(yīng)量,最高位LED用于閃爍顯示通道號,若當前供應(yīng)量超過5位整數(shù),將該數(shù)除以10取整后再顯示,并點亮一指示燈進行指示。每路工作狀態(tài)指示燈(4個):點亮代表本路正在供應(yīng),熄滅代表本路暫停/停止/沒有供應(yīng),閃爍代表本路正在報警。報警類型用編號在LED上顯示。兼有風鳴器報警。電源指示燈(1個):燈亮表示通電正常,滅表示電源故障。通信正常指示燈(1個):通信正常熄滅,通信故障點亮。讀卡指示燈(1個):讀卡后,單片機進行校驗,若正確則點亮指示燈3.1.2鍵盤顯示芯片HD7279A簡介HD7279A是一片具有串行接口的,可同時驅(qū)動8位共陰式數(shù)碼管(或64只獨立的LED)智能顯示驅(qū)動芯片,該芯片同時還可連接多達64鍵的鍵盤矩陣,單片即可完成顯示鍵盤接口的全部功能。HD7279A內(nèi)部含有譯碼器,可直接接受BCD碼或16進制碼,并同時具有2種譯碼方式,此外還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。HD7279A具有片選信號,可方便地實現(xiàn)多于8位的顯示或多于64鍵的鍵盤接口。那讓我們看看它的主要特點:行接口,無需外圍元件,直接驅(qū)動LED位獨立控制譯碼/不譯碼及消隱、閃爍屬性循環(huán))左移/(循環(huán))右移指令有段尋址指令,方便控制獨立LED4鍵鍵盤控制器,內(nèi)含去抖電路DIP和SOIC兩種封裝形式供選擇在鍵盤的程序設(shè)計中,我們會用到它一些比較重要的指令,比如一些控制指令,而7279A的控制指令分為純指令和帶有數(shù)據(jù)的指令。在純指令中我們會用到復(fù)位指令A(yù)4H,指令格式為:當HD7279A收到該指令后,將所有顯示清除,所有設(shè)置字符消隱、閃爍等屬性也被清除。執(zhí)行該指令后,芯片所處狀態(tài)與系統(tǒng)所處上電狀態(tài)一樣。程序設(shè)計中主要還會用到一些帶數(shù)據(jù)的指令,如下載數(shù)據(jù)且按方式1譯碼,其指令格式為:X=無影響譯碼表就不重點列出了。程序中還會用到“下載數(shù)據(jù)但不譯碼”,命令格式為:其中,a2,a0,a1為位地址,A-G和DP為顯示數(shù)據(jù),分別對應(yīng)7段LED數(shù)碼管各段如圖3.2.1.2相應(yīng)的數(shù)據(jù)為1時,該段才亮,否則不亮圖3.2.1數(shù)碼管圖讀鍵盤數(shù)據(jù)指令15H該指令從HD7279A讀出當前的按鍵代碼。與其他指令不同,此命令的前一個字節(jié)0010101B為微控制器傳送到HD7279A的指令,而后一個字節(jié)D0-D7則為HD7279A返回按鍵代碼起范圍0-3FH(無鍵按下時為0XFF),此指令的前半段,HD7279A的DATA引腳處于高阻輸入狀態(tài),輸出代碼的值。故微處理器連接到DATA引腳I/O口應(yīng)有輸出太到輸入太的過程。當HD7279A檢測到有效按鍵時,,KEY引腳從高電平變?yōu)榈忘c平,并一直保持按鍵結(jié)束。在此期間,如果HD7279A接收到讀鍵盤數(shù)據(jù)指令,則輸出當前按鍵的鍵盤代碼:如果在收到’讀鍵盤指令時沒有有效按鍵,HD7279A將輸出FFH(11111111B)。3.1.3程序的實現(xiàn) HD7279A在程序中主要應(yīng)用于對系統(tǒng)參數(shù)的設(shè)置,參數(shù)的設(shè)置如下:共12個參數(shù):密碼、工作方式(0脫/1連)、波特率(0-4800;1-9600)、過沖量、脈沖當量、標準密度、溫度補償系數(shù)、溫度報警(<100)、壓力報警(<1600)、油氣濃度報警(<100)、日期、時間1、空閑狀態(tài)時按設(shè)置鍵進入?yún)?shù)設(shè)置狀態(tài),顯示“0-”,提示管理員輸入密碼。若密碼正確則進入2,否則再次顯示“0-”……。2、顯示“1-”,提示管理員輸入新密碼(第一個參數(shù),若管理員不需要改變密碼直接按確認鍵),新密碼小于等于6位數(shù)字,若小于6位按確認鍵表示結(jié)束(如輸入123確認,則本次輸入的密碼為123。如輸入6543212,則本次輸入的密碼為654321)。輸入數(shù)據(jù)時按確認前若發(fā)現(xiàn)輸入錯誤可以按取消鍵取消本次輸入)輸入完新密碼后再次顯示“1-”提示管理員對密碼進行確認。若兩次輸入密碼相同則密碼修改成功。否則否則再次顯示“1-”……。3、顯示“2-”提示管理員輸入第二個參數(shù)(工作方式),參數(shù)為小于等于6位整數(shù),若所輸入的參數(shù)小于6位應(yīng)按確認鍵表示結(jié)束(如輸入2345確認,表示輸入的參數(shù)為2345,如輸入6543212,則本次輸入的參數(shù)為654321)。注:第一個參數(shù)為工作方式,0代表脫4、顯示“3-”提示管理員輸入第三個參數(shù)(波特率,0—4800、1--9600)。5、顯示“4-”提示管理員輸入第四個參數(shù)(過沖量)。6、顯示“5-”提示管理員輸入第五個參數(shù)(脈沖當量)。7、顯示“6-”提示管理員輸入第六個參數(shù)(液體標準密度)。8、顯示“7-”提示管理員輸入第七個參數(shù)(溫度補償系數(shù))。9、顯示“8-”提示管理員輸入第八個參數(shù)(溫度報警上限,〈100〉。A、顯示“9-”提示管理員輸入第九個參數(shù)(壓力報警上限,〈1600〉。B、顯示“A-”提示管理員輸入第十個參數(shù)(油氣濃度,〈100〉。C、顯示“B-”提示管理員輸入第六個參數(shù)(日期)。D、顯示“C-”提示管理員輸入第六個參數(shù)(時間)。以下是中對系統(tǒng)程序中獲得鍵值的程序:unsignedcharGetKeyValue(void){ unsignedcharKeyValue,KeyValue1; if(NoKey)return-1; //無鍵按下 Send7279Byte(0x15); //發(fā)讀鍵盤指令 KeyValue1=Receive7279Byte(); Delay1ms(200); NOSELECT7279; //置CS高電平 switch(KeyValue1) { case1: KeyValue=1; break;case2: KeyValue=2; break;...//中間類似省略case15: KeyValue=0xf; break;default: break;}NOSELECT7279; //置CS高電平 Delay1ms(200);//延時200ms去抖動 returnKeyValue;}以下是中對系統(tǒng)程序中顯示任意長整型數(shù)據(jù)的程序:voidDispValue(unsignedlongxx){unsignedcharbuf[6],i;buf[0]=(xx%1000000)/100000;buf[1]=(xx%100000)/10000;buf[2]=(xx%10000)/1000;buf[3]=(xx%1000)/100;buf[4]=(xx%100)/10;buf[5]=(xx%10);for(i=0;i<5;i++)if(buf[i]==0)buf[i]=''; elsebreak;DispLED(buf,0);NOSELECT7279; //置CS高電平}3.2數(shù)據(jù)采集3.2.1系統(tǒng)采集參數(shù)系統(tǒng)對于參數(shù)的采集包括有模擬量、脈沖量和開關(guān)量的采集。脈沖量:供油流量信息模擬量:壓力液體溫度泵房溫度:泵房油氣濃度開關(guān)量:溢油信號閥門狀態(tài)3.2.2模擬量的采集1、C8051F020A/D讓我們先來看看它的主要原理框圖如圖3.2.2.1圖3.2.1AMUX和PGA的部件有著各自不同的作用。AMUX的8個通道用于外部數(shù)據(jù)采集和一個內(nèi)部溫度采集通道,AMUX可以差分輸入也可以單端輸入PGA對輸出進行放大0.5、1、2、4、8、16倍,PGA對輸出內(nèi)部溫度輸出也可以放大接下來讓我們看看A/D轉(zhuǎn)換的工作方式:它的啟動方式為:將AD0BUSY置1T3溢出外部啟動信號CNVSTR上升沿T2溢出查詢工作方式步驟:(也可以用中斷方式):1、寫0到AD0INT;2、寫1到AD0BUSY;3、等待AD0INT變?yōu)?;4、讀取ADC0數(shù)據(jù)并處理2、C8051F020A控制寄存器AC0CN通道配置寄存器參考電壓設(shè)置REF0CN轉(zhuǎn)換速度、增益放大ADC0CF中斷允許、優(yōu)先級等EIE2程序如下:voidInit_ADC0(void){ ADC0CN=0x80; REF0CN=0x07; Mux_Select=MUX_PRESS1; AMX0SL=MUX_PRESS1; ADC0CF=(SYSCLK/2500000)<<3;//ADC轉(zhuǎn)換時鐘頻率為=2.5MHz //ADC0CF|=0x01;//PGAgain=2 EIE2&=~0x02;//禁止ADC0EOC中斷 EIE1&=~0x04;//禁止ADC0窗口比較中斷}在程序中模擬量采集介紹:voidRead_Analog_Inputs(void){longtemp_long=0l;AD0INT=0;//清除變換完成標志AD0BUSY=1;//設(shè)置變換標志while(AD0INT==0);//等待變換完成switch(Mux_Select){ caseMUX_PRESS1: temp_long=ADC0*1600l temp_long-=1308800l;//1308800為實驗時0.48v(4mA)對應(yīng)的采樣值Press[0]=temp_long/3277l;If(Press[0]<0)Press[0]=0; AMX0SL=MUX_LIQUID_TEMP1; Mux_Select=MUX_LIQUID_TEMP1; break;caseMUX_LIQUID_TEMP1:temp_long=ADC0*100l;temp_long-=81800l;Liquid_Temp[0]=temp_long/3277l;if(Liquid_Temp[0]<0l)Liquid_Temp[0]=0;AMX0SL=MUX_FRONT_TEMP1;Mux_Select=MUX_FRONT_TEMP1;break;//讀所有模擬量voidGetADCValue(void){ Read_Analog_Inputs(); Read_Analog_Inputs(); Read_Analog_Inputs(); Read_Analog_Inputs();}3.2.2脈沖量的采集1、可編程計數(shù)器陣列PCA介紹可編程計數(shù)器陣列(PCA0)提供增強的定時器功能,與標準8051計數(shù)器/定時器相比,它需要較少的CPU干預(yù)。PCA0包含一個專用的16位計數(shù)器/定時器和5個16位捕捉/比較模塊。沒個捕捉/比較模塊有起自己的I/O線(CEXn)。當被允許時,I/O線通過交叉開關(guān)連到端口I/O。計數(shù)器/頂時器由一個可編程的時基信號驅(qū)動,時基信號有六個輸入源:系統(tǒng)時鐘、西同時鐘/4、系統(tǒng)時鐘/12、外部震蕩器時鐘源8分頻、定時器0溢出、ECI線上的外部時鐘信號。每個捕捉/比較模塊可以被編程為獨立工作在下面的6種工作方式之一:邊沿觸發(fā)捕捉、軟件定時器、高速輸出、頻率輸出、8位PWM或16位PWM。對PCA的編程控制是通過系統(tǒng)控制器的特殊功能寄存器來實現(xiàn)的。PCA基本原理框圖如圖3.2.22、捕捉/比較模塊PCA0CPMn寄存器用語配置PCA捕捉/比較模塊的工作方式,在不同方式時該寄存器各位的設(shè)置不同。置‘1’PCA0控制寄存器PCA0CN位7:PCA計數(shù)器/定時器溢出標志位6:PCA計數(shù)器/定時器運行控制0禁止、1允許位5:未用位4-位0:5個捕捉模塊匹配標志0未捕捉到、1捕捉到(需軟件清0)PCA0捕捉/比較寄存器PCA0CMP位7:16位脈沖寬度調(diào)制允許圖3.2.2P位6:比較功能允許,0禁止、1允許位5:正沿捕捉允許,0—禁止、1—允許位4:負沿捕捉允許,0—禁止、1—允許位3:匹配功能允許,0—禁止、1—允許位2:電平切換允許位1:脈沖寬度調(diào)制方式允許位0:捕捉/比較中斷允許,0—禁止、1—允許可編程計數(shù)器陣列PCA初始化voidInit_PCA0(void){EIE1|=0x08;//允許PCA0中斷;PCA0CPM0=0x61;//允許比較方式,上升沿中斷允許CR=0;//關(guān)PCA0計數(shù)器/定時器}3、脈沖量采集程序介紹//PCA0工作在比較/撲捉模式,上升沿中斷,對脈沖信號計數(shù)voidPCA0_ISR(void)interrupt9{EA=0;//關(guān)閉所有中斷if(CCF0==1){CCF0=0;//清除中斷標志Plus_NUM[0]++;//PlusNumber數(shù)組自增}if(CCF1==1){CCF1=0;//清除中斷標志Plus_NUM[1]++;//PlusNumber數(shù)組自增}EA=1;//中斷}開關(guān)量采集直接讀取端口信號C8051F020共8個并行口P0—P3可以位尋址x=P2^0;P4—P7不能位尋址if(P5&0x80)ch+=1;3.3數(shù)據(jù)存儲3.3.1數(shù)據(jù)存儲的主要參數(shù)當前發(fā)油量、管內(nèi)壓力、液體溫度、環(huán)境溫度、環(huán)境油氣濃度、時間3.3.2外擴RAM工作原理除了標準8051的256B內(nèi)部數(shù)據(jù)RAM外,C8051F020還有位于CIP-51外部數(shù)據(jù)存儲空間的4096B的RAM塊(XRAM),須用MOVX指令訪問。C8051F02x系列MCU還提供64KB空間的外部數(shù)據(jù)存儲器接口,可用于訪問片外存儲器和存儲器映像的I/O器件。訪問XRAM有兩種方法,第一種方法是使用數(shù)據(jù)指震DPTR,該寄存器中含有待讀或?qū)懙腦RAM單元的有效地址。第二種方法使用R0或R1與EMI0CN寄存器一起形成有效XRAM地址。下面舉例說明這兩種方法方法一:MOVDPTR,#1234h;將待讀單元的16位地址0x1234裝入DPTRMOVXA,@DPTR;將地址0x1234的內(nèi)容裝入累加器A方法2:MOVEMI0CN,#12h;將地址的高字節(jié)裝入EMI0CNMOVR0,#34h;將地址的低字節(jié)裝入R0或R1MOVXA,@DPTR;將地址0x1234的內(nèi)容裝入累加器A1、配置外部存儲器接口配置外部存儲器接口的過程包括下面4個步驟1)將EMIF選到低端口P3P2P1和P0或選到高端口P7P6P5和P4。2)選擇復(fù)用方式或非復(fù)用方式。3)選擇存儲器模式(只用片內(nèi)存儲器,不帶塊選擇的分片方式,帶塊選擇的分片方式或只用片外存儲器)。4)設(shè)置與片外存儲器或外設(shè)接口的時序。5)選擇所需要的相關(guān)端口的輸出方式寄存器PnMDOUT和P74OUT。2、EMI0CF寄存器D7、D6:未用D5:端口選擇,0—低端口,1—高端口D4:地址/數(shù)據(jù)線復(fù)用方式選擇,0—復(fù)用、1—單獨D3、D2:工作模式選擇00—只用片內(nèi),01—不帶片選擇的分片10--不帶片選擇的分片,11--只用片外D1、D0:ALE脈沖選擇00—1SYSCLK,01--2SYSCLK10--3SYSCLK,11--4SYSCLK復(fù)用和非復(fù)用選擇外部存儲器接口可以工作在復(fù)用方式或非復(fù)用方式,由EMD2位(EMI0CF.4)的狀態(tài)決定3.3.3數(shù)據(jù)存儲實現(xiàn)的方法數(shù)據(jù)存儲在程序中的具體實現(xiàn)為://系統(tǒng)初始化voidPORT_Init(void){XBR0=0x27;XBR1=0x04;XBR2=0x44;//40;P0MDOUT=0x00;//允許TX0壓進/壓出為輸出口P0=0xff;P1MDOUT=0x00;//允許P1.6(LED)壓進/壓出輸出口P1=0xff;MI0CF=0x29;//XRAM使用高端口、復(fù)用方式、只用片外//XRAM、ALE寬度為2個CLKEMI0TC=0x21;//地址建立時間0個CLK,WR/RD寬為9個//CLK,地址保持時間1個CLKP74OUT=0xFF;//P7-P4配置為推挽方式P4&=0xfe;//P4.0(A16)=0,選擇XRAM0區(qū)P4|=0x04;//P4.2(CE2=1),片選2始終有效P4&=0xf7;//P4.3(/CE1=0),片選1始終有效P0MDOUT|=0x1D;P1MDOUT|=0x01;SMB0CN=0x44; //允許SMBus和ACKs驗證循環(huán)SMB0CR=-80; //SMBus時鐘率=100kHz.EIE1|=2; //允許SMBus中斷IE&=0xfe;//禁止int0TCON|=0x01;//int0下降沿中斷//PX0=1;//int0為高優(yōu)先級PT0=1;//因為刷卡中斷中用超時退出要中斷嵌套}3.4實時時鐘3.4.1S-3530時鐘芯片1、芯片概述S-3530A是一種支持I2C2、主要引腳:SDA:SCL:INT1/INT2:3、工作描述(串行接口)I2CI21)開始條件:當SCL處于高電平時,SDA由高電平變成低電平時構(gòu)成一個開始條件,所有操作均必須由開始條件開始。2)停止條件:當SCL處于高電平,SDA由低電平變成高電平構(gòu)成一個停止條件。在連續(xù)讀時,如收到一個“停止條件”,則所有讀操作將終止,芯片將進入等待模式。3)數(shù)據(jù)傳輸:當SCL為低電平,且SDA線電平變化時,完成數(shù)據(jù)傳輸;當SCL為高電平,且SDA電平變化時,芯片收到一個開始或停止條件。4)確認:數(shù)據(jù)傳輸以8位序列進行。系統(tǒng)總線上接收數(shù)據(jù)的器件在第九個時鐘周期時將SDA置位為低電平,即送出一個確認信號,表明數(shù)據(jù)已經(jīng)被其收到。5)器件尋址:CPU發(fā)出開始條件給S-3530A以建立連接。CPU通過SDA總線連續(xù)輸出4位器件地址,3位指令和1位讀/寫指令。其中高四位稱“器件代碼”,它代表器件地址,固定為“0110”6)讀數(shù)據(jù):當檢驗到開始條件后,S-3530A接收器件代碼和命令。當讀/寫位為“1”7)寫數(shù)據(jù):當檢測到開始條件后,S-3530A開始接收器件代碼和命令。當讀/寫位為“0”4、SMBus系統(tǒng)管理總線SMBus是一個雙線的雙向串行總線,于I2CSMBus協(xié)議中規(guī)定有兩種可能得數(shù)據(jù)傳輸類型:從主發(fā)送器到所尋址的從接收器(寫)和從被尋址的從發(fā)送器到主接收器(讀)。兩種數(shù)據(jù)傳輸都由主器件啟動,由主器件提供串行時鐘。如果有兩個或多個主器件同時啟動數(shù)據(jù)傳輸,仲裁機制將保證有一個主器件會贏得總線。所有的數(shù)據(jù)傳輸都由主器件啟動,主器件可以尋址一個或多個目標從器件。在某一時刻,SMBus接口將工作在下述4中方式之一:主發(fā)送器、主接收器、主接收器、從發(fā)送器或從接收器。對SMBus串行口的訪問和控制是通過5個特殊功能寄存器來實現(xiàn)的,它們是控制寄存器SMB0CN、時鐘速率寄存器SMB0CR、地址寄存器SMB0ADR、數(shù)據(jù)寄存器AMB0DAT和狀態(tài)寄存器AMB0STA。因為本論文的篇幅問題和實時時鐘所涉及到的程序較多,因此本文對程序的實現(xiàn)不再進行累述。3.5多機通訊3.5.1C8051FUART是一個能進行異步傳輸?shù)拇锌?。UART可以工作在全雙工方式。在所有方式下,接收,接收數(shù)據(jù)被放如一個保持寄存器,這就允許在軟件上未讀取前一個數(shù)據(jù)字節(jié)的情況下,開始接收第2個輸入數(shù)據(jù)字節(jié)。UART在特殊功能寄存器中有一個相關(guān)的串行控制寄存器SCON和一個串行數(shù)據(jù)緩沖器SBUF。用一個SBUF地址可以訪問發(fā)送寄存器和接收寄存器。讀操作訪問接收寄存器,寫操作訪問發(fā)送寄存器。在供油系中,要求采用多機通訊,所以UARTY的工作方式應(yīng)當選擇方式2或方式3,方式2和方式3通過使用第9數(shù)據(jù)位,可以支持1個主處理器與一個或多個處理器之間的多機通信。當主機想發(fā)送數(shù)據(jù)給一個或多個從機時,它先發(fā)送一個用于選擇目標的地址字節(jié)地址。字節(jié)與數(shù)據(jù)字節(jié)的區(qū)別是地址字節(jié)的第9位為邏輯1,數(shù)據(jù)字節(jié)第9位總是設(shè)置為邏輯0。下圖(圖3.5.1.1)即為多機通訊的主要原理:初始化主機,令SM2=初始化主機,令SM2=0M,從機SM2=1主機發(fā)送地址信息至從機主機發(fā)送地址信息至從機從機進入中斷服務(wù)程序從機進入中斷服務(wù)程序并返回各自地址信息至主機主機將自己地址與返回信息比較主機將自己地址與返回信息比較是否為主機目標是否為主機目標退出中斷退出中斷從機將SM2置0從機將SM2置0從機置SM2為1,退出中斷主機發(fā)送數(shù)據(jù)信息(RB8=0)從機置SM2為1,退出中斷主機發(fā)送數(shù)據(jù)信息(RB8=0)圖3.5.1.1多機通訊的主要原理3.5.2通訊協(xié)議1、協(xié)議格式串口通訊采用相同格式:9600,8,1,多機通訊方式。當主機要與從機通訊時,首先以MARK方式發(fā)送從機地址,從機收到后,以SPACE方式回應(yīng)該地址。然后在SPACE方式下進行數(shù)據(jù)通訊。通訊完成后主機和從機均恢復(fù)到MAKE方式。表間通訊和設(shè)備間通訊采用以下格式開始位(1B): S數(shù)據(jù)包長(1b) N+6命令類型:(1B)數(shù)據(jù)1…數(shù)據(jù)N累加和(1B)(計算范圍從長度字節(jié)開始,包含數(shù)據(jù)長度字節(jié),到累加和前一字節(jié)結(jié)束)異或和(1B)(計算范圍從長度字節(jié)開始,包含數(shù)據(jù)長度字節(jié)。到累加和前一字節(jié)結(jié)束)結(jié)束位(1B)E開始標記(S)長度(N+6)命令類型數(shù)據(jù)1…數(shù)據(jù)N累加和異或和結(jié)束標志(E)通道號:該數(shù)據(jù)對應(yīng)的控制通道號:(0-通道數(shù)),0表示通道未知。當使用多位字節(jié)表達信息時,低位字節(jié)在前。2、數(shù)據(jù)結(jié)構(gòu)PC機發(fā)送的命令:1)查詢下位機數(shù)據(jù)(類型:Q)(PC機命令)開始標記(1B)長度(1B)命令類型(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S6QE詢下位機設(shè)置的參數(shù)(1)開始標記(1B)長度(1B)命令類型(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S61E3)通訊訊成功應(yīng)答數(shù)據(jù)包(X)開始標記(1B)長度(1B)命令類型(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S6XE4)訊出錯應(yīng)答數(shù)據(jù)包(2)開始標記(1B)長度(1B)命令類型(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S62E5)IC卡ID非法(3)開始標記(1B)長度(1B)命令類型(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S63E6)強制停止命令(9)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)累加和(1B)異或和(1B)結(jié)束標志(1B)S69E7)發(fā)送配額數(shù)據(jù)(D)(PC機命令)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)供給配額(4B)累加和(1B)異或和(1B)結(jié)束標志(1B)S5+6DE下位機回應(yīng)的信息:8)IC卡數(shù)據(jù):(I)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)IC卡號(8B)累加和(1B)異或和(1B)結(jié)束標志(1B)S15IE如果無法確定當前使用的通道,使用0X00當用戶刷卡后,且收到上位機查詢狀態(tài)命令Q(00)時,優(yōu)先發(fā)送該應(yīng)答。上位機收到該信息后,回應(yīng)配額信息數(shù)據(jù)或ID非法數(shù)據(jù)包。上位機等待下位機應(yīng)答。9)開始供給數(shù)據(jù):(B)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)年月日時分秒供給總量(4B)累加和異或和結(jié)束標記S17BE當下位機收到上位機的配額數(shù)據(jù)后,且用戶按下開始按鍵后,收到上位機查詢數(shù)據(jù)包時(Q,00)發(fā)送該數(shù)據(jù)包,表示供給過程開始(聯(lián)機狀態(tài))。若處于脫機狀態(tài),用戶輸入配額數(shù)據(jù)按確定后,開始供給過程。該數(shù)據(jù)包將保存在下位機的存儲空間中。10)結(jié)束供給命令:(T)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)年月日時分秒供給總量(4B)累加和異或和結(jié)束標記S17TE返回當前的實際供給量。當下位機完成供給后或用戶中止供給過程(按緊急停止鍵后),收到上位機查詢數(shù)據(jù)包時(Q,00)發(fā)送該數(shù)據(jù)包(聯(lián)機狀態(tài))。脫機時,完成供給或用戶中止后,該數(shù)據(jù)包將保存在下位機的存儲空間中。11)發(fā)送保存數(shù)據(jù)包(V)開始標記(1B)長度(1B)命令類型(1B)通道號(1B)I卡號(8B)年月日時分秒開始供給總量(4B)S27V年月日時分秒結(jié)束供給總量(4B)累加和異或和結(jié)束標記E發(fā)送供給的開始時間,開始的配額數(shù)據(jù),結(jié)束時間,實際的供給量。當所有通道處于空閑狀態(tài)時,且收到上位機查詢命令后,如果有保存數(shù)據(jù),則發(fā)送該數(shù)據(jù)包每次發(fā)送一個用戶的信息。下次收到上位機查詢時,發(fā)送下一用戶的信息。12)報警信號:(A)開始標記(1B)長度(1B)命令類型(1B)年月日時分秒報警信息(1B*4)累加和異或和結(jié)束標記S16AE報警信息:0000. 無報警;0001--無流量;0002--壓力;0003--油氣濃度;0004--液體溫度;0005--前端溫度信息(P)開始標記(1B)長度(1B)命令類型(1B)通道1狀態(tài)(1B)通道2狀態(tài)(1B)總油量(4B)流量(4B)壓力(4B)S34+6P液體溫度(1B)泵房溫度(1B)泵房油氣(1B)21…35(20B)閥門狀態(tài)(1B)累加和(1B)異或和(1B)結(jié)束標記(1B)0…0E本數(shù)據(jù)包含了兩路供油數(shù)據(jù)包。實際每次只有一路的信息,為保持協(xié)議一致,使得21到35位全為0。上位機不應(yīng)答該消息。數(shù)據(jù)相關(guān):流量信號單位:立方米/秒;壓力信號單位:Pa,范圍1-1.6M;溫度單位:℃,范圍–20-80℃通道狀態(tài):0:空閑,1:在工作;閥門狀態(tài):0:關(guān),1:開;3.5.3通訊程序的實現(xiàn)在實驗室硬件環(huán)境下,通訊過程較簡單。PC機通過scan小程序模擬上位機,向下位機發(fā)包含地址的查詢命令(0或1),下位機收到后回傳本機地址;上位機收到后發(fā)送查詢命令幀,下位機正確接收查詢命令后則傳回數(shù)據(jù),一旦上位機收到回傳信息,則顯示通訊成功。在程序設(shè)計中,對多機通訊設(shè)計主要在UART0://子程序串口UART0的中斷voidinterrupt_UART0(void)interrupt4{unsignedchari;T2_interruptNum=0;P2|=0x40;//7279CS=1EX0=0;//禁止刷卡RI0=0;//清除接收中斷標志if(SBUF0==Instrument_ADDR) { ES0=0;//若地址相符,回送本機地址作為應(yīng)答 SM20=0;//置SM20=0,準備接收數(shù)據(jù) TB80=0; Enable0_T; TI0=1; for(i=0;i<250;i++) _nop_();Myputchar0(Instrument_ADDR);//串口0發(fā)送1字符 while(!TI0);TI0=0; ES0=0; Enable0_R; PC_QueryMe=1;//收到PC機地址查詢后為1 }}//串口0發(fā)送1字符voidMyputchar0(unsignedcharc){P2|=0x40;//7279CS=1while(!TI0);TB80=0;TI0=0;SBUF0=c;}voidMyputs0(unsignedchar*Buf)//串口0發(fā)送1字符串{unsignedchari,n;P2|=0x40;//7279CS=1Myputchar0(*Buf);Buf++;Myputchar0(*Buf);//發(fā)送長度字節(jié)n=*Buf;Buf++;for(i=0;i<n-2;i++){Myputchar0(*Buf);Buf++;}while(!TI0);//等待最后一個發(fā)送完}3.6FLASH存儲器3.6.1FLASH的特性和寄存器Cygnal集成器件公司的在系統(tǒng)可編程FLASH存儲器,可以通過JTAG接口或應(yīng)用程序?qū)LASH編程,靈活性最高程序或常數(shù)形式的專有信息常常保存在FLASH存儲器中。Cygnal提供了可由用戶任意支配的安全選項(PSCTL),以防止對保存在FLASH存儲器中的信息進行未經(jīng)授權(quán)的訪問。在應(yīng)用編程允許將FLASH用于非易失性信息的存儲,這一點與EEPROM類似。FLASH寫/擦除壽命在–40~+85的工業(yè)溫度范圍內(nèi)保證在10000次以上。FLASH寫操作只能寫入0,因此在寫一個FLASH字節(jié)之前包含該字節(jié)的頁必須首先被擦除,使該頁中的所有位都為1。含有讀鎖定字節(jié)和寫/擦除鎖定字節(jié)的FLASH頁不能由用戶軟件擦除,但是該頁可以由用戶軟件寫入,該頁只能通過JTAG接口擦除。談到FLASH的兩個特殊寄存器那就是FLACLHE和FLSCL。FLACL是FLASH存儲器訪問限制寄存器,F(xiàn)LSCL是FLASH存儲器時序預(yù)分頻器寄存器。3.6.2FLASH讀寫方法和實現(xiàn)對軟件FLSH編程的過程可以概述為:止中斷。位FLWE(FLSCL.0),以允許由用戶軟件寫/擦除FLASH。置位PSEE(PSCTL.1),以允許FLASH扇區(qū)擦除。置位PSWE(PSCTL.0),以允許FLSH寫。用MOVX指令想待擦除山區(qū)內(nèi)的任何一個地址寫入一個數(shù)據(jù)字節(jié)。清除PSEE以禁止FLASH扇區(qū)擦除。用MOVX指令向剛擦除的扇區(qū)中所希望的地址寫入數(shù)據(jù)字節(jié)。重復(fù)該步直到所有字節(jié)都已寫入(目標山區(qū)內(nèi))。清除PSWE以禁止FLASH寫,使MOVX操作指向XRAM數(shù)據(jù)空間。重新允許中斷。寫/擦除時序由硬件根據(jù)FLASH存儲器定時,預(yù)分頻寄存器FLSCL中的預(yù)分頻值。FLASCL決定用于寫/擦除操作的時間。當FLASCL值被置1時,寫/擦除操作被禁止。但要注意在FLASH正在被編程或擦除期間,8051的程序停止執(zhí)行。在程序的具體實現(xiàn)沒,如下://將數(shù)據(jù)寫入Flash的pwrite地址開始處,pgen指向待寫數(shù)據(jù),n為要寫入的數(shù)據(jù)個數(shù)voidWFlash(unsignedlongxdata*pwrite,unsignedlong*pgen,unsignedcharn){unsignedchari;EA=0;//關(guān)中斷 FLSCL=0x81;//FLWE置1,允許用戶程序?qū)慒LASHPSCTL=0x03;//將PSWE、PSEE置1(擦除對應(yīng)的FLASH頁 *pwrite=0; //啟動擦除過程 PSCTL=0x01; //PSEE=0,PSWE=1(禁止擦除)for(i=0;i<n;i++) *pwrite++=*pgen++; //寫入n個數(shù)據(jù)PSCTL=0x00;//PSEE=0,PSWE=0(禁止擦除、寫Flash) EA=1;//開中斷//從Flash的pread地址處讀數(shù)據(jù),放到pgen開始的內(nèi)部Ram區(qū),n為要讀的數(shù)據(jù)個數(shù)voidRFlash(unsignedlongcode*pread,unsignedlong*pgen,unsignedcharn){unsignedchari;for(i=0;i<n;i++) *pgen++=*pread++;}3.68位移位寄存器74ls166在供油系統(tǒng)的功能模塊中還包括一個IC元件,它就是8位移位寄存器74ls166。它負責讀取儀表的地址。在程序中具體應(yīng)用如下:unsignedcharRead74ls166(void){unsignedchari,ch; ch=0; CLR74LS166CLK; CLR74LS166LOAD;//shift/load信號為低,裝入數(shù)據(jù) Delay1us(5); //延時50μSET74LS166CLK;//CLK上升沿將數(shù)據(jù)裝入 CLR74LS166CLK;LOAD74LS166DATA;if(P5&0x80)//最高位已經(jīng)出現(xiàn)在數(shù)據(jù)線上 ch+=1; for(i=0;i<7;i++)//讀其他7位 { SET74LS166CLK; //置CLK高電平 Delay1us(8); //延時8μ ch=ch<<1; //接收數(shù)據(jù)左移1位 if(P5&0x80) ch+=1; //接收1位數(shù)據(jù) CLR74LS166CLK; //置CLK低電平 Delay1us(8); //延時8μ } return(~ch);}在主程序中Instrument_ADDR=Read74ls166();//讀儀表地址第4章系統(tǒng)主程序設(shè)計4.1程序流程及狀態(tài)轉(zhuǎn)換脫機方式工作流程如圖所示:圖4.1.1脫機方式工作流程連機工作流程如圖所示(圖4.1.2)圖4.1.2連機工作流程當有用戶結(jié)束時,由狀態(tài)⑤轉(zhuǎn)入狀態(tài)⑥,該狀態(tài)下,收到上位機查詢后,回送結(jié)束供應(yīng)數(shù)據(jù)包,并等待上位機應(yīng)答。若收到上位機應(yīng)答,且四個通道沒有全空閑,則轉(zhuǎn)入系統(tǒng)正常工作狀態(tài)。若四個通道全空閑,則轉(zhuǎn)入空閑狀態(tài)。收到上位機正確應(yīng)答后,由狀態(tài)④當有用戶結(jié)束時,由狀態(tài)⑤轉(zhuǎn)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中外合資企業(yè)合同翻譯技巧
- 電力設(shè)施門禁系統(tǒng)施工合同
- 標準化廠房建項目運營方案
- 寵物醫(yī)療律師聘用合同模板
- 礦山工程合同洽談
- 2025服裝訂購合同范本
- 美容連鎖禮儀人員聘用協(xié)議
- 冷鏈物流存放冷藏庫租賃協(xié)議
- 2023年注冊土木工程師(水利水電工程)在線刷題
- 2023年注冊土木工程師(水利水電)考試模擬及答案詳解
- 航空集裝器知識完整版
- (完整版)臨床檢驗基礎(chǔ)名詞解釋
- 深度分析澳洲資源量最大的皮爾巴拉地區(qū)礦床匯總
- 《工程與試驗》編委會章程
- 市政道路與橋梁銜接處設(shè)計及施工
- 實習錄用通知書
- DFMEA模板全解(完整版)
- 蘇教版二年級上冊《連乘連除乘除混合》PPT
- 頸動脈狹窄的治療策略CREST研究解讀
- 深圳市建筑工程消耗量定額2016[共70頁]
- (完整版)土石方挖運專項施工方案
評論
0/150
提交評論