基于VHDL的單總線從機讀寫控制器_第1頁
基于VHDL的單總線從機讀寫控制器_第2頁
基于VHDL的單總線從機讀寫控制器_第3頁
基于VHDL的單總線從機讀寫控制器_第4頁
基于VHDL的單總線從機讀寫控制器_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.PAGE....設(shè)計基于VHDL的單總線從機讀寫控制器目錄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時序及工作方式 811726第3章控制器設(shè)計 1123012第3.1節(jié)控制器結(jié)構(gòu) 1122685第3.2節(jié)讀寫時序的實現(xiàn) 1114579第4章仿真與結(jié)論 194642課堂感悟與致謝 20..前言是美國達拉斯公司生產(chǎn)的一種單總線數(shù)字溫度傳感器,采用總線通信協(xié)議。具有獨特的單總線通信方式以及較高的測量精度,目前在實際生活中獲得了廣泛應(yīng)用。本文介紹了的基本原理和通信時序,并用軟件模擬單總線時序,實現(xiàn)與的通信。作為電子硬件設(shè)計的主流描述語言,采用層次化的設(shè)計方式,具有電路行為描述能力強、靈活、通用及運算仿真速度快等特點,能夠較容易地實現(xiàn)時序邏輯控制。本文以數(shù)字溫度傳感器為例,設(shè)計一個基于的單總線控制器,并對通信程序進行了仿真測試。本文介紹的單總線控制器,有較強的可擴展性,可以連接多種單總線器件,且微處理器可以不用被迫關(guān)閉中斷,滿足各類對實時性具有嚴(yán)格要求的應(yīng)用。第1章單總線技術(shù)第1.1節(jié)單總線技術(shù)簡介單總線技術(shù)是達拉斯半導(dǎo)體公司推出的一項特有技術(shù)。它采用單根信號線,既可傳輸時鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)可以雙向傳輸。由于這種單總線技術(shù)線路簡單,硬件開銷少,所以其具有成本低廉,便于總線擴展和易于維護等優(yōu)點。單總線適用于單主機系統(tǒng),能夠控制一個或多個從機設(shè)備。主機可以是微控制器,從機可以是單總線器件,它們之間的數(shù)據(jù)交換只通過一條信號線。當(dāng)只有一個從機設(shè)備時,系統(tǒng)可按單節(jié)點系統(tǒng)操作;當(dāng)有多個從機設(shè)備時,系統(tǒng)則按多節(jié)點系統(tǒng)操作。第1.2節(jié)單總線技術(shù)的原理與硬件結(jié)構(gòu)單總線只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都在這根線上完成。設(shè)備〔主機或從機通過一個漏極開路或三態(tài)端口連至該數(shù)據(jù)線,這樣便可允許設(shè)備在不發(fā)送數(shù)據(jù)時釋放總線,以便其他設(shè)備使用總線,其內(nèi)部等效電路如圖1.1所示。圖1.1單總線硬件接口示意圖單總線要外接一個約的上拉電阻,這樣當(dāng)總線閑置時,狀態(tài)為高電平。主機和從機之間的通信通過以下三個步驟完成:初始化器件,識別器件,交換數(shù)據(jù)。由于二者是主從結(jié)構(gòu),只有主機呼叫從機時,從機才能答應(yīng),因此主機訪問器件必須嚴(yán)格遵循單總線命令序列:初始化、命令、功能命令。如果出現(xiàn)序列混亂,器件則不會響應(yīng)主機〔搜索命令,報警搜索命令除外。根據(jù)以上原理,可以畫出單總線硬件接口原理圖,如圖1.2所示。圖1.2單總線硬件接口原理圖單總線端口為漏極開路,在本文中令單總線外接一個約的上拉電阻,這樣,不管什么原因單總線的閑置狀態(tài)為高電平。如果傳輸過程需要暫時掛起,且要求傳輸過程還能夠繼續(xù)的話,總線必須處于空閑狀態(tài)。位傳輸之間的恢復(fù)時間沒有限制,只要總線在恢復(fù)期間處于空閑狀態(tài)〔即高電平即可。如果總線保持低電平超過則將總線上的所有器件將復(fù)位。此外,在使用寄生方式供電時,為了保證單總線器件在某些工作狀態(tài)下〔如溫度轉(zhuǎn)換期間、寫入等具有足夠的電源電流,必須在總線上提供強上拉源,如圖1.2中所示的。第1.3節(jié)單總線技術(shù)的信號方式所有單總線器件要求遵循嚴(yán)格的通信協(xié)議,以保證數(shù)據(jù)的完整性。協(xié)議定義了幾種信號類型:復(fù)位脈沖、答應(yīng)脈沖、寫、寫、讀和讀時序。所有的單總線命令序列〔初始化、命令、功能命令都是由這些基本的信號類型組成。這些信號,除了應(yīng)答脈沖外都是由主機發(fā)出同步信號,并且發(fā)出的所有命令和數(shù)據(jù)都是字節(jié)的低位在前。初始化時序包括主機發(fā)送的復(fù)位脈沖和從機發(fā)出的應(yīng)答脈沖,主機通過拉低單總線以上,產(chǎn)生復(fù)位脈沖,然后主機釋放總線,并進入接收模式。當(dāng)主機釋放總線時,總線由低電平跳變?yōu)楦唠娖綍r產(chǎn)生一上升沿,單總線器件檢測到這上升沿后,延時,接著單總線器件通過拉低總線產(chǎn)生應(yīng)答脈沖。當(dāng)主機接收到從機應(yīng)答脈沖后,說明此時有單總線器件在線,然后主機就開始對從機進行命令和功能命令的操作。在每一個寫、寫或讀時序中,總線只能傳輸一位數(shù)據(jù)。所有的讀寫時序至少需要,且每兩個獨立的時序之間至少需要的恢復(fù)時間。讀寫時序均起始于主機拉低總線。在寫時序中,主機拉低總線后保持至少的低電平則向單總線器件寫。單總線器件在主機發(fā)出讀時序時才向主機傳送數(shù)據(jù),所以當(dāng)主機向單總線器件發(fā)出數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時序,以便單總線能傳輸數(shù)據(jù)。在主機發(fā)出讀時序之后,單總線器件才開始在總線上發(fā)送或,若單總線器件發(fā)送,則保持總線高電平;若發(fā)送,則拉低總線。單總線器件發(fā)送數(shù)據(jù)之后,需保持有效的時間,因而,主機在讀時序期間必須釋放總線,并且必須在之內(nèi)對總線狀態(tài)進行采樣,接收從機發(fā)送的數(shù)據(jù)。第1.4節(jié)單總線技術(shù)的器件為了區(qū)分不同的單總線器件,廠家在生產(chǎn)單總線器件時要刻錄一個位的二進制代碼,用于標(biāo)明單總線器件的號。目前,單總線器件的主要有數(shù)字溫度傳感器〔如、/轉(zhuǎn)換器〔如門禁、身份識別器〔如、單總線控制器〔如等等。其中數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式等。其型號多種多樣,有,等等,主要根據(jù)應(yīng)用場合的不同而改變其外觀。封裝后的可用于電纜溝測溫,高爐水循環(huán)測溫,鍋爐測溫,機房測溫,農(nóng)業(yè)大棚測溫,潔凈室測溫,彈藥庫測溫等各種非極限溫度場合。由于其耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測溫和控制領(lǐng)域,目前有著廣泛的應(yīng)用,故我們選擇芯片來進行下面的設(shè)計。

