版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 硬件部件設(shè)計與調(diào)試</b></p><p><b> 實踐報告</b></p><p> 題目:基本內(nèi)容―電子時鐘的設(shè)計</p><p> 擴展內(nèi)容-交通燈 </p><p> 班級: </p><p> 姓名:
2、 </p><p> 學號: </p><p> 指導(dǎo)教師: </p><p><b> 2012年5月</b></p><p> 硬件部件設(shè)計與調(diào)試實踐評分表</p><p> 注:介于A和C之間為B級,低于C為D級和E級。按
3、各項指標打分后,總分在90~100為優(yōu),80~89為良,70~79為中,60~69為及格,60分以下為不及格。</p><p> 交通燈指揮系統(tǒng)課程設(shè)計</p><p><b> 需求分析</b></p><p> 紅綠交通燈是我們?nèi)粘I罱?jīng)常見到也是必不可少的,隨著城市社會經(jīng)濟的發(fā)展,城市道路交通供給和需求的矛盾日益突出,并引發(fā)很多交通
4、問題。當今,紅綠燈安裝在各個交通路口上,已經(jīng)成為疏導(dǎo)交通車輛最常見和最有效的手段。1968年,聯(lián)合國《道路交通和道路標志信號協(xié)定》對各種信號燈的含義作了規(guī)定。綠燈時通行信號,面對綠燈的車輛可以直行、左轉(zhuǎn)彎和右轉(zhuǎn)彎,除非另一種標志禁止某一種轉(zhuǎn)向。左右轉(zhuǎn)彎車輛都必須讓合法地正在路口內(nèi)行駛的車輛和過人行橫道的行人優(yōu)先通行。面對黃燈的車輛不能越過停車線,但車輛已十分接近停車線而不能安全停車時可以進入交叉路口。我們設(shè)計的交通燈就是依據(jù)上述思路控制
5、十字路口南北東西四個方向車輛通行的。</p><p><b> 設(shè)計思路</b></p><p> 通過可編程并行接口芯片8255A和可編程定時器/計數(shù)器芯片8253以及中斷控制器8279實現(xiàn)十字路口交通燈的模擬控制,進一步掌握并行接口和定時器/計時器以及數(shù)碼管控制的實際應(yīng)用。</p><p><b> 實驗內(nèi)容</b&g
6、t;</p><p> 編寫一個交通燈控制程序,實現(xiàn)東西路口與南北路口狀態(tài)燈的轉(zhuǎn)換。其中紅燈亮,表示該道路禁止通行;黃燈亮表示該道路上未過停車線的車輛禁止通行,已過停車線的車輛繼續(xù)通行;綠燈表示該道路 允許通行。</p><p><b> 技術(shù)指示</b></p><p> 1、用實驗箱中提供的發(fā)光二極管(紅綠黃各兩支、共六支)作為南北路
7、口(紅綠黃各一支)和東西路口(紅綠黃各一支)的模擬交通燈。</p><p> 2、用可編程并行接口芯片8255A控制模擬交通燈的亮與滅和數(shù)碼管的倒計時顯示。</p><p> 3、用可編程定時器/計數(shù)器芯片8253實現(xiàn)模擬交通燈亮與滅的時間延遲的控制。</p><p> 4、用數(shù)碼管作為模擬交通燈亮與滅的時間延遲控制的倒計時顯示。</p><
8、;p> 5、用匯編語言編程使六個燈按交通燈變化規(guī)律“亮/滅”。交通燈變化要求:</p><p> ?。?)南北燈綠,東西紅燈同時亮30秒,且數(shù)碼管30秒倒計時顯示。</p><p> ?。?)南北黃燈閃爍5秒,同時東西路紅燈繼續(xù)亮,且數(shù)碼管5秒倒計時顯示。</p><p> (3)南北路紅燈、東西路綠燈同時亮30秒,且數(shù)碼管30秒倒計時顯示。</p&
9、gt;<p><b> 實驗原理</b></p><p> 通過8253計數(shù),每1ms刷新一次,CX計數(shù)不為零,計數(shù)值減1,刷新1000次,持續(xù)1秒鐘(其中輸入始終脈沖為1KHZ)。PA7~PA0控制二極管的亮滅,PB7~PB0控制數(shù)碼管的顯示。通過設(shè)置控制字,使8255A的C口高四位輸出,低四位輸入。PC4和PC5對數(shù)碼管進行位控,讓兩位十進制數(shù)同時顯示。在黃燈顯示的時候
10、,通過判斷使黃燈亮時滅,滅時亮,以此設(shè)置黃燈閃爍。</p><p><b> 8255A芯片</b></p><p><b> 引腳功能</b></p><p> RESET:復(fù)位輸入線,當該輸入端處于高電平時,所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成輸入方式。 </p><
11、p> CS:芯片選擇信號線,當這個輸入引腳為低電平時,即/CS=0時,表示芯片被選中,允許8255與CPU進行通訊;/CS=1時,8255無法與CPU做數(shù)據(jù)傳輸. </p><p> RD:讀信號線,當這個輸入引腳為低電平時,即/RD=0且/CS=0時,允許8255通過數(shù)據(jù)總線向CPU發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU從8255讀取信息或數(shù)據(jù)。 </p><p> WR:寫入信號,當
12、這個輸入引腳為低電平時,即/WR=0且/CS=0時,允許CPU將數(shù)據(jù)或控制字寫入8255。 </p><p> D0~D7:三態(tài)雙向數(shù)據(jù)總線,8255與CPU數(shù)據(jù)傳送的通道,當CPU 執(zhí)行輸入輸出指令時,通過它實現(xiàn)8位數(shù)據(jù)的讀/寫操作,控制字和狀態(tài)信息也通過數(shù)據(jù)總線傳送。 </p><p> PA0~PA7:端口A輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入鎖存器
13、。 </p><p> PB0~PB7:端口B輸入輸出線,一個8位的I/O鎖存器, 一個8位的輸入輸出緩沖器。 </p><p> PC0~PC7:端口C輸入輸出線,一個8位的數(shù)據(jù)輸出鎖存器/緩沖器, 一個8位的數(shù)據(jù)輸入緩沖器。端口C可以通過工作方式設(shè)定而分成2個4位的端口, 每個4位的端口包含一個4位的鎖存器,分別與端口A和端口B配合使用,可作為控制信號輸出或狀態(tài)信號輸入端口。
14、9; </p><p> A0,A1:地址選擇線,用來選擇8255的PA口,PB口,PC口和控制寄存器. </p><p> 當A0=0,A1=0時,PA口被選擇; </p><p> 當A0=0,A1=1時,PB口被選擇; </p><p> 當A0=1,A1=0時,PC口被選擇; </p><p> 當A
15、0=1.A1=1時,控制寄存器被選擇.</p><p><b> 工作原理</b></p><p> 8253具有3個獨立的計數(shù)通道,采用減1計數(shù)方式。在門控信號有效時,每輸入1個計數(shù)脈沖,通道作1次計數(shù)操作。當計數(shù)脈沖是已知周期的時鐘信號時,計數(shù)就成為定時。 </p><p><b> 8253內(nèi)部結(jié)構(gòu) </b>&
16、lt;/p><p> 8253芯片有24條引腳,封裝在雙列直插式陶瓷管殼內(nèi)。 </p><p> 1.數(shù)據(jù)總線緩沖器 </p><p> 數(shù)據(jù)總線緩沖器與系統(tǒng)總線連接,8位雙向,與CPU交換信息的通道。這是8253與CPU之間的數(shù)據(jù)接口,它由8位雙向三態(tài)緩沖存儲器構(gòu)成,是CPU與8253之間交換信息的必經(jīng)之路。 </p><p><b
17、> 2.讀/寫控制 </b></p><p> 讀/寫控制分別連接系統(tǒng)的IOR#和IOW#, 由CPU控制著訪問8253的內(nèi)部通道。接收CPU送入的讀/寫控制信號, 并完成對芯片內(nèi)部各功能部件的控制功能, 因此, 它實際上是8253芯片內(nèi)部的控制器。A1A0:端口選擇信號,由CPU輸入。8253內(nèi)部有3個獨立的通道和一個控制字寄存器, 它們構(gòu)成8253芯片的4個端口,CPU可對3個通道進行讀
18、/寫操作3對控制字寄存器進行寫操作。 這4個端口地址由最低2位地址碼A1A0來選擇。如表9.3.1所示。 </p><p><b> 3.通道選擇 </b></p><p> (1) CS#——片選信號,由CPU輸入,低電平有效,通常由端口地址的高位地址譯碼形成。 </p><p> (2) RD#、WR#——讀/寫控制命令,由CPU輸入
19、, 低電平有效。RD#效時,CPU讀取由A1A0所選定的通道內(nèi)計數(shù)器的內(nèi)容。WR#有效時,CPU將計數(shù)值寫入各個通道的計數(shù)器中, 或者是將方式控制字寫入控制字寄存器中。CPU對8253的讀/寫操作如表9.3.2所示。 </p><p> 4.計數(shù)通道0~2 </p><p> 每個計數(shù)通道內(nèi)含1個16位的初值寄存器、減1計數(shù)器和1個16位的(輸出)鎖存器。8253內(nèi)部包含3個功能完全相
20、同的通道,每個通道內(nèi)部設(shè)有一個16位計數(shù)器,可進行二進制或十進制(BCD碼)計數(shù)。采用二進制計數(shù)時, 最大計數(shù)值是FFFFH, 采用BCD碼計數(shù)時。 最大計數(shù)值是9999。與此計數(shù)器相對應(yīng), 每個通道內(nèi)設(shè)有一個16位計數(shù)值鎖存器。必要時可用來鎖存計數(shù)值。 </p><p> 當某通道用作計數(shù)器時,應(yīng)將要求計數(shù)的次數(shù)預(yù)置到該通道的計數(shù)器中、被計數(shù)的事件應(yīng)以脈沖方式從CLK端輸入, 每輸入一個計數(shù)脈沖,計數(shù)器內(nèi)容減
21、“1”,待計數(shù)值計到“0”。 OUT端將有輸出。表示計數(shù)次數(shù)到。當某個通道用作定時器時。 由CLK輸入一定頻率的時鐘脈沖。根據(jù)要求定時的時間長短確定所需的計數(shù)值。并預(yù)置到計數(shù)器中,每輸入一個時鐘脈沖,計數(shù)器內(nèi)容減“1”, 待計數(shù)值計到“0”。OUT將有輸出,表示定時時間到。允許從CLK輸入的時鐘頻在1~2MHz范圍內(nèi)。因此,任一通道作計數(shù)器用或作定時器用,其內(nèi)部操作完全相同,區(qū)別僅在于前者是由計數(shù)脈沖進行減“1”計數(shù)。 而后者是內(nèi)時鐘脈
22、沖進行減“1”計數(shù)。作計數(shù)器時, 要求計數(shù)的次數(shù)可直接作為計數(shù)器的初值預(yù)置到減“1”計數(shù)器中。作定時器時, 計數(shù)器的初值即定時系數(shù)應(yīng)根據(jù)要求定時的時間進行如下運算才能得到: </p><p> 定時系數(shù)=需要定時的時間/時鐘脈沖周期 </p><p> ?、僭O(shè)置通道:向方式控制字寄存器端口寫入方式選擇控制字,用于確定要設(shè)置的通道及工作方式; </p><p>
23、②計數(shù)/定時:向通道寫入計數(shù)值,啟動計數(shù)操作; </p><p> ?、圩x取當前的計數(shù)值:向指定通道讀取當前計數(shù)器值時,8253將計數(shù)器值存入鎖存器,從鎖存器向外提供當前的計數(shù)器值,計數(shù)器則繼續(xù)作計數(shù)操作。 </p><p> ?、苡嫈?shù)到:當計數(shù)器減1為0時,通過引腳OUTi向外輸出“到”的脈沖信號。 </p><p> 計數(shù)初值輸入存放在初值寄存器中,計數(shù)開始或
24、重裝入時被復(fù)制到計數(shù)器中。 </p><p> 鎖存器在非鎖存狀態(tài),其值隨計數(shù)器的變化而變化;一旦鎖存了計數(shù)器的當前值,直到鎖存器值被讀取后才能解除鎖存狀態(tài)。 </p><p> 5.方式選擇控制字 </p><p> 8253的通道工作方式 </p><p> 8253中各通道可有6種可供選擇的工作方式, 以完成定時、計數(shù)或脈沖發(fā)生
25、器等多種功能。8253的各種工作方式如下: </p><p> 1.方式0:計數(shù)結(jié)束則中斷 </p><p> 工作方式0被稱為計數(shù)結(jié)束中斷方式,它的定時波形如圖9.3.4所示。當任一通道被定義為工作方式0時, OUTi輸出為低電平;若門控信號GATE為高電平,當CPU利用輸出指令向該通道寫入計數(shù)值WR#有效時,OUTi仍保持低電平,然后計數(shù)器開始減“1”計數(shù), 直到計數(shù)值為“0”,此
26、刻OUTi將輸出由低電平向高電平跳變,可用它向CPU發(fā)出中斷請求,OUTi端輸出的高電平一直維持到下次再寫入計數(shù)值為止。 </p><p> 在工作方式0情況下,門控信號GATE用來控制減“1”計數(shù)操作是否進行。當GATE=1時,允許減“1”計數(shù);GATE=0時,禁止減“1”計數(shù); 計數(shù)值將保持GATE有效時的數(shù)值不變, 待GATE重新有效后,減“1”計數(shù)繼續(xù)進行。 </p><p>
27、 顯然,利用工作方式0既可完成計數(shù)功能, 也可完成定時功能。當用作計數(shù)器時,應(yīng)將要求計數(shù)的次數(shù)預(yù)置到計數(shù)器中,將要求計數(shù)的事件以脈沖方式從CLKi端輸入, 由它對計數(shù)器進行減“1”計數(shù),直到計數(shù)值為0,此刻OUTi輸出正跳變, 表示計數(shù)次數(shù)到。當用作定時器時,應(yīng)把根據(jù)要求定時的時間和CLKi的周期計算出定時系數(shù),預(yù)置到計數(shù)器中。從CLKi,輸入的應(yīng)是一定頻率的時鐘脈沖,由它對計數(shù)器進行減“1”計數(shù), 定時時間從寫入計數(shù)值開始,到計數(shù)值計
28、到“0”為止,這時OUTi輸出正跳變,表示定時時間到。 </p><p> 有一點需要說明,任一通道工作在方式0情況下, 計數(shù)器初值一次有效,經(jīng)過一次計數(shù)或定時后如果需要繼續(xù)完成計數(shù)或定時功能,必須重新寫入計數(shù)器的初值。 </p><p> 2.方式1:單脈沖發(fā)生器 </p><p> 工作方式1被稱作可編程單脈沖發(fā)生器,其定義波形如圖9.3.5。進入這種工作
29、方式, CPU裝入計數(shù)值n后OUTi輸出高電平, 不管此時的GATE輸入是高電平還是低電平, 都不開始減“1”計數(shù),必須等到GATE由低電平向高電平跳變形成一個上升沿后,計數(shù)過程才會開始。與此同時,OUTi輸出由高電平向低電平跳變,形成了輸出單脈沖的前沿,待計數(shù)值計到“0”, OUTi輸出由低電平向高電平跳變,形成輸出單脈沖的后沿, 因此,由方式l所能輸出單脈沖的寬度為CLKi周期的n倍。 </p><p>
30、如果在減“1”計數(shù)過程中, GATE由高電平跳變?yōu)榈碗姾酰@并不影響計數(shù)過程,仍繼續(xù)計數(shù);但若重新遇到GATE的上升沿,則從初值開始重新計數(shù), 其效果會使輸出的單脈沖加寬,如教材圖9-22(b)中的第2個單脈沖。 </p><p> 這種工作方式下,計數(shù)值也是一次有效,每輸入一次計數(shù)值,只產(chǎn)生一個負極性單脈沖。 </p><p> 3.方式2:速率波發(fā)生器 </p>&l
31、t;p> 工作方式2被稱作速率波發(fā)生器,其定時波形如圖9.3.6所示。進入這種工作方式, OUTi輸出高電平,裝入計數(shù)值n后如果GATE為高電平,則立即開始計數(shù),OUTi保持為高電平不變; 待計數(shù)值減到“1”和“0”之間, OUTi將輸出寬度為一個CLKi周期的負脈沖,計數(shù)值為“0”時,自動重新裝入計數(shù)初值n,實現(xiàn)循環(huán)計數(shù),OUTi將輸出一定頻率的負脈沖序列, 其脈沖寬度固定為一個CLKi周期, 重復(fù)周期為CLKi周期的n倍。
32、</p><p> 如果在減“1”計數(shù)過程中,GATE變?yōu)闊o效(輸入0電平),則暫停減“1”計數(shù),待GATE恢復(fù)有效后,從初值n開始重新計數(shù)。這樣會改變輸出脈沖的速率。 </p><p> 如果在操作過程中要求改變輸出脈沖的速率,CPU可在任何時候,重新寫人新的計數(shù)值, 它不會影響正在進行的減“1”計數(shù)過程,而是從下一個計數(shù)操作用期開始按新的計數(shù)值改變輸出脈沖的速率。 </p&g
33、t;<p> 4.方式3:方波發(fā)生器 </p><p> 工作方式3被稱作方波發(fā)生器,其定時波型如圖9.3.7所示。任一通道工作在方式3, 只在計數(shù)值n為偶數(shù),則可輸出重復(fù)周期為n、占空比為1:1的方波。 </p><p> 進入工作方式3,OUTi輸出低電平, 裝入計數(shù)值后,OUTi立即跳變?yōu)楦唠娖?。如果當GATE為高電平, 則立即開始減“1”計數(shù),OUTi保持為高電
34、平,若n為偶數(shù),則當計數(shù)值減到n/2時,OUTi跳變?yōu)榈碗娖剑恢北3值接嫈?shù)值為“0”,系統(tǒng)才自動重新置入計數(shù)值n,實現(xiàn)循環(huán)計數(shù)。這時OUTi端輸出的周期為n×CLKi周期,占空比為1:1的方波序列; 若n為奇數(shù), 則OUTi端輸出周期為n×CLKi周期,占空比為((n+1)/2)/((n-1)/2)的近似方波序列。 </p><p> 如果在操作過程中, GATE變?yōu)闊o效,則暫停減“1”計
35、數(shù)過程,直到GATE再次有效,重新從初值n開始減“l(fā)”計數(shù)。 </p><p> 如果要求改變輸出方波的速率, 則CPU可在任何時候重新裝入新的計數(shù)初值n,并從下一個計數(shù)操作周期開始改變輸出方波的速率。 </p><p> 5.方式4:軟件觸發(fā)方式計數(shù) </p><p> 工作方式4被稱作軟件觸發(fā)方式,其定時波形如圖9.3.8所示。進入工作方式4,OUTi輸出
36、高電平。 裝入計數(shù)值n后, 如果GATE為高電平,則立即開始減“1”計數(shù),直到計數(shù)值減到“0”為止,OUTi輸出寬度為一個CLKi周期的負脈沖。由軟件裝入的計數(shù)值只有一次有效,如果要繼續(xù)操作, 必須重新置入計數(shù)初值n。如果在操作的過程中,GATE變?yōu)闊o效,則停止減“1”計數(shù), 到GATE再次有效時,重新從初值開始減“1”計數(shù)。 </p><p> 顯然,利用這種工作方式可以完成定時功能,定時時間從裝入計數(shù)值n開
37、始,則OUTi輸出負脈沖(表示定時時間到),其定時時間=n×CLK周期。 這種工作方式也可完成計數(shù)功能,它要求計數(shù)的事件以脈沖的方式從CLKi輸入,將計數(shù)次數(shù)作為計數(shù)初值裝入后,由CLKi端輸入的計數(shù)脈沖進行減“1”計數(shù),直到計數(shù)值為“0”,由OUTt端輸出負脈沖(表示計數(shù)次數(shù)到)。 當然也可利用OUTj向CFU發(fā)出中斷請求。 因此工作方式4與工作方式0很相似,只是方式0在OUTi端輸出正階躍信號、方式4在OUTi端輸出負脈沖
38、信號。 </p><p> 6.方式5:硬件觸發(fā)方式計數(shù) </p><p> 工作方式5被稱為硬件觸發(fā)方式,其定時波形如圖9.3.9所示。進入工作方式5, OUTi輸出高電平, 硬件觸發(fā)信號由GATE端引入。 因此,開始時GATE應(yīng)輸入為0, 裝入計數(shù)初值n后,減“1”計數(shù)并不工作,一定要等到硬件觸發(fā)信號由GATE端引入一個正階躍信號,減“1”計數(shù)才會開始,待計數(shù)值計到“0”, OUT
39、i將輸出負脈沖,其寬度固定為一個CLKi周期,表示定時時間到或計數(shù)次數(shù)到。 </p><p> 這種工作方式下,當計數(shù)值計到“0”后, 系統(tǒng)將自動重新裝入計數(shù)值n,但并不開始計數(shù), 一定要等到由GATE端引入的正跳沿,才會開始進行減“1”計數(shù), 因此這是一種完全由GATE端引入的觸發(fā)信號控制下的計數(shù)或定時功能。如果由CLKi輸入的是一定頻率的時鐘脈沖,那么可完成定時功能,定時時間從GATE上升沿開始,到OUTi
40、端輸出負脈沖結(jié)束。如果從CLKi端輸入的是要求計數(shù)的事件,則可完成計數(shù)功能,計數(shù)過程從GATE上升沿開始,到OUTi輸出負脈沖結(jié)束。GATE可由外部電路或控制現(xiàn)場產(chǎn)生,故硬件觸發(fā)方式由此而得名。 </p><p> 如果需要改變計數(shù)初值, CPU可在任何時候用輸出指令裝入新的計數(shù)初值m,它將不影響正在進行的操作過程, 而是到下一個計數(shù)操作周期才會按新的計數(shù)值進行操作。 </p><p>
41、 從上述各工作方式可看出,GATE作為各通道的門控信號,對于各種不同的工作方式,它所起的作用各不相同。在8253的應(yīng)用中,必須正確使用GATE信號,才能保證各通道的正常操作。 </p><p> 7.讀取計數(shù)器的當前值 </p><p> ⑴直接讀計數(shù)器:輸出鎖存器在非鎖存狀態(tài)會跟隨計數(shù)器計數(shù)的變化而變化,直接讀計數(shù)器是從鎖存器得到計數(shù)器的當前值。但由于計數(shù)器處于工作狀態(tài),讀出值不一
42、定能穩(wěn)定。 </p><p> ?、葡孺i存再讀?。孩偻ㄟ^方式選擇控制字對指定通道(SC1、SC0)的計數(shù)值鎖入鎖存器(RL1RL0=00), 鎖存器一旦鎖存了當前計數(shù)值,就不再隨計數(shù)器變化直到被讀取。②讀計數(shù)器通道(有鎖存器)。</p><p><b> 分析與測試</b></p><p> PORT_A8255 EQU 200
43、H ;8255A端口地址</p><p> PORT_B8255 EQU 201H ;8255B端口地址</p><p> PORT_C8255 EQU 202H ;8255C端口地址</p><p> PORT_CS8255 EQU 203H ;8255控制端口地址</p
44、><p> ControlMode8255 EQU 10001001b ;A口方式0,輸出,B口方式0,輸出,C口低4位輸入,高4位輸入</p><p> PORT_A8253 EQU 208H ;8253計時器0端口地址</p><p> PORT_B8253 EQU 209H ;8253計時器1端口地址<
45、;/p><p> PORT_C8253 EQU 20AH ;8253計時器2端口地址</p><p> PORT_CS8253 EQU 20BH ;8253計時器控制端口地址</p><p> Clock0Mode EQU 00110100b ;計時器0的工作模式,0通道,先讀寫低字節(jié)后讀寫高字節(jié),方式2
46、,2進制計數(shù)</p><p> Clock0Count EQU 62500 ;計時器0的計數(shù)值</p><p> Clock1Mode EQU 01110000b ;計時器1的工作模式,1通道,先讀寫低字節(jié)后讀寫高字節(jié),方式0,2進制計數(shù)</p><p> Clock1Count EQU 16 ;計時
47、器1的計數(shù)值</p><p> Data_K EQU 10 ;10進制</p><p> Z8279 equ 212h ;8279命令字地址</p><p> D8279 equ 210h ;8279數(shù)據(jù)端口地址</p><p>
48、LEDMOD equ 00h ;左邊輸入,8位顯示,外部譯碼8位</p><p> LEDFEQ equ 38h ;掃描頻率</p><p> Clock1End equ 04h ;截獲8255C口第三位輸入信息用于檢測CLOCK1是否計時完畢</p><p> c
49、ode segment</p><p><b> ;主函數(shù)</b></p><p> main proc far</p><p> assume cs:code,ds:code</p><p><b> start:</b></p><p><b> pu
50、sh cs</b></p><p><b> pop ds</b></p><p> call Init8255 ;初始化8255</p><p> mov cx,0 ;清零</p><p><b> MainLoop:</b><
51、/p><p><b> push cx</b></p><p> lea bx,Light ;將light的值賦給bx</p><p> add bx,cx</p><p> mov al,[bx]</p><p> mov ah,00h</p><
52、;p> mov dx,PORT_B8255</p><p> out dx,al</p><p> LittleLoop:</p><p> call InitClock0 ;初始化計時器0</p><p> call InitClock1 ;初始化計時器1</p><p>
53、 call CheckClock0Over ;檢測定時器1是否定時1秒結(jié)束,從而截獲PC2的信息</p><p> lea bx,Time </p><p><b> pop cx</b></p><p> cmp cx,00h</p><p><b> je inc0&
54、lt;/b></p><p> cmp cx,01h</p><p> je Inc1 </p><p> cmp cx,02h</p><p><b> je inc0</b></p><p> cmp cx,03h</p><p><
55、b> je Inc1</b></p><p> jmp OtherDeal</p><p><b> inc0:</b></p><p> jmp MainDeal</p><p><b> Inc1:</b></p><p><b&
56、gt; add bx,1</b></p><p><b> MainDeal:</b></p><p><b> push cx</b></p><p> mov al,[bx]</p><p> mov ah,00h</p><p><b&g
57、t; push bx</b></p><p><b> push ax</b></p><p> call Display ;8279的顯示</p><p><b> pop ax</b></p><p> dec ax
58、 ;ax=ax-1</p><p><b> pop bx</b></p><p> mov [bx],al</p><p> cmp ax,00h</p><p> jl ResetData ;比較后小于這個數(shù)就跳轉(zhuǎn)到這里</p><p> jm
59、p LittleLoop</p><p> ResetData: ;選擇亮不同的燈,0-3分別表示light的四種類型</p><p><b> pop cx</b></p><p><b> inc cx</b></p><p> cmp cx
60、,00h</p><p> je ResetData2</p><p> cmp cx,01h</p><p> je ResetData1 </p><p> cmp cx,02h</p><p> je ResetData2</p><p> cmp cx,03
61、h</p><p> je ResetData1</p><p> jmp ResetData2</p><p> ResetData1:</p><p><b> mov ax,5</b></p><p> lea bx,Time </p><p>&
62、lt;b> add bx,1</b></p><p> jmp ResetData3 </p><p> ResetData2:</p><p><b> cmp cx,3</b></p><p> ja OtherDeal</p><p> mov
63、 ax,30</p><p> lea bx,Time </p><p> ResetData3:</p><p><b> push cx</b></p><p> mov [bx],al</p><p><b> pop cx</b></p>
64、<p> jmp MainLoop </p><p> OtherDeal:</p><p><b> mov cx,0</b></p><p> lea bx,Time</p><p> mov ax,30</p><p> mov [bx],al</
65、p><p><b> add bx,1</b></p><p><b> mov ax,5</b></p><p> mov [bx],al</p><p> jmp MainLoop</p><p><b> main endp</b>&
66、lt;/p><p> ;檢測定時器1是否定時1秒結(jié)束</p><p> CheckClock0Over proc near</p><p> mov dx,PORT_C8255 ;8255C口地址</p><p> Compare: </p><p><b> in al,dx</
67、b></p><p> and al,Clock1End ;檢測計數(shù)器1是否工作結(jié)束(通過與運算截獲第三位)</p><p> cmp al,00h ;比較該位是否為低電平</p><p> je Compare</p><p><b> ret</b></p>&l
68、t;p> CheckClock0Over endp</p><p> ;這個函數(shù)負責將提取出的變量a的值輸出到LED上,最大8位</p><p> Display proc near </p><p><b> ;初始化8279</b></p><p> mov di,ax ;
69、保存頻率至BX</p><p> mov al,LEDMOD ;左邊輸入,八位顯示,外部譯碼八位顯示</p><p> mov dx,Z8279</p><p><b> out dx,al</b></p><p> mov al,LEDFEQ ;掃描頻率</p>
70、<p><b> out dx,al</b></p><p> ;向LED輸出數(shù)據(jù),顯示結(jié)果</p><p><b> mov cx,2</b></p><p><b> First1:</b></p><p> mov ax,di
71、 ;保存頻率至AX</p><p> mov dx,00h</p><p> mov si,Data_K</p><p><b> div si</b></p><p> mov di,ax ;將商保存至BX</p><p> mov ax,dx
72、 ;將余數(shù)保存至AX</p><p> lea bx,LED</p><p><b> add ax,bx</b></p><p><b> mov bx,ax</b></p><p> mov ax,[bx]</p><p> OutPut1:
73、 </p><p> mov dx,D8279 ;8279數(shù)據(jù)端口</p><p><b> out dx,al</b></p><p><b> dec cx</b></p><p><b> cmp cx,0</b></p>&l
74、t;p> ja Continu1</p><p><b> jmp Next1</b></p><p><b> Continu1:</b></p><p> jmp First1</p><p><b> Next1:</b></p><
75、p><b> mov cx,6</b></p><p> mov ax,00h</p><p> mov dx,D8279</p><p><b> Cycle:</b></p><p><b> out dx,al</b></p><p&g
76、t; loop Cycle</p><p><b> ret </b></p><p> Display endp</p><p><b> ;初始化8255</b></p><p> Init8255 proc near</p><p> mov dx,PORT
77、_CS8255 ;8255控制口地址</p><p> mov al,ControlMode8255 ;8255方式字</p><p><b> out dx,al</b></p><p><b> ret</b></p><p> Init8255 endp</p>
78、<p><b> ;初始化計時器0</b></p><p> InitClock0 proc near</p><p> mov dx,PORT_CS8253 ;8253控制口地址</p><p> mov al,Clock0Mode ;計時器0工作方式字</p><p>
79、<b> out dx,al</b></p><p> mov dx,PORT_A8253 ;8253通道0地址</p><p> mov ax,Clock0Count ;計時器0計數(shù)值</p><p><b> out dx,al</b></p><p><
80、b> mov al,ah</b></p><p><b> out dx,al</b></p><p><b> ret</b></p><p> InitClock0 endp</p><p><b> ;初始化計時器1</b></p>
81、<p> InitClock1 proc near</p><p> mov dx,PORT_CS8253 ;8253控制口地址</p><p> mov al,Clock1Mode ;計時器0工作方式字</p><p><b> out dx,al</b></p><p>
82、; mov dx,PORT_B8253 ;8253通道0地址</p><p> mov ax,Clock1Count ;計時器0計數(shù)值</p><p><b> out dx,al</b></p><p><b> mov al,ah</b></p><p><
83、;b> out dx,al</b></p><p><b> ret</b></p><p> InitClock1 endp</p><p> LED db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h ;0~9 LED數(shù)碼管顯示</p><p> T
84、ime db 30,5 ;紅、綠、黃燈的倒計時時間</p><p> Light db 11101010b ;東西紅燈,南北綠燈,南北可人行</p><p> db 10110110b ;東西黃燈,南北黃燈,南北可人行</p><p> db 01011101b ;
85、東西綠燈,南北紅燈,東西可人行</p><p> db 00110111b ;東西黃燈,南北黃燈,東西可人行</p><p><b> code ends</b></p><p><b> end</b></p><p><b> 收獲體會</b>&
86、lt;/p><p> 第一次做課程設(shè)計,剛拿到題目的時候感覺很茫然,不知從何處下手。通過第一堂課老師細致的講解以及與隊友查閱資料進行討論之后,了解到設(shè)計的大概思路。在實驗進行的過程中,遇到許多困難,很多次測試串口不通過,很多次編譯之后沒有反應(yīng)。在查閱許多資料和咨詢老師之后,終于完成了此次課程設(shè)計。</p><p><b> 參考文獻 </b></p>&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬件課程設(shè)計---交通燈指揮系統(tǒng)
- 硬件課程設(shè)計——交通燈指揮系統(tǒng)設(shè)計
- 硬件設(shè)計課程設(shè)計---復(fù)雜交通燈指揮系統(tǒng)
- 交通燈課程設(shè)計--交通燈控制系統(tǒng)設(shè)計
- eda交通燈課程設(shè)計---交通燈控制系統(tǒng)
- 交通燈課程設(shè)計
- 課程設(shè)計交通燈
- 課程設(shè)計—交通燈
- 交通燈課程設(shè)計
- eda交通燈課程設(shè)計---交通燈控制系統(tǒng)的設(shè)計
- 交通燈課程設(shè)計
- 交通燈課程設(shè)計
- 交通燈課程設(shè)計
- 交通燈設(shè)計數(shù)電交通燈課程設(shè)計數(shù)電交通燈設(shè)計
- 交通燈課程設(shè)計--基于fpga的交通燈設(shè)計
- 交通燈課程設(shè)計--plc實現(xiàn)交通燈控制設(shè)計
- 模擬交通燈課程設(shè)計--模擬交通燈的設(shè)計
- 交通燈課程設(shè)計--交通燈控制器
- eda交通燈課程設(shè)計--cpld實現(xiàn)交通燈控制系統(tǒng)
- 交通燈課程設(shè)計---交通控制系統(tǒng)設(shè)計
評論
0/150
提交評論