版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
.PAGE....設(shè)計(jì)基于VHDL的單總線從機(jī)讀寫(xiě)控制器目錄TOC\o"1-4"\h\u27462前言 120591第1章單總線技術(shù)211655第1.1節(jié)單總線技術(shù)簡(jiǎn)介216502第1.2節(jié)單總線技術(shù)的原理與硬件結(jié)構(gòu)222837第1.3節(jié)單總線技術(shù)的信號(hào)方式327073第1.4節(jié)單總線技術(shù)的器件431091第2章DS18B20簡(jiǎn)介 520811第2.1節(jié)DS18B20的封裝與管腳 55160第2.2節(jié)DS18B20內(nèi)部結(jié)構(gòu) 53792第2.3節(jié)DS1820時(shí)序及工作方式 811726第3章控制器設(shè)計(jì) 1123012第3.1節(jié)控制器結(jié)構(gòu) 1122685第3.2節(jié)讀寫(xiě)時(shí)序的實(shí)現(xiàn) 1114579第4章仿真與結(jié)論 194642課堂感悟與致謝 20..前言是美國(guó)達(dá)拉斯公司生產(chǎn)的一種單總線數(shù)字溫度傳感器,采用總線通信協(xié)議。具有獨(dú)特的單總線通信方式以及較高的測(cè)量精度,目前在實(shí)際生活中獲得了廣泛應(yīng)用。本文介紹了的基本原理和通信時(shí)序,并用軟件模擬單總線時(shí)序,實(shí)現(xiàn)與的通信。作為電子硬件設(shè)計(jì)的主流描述語(yǔ)言,采用層次化的設(shè)計(jì)方式,具有電路行為描述能力強(qiáng)、靈活、通用及運(yùn)算仿真速度快等特點(diǎn),能夠較容易地實(shí)現(xiàn)時(shí)序邏輯控制。本文以數(shù)字溫度傳感器為例,設(shè)計(jì)一個(gè)基于的單總線控制器,并對(duì)通信程序進(jìn)行了仿真測(cè)試。本文介紹的單總線控制器,有較強(qiáng)的可擴(kuò)展性,可以連接多種單總線器件,且微處理器可以不用被迫關(guān)閉中斷,滿足各類對(duì)實(shí)時(shí)性具有嚴(yán)格要求的應(yīng)用。第1章單總線技術(shù)第1.1節(jié)單總線技術(shù)簡(jiǎn)介單總線技術(shù)是達(dá)拉斯半導(dǎo)體公司推出的一項(xiàng)特有技術(shù)。它采用單根信號(hào)線,既可傳輸時(shí)鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)可以雙向傳輸。由于這種單總線技術(shù)線路簡(jiǎn)單,硬件開(kāi)銷少,所以其具有成本低廉,便于總線擴(kuò)展和易于維護(hù)等優(yōu)點(diǎn)。單總線適用于單主機(jī)系統(tǒng),能夠控制一個(gè)或多個(gè)從機(jī)設(shè)備。主機(jī)可以是微控制器,從機(jī)可以是單總線器件,它們之間的數(shù)據(jù)交換只通過(guò)一條信號(hào)線。當(dāng)只有一個(gè)從機(jī)設(shè)備時(shí),系統(tǒng)可按單節(jié)點(diǎn)系統(tǒng)操作;當(dāng)有多個(gè)從機(jī)設(shè)備時(shí),系統(tǒng)則按多節(jié)點(diǎn)系統(tǒng)操作。第1.2節(jié)單總線技術(shù)的原理與硬件結(jié)構(gòu)單總線只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設(shè)備〔主機(jī)或從機(jī)通過(guò)一個(gè)漏極開(kāi)路或三態(tài)端口連至該數(shù)據(jù)線,這樣便可允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)釋放總線,以便其他設(shè)備使用總線,其內(nèi)部等效電路如圖1.1所示。圖1.1單總線硬件接口示意圖單總線要外接一個(gè)約的上拉電阻,這樣當(dāng)總線閑置時(shí),狀態(tài)為高電平。主機(jī)和從機(jī)之間的通信通過(guò)以下三個(gè)步驟完成:初始化器件,識(shí)別器件,交換數(shù)據(jù)。由于二者是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時(shí),從機(jī)才能答應(yīng),因此主機(jī)訪問(wèn)器件必須嚴(yán)格遵循單總線命令序列:初始化、命令、功能命令。如果出現(xiàn)序列混亂,器件則不會(huì)響應(yīng)主機(jī)〔搜索命令,報(bào)警搜索命令除外。根據(jù)以上原理,可以畫(huà)出單總線硬件接口原理圖,如圖1.2所示。圖1.2單總線硬件接口原理圖單總線端口為漏極開(kāi)路,在本文中令單總線外接一個(gè)約的上拉電阻,這樣,不管什么原因單總線的閑置狀態(tài)為高電平。如果傳輸過(guò)程需要暫時(shí)掛起,且要求傳輸過(guò)程還能夠繼續(xù)的話,總線必須處于空閑狀態(tài)。位傳輸之間的恢復(fù)時(shí)間沒(méi)有限制,只要總線在恢復(fù)期間處于空閑狀態(tài)〔即高電平即可。如果總線保持低電平超過(guò)則將總線上的所有器件將復(fù)位。此外,在使用寄生方式供電時(shí),為了保證單總線器件在某些工作狀態(tài)下〔如溫度轉(zhuǎn)換期間、寫(xiě)入等具有足夠的電源電流,必須在總線上提供強(qiáng)上拉源,如圖1.2中所示的。第1.3節(jié)單總線技術(shù)的信號(hào)方式所有單總線器件要求遵循嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。協(xié)議定義了幾種信號(hào)類型:復(fù)位脈沖、答應(yīng)脈沖、寫(xiě)、寫(xiě)、讀和讀時(shí)序。所有的單總線命令序列〔初始化、命令、功能命令都是由這些基本的信號(hào)類型組成。這些信號(hào),除了應(yīng)答脈沖外都是由主機(jī)發(fā)出同步信號(hào),并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。初始化時(shí)序包括主機(jī)發(fā)送的復(fù)位脈沖和從機(jī)發(fā)出的應(yīng)答脈沖,主機(jī)通過(guò)拉低單總線以上,產(chǎn)生復(fù)位脈沖,然后主機(jī)釋放總線,并進(jìn)入接收模式。當(dāng)主機(jī)釋放總線時(shí),總線由低電平跳變?yōu)楦唠娖綍r(shí)產(chǎn)生一上升沿,單總線器件檢測(cè)到這上升沿后,延時(shí),接著單總線器件通過(guò)拉低總線產(chǎn)生應(yīng)答脈沖。當(dāng)主機(jī)接收到從機(jī)應(yīng)答脈沖后,說(shuō)明此時(shí)有單總線器件在線,然后主機(jī)就開(kāi)始對(duì)從機(jī)進(jìn)行命令和功能命令的操作。在每一個(gè)寫(xiě)、寫(xiě)或讀時(shí)序中,總線只能傳輸一位數(shù)據(jù)。所有的讀寫(xiě)時(shí)序至少需要,且每?jī)蓚€(gè)獨(dú)立的時(shí)序之間至少需要的恢復(fù)時(shí)間。讀寫(xiě)時(shí)序均起始于主機(jī)拉低總線。在寫(xiě)時(shí)序中,主機(jī)拉低總線后保持至少的低電平則向單總線器件寫(xiě)。單總線器件在主機(jī)發(fā)出讀時(shí)序時(shí)才向主機(jī)傳送數(shù)據(jù),所以當(dāng)主機(jī)向單總線器件發(fā)出數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便單總線能傳輸數(shù)據(jù)。在主機(jī)發(fā)出讀時(shí)序之后,單總線器件才開(kāi)始在總線上發(fā)送或,若單總線器件發(fā)送,則保持總線高電平;若發(fā)送,則拉低總線。單總線器件發(fā)送數(shù)據(jù)之后,需保持有效的時(shí)間,因而,主機(jī)在讀時(shí)序期間必須釋放總線,并且必須在之內(nèi)對(duì)總線狀態(tài)進(jìn)行采樣,接收從機(jī)發(fā)送的數(shù)據(jù)。第1.4節(jié)單總線技術(shù)的器件為了區(qū)分不同的單總線器件,廠家在生產(chǎn)單總線器件時(shí)要刻錄一個(gè)位的二進(jìn)制代碼,用于標(biāo)明單總線器件的號(hào)。目前,單總線器件的主要有數(shù)字溫度傳感器〔如、/轉(zhuǎn)換器〔如門(mén)禁、身份識(shí)別器〔如、單總線控制器〔如等等。其中數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式等。其型號(hào)多種多樣,有,等等,主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。封裝后的可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫(kù)測(cè)溫等各種非極限溫度場(chǎng)合。由于其耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域,目前有著廣泛的應(yīng)用,故我們選擇芯片來(lái)進(jìn)行下面的設(shè)計(jì)。
第2章DS18B20簡(jiǎn)介第2.1節(jié)DS18B20的封裝與管腳芯片的常見(jiàn)封裝為,如圖2.1所示,也就是普通直插三極管的樣子。也有其他形式的封裝,如圖2.2所示的封裝以及圖2.3所示的封裝。各種封裝的圖示及引腳圖如圖2.12.3所示。圖2.1TO-92封裝圖2.2SO封裝圖2.3μSOP封裝第2.2節(jié)DS18B20內(nèi)部結(jié)構(gòu)主要由部分組成:光刻、溫度敏感器件、高速暫存存儲(chǔ)器和溫度報(bào)警觸發(fā)器、。光刻中的序列號(hào)是出廠前被光刻好的,它可以看作是該的地址序列碼。光刻的排列是:開(kāi)始位是產(chǎn)品類型標(biāo)號(hào),接著的位是該自身的序列號(hào),最后位是前面位的循環(huán)冗余校驗(yàn)碼,可由下式得到:。光刻的作用是使每一個(gè)都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)的目的。光刻保存芯片的唯一的編碼。高速暫存存儲(chǔ)器高速暫存存儲(chǔ)器由個(gè)字節(jié)組成。高速暫存存儲(chǔ)器包含個(gè)連續(xù)的字節(jié),存放測(cè)得的溫度的補(bǔ)碼、和的拷貝數(shù)據(jù)、計(jì)數(shù)器余值和校驗(yàn)等數(shù)據(jù),其結(jié)構(gòu)如圖2.4所示。其中所有數(shù)據(jù)均以最低有效位在前的方式讀寫(xiě)。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第和第個(gè)字節(jié)。單片機(jī)可通過(guò)單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。對(duì)應(yīng)的溫度計(jì)算規(guī)則為:當(dāng)符號(hào)位時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。表2是對(duì)應(yīng)的一部分溫度值。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。圖2.4存儲(chǔ)器由于芯片可以工作在寄生電源模式下工作,該模式允許工作在無(wú)外部電源的狀態(tài)。當(dāng)總線為高電平時(shí),寄生電源由單總線通過(guò)引腳,此時(shí)可以從總線得到能量,并將得到的能量?jī)?chǔ)存到寄生電源儲(chǔ)能電容中,當(dāng)總線為低電平時(shí)釋放能量供給器件工作使用。簡(jiǎn)單的說(shuō)就是在信號(hào)線為高電平的時(shí)間周期內(nèi),把能量?jī)?chǔ)存在內(nèi)部的電容器中;在信號(hào)線為低電平期間,由存儲(chǔ)在電容器內(nèi)的電荷供電。所以,當(dāng)工作在寄生電源模式時(shí),引腳必須接地。工作時(shí)信號(hào)線須接的上拉電阻,以保證信號(hào)線有足夠的驅(qū)動(dòng)能力。一個(gè)典型的硬件原理圖如圖2.5所示。圖2.5硬件原理圖如上圖所示,芯片通過(guò)達(dá)拉斯公司的單總線協(xié)議依靠一個(gè)單線端口通訊,當(dāng)全部器件經(jīng)由一個(gè)三態(tài)端口或者漏極開(kāi)路端口與總線連接時(shí),控制線需要連接一個(gè)弱上拉電阻。在多只連接時(shí),每個(gè)都擁有一個(gè)全球唯一的位序列號(hào),在這個(gè)總線系統(tǒng)中,微處理器依靠每個(gè)器件獨(dú)有的位片序列號(hào)辨認(rèn)總線上的器件并記錄總線上的器件地址,從而允許多只同時(shí)連接在一條單線總線上。因此,可以很輕松地利用一個(gè)微處理器去控制很多分布在不同區(qū)域的,這一特性在環(huán)境控制、探測(cè)建筑物、儀器等溫度以及過(guò)程監(jiān)測(cè)和控制等方面都非常有用。對(duì)于的電路連接,除了上面所說(shuō)的傳統(tǒng)的外部電源供電時(shí)的電路連接圖,也可以工作在上文所述的寄生電源模式中。圖2.6表示了工作在寄生電源模式下的硬件原理圖。這樣可以使工作在寄生電源模式下,不用額外的電源就可以實(shí)時(shí)采集位于多個(gè)地點(diǎn)的溫度信息。圖2.6寄生電源模式硬件原理圖第2.3節(jié)DS1820時(shí)序及工作方式時(shí)序如圖2.72.9所示,時(shí)序波形的電平分為種類型:主機(jī)作用的高低電平、由輸出的高低電平和由上拉電阻拉起的高電平〔后種情況主機(jī)釋放信號(hào)線。閑置時(shí)信號(hào)線保持高電平,對(duì)的任何操作〔如讀、寫(xiě)、復(fù)位等都是由主機(jī)對(duì)信號(hào)線的電平由邏輯高電平拉至低電平開(kāi)始。圖2.7復(fù)位時(shí)序復(fù)位時(shí)序是工作的基礎(chǔ)。任何設(shè)備與間的通訊都需要以初始化序列開(kāi)始。一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。在初始化序列期間,總線控制器拉低總線并保持以發(fā)出一個(gè)復(fù)位脈沖,然后釋放總線,進(jìn)入接受狀態(tài)。單總線由上拉電阻拉倒高電平。當(dāng)探測(cè)到/引腳上的上升沿后,等待,然后發(fā)出一個(gè)由的低電平信號(hào)構(gòu)成的存在脈沖。初始化時(shí)序見(jiàn)圖2.7。圖2.8寫(xiě)時(shí)序的數(shù)據(jù)讀寫(xiě)是通過(guò)時(shí)序處理位來(lái)確認(rèn)信息交換的。有兩種寫(xiě)時(shí)序:寫(xiě)時(shí)序和寫(xiě)時(shí)序。總線控制器通過(guò)寫(xiě)時(shí)序?qū)戇壿嫷?寫(xiě)時(shí)序?qū)戇壿嫷?。所有?xiě)時(shí)序必須最少持續(xù),包括兩個(gè)寫(xiě)周期之間至少的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時(shí)候,寫(xiě)時(shí)序開(kāi)始??偩€控制器要生產(chǎn)一個(gè)寫(xiě)時(shí)序,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫(xiě)時(shí)序開(kāi)始后的釋放總線。當(dāng)總線被釋放的時(shí)候,上拉電阻將拉高總線??偪刂破饕梢粋€(gè)寫(xiě)時(shí)序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持至少。總線控制器初始化寫(xiě)時(shí)序后,在一個(gè)到的窗口內(nèi)對(duì)/線采樣。如果線上是高電平,就是寫(xiě);如果線上是低電平,就是寫(xiě)。寫(xiě)時(shí)序見(jiàn)圖2.8。圖2.9讀時(shí)序當(dāng)總線控制器發(fā)起讀時(shí)序時(shí),僅被用來(lái)傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令或讀電源模式指令后必須立刻開(kāi)始讀時(shí)序,可以提供請(qǐng)求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令或召回指令之后讀時(shí)序。所有讀時(shí)序必須最少,包括兩個(gè)讀周期間至少的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時(shí),讀時(shí)序開(kāi)始,數(shù)據(jù)線必須至少保持,然后總線被釋放。在總線控制器發(fā)出讀時(shí)序后,通過(guò)拉高或拉低總線上來(lái)傳輸或。當(dāng)傳輸邏輯結(jié)束后,總線將被釋放,通過(guò)上拉電阻回到上升沿狀態(tài)。從輸出的數(shù)據(jù)在讀時(shí)序的下降沿出現(xiàn)后內(nèi)有效。因此,總線控制器在讀時(shí)序開(kāi)始后必須停止把/腳驅(qū)動(dòng)為低電平,以讀取/腳狀態(tài)。讀時(shí)序見(jiàn)圖2.9。由時(shí)序圖可知,單總線的通信協(xié)議由種信號(hào)類別組成:復(fù)位脈沖、存在脈沖、寫(xiě)、寫(xiě)、讀、讀。這些信號(hào)除了存在脈沖之外,均由總線主機(jī)產(chǎn)生。主機(jī)通過(guò)單總線對(duì)的操作必須首先由操作命令其中之一開(kāi)始。現(xiàn)以單總線只掛接一個(gè)讀取其中的溫度數(shù)據(jù)為例,說(shuō)明其工作過(guò)程如下:<1>、主機(jī)產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<2>、主機(jī)寫(xiě)入〔,跳過(guò)命令,該命令為種操作命令之一;<3>、主機(jī)寫(xiě)入溫度轉(zhuǎn)換命令;<4>、主機(jī)再次產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<5>、主機(jī)寫(xiě)入〔,跳過(guò)命令;<6>、主機(jī)寫(xiě)入讀暫存存儲(chǔ)器命令;<7>、讀暫存存儲(chǔ)器的溫度數(shù)據(jù)。第3章控制器設(shè)計(jì)第3.1節(jié)控制器結(jié)構(gòu)控制器結(jié)構(gòu)如圖3.1所示,控制器由部分組成,分別是邏輯控制部分、單總線時(shí)序控制部分、數(shù)據(jù)緩存部分以及計(jì)數(shù)器部分。邏輯控制部分用于實(shí)現(xiàn)與的通信,其中為位雙向數(shù)據(jù)線,為啟動(dòng)信號(hào),下降沿有效。與為地址信號(hào),其不同組合決定控制器的工作狀態(tài)。當(dāng)時(shí),控制器對(duì)執(zhí)行復(fù)位操作;當(dāng)時(shí),控制器執(zhí)行寫(xiě)入操作;當(dāng)時(shí),控制器執(zhí)行讀出操作。控制器由外部提供的時(shí)鐘信號(hào),用來(lái)產(chǎn)生的計(jì)數(shù)周期,控制器以為一個(gè)時(shí)間片形成的讀寫(xiě)時(shí)序。讀寫(xiě)周期則由計(jì)數(shù)器的計(jì)數(shù)輸出值控制。單總線時(shí)序控制部分的主要功能是產(chǎn)生單總線的讀寫(xiě)時(shí)序,并向輸出控制命令,讀出測(cè)得的數(shù)字溫度值及其他輸出信息。圖3.1控制器結(jié)構(gòu)第3.2節(jié)讀寫(xiě)時(shí)序的實(shí)現(xiàn)要求引腳驅(qū)動(dòng)必須是漏極開(kāi)路引腳,控制器用三態(tài)門(mén)與連接,如圖3.2所示。其中為三態(tài)門(mén)控制信號(hào),當(dāng)時(shí)輸出信號(hào),時(shí)輸入信號(hào)。控制器采用作為基本計(jì)時(shí)單位,可以保證的時(shí)序關(guān)系留有一定的緩沖余地。圖3.2輸出引腳連接示意圖下面采用語(yǔ)言進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)以下功能:<1>、當(dāng)從機(jī)模塊檢測(cè)到主機(jī)發(fā)送的復(fù)位信號(hào)時(shí),相應(yīng)復(fù)位信號(hào);<2>、從機(jī)接收主機(jī)發(fā)送的命令;<3>、從機(jī)接收主機(jī)發(fā)送的信號(hào);<4>、從機(jī)接收主機(jī)發(fā)送的命令和/數(shù)據(jù);library
IEEE;
use
IEEE.STD_LOGIC_1164.ALL;
use
IEEE.STD_LOGIC_ARITH.ALL;
use
IEEE.STD_LOGIC_UNSIGNED.ALL;
entity
ds18B20
isport<clk
:
in
std_logic;
50MHz
dq
:
inout
std_logic;
--DQ數(shù)據(jù)輸出輸入端
rst:
in
std_logic;
LED
:
out
std_logic;
--指示標(biāo)志,用來(lái)顯示程序進(jìn)行到哪一步LED2
:
out
std_logic;
LED3
:
out
std_logic;
dataout1,dataout2,dataout3
:
out
std_logic_vector<6
downto
0
>>;
--數(shù)據(jù)輸出端end
ds18B20;
architecture
Behavioral
of
ds18B20
isTYPE
STATE_TYPE
is
<RESET,CMD_CC,WRITE_BYTE,WRITE_LOW,WRITE_HIGH,READ_BIT,
<span
style="white-space:pre">
</span>CMD_44,CMD_BE,WAIT800MS,GET_TMP,WAIT4MS>;
--狀態(tài)機(jī)
signal
STATE:
STATE_TYPE:=RESET;
--初始化狀態(tài)機(jī)signal
clk_temp
:
std_logic:='0';
--監(jiān)測(cè)總線上的數(shù)據(jù)signal
clk1m
:
std_logic;
--分頻后得到的1M時(shí)鐘
signal
cp:
std_logic;
--
為時(shí)序而產(chǎn)生的1ms時(shí)鐘begin分頻程序,分到1MHzClkDivider:process
<clk,clk_temp>
beginif
rising_edge<clk>
then
if
<count
=
24>
thencount
<=
0;
clk_temp<=
not
clk_temp;
elsecount
<=
count
+1;
end
if;
end
if;
clk1m<=clk_temp;
end
Process;
為時(shí)序產(chǎn)生1ms時(shí)鐘process
<clk1m>
variable
n:
integer
range
0
to
12000:=0;
begincp
1ms
if
rising_edge<clk1m>
then
n:=n+1;
if
<n>12000>
then
n:=0;
cp<=not
cp;
end
if;
end
if;
end
Process;
STATE_TRANSITION:process<STATE,clk1m>
--主程序beginif
rising_edge<clk1m>
then
if<rst='0'>
then
STATE<=RESET;
elsecase
STATE
iswhen
RESET=>
--如果處在復(fù)位狀態(tài)
LED2<='0';
LED3<='0';
if
<cnt>=0
and
cnt<500>
then--
500μs的復(fù)位低電平
dq<='0';
--dq作為輸出
cnt<=cnt+1;
STATE<=RESET;
--在一定時(shí)序內(nèi)保持復(fù)位狀態(tài)
elsif
<cnt>=500
and
cnt<510>
then
dq<='Z';
--高阻態(tài)再輸入下一級(jí)電路的話,對(duì)下級(jí)電路無(wú)任何影響,和沒(méi)接一樣,高阻態(tài)可以應(yīng)用在inout端口里面,這樣在inout沒(méi)有輸出的時(shí)候就弄個(gè)高阻態(tài),這樣就其電平就可以由外面的輸入信號(hào)決定了
cnt<=cnt+1;
STATE<=RESET;
--拉高dq
elsif
<cnt>=510
and
cnt<750>
then--
240μstemp<=dq;
--dq作為輸入〔對(duì)于控制器來(lái)說(shuō)是輸入,對(duì)于DS18b20來(lái)說(shuō)是輸出
if<cnt=580>
thentemp<=dq;
if<temp='1'>
then--如果temp為1說(shuō)明DS18B20存在〔因?yàn)闄z測(cè)到了存在脈沖
LED<='0';
else
LED<='1';
end
if;
end
if;
cnt<=cnt+1;
STATE<=RESET;
elsif
<cnt>=750>
then--初始化時(shí)序結(jié)束
cnt<=0;
--計(jì)數(shù)器清零
STATE<=CMD_CC;
--復(fù)位過(guò)程伴隨著忽略rom指令"CC"end
if;
when
CMD_CC=>
--忽略rom指令"CC"
LED2<='1';
LED3<='0';
write_temp<="11001100";
--將write_temp設(shè)為"11001100"
STATE<=WRITE_BYTE;
when
WRITE_BYTE=>
case
WRITE_BYTE_CNT
iswhen
0
to
7=>
if
<write_temp<WRITE_BYTE_CNT>='0'>
then--判斷當(dāng)前write_temp第WRITE_BYTE_CNT上是否為'0'
STATE<=WRITE_LOW;
--如果當(dāng)前write_temp第WRITE_BYTE_CNT上是'0',進(jìn)入WRITE_LOW狀態(tài)〔即對(duì)DS18b20寫(xiě)低
LED3<='1';
else
STATE<=WRITE_HIGH;
--如果當(dāng)前write_temp第WRITE_BYTE_CNT上是'1',進(jìn)入WRITE_HIGH狀態(tài)〔即對(duì)DS18b20寫(xiě)高end
if;
WRITE_BYTE_CNT<=WRITE_BYTE_CNT+1;
--判斷write_temp的下一位when
8=>
if
<WRITE_BYTE_FLAG=0>
then--
第一次寫(xiě)0XCC完畢
STATE<=CMD_44;
--
WRITE_BYTE_FLAG<=1;
elsif
<WRITE_BYTE_FLAG=1>
then--寫(xiě)0X44完畢
STATE<=RESET;
WRITE_BYTE_FLAG<=2;
elsif
<WRITE_BYTE_FLAG=2>
then--第二次寫(xiě)0XCC完畢
STATE<=CMD_BE;
WRITE_BYTE_FLAG<=3;
elsif
<WRITE_BYTE_FLAG=3>
then--寫(xiě)0XBE完畢
STATE<=GET_TMP;
WRITE_BYTE_FLAG<=0;
end
if;
WRITE_BYTE_CNT<=0;
when
others=>STATE<=RESET;
endcase;
when
WRITE_LOW=>
--進(jìn)入寫(xiě)0時(shí)序,參看前面
LED3<='1';
case
WRITE_LOW_CNT
iswhen
0=>
dq<='0';
if
<cnt=70>
then--等待時(shí)序
cnt<=0;
WRITE_LOW_CNT<=1;
else
cnt<=cnt+1;
end
if;
when
1=>
dq<='Z';
if
<cnt=5>
then
cnt<=0;
WRITE_LOW_CNT<=2;
else
cnt<=cnt+1;
end
if;
when
2=>
STATE<=WRITE_BYTE;
WRITE_LOW_CNT<=0;
when
others=>WRITE_LOW_CNT<=0;
endcase;
when
WRITE_HIGH=>
--進(jìn)入寫(xiě)1時(shí)序,參看前面case
WRITE_HIGH_CNT
iswhen
0=>
dq<='0';
if
<cnt=8>
then
cnt<=0;
WRITE_HIGH_CNT<=1;
else
cnt<=cnt+1;
end
if;
when
1=>
dq<='Z';
if
<cnt=72>
then
cnt<=0;
WRITE_HIGH_CNT<=2;
else
cnt<=cnt+1;
end
if;
when
2=>
STATE<=WRITE_BYTE;
WRITE_HIGH_CNT<=0;
when
others=>WRITE_HIGH_CNT<=0;
endcase;
when
CMD_44=>
write_temp<="01000100";
--寫(xiě)指令44h
STATE<=WRITE_BYTE;
when
CMD_BE=>
write_temp<="10111110";
--寫(xiě)指令BEh
STATE<=WRITE_BYTE;
when
READ_BIT=>
case
READ_BIT_CNT
iswhen
0=>
dq<='0';
--4μs的低電平
if
<cnt=4>
then
READ_BIT_CNT<=1;
cnt<=0;
else
cnt<=cnt+1;
end
if;
when
1=>
dq<='Z';
--4μs的高電平
if
<cnt=4>
then
READ_BIT_CNT<=2;
cnt<=0;
else
cnt<=cnt+1;
end
if;
when
2=>
dq<='Z';
TMP_BIT<=dq;
--12μs讀出數(shù)據(jù)
,就是最后一次賦值的結(jié)果。
if
<cnt=4>
then
READ_BIT_CNT<=3;
cnt<=0;
else
cnt<=cnt+1;
end
if;
when
3=>
dq<='Z';
--控制器拉高總線
if
<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職機(jī)械(模具裝配調(diào)試)試題及答案
- 2025-2026年三年級(jí)科學(xué)(專項(xiàng)訓(xùn)練)上學(xué)期期中試題及答案
- 2025年高職食品檢驗(yàn)檢測(cè)技術(shù)(食品檢驗(yàn)應(yīng)用)試題及答案
- 2026年主持詞寫(xiě)作(主持詞撰寫(xiě)技巧)試題及答案
- 2025年高職會(huì)計(jì)學(xué)(中級(jí)財(cái)務(wù)會(huì)計(jì))試題及答案
- 2026年中職第一學(xué)年(商務(wù)助理)商務(wù)文書(shū)寫(xiě)作階段測(cè)試題及答案
- 2026年教育產(chǎn)業(yè)(教育發(fā)展)考題及答案
- 2025年高職(旅游管理)旅游規(guī)劃設(shè)計(jì)試題及答案
- 2025年大學(xué)(人類學(xué))都市人類學(xué)期末試題及答案
- 2025年中職工程造價(jià)(工程造價(jià)軟件應(yīng)用)試題及答案
- 2026年空氣污染監(jiān)測(cè)方法培訓(xùn)課件
- 實(shí)習(xí)2025年實(shí)習(xí)實(shí)習(xí)期轉(zhuǎn)正協(xié)議合同
- 2025年鮑魚(yú)養(yǎng)殖合作協(xié)議合同協(xié)議
- 2025智慧消防行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資前景預(yù)測(cè)研究報(bào)告
- 船舶入股協(xié)議書(shū)范本
- 腎病綜合征護(hù)理診斷與護(hù)理措施
- 《好的教育》讀書(shū)心得ppt
- 立體構(gòu)成-塊材課件
- 純化水再驗(yàn)證方案
- 神泣命令代碼
- 四年級(jí)《上下五千年》閱讀測(cè)試題及答案
評(píng)論
0/150
提交評(píng)論