第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)主要由部分組成:光刻、溫度敏感器件、高速暫存存儲器和溫度報警觸發(fā)器、。光刻中的序列號是出廠前被光刻好的,它可以看作是該的地址序列碼。光刻的排列是:開始位是產(chǎn)品類型標(biāo)號,接著的位是該自身的序列號,最后位是前面位的循環(huán)冗余校驗碼,可由下式得到:。光刻的作用是使每一個都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個的目的。光刻保存芯片的唯一的編碼。高速暫存存儲器高速暫存存儲器由個字節(jié)組成。高速暫存存儲器包含個連續(xù)的字節(jié),存放測得的溫度的補碼、和的拷貝數(shù)據(jù)、計數(shù)器余值和校驗等數(shù)據(jù),其結(jié)構(gòu)如圖2.4所示。其中所有數(shù)據(jù)均以最低有效位在前的方式讀寫。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第和第個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。對應(yīng)的溫度計算規(guī)則為:當(dāng)符號位時,直接將二進制位轉(zhuǎn)換為十進制;當(dāng)時,先將補碼變?yōu)樵a,再計算十進制值。表2是對應(yīng)的一部分溫度值。第九個字節(jié)是冗余檢驗字節(jié)。圖2.4存儲器由于芯片可以工作在寄生電源模式下工作,該模式允許工作在無外部電源的狀態(tài)。當(dāng)總線為高電平時,寄生電源由單總線通過引腳,此時可以從總線得到能量,并將得到的能量儲存到寄生電源儲能電容中,當(dāng)總線為低電平時釋放能量供給器件工作使用。簡單的說就是在信號線為高電平的時間周期內(nèi),把能量儲存在內(nèi)部的電容器中;在信號線為低電平期間,由存儲在電容器內(nèi)的電荷供電。所以,當(dāng)工作在寄生電源模式時,引腳必須接地。工作時信號線須接的上拉電阻,以保證信號線有足夠的驅(qū)動能力。一個典型的硬件原理圖如圖2.5所示。圖2.5硬件原理圖如上圖所示,芯片通過達拉斯公司的單總線協(xié)議依靠一個單線端口通訊,當(dāng)全部器件經(jīng)由一個三態(tài)端口或者漏極開路端口與總線連接時,控制線需要連接一個弱上拉電阻。在多只連接時,每個都擁有一個全球唯一的位序列號,在這個總線系統(tǒng)中,微處理器依靠每個器件獨有的位片序列號辨認(rèn)總線上的器件并記錄總線上的器件地址,從而允許多只同時連接在一條單線總線上。因此,可以很輕松地利用一個微處理器去控制很多分布在不同區(qū)域的,這一特性在環(huán)境控制、探測建筑物、儀器等溫度以及過程監(jiān)測和控制等方面都非常有用。對于的電路連接,除了上面所說的傳統(tǒng)的外部電源供電時的電路連接圖,也可以工作在上文所述的寄生電源模式中。圖2.6表示了工作在寄生電源模式下的硬件原理圖。這樣可以使工作在寄生電源模式下,不用額外的電源就可以實時采集位于多個地點的溫度信息。圖2.6寄生電源模式硬件原理圖第2.3節(jié)DS1820時序及工作方式時序如圖2.72.9所示,時序波形的電平分為種類型:主機作用的高低電平、由輸出的高低電平和由上拉電阻拉起的高電平〔后種情況主機釋放信號線。閑置時信號線保持高電平,對的任何操作〔如讀、寫、復(fù)位等都是由主機對信號線的電平由邏輯高電平拉至低電平開始。圖2.7復(fù)位時序復(fù)位時序是工作的基礎(chǔ)。任何設(shè)備與間的通訊都需要以初始化序列開始。一個復(fù)位脈沖跟著一個存在脈沖表明已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。在初始化序列期間,總線控制器拉低總線并保持以發(fā)出一個復(fù)位脈沖,然后釋放總線,進入接受狀態(tài)。單總線由上拉電阻拉倒高電平。當(dāng)探測到/引腳上的上升沿后,等待,然后發(fā)出一個由的低電平信號構(gòu)成的存在脈沖。初始化時序見圖2.7。圖2.8寫時序的數(shù)據(jù)讀寫是通過時序處理位來確認(rèn)信息交換的。有兩種寫時序:寫時序和寫時序??偩€控制器通過寫時序?qū)戇壿嫷?寫時序?qū)戇壿嫷?。所有寫時序必須最少持續(xù),包括兩個寫周期之間至少的恢復(fù)時間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時候,寫時序開始??偩€控制器要生產(chǎn)一個寫時序,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫時序開始后的釋放總線。當(dāng)總線被釋放的時候,上拉電阻將拉高總線??偪刂破饕梢粋€寫時序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持至少。總線控制器初始化寫時序后,在一個到的窗口內(nèi)對/線采樣。如果線上是高電平,就是寫;如果線上是低電平,就是寫。寫時序見圖2.8。圖2.9讀時序當(dāng)總線控制器發(fā)起讀時序時,僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令或讀電源模式指令后必須立刻開始讀時序,可以提供請求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令或召回指令之后讀時序。所有讀時序必須最少,包括兩個讀周期間至少的恢復(fù)時間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時,讀時序開始,數(shù)據(jù)線必須至少保持,然后總線被釋放。在總線控制器發(fā)出讀時序后,通過拉高或拉低總線上來傳輸或。當(dāng)傳輸邏輯結(jié)束后,總線將被釋放,通過上拉電阻回到上升沿狀態(tài)。從輸出的數(shù)據(jù)在讀時序的下降沿出現(xiàn)后內(nèi)有效。因此,總線控制器在讀時序開始后必須停止把/腳驅(qū)動為低電平,以讀取/腳狀態(tài)。讀時序見圖2.9。由時序圖可知,單總線的通信協(xié)議由種信號類別組成:復(fù)位脈沖、存在脈沖、寫、寫、讀、讀。這些信號除了存在脈沖之外,均由總線主機產(chǎn)生。主機通過單總線對的操作必須首先由操作命令其中之一開始?,F(xiàn)以單總線只掛接一個讀取其中的溫度數(shù)據(jù)為例,說明其工作過程如下:<1>、主機產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<2>、主機寫入〔,跳過命令,該命令為種操作命令之一;<3>、主機寫入溫度轉(zhuǎn)換命令;<4>、主機再次產(chǎn)生復(fù)位脈沖,返回響應(yīng)脈沖;<5>、主機寫入〔,跳過命令;<6>、主機寫入讀暫存存儲器命令;<7>、讀暫存存儲器的溫度數(shù)據(jù)。第3章控制器設(shè)計第3.1節(jié)控制器結(jié)構(gòu)控制器結(jié)構(gòu)如圖3.1所示,控制器由部分組成,分別是邏輯控制部分、單總線時序控制部分、數(shù)據(jù)緩存部分以及計數(shù)器部分。邏輯控制部分用于實現(xiàn)與的通信,其中為位雙向數(shù)據(jù)線,為啟動信號,下降沿有效。與為地址信號,其不同組合決定控制器的工作狀態(tài)。當(dāng)時,控制器對執(zhí)行復(fù)位操作;當(dāng)時,控制器執(zhí)行寫入操作;當(dāng)時,控制器執(zhí)行讀出操作??刂破饔赏獠刻峁┑臅r鐘信號,用來產(chǎn)生的計數(shù)周期,控制器以為一個時間片形成的讀寫時序。讀寫周期則由計數(shù)器的計數(shù)輸出值控制。單總線時序控制部分的主要功能是產(chǎn)生單總線的讀寫時序,并向輸出控制命令,讀出測得的數(shù)字溫度值及其他輸出信息。圖3.1控制器結(jié)構(gòu)第3.2節(jié)讀寫時序的實現(xiàn)要求引腳驅(qū)動必須是漏極開路引腳,控制器用三態(tài)門與連接,如圖3.2所示。其中為三態(tài)門控制信號,當(dāng)時輸出信號,時輸入信號??刂破鞑捎米鳛榛居嫊r單位,可以保證的時序關(guān)系留有一定的緩沖余地。圖3.2輸出引腳連接示意圖下面采用語言進行程序設(shè)計,實現(xiàn)以下功能:<1>、當(dāng)從機模塊檢測到主機發(fā)送的復(fù)位信號時,相應(yīng)復(fù)位信號;<2>、從機接收主機發(fā)送的命令;<3>、從機接收主機發(fā)送的信號;<4>、從機接收主機發(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)志,用來顯示程序進行到哪一步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)機

signal

STATE:

STATE_TYPE:=RESET;

--初始化狀態(tài)機signal

clk_temp

:

std_logic:='0';

--監(jiān)測總線上的數(shù)據(jù)signal

clk1m

:

std_logic;

--分頻后得到的1M時鐘

signal

cp:

std_logic;

--

為時序而產(chǎn)生的1ms時鐘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;

為時序產(chǎn)生1ms時鐘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;

--在一定時序內(nèi)保持復(fù)位狀態(tài)

elsif

<cnt>=500

and

cnt<510>

then

dq<='Z';

--高阻態(tài)再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣,高阻態(tài)可以應(yīng)用在inout端口里面,這樣在inout沒有輸出的時候就弄個高阻態(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存在〔因為檢測到了存在脈沖

LED<='0';

else

LED<='1';

end

if;

end

if;

cnt<=cnt+1;

STATE<=RESET;

elsif

<cnt>=750>

then--初始化時序結(jié)束

cnt<=0;

--計數(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',進入WRITE_LOW狀態(tài)〔即對DS18b20寫低

LED3<='1';

else

STATE<=WRITE_HIGH;

--如果當(dāng)前write_temp第WRITE_BYTE_CNT上是'1',進入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=>

--進入寫0時序,參看前面

LED3<='1';

case

WRITE_LOW_CNT

iswhen

0=>

dq<='0';

if

<cnt=70>

then--等待時序

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=>

--進入寫1時序,參看前面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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論