




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
.PAGE....設(shè)計(jì)基于VHDL的單總線從機(jī)讀寫控制器目錄TOC\o"1-4"\h\u27462前言 120591第1章單總線技術(shù)211655第1.1節(jié)單總線技術(shù)簡介216502第1.2節(jié)單總線技術(shù)的原理與硬件結(jié)構(gòu)222837第1.3節(jié)單總線技術(shù)的信號方式327073第1.4節(jié)單總線技術(shù)的器件431091第2章DS18B20簡介 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é)讀寫時(shí)序的實(shí)現(xiàn) 1114579第4章仿真與結(jié)論 194642課堂感悟與致謝 20..前言是美國達(dá)拉斯公司生產(chǎn)的一種單總線數(shù)字溫度傳感器,采用總線通信協(xié)議。具有獨(dú)特的單總線通信方式以及較高的測量精度,目前在實(shí)際生活中獲得了廣泛應(yīng)用。本文介紹了的基本原理和通信時(shí)序,并用軟件模擬單總線時(shí)序,實(shí)現(xiàn)與的通信。作為電子硬件設(shè)計(jì)的主流描述語言,采用層次化的設(shè)計(jì)方式,具有電路行為描述能力強(qiáng)、靈活、通用及運(yùn)算仿真速度快等特點(diǎn),能夠較容易地實(shí)現(xiàn)時(shí)序邏輯控制。本文以數(shù)字溫度傳感器為例,設(shè)計(jì)一個(gè)基于的單總線控制器,并對通信程序進(jìn)行了仿真測試。本文介紹的單總線控制器,有較強(qiáng)的可擴(kuò)展性,可以連接多種單總線器件,且微處理器可以不用被迫關(guān)閉中斷,滿足各類對實(shí)時(shí)性具有嚴(yán)格要求的應(yīng)用。第1章單總線技術(shù)第1.1節(jié)單總線技術(shù)簡介單總線技術(shù)是達(dá)拉斯半導(dǎo)體公司推出的一項(xiàng)特有技術(shù)。它采用單根信號線,既可傳輸時(shí)鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)可以雙向傳輸。由于這種單總線技術(shù)線路簡單,硬件開銷少,所以其具有成本低廉,便于總線擴(kuò)展和易于維護(hù)等優(yōu)點(diǎn)。單總線適用于單主機(jī)系統(tǒng),能夠控制一個(gè)或多個(gè)從機(jī)設(shè)備。主機(jī)可以是微控制器,從機(jī)可以是單總線器件,它們之間的數(shù)據(jù)交換只通過一條信號線。當(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ī)通過一個(gè)漏極開路或三態(tài)端口連至該數(shù)據(jù)線,這樣便可允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)釋放總線,以便其他設(shè)備使用總線,其內(nèi)部等效電路如圖1.1所示。圖1.1單總線硬件接口示意圖單總線要外接一個(gè)約的上拉電阻,這樣當(dāng)總線閑置時(shí),狀態(tài)為高電平。主機(jī)和從機(jī)之間的通信通過以下三個(gè)步驟完成:初始化器件,識別器件,交換數(shù)據(jù)。由于二者是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時(shí),從機(jī)才能答應(yīng),因此主機(jī)訪問器件必須嚴(yán)格遵循單總線命令序列:初始化、命令、功能命令。如果出現(xiàn)序列混亂,器件則不會響應(yīng)主機(jī)〔搜索命令,報(bào)警搜索命令除外。根據(jù)以上原理,可以畫出單總線硬件接口原理圖,如圖1.2所示。圖1.2單總線硬件接口原理圖單總線端口為漏極開路,在本文中令單總線外接一個(gè)約的上拉電阻,這樣,不管什么原因單總線的閑置狀態(tài)為高電平。如果傳輸過程需要暫時(shí)掛起,且要求傳輸過程還能夠繼續(xù)的話,總線必須處于空閑狀態(tài)。位傳輸之間的恢復(fù)時(shí)間沒有限制,只要總線在恢復(fù)期間處于空閑狀態(tài)〔即高電平即可。如果總線保持低電平超過則將總線上的所有器件將復(fù)位。此外,在使用寄生方式供電時(shí),為了保證單總線器件在某些工作狀態(tài)下〔如溫度轉(zhuǎn)換期間、寫入等具有足夠的電源電流,必須在總線上提供強(qiáng)上拉源,如圖1.2中所示的。第1.3節(jié)單總線技術(shù)的信號方式所有單總線器件要求遵循嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。協(xié)議定義了幾種信號類型:復(fù)位脈沖、答應(yīng)脈沖、寫、寫、讀和讀時(shí)序。所有的單總線命令序列〔初始化、命令、功能命令都是由這些基本的信號類型組成。這些信號,除了應(yīng)答脈沖外都是由主機(jī)發(fā)出同步信號,并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。初始化時(shí)序包括主機(jī)發(fā)送的復(fù)位脈沖和從機(jī)發(fā)出的應(yīng)答脈沖,主機(jī)通過拉低單總線以上,產(chǎn)生復(fù)位脈沖,然后主機(jī)釋放總線,并進(jìn)入接收模式。當(dāng)主機(jī)釋放總線時(shí),總線由低電平跳變?yōu)楦唠娖綍r(shí)產(chǎn)生一上升沿,單總線器件檢測到這上升沿后,延時(shí),接著單總線器件通過拉低總線產(chǎn)生應(yīng)答脈沖。當(dāng)主機(jī)接收到從機(jī)應(yīng)答脈沖后,說明此時(shí)有單總線器件在線,然后主機(jī)就開始對從機(jī)進(jìn)行命令和功能命令的操作。在每一個(gè)寫、寫或讀時(shí)序中,總線只能傳輸一位數(shù)據(jù)。所有的讀寫時(shí)序至少需要,且每兩個(gè)獨(dú)立的時(shí)序之間至少需要的恢復(fù)時(shí)間。讀寫時(shí)序均起始于主機(jī)拉低總線。在寫時(shí)序中,主機(jī)拉低總線后保持至少的低電平則向單總線器件寫。單總線器件在主機(jī)發(fā)出讀時(shí)序時(shí)才向主機(jī)傳送數(shù)據(jù),所以當(dāng)主機(jī)向單總線器件發(fā)出數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時(shí)序,以便單總線能傳輸數(shù)據(jù)。在主機(jī)發(fā)出讀時(shí)序之后,單總線器件才開始在總線上發(fā)送或,若單總線器件發(fā)送,則保持總線高電平;若發(fā)送,則拉低總線。單總線器件發(fā)送數(shù)據(jù)之后,需保持有效的時(shí)間,因而,主機(jī)在讀時(shí)序期間必須釋放總線,并且必須在之內(nèi)對總線狀態(tài)進(jìn)行采樣,接收從機(jī)發(fā)送的數(shù)據(jù)。第1.4節(jié)單總線技術(shù)的器件為了區(qū)分不同的單總線器件,廠家在生產(chǎn)單總線器件時(shí)要刻錄一個(gè)位的二進(jìn)制代碼,用于標(biāo)明單總線器件的號。目前,單總線器件的主要有數(shù)字溫度傳感器〔如、/轉(zhuǎn)換器〔如門禁、身份識別器〔如、單總線控制器〔如等等。其中數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式等。其型號多種多樣,有,等等,主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機(jī)房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。由于其耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域,目前有著廣泛的應(yīng)用,故我們選擇芯片來進(jìn)行下面的設(shè)計(jì)。
第2章DS18B20簡介第2.1節(jié)DS18B20的封裝與管腳芯片的常見封裝為,如圖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)主要由部分組成:光刻、溫度敏感器件、高速暫存存儲器和溫度報(bào)警觸發(fā)器、。光刻中的序列號是出廠前被光刻好的,它可以看作是該的地址序列碼。光刻的排列是:開始位是產(chǎn)品類型標(biāo)號,接著的位是該自身的序列號,最后位是前面位的循環(huán)冗余校驗(yàn)碼,可由下式得到:。光刻的作用是使每一個(gè)都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)的目的。光刻保存芯片的唯一的編碼。高速暫存存儲器高速暫存存儲器由個(gè)字節(jié)組成。高速暫存存儲器包含個(gè)連續(xù)的字節(jié),存放測得的溫度的補(bǔ)碼、和的拷貝數(shù)據(jù)、計(jì)數(shù)器余值和校驗(yàn)等數(shù)據(jù),其結(jié)構(gòu)如圖2.4所示。其中所有數(shù)據(jù)均以最低有效位在前的方式讀寫。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲器的第和第個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。對應(yīng)的溫度計(jì)算規(guī)則為:當(dāng)符號位時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。表2是對應(yīng)的一部分溫度值。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。圖2.4存儲器由于芯片可以工作在寄生電源模式下工作,該模式允許工作在無外部電源的狀態(tài)。當(dāng)總線為高電平時(shí),寄生電源由單總線通過引腳,此時(shí)可以從總線得到能量,并將得到的能量儲存到寄生電源儲能電容中,當(dāng)總線為低電平時(shí)釋放能量供給器件工作使用。簡單的說就是在信號線為高電平的時(shí)間周期內(nèi),把能量儲存在內(nèi)部的電容器中;在信號線為低電平期間,由存儲在電容器內(nèi)的電荷供電。所以,當(dāng)工作在寄生電源模式時(shí),引腳必須接地。工作時(shí)信號線須接的上拉電阻,以保證信號線有足夠的驅(qū)動(dòng)能力。一個(gè)典型的硬件原理圖如圖2.5所示。圖2.5硬件原理圖如上圖所示,芯片通過達(dá)拉斯公司的單總線協(xié)議依靠一個(gè)單線端口通訊,當(dāng)全部器件經(jīng)由一個(gè)三態(tài)端口或者漏極開路端口與總線連接時(shí),控制線需要連接一個(gè)弱上拉電阻。在多只連接時(shí),每個(gè)都擁有一個(gè)全球唯一的位序列號,在這個(gè)總線系統(tǒng)中,微處理器依靠每個(gè)器件獨(dú)有的位片序列號辨認(rèn)總線上的器件并記錄總線上的器件地址,從而允許多只同時(shí)連接在一條單線總線上。因此,可以很輕松地利用一個(gè)微處理器去控制很多分布在不同區(qū)域的,這一特性在環(huán)境控制、探測建筑物、儀器等溫度以及過程監(jiān)測和控制等方面都非常有用。對于的電路連接,除了上面所說的傳統(tǒng)的外部電源供電時(shí)的電路連接圖,也可以工作在上文所述的寄生電源模式中。圖2.6表示了工作在寄生電源模式下的硬件原理圖。這樣可以使工作在寄生電源模式下,不用額外的電源就可以實(shí)時(shí)采集位于多個(gè)地點(diǎn)的溫度信息。圖2.6寄生電源模式硬件原理圖第2.3節(jié)DS1820時(shí)序及工作方式時(shí)序如圖2.72.9所示,時(shí)序波形的電平分為種類型:主機(jī)作用的高低電平、由輸出的高低電平和由上拉電阻拉起的高電平〔后種情況主機(jī)釋放信號線。閑置時(shí)信號線保持高電平,對的任何操作〔如讀、寫、復(fù)位等都是由主機(jī)對信號線的電平由邏輯高電平拉至低電平開始。圖2.7復(fù)位時(shí)序復(fù)位時(shí)序是工作的基礎(chǔ)。任何設(shè)備與間的通訊都需要以初始化序列開始。一個(gè)復(fù)位脈沖跟著一個(gè)存在脈沖表明已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。在初始化序列期間,總線控制器拉低總線并保持以發(fā)出一個(gè)復(fù)位脈沖,然后釋放總線,進(jìn)入接受狀態(tài)。單總線由上拉電阻拉倒高電平。當(dāng)探測到/引腳上的上升沿后,等待,然后發(fā)出一個(gè)由的低電平信號構(gòu)成的存在脈沖。初始化時(shí)序見圖2.7。圖2.8寫時(shí)序的數(shù)據(jù)讀寫是通過時(shí)序處理位來確認(rèn)信息交換的。有兩種寫時(shí)序:寫時(shí)序和寫時(shí)序。總線控制器通過寫時(shí)序?qū)戇壿嫷?寫時(shí)序?qū)戇壿嫷健K袑憰r(shí)序必須最少持續(xù),包括兩個(gè)寫周期之間至少的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時(shí)候,寫時(shí)序開始。總線控制器要生產(chǎn)一個(gè)寫時(shí)序,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫時(shí)序開始后的釋放總線。當(dāng)總線被釋放的時(shí)候,上拉電阻將拉高總線。總控制器要生成一個(gè)寫時(shí)序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持至少。總線控制器初始化寫時(shí)序后,在一個(gè)到的窗口內(nèi)對/線采樣。如果線上是高電平,就是寫;如果線上是低電平,就是寫。寫時(shí)序見圖2.8。圖2.9讀時(shí)序當(dāng)總線控制器發(fā)起讀時(shí)序時(shí),僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令或讀電源模式指令后必須立刻開始讀時(shí)序,可以提供請求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令或召回指令之后讀時(shí)序。所有讀時(shí)序必須最少,包括兩個(gè)讀周期間至少的恢復(fù)時(shí)間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時(shí),讀時(shí)序開始,數(shù)據(jù)線必須至少保持,然后總線被釋放。在總線控制器發(fā)出讀時(shí)序后,通過拉高或拉低總線上來傳輸或。當(dāng)傳輸邏輯結(jié)束后,總線將被釋放,通過上拉電阻回到上升沿狀態(tài)。從輸出的數(shù)據(jù)在讀時(shí)序的下降沿出現(xiàn)后內(nèi)有效。因此,總線控制器在讀時(shí)序開始后必須停止把/腳驅(qū)動(dòng)為低電平,以讀取/腳狀態(tài)。讀時(shí)序見圖2.9。由時(shí)序圖可知,單總線的通信協(xié)議由種信號類別組成:復(fù)位脈沖、存在脈沖、寫、寫、讀、讀。這些信號除了存在脈沖之外,均由總線主機(jī)產(chǎn)生。主機(jī)通過單總線對的操作必須首先由操作命令其中之一開始。現(xiàn)以單總線只掛接一個(gè)讀取其中的溫度數(shù)據(jù)為例,說明其工作過程如下:<1>、主機(jī)產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<2>、主機(jī)寫入〔,跳過命令,該命令為種操作命令之一;<3>、主機(jī)寫入溫度轉(zhuǎn)換命令;<4>、主機(jī)再次產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<5>、主機(jī)寫入〔,跳過命令;<6>、主機(jī)寫入讀暫存存儲器命令;<7>、讀暫存存儲器的溫度數(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)信號,下降沿有效。與為地址信號,其不同組合決定控制器的工作狀態(tài)。當(dāng)時(shí),控制器對執(zhí)行復(fù)位操作;當(dāng)時(shí),控制器執(zhí)行寫入操作;當(dāng)時(shí),控制器執(zhí)行讀出操作。控制器由外部提供的時(shí)鐘信號,用來產(chǎn)生的計(jì)數(shù)周期,控制器以為一個(gè)時(shí)間片形成的讀寫時(shí)序。讀寫周期則由計(jì)數(shù)器的計(jì)數(shù)輸出值控制。單總線時(shí)序控制部分的主要功能是產(chǎn)生單總線的讀寫時(shí)序,并向輸出控制命令,讀出測得的數(shù)字溫度值及其他輸出信息。圖3.1控制器結(jié)構(gòu)第3.2節(jié)讀寫時(shí)序的實(shí)現(xiàn)要求引腳驅(qū)動(dòng)必須是漏極開路引腳,控制器用三態(tài)門與連接,如圖3.2所示。其中為三態(tài)門控制信號,當(dāng)時(shí)輸出信號,時(shí)輸入信號。控制器采用作為基本計(jì)時(shí)單位,可以保證的時(shí)序關(guān)系留有一定的緩沖余地。圖3.2輸出引腳連接示意圖下面采用語言進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)以下功能:<1>、當(dāng)從機(jī)模塊檢測到主機(jī)發(fā)送的復(fù)位信號時(shí),相應(yīng)復(fù)位信號;<2>、從機(jī)接收主機(jī)發(fā)送的命令;<3>、從機(jī)接收主機(jī)發(fā)送的信號;<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)志,用來顯示程序進(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)測總線上的數(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)再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣,高阻態(tài)可以應(yīng)用在inout端口里面,這樣在inout沒有輸出的時(shí)候就弄個(gè)高阻態(tài),這樣就其電平就可以由外面的輸入信號決定了
cnt<=cnt+1;
STATE<=RESET;
--拉高dq
elsif
<cnt>=510
and
cnt<750>
then--
240μstemp<=dq;
--dq作為輸入〔對于控制器來說是輸入,對于DS18b20來說是輸出
if<cnt=580>
thentemp<=dq;
if<temp='1'>
then--如果temp為1說明DS18B20存在〔因?yàn)闄z測到了存在脈沖
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ù)位過程伴隨著忽略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)〔即對DS18b20寫低
LED3<='1';
else
STATE<=WRITE_HIGH;
--如果當(dāng)前write_temp第WRITE_BYTE_CNT上是'1',進(jìn)入WRITE_HIGH狀態(tài)〔即對DS18b20寫高end
if;
WRITE_BYTE_CNT<=WRITE_BYTE_CNT+1;
--判斷write_temp的下一位when
8=>
if
<WRITE_BYTE_FLAG=0>
then--
第一次寫0XCC完畢
STATE<=CMD_44;
--
WRITE_BYTE_FLAG<=1;
elsif
<WRITE_BYTE_FLAG=1>
then--寫0X44完畢
STATE<=RESET;
WRITE_BYTE_FLAG<=2;
elsif
<WRITE_BYTE_FLAG=2>
then--第二次寫0XCC完畢
STATE<=CMD_BE;
WRITE_BYTE_FLAG<=3;
elsif
<WRITE_BYTE_FLAG=3>
then--寫0XBE完畢
STATE<=GET_TMP;
WRITE_BYTE_FLAG<=0;
end
if;
WRITE_BYTE_CNT<=0;
when
others=>STATE<=RESET;
endcase;
when
WRITE_LOW=>
--進(jìn)入寫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)入寫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";
--寫指令44h
STATE<=WRITE_BYTE;
when
CMD_BE=>
write_temp<="10111110";
--寫指令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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基層公共衛(wèi)生考試模擬題(含答案)
- 2025屆廣東省汕頭市潮南實(shí)驗(yàn)學(xué)校校高考沖刺模擬英語試題含答案
- 鉗工四級理論知識復(fù)習(xí)題(附參考答案)
- 車工高級工模擬習(xí)題(附參考答案)
- 職業(yè)技術(shù)學(xué)院2024級嬰幼兒托育服務(wù)與管理專業(yè)人才培養(yǎng)方案
- 助產(chǎn)技術(shù)-娠合并癥專項(xiàng)考核試題
- 眼鏡生產(chǎn)過程中的品質(zhì)監(jiān)控手段考核試卷
- 糖品包裝設(shè)計(jì)與可持續(xù)發(fā)展理念考核試卷
- 健康飲食食物中的銅與貧血的預(yù)防考核試卷
- 聚合纖維在能源儲存領(lǐng)域的應(yīng)用考核試卷
- 第3課《校園文化活動(dòng)我參與》教案 海燕版綜合實(shí)踐活動(dòng) 三年級下冊
- 2025年保密教育線上培訓(xùn)考試試題及答案
- 外研版(三起)(2024)三年級下冊英語Unit 2 單元測試卷(含答案)
- 國開(內(nèi)蒙古)2024年《創(chuàng)新創(chuàng)業(yè)教育基礎(chǔ)》形考任務(wù)1-3終考任務(wù)答案
- 基于新公共服務(wù)理論我國行政審批制度改革
- 五年級奧數(shù)教程
- 針刺傷的預(yù)防及處理(課堂PPT)
- 濕式報(bào)警閥閥門強(qiáng)度和嚴(yán)密性試驗(yàn)記錄
- MATLAB中的abc-dq相坐標(biāo)變換
- 保密管理及注意事項(xiàng)培訓(xùn)PPT(22P)
- 張志俊陳式太極拳新架一路拳譜
評論
0/150
提交評論