微機(jī)原理課程設(shè)計(jì)--搶答計(jì)時(shí)器_第1頁(yè)
已閱讀1頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)》</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  目 錄</p><p>  一.課程設(shè)計(jì)目的與要求…………………………………………………………………………3</p><p>  二.方案論證與原理設(shè)計(jì)……………………………………………………

2、……………………3</p><p>  三.詳細(xì)設(shè)計(jì)………………………………………………………………………………………4</p><p>  四.方案實(shí)現(xiàn)與測(cè)試………………………………………………………………………………6</p><p>  五.分析與總結(jié)……………………………………………………………………………………7</p><p>&

3、lt;b>  1、基本要求</b></p><p>  設(shè)計(jì)一個(gè)用于智力競(jìng)賽的搶答計(jì)時(shí)器,同時(shí)能測(cè)試人的反應(yīng)(響應(yīng))時(shí)間。按啟動(dòng)鈕,測(cè)試開(kāi)始,2個(gè)八段碼倒計(jì)時(shí)開(kāi)始(如從10秒或20秒倒計(jì)時(shí)),一旦看到燈亮,參賽雙方(或三方)分別按不同的搶答按鈕參與搶答。一旦其中一位按下按鈕,相應(yīng)的顯示燈(LED)亮并響“嘟”的一聲,此時(shí)若其它按鈕按下均無(wú)效。若一直到計(jì)數(shù)到零,無(wú)一人按下按鈕,則搶答結(jié)束(以后再按

4、搶答鈕無(wú)效)。立即按測(cè)試鈕,8×8點(diǎn)陣顯示反應(yīng)時(shí)間xx.xx秒(8×8點(diǎn)陣用紅色代表秒,綠色代表0.01秒,交替顯示)。要求:</p><p> ?。?)編制1個(gè)隨機(jī)數(shù)產(chǎn)生子程序,由隨機(jī)數(shù)決定從按啟動(dòng)鈕到對(duì)應(yīng)LED亮的時(shí)間(如在3秒~15秒之間內(nèi)任意變動(dòng)),使被測(cè)試者對(duì)LED亮的時(shí)間無(wú)法預(yù)見(jiàn),以確保測(cè)試結(jié)果的可信;</p><p>  (2)必須在見(jiàn)到LED亮后按測(cè)試鈕

5、才有效,即一直按著按鈕或提前按下按鈕無(wú)效;</p><p> ?。?)反應(yīng)時(shí)間顯示xx.xx秒,準(zhǔn)確到百分之一秒。</p><p><b>  2、設(shè)計(jì)思路</b></p><p>  將系統(tǒng)分成3個(gè)大的模塊:倒計(jì)時(shí)模塊,計(jì)時(shí)模塊,顯示模塊。</p><p>  1)倒計(jì)時(shí)模塊:通過(guò)一個(gè)子程序段獲得隨機(jī)數(shù),并用這個(gè)隨機(jī)數(shù)

6、倒計(jì)時(shí);</p><p>  2)計(jì)時(shí)模塊:倒計(jì)時(shí)結(jié)束時(shí)燈亮,開(kāi)始計(jì)數(shù),當(dāng)有人按下鍵并正確時(shí),鎖存所用時(shí)間;</p><p>  3)顯示模塊:將鎖存的時(shí)間用八段碼顯示出來(lái)。</p><p><b>  課程設(shè)計(jì)目的與要求</b></p><p><b>  1、課程設(shè)計(jì)目的</b></p&g

7、t;<p>  上學(xué)期在學(xué)習(xí)微機(jī)原理的基礎(chǔ)上,我們一直在實(shí)踐微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)教程這門(mén)實(shí)驗(yàn)課程,從指令與匯編語(yǔ)言基礎(chǔ)開(kāi)始,我們熟悉了調(diào)試工具的使用,匯編語(yǔ)言程序設(shè)計(jì),I/O與存儲(chǔ)器,簡(jiǎn)單輸入輸出,中斷,計(jì)數(shù)/定時(shí)器,以及模數(shù)/數(shù)模轉(zhuǎn)換。平時(shí)的實(shí)驗(yàn)都是對(duì)各個(gè)單元單一功能的驗(yàn)證,并沒(méi)有他們之間的聯(lián)系,最后的綜合課程設(shè)計(jì)將讓我們學(xué)以致用,把學(xué)到的各個(gè)章節(jié)的知識(shí)根據(jù)需要聯(lián)系在一起,并實(shí)現(xiàn)一定的功能。同時(shí)也培養(yǎng)我們遇到問(wèn)題,思考問(wèn)題

8、,解決問(wèn)題的能力?;銥檎?,在實(shí)踐中深化對(duì)所學(xué)內(nèi)容的認(rèn)識(shí)。 </p><p><b>  2、基本要求</b></p><p>  設(shè)計(jì)一個(gè)用于智力競(jìng)賽的搶答計(jì)時(shí)器,同時(shí)能測(cè)試人的反應(yīng)(響應(yīng))時(shí)間。按啟動(dòng)鈕,測(cè)試開(kāi)始,2個(gè)八段碼倒計(jì)時(shí)開(kāi)始(如從10秒或20秒倒計(jì)時(shí)),一旦看到燈亮,參賽雙方(或三方)分別按不同的搶答按</p><p>  鈕參與

9、搶答。一旦其中一位按下按鈕,相應(yīng)的顯示燈(LED)亮并響“嘟”的一聲,此時(shí)若其它按鈕按下</p><p>  均無(wú)效。若一直到計(jì)數(shù)到零,無(wú)一人按下按鈕,則搶答結(jié)束(以后再按搶答鈕無(wú)效)。立即按測(cè)試鈕,8×</p><p>  8點(diǎn)陣顯示反應(yīng)時(shí)間xx.xx秒(8×8點(diǎn)陣用紅色代表秒,綠色代表0.01秒,交替顯示)。要求:</p><p> ?。?)

10、編制1個(gè)隨機(jī)數(shù)產(chǎn)生子程序,由隨機(jī)數(shù)決定從按啟動(dòng)鈕到對(duì)應(yīng)LED亮的時(shí)間(如在3秒~15秒之間內(nèi)任意變動(dòng)),使被測(cè)試者對(duì)LED亮的時(shí)間無(wú)法預(yù)見(jiàn),以確保測(cè)試結(jié)果的可信;</p><p>  (2)必須在見(jiàn)到LED亮后按測(cè)試鈕才有效,即一直按著按鈕或提前按下按鈕無(wú)效;</p><p> ?。?)反應(yīng)時(shí)間顯示xx.xx秒,準(zhǔn)確到百分之一秒。</p><p><b>

11、  3、進(jìn)一步設(shè)計(jì)要求</b></p><p>  修改以上設(shè)計(jì)使進(jìn)一步能測(cè)試人對(duì)不同事物的反應(yīng)(響應(yīng))時(shí)間。如功能為:按啟動(dòng)鈕,測(cè)試開(kāi)始,</p><p>  一旦紅燈亮,立即按紅燈測(cè)試鈕,一旦綠燈亮,立即按綠燈測(cè)試鈕,但黃燈亮為干擾。8×8點(diǎn)陣顯示反應(yīng)</p><p>  時(shí)間xx.xx秒。若按錯(cuò)鈕,則顯示出錯(cuò)并響“嘟”一聲。要求:<

12、/p><p> ?。?)編制2個(gè)隨機(jī)數(shù)產(chǎn)生子程序,1個(gè)決定從按啟動(dòng)鈕到LED 亮的時(shí)間,另一個(gè)決定亮何種顏色燈;</p><p> ?。?)同樣要求在見(jiàn)到LED亮?xí)r按測(cè)試鈕才有效;</p><p> ?。?)在倒計(jì)數(shù)時(shí)附有音樂(lè)伴奏。</p><p>  二.方案論證與原理設(shè)計(jì)</p><p><b>  1、設(shè)計(jì)

13、思路</b></p><p>  將系統(tǒng)分成3個(gè)大的模塊:倒計(jì)時(shí)模塊,計(jì)時(shí)模塊,顯示模塊。</p><p>  1)倒計(jì)時(shí)模塊:通過(guò)一個(gè)子程序段獲得隨機(jī)數(shù),并用這個(gè)隨機(jī)數(shù)倒計(jì)時(shí);</p><p>  2)計(jì)時(shí)模塊:倒計(jì)時(shí)結(jié)束時(shí)燈亮,開(kāi)始計(jì)數(shù),當(dāng)有人按下鍵并正確時(shí),鎖存所用時(shí)間;</p><p>  3)顯示模塊:將鎖存的時(shí)間用八段

14、碼顯示出來(lái)。</p><p><b>  2、進(jìn)一步設(shè)計(jì)</b></p><p>  隨機(jī)數(shù)程序我用讀系統(tǒng)時(shí)鐘的方法,得到隨機(jī)數(shù)后一旦測(cè)試開(kāi)始,通過(guò)loop倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束時(shí),燈亮表示可以開(kāi)始搶答。這里燈亮可以有兩種選擇:紅燈和黃燈,我用隨機(jī)數(shù)末位進(jìn)行選擇,0則紅燈亮,1則綠燈亮。這也變相實(shí)現(xiàn)了進(jìn)一步設(shè)計(jì)要求中兩個(gè)隨機(jī)數(shù)子程序的要求。</p&g

15、t;<p>  燈亮以后我用8253的計(jì)數(shù)器開(kāi)始計(jì)數(shù),當(dāng)有人按下鍵且正確時(shí),計(jì)數(shù)停止,得到一個(gè)計(jì)數(shù)值。對(duì)這個(gè)計(jì)數(shù)值進(jìn)行處理以后可以相應(yīng)的通過(guò)8*8點(diǎn)陣的行選和紅選黃選使時(shí)間在點(diǎn)陣上交替顯示。</p><p>  由于系統(tǒng)板可以提供的時(shí)鐘是1MHZ或2MHZ,這樣計(jì)數(shù)器計(jì)出的數(shù)值再轉(zhuǎn)化比較繁瑣,我選擇用8253的另一個(gè)計(jì)數(shù)器輸入1MHZ的時(shí)鐘,采用方式3產(chǎn)生100HZ的方波,這樣每個(gè)脈

16、沖0.01秒,計(jì)數(shù)得到的值單位為0.01秒,可以直接用來(lái)顯示。</p><p><b>  三.詳細(xì)設(shè)計(jì)</b></p><p><b>  1、硬件連接圖</b></p><p><b>  8255</b></p><p> ?。–LK來(lái)自系統(tǒng)脈沖1MHZ)</

17、p><p><b>  8253</b></p><p>  2、主程序流程圖與顯示子程序流程圖</p><p>  圖一.主程序流程圖 圖二.顯示子程序流程圖</p><p><b>  3、初始定義</b></p>&

18、lt;p>  在程序的數(shù)據(jù)段里定義好8253、8255各需要用到的端口地址,定義點(diǎn)陣的行選和列選地址。</p><p><b>  4、初始化</b></p><p>  首先顯示提示信息,等待測(cè)試開(kāi)始。</p><p>  8253:用到計(jì)數(shù)器1、2,計(jì)數(shù)器1的控制字為01110001B,采用方式0,BCD碼十進(jìn)制計(jì)數(shù),計(jì)數(shù)器2的控

19、制字為10110111B,采用方式3,二進(jìn)制計(jì)數(shù)。計(jì)數(shù)器2初值選擇10000,產(chǎn)生0.01s脈沖,輸出作為計(jì)數(shù)器1的時(shí)鐘信號(hào)。</p><p>  8255:控制字為10000000B,A口B口均做輸出;B口接GATE1,需要開(kāi)始計(jì)數(shù)時(shí)初值設(shè)為01H。</p><p><b>  5、倒計(jì)時(shí)</b></p><p>  通過(guò)讀系統(tǒng)時(shí)鐘得到一

20、個(gè)隨機(jī)數(shù),啟動(dòng)后通過(guò)loop倒計(jì)數(shù),計(jì)完時(shí)燈亮,可以開(kāi)始搶答。這里倒計(jì)數(shù)時(shí)我并沒(méi)有用數(shù)碼管顯示,這樣才更有不可預(yù)見(jiàn)性。</p><p><b>  6、計(jì)反應(yīng)時(shí)間</b></p><p>  倒計(jì)時(shí)結(jié)束后燈亮,此時(shí)PB0輸出高電平,使計(jì)數(shù)器1開(kāi)始工作,當(dāng)有鍵按下且是正確的時(shí)PB0輸出低電平,計(jì)數(shù)器1停止工作。8253計(jì)數(shù)器2產(chǎn)生的0.01s時(shí)鐘使得計(jì)數(shù)器1計(jì)

21、得得時(shí)間是以0.01s為單位,用0減去計(jì)數(shù)停止時(shí)的數(shù)即為從開(kāi)始計(jì)數(shù)到按鍵之間的時(shí)間。分別獲得這個(gè)時(shí)間各位數(shù)字存入不同的變量,就可以在點(diǎn)陣上交替顯示這些變量來(lái)得到反應(yīng)時(shí)間。實(shí)驗(yàn)中數(shù)字顯示形式為xx:xx秒,紅色數(shù)字顯示為秒,黃色顯示為0.01秒,四個(gè)數(shù)字交替顯示就是測(cè)試者的反應(yīng)時(shí)間。</p><p><b>  7、顯示模塊</b></p><p>  

22、8*8點(diǎn)陣上數(shù)字的現(xiàn)實(shí)原理:</p><p>  字形0~9與段碼有對(duì)應(yīng)關(guān)系,例如數(shù)字5:8fh,89h,89h,0f9h,將數(shù)字0~9的段碼依次放在變量numx中,顯示方法:行選地址-2A0H,紅選地址-2A8H,黃選地址-2B0H,要顯示某一個(gè)數(shù)字,對(duì)應(yīng)到位選信號(hào)00h,04h,08h,0ch,10h,14h,18h,1ch,20h,24h中的一個(gè),映射到段碼變量中就是所要顯示數(shù)字的段碼,依次

23、掃描顯示。</p><p>  顯示模塊的中心思想就是掃描,利用人眼的視覺(jué)暫留,看到4列LED燈都亮,顯示相應(yīng)的信息。</p><p>  四. 方案實(shí)現(xiàn)與測(cè)試</p><p>  現(xiàn)在提交的程序與驗(yàn)收時(shí)的有所不同,驗(yàn)收時(shí)并沒(méi)有實(shí)現(xiàn)全部功能,如反應(yīng)時(shí)間的顯示是通過(guò)中斷顯示在屏幕上,算是變相的實(shí)現(xiàn)。此后我又完善了一些功能,如點(diǎn)陣顯示,隨機(jī)亮紅燈或綠燈。基本完成了實(shí)

24、驗(yàn)要求。</p><p>  實(shí)驗(yàn)現(xiàn)象:開(kāi)始時(shí)若按“q”,則退出測(cè)試;若按其他鍵,重新顯示提示信息,重新開(kāi)始;若按“1”,測(cè)試開(kāi)始,等待,當(dāng)有燈亮?xí)r,如為紅燈按“2”,為綠燈按“3”,如果按鍵準(zhǔn)確,點(diǎn)陣顯示時(shí)間,如果按錯(cuò),屏幕顯示“wrong!”,“Continue? (Y/N)”。</p><p>  程序編譯無(wú)誤后連接實(shí)驗(yàn)箱進(jìn)行調(diào)試,調(diào)試時(shí)首先分別單獨(dú)連接點(diǎn)陣,8255,8253進(jìn)行簡(jiǎn)

25、單功能的驗(yàn)證,驗(yàn)證無(wú)誤保證硬件不會(huì)影響到方案的實(shí)現(xiàn)。對(duì)顯示模塊的調(diào)節(jié)花了比較多的精力,剛開(kāi)始點(diǎn)陣不顯示,但硬件驗(yàn)證的時(shí)候點(diǎn)陣是沒(méi)問(wèn)題的,所以我先改為屏幕顯示,通過(guò)中斷使在運(yùn)行到某一些關(guān)鍵步驟的時(shí)候輸出一定的信息,功能驗(yàn)證無(wú)誤后再連接點(diǎn)陣。其次是delay環(huán)節(jié)的時(shí)間,因?yàn)閿?shù)字的顯示是通過(guò)掃描完成的,所以delay時(shí)間不能太長(zhǎng)也不能太短,通過(guò)不斷的調(diào)試終于得到了合適的delay值。</p><p><b>

26、  五.分析與總結(jié)</b></p><p>  通過(guò)這四周的課程設(shè)計(jì),我學(xué)到了不少也發(fā)現(xiàn)不少問(wèn)題。很大的一個(gè)問(wèn)題是我沒(méi)有很好的利用TD等調(diào)試工具,造成的后果就是不能及時(shí)發(fā)現(xiàn)問(wèn)題出在哪里,所以效率相對(duì)較低,如果以后還有類似的課題,我一定要好好利用這些工具。另外隔了一個(gè)假期,對(duì)有一些基本知識(shí)和功能有一些陌生了,所以熟悉這些也花了不少時(shí)間,這是以后需要改進(jìn)的地方。</p><p> 

27、 我從不斷想方案,否定一個(gè)再試一個(gè),到完善程序,到不斷調(diào)試出結(jié)果,最后能完成基本功能,我還是比較欣慰的。這和許多實(shí)踐類課程一樣,重在實(shí)踐,當(dāng)你寫(xiě)完程序覺(jué)得邏輯功能都很完美的時(shí)候,只是走出了一小步,當(dāng)調(diào)試時(shí)會(huì)遇到各種各樣意想不到的問(wèn)題,在不斷改進(jìn)的過(guò)程中才能對(duì)理論有更好的把握。</p><p>  對(duì)于這次實(shí)驗(yàn)而言,它將原來(lái)有些枯燥的基本實(shí)驗(yàn)實(shí)例化了,而且需要我們根據(jù)要求把它們有機(jī)聯(lián)系在一起,實(shí)際設(shè)計(jì)了利用微機(jī)系統(tǒng)

28、的一些應(yīng)用。同時(shí)我了解到微機(jī),乃至以后單片機(jī)的一些設(shè)計(jì)和應(yīng)用的方法。雖然我沒(méi)能把系統(tǒng)功能非常完美的呈現(xiàn),但在這個(gè)過(guò)程中我從不斷的錯(cuò)誤中吸取很多教訓(xùn),這些對(duì)以后的學(xué)習(xí)時(shí)間都是很有幫助的。當(dāng)然,如果時(shí)間更加充裕的話,我相信我的設(shè)計(jì)會(huì)做的更加完善。</p><p><b>  參考書(shū)目:</b></p><p>  東南大學(xué)《微機(jī)系統(tǒng)與接口》課程組,微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)教程(

29、試用版2.0),2009年2月</p><p>  楊素行 等編著,《微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用(第2版)》,北京,清華大學(xué)出版社,2004年</p><p><b>  附匯編代碼</b></p><p>  PORTEQU0E000H-280H</p><p>  TIM_CTL EQU PORT+283H

30、 ;8253控制寄存器</p><p>  TIMER0 EQU PORT+280H ;計(jì)數(shù)器0 1 2</p><p>  TIMER1 EQU PORT+281H</p><p>  TIMER2 EQU PORT+282H</p><p>  CW_TIMER0 EQU 001

31、10000B ;計(jì)數(shù)器0控制字,方式0</p><p>  CW_TIMER1 EQU 01110001B ;計(jì)數(shù)器1控制字,方式0</p><p>  CW_TIMER2 EQU 10110111B ;計(jì)數(shù)器2控制字,方式3</p><p>  P8255_CTL EQU PORT+28BH ;825

32、5控制寄存器,A口輸出</p><p>  P8255A EQU PORT+288H ;8255 A B C口</p><p>  P8255B EQU PORT+289H</p><p>  P8255C EQU PORT+28AH</p><p>  LED E

33、QU PORT+2A0H</p><p>  LED_R EQU PORT+2A8H;紅選</p><p>  LED_Y EQU PORT+2B0H;黃選</p><p>  DATE SEGMENT ;數(shù)據(jù)段</p><p>  MESS1 db &

34、#39; ******** XXXXXXXXX********',0dh,0ah,'$'</p><p>  MESS2 dB ' Start --press 1',0DH,0AH</p><p>  db ' red light on --press 2',0dh,0a

35、h</p><p>  db ' green light on --press 3',0dh,0ah</p><p>  db ' stop --ANY KEY',0DH,0AH</p><p>  db ' quit --press q&

36、#39;,0dh,0ah,'$'</p><p>  MESS3 DB ' Wrong!',0dh,0ah,'$'</p><p>  MESS4 DB ' Continue? (Y/N)',0DH,0AH,'$'</p><p>  num D

37、B 00h,04h,08h,0ch,10h,14h,18h,1ch,20h,24h</p><p>  numx db 0Ffh,81h,81h,0ffh,0ffh,00h,00h,00h,0f1h,91h,91h,9fh,0ffh,91h,91h,91h,0ffh,08h,08h,0f8h,8fh,89h,89h,0f9h,8fh,89h,89h,0ffh,0ffh,80h,80h,80h,0ffh

38、,89h,89h,0ffh,0ffh,89h,89h,0f9h</p><p>  NUM1 DB ?</p><p>  num2 DB ?</p><p>  NUM3 DB ?</p><p>  num4 DB ?</p><p>  DA

39、TE ENDS</p><p>  ;=============================================================</p><p>  STAC SEGMENT PARA STACK 'STACK' ;堆棧段</p><p>  STA DW 32 DUP(?)</

40、p><p>  TOP EQU LENGTH STA</p><p>  STAC ENDS</p><p>  CODE SEGMENT</p><p>  ASSUME CS:CODE,DS:DATE,SS:STAC,ES:DATE</p><p><b>  START: &l

41、t;/b></p><p>  MOV AX,DATE</p><p>  MOV DS,AX</p><p>  MOV ES,AX</p><p>  MOV AH,09H</p><p>  MOV DX,OFFSET MESS1 ;顯示提示信息</p&g

42、t;<p>  INT 21H</p><p>  RANDOM PROC</p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH AX</b></p>

43、<p><b>  STI</b></p><p>  MOV AH,0 ;讀時(shí)鐘計(jì)數(shù)器值</p><p><b>  INT 1AH</b></p><p>  MOV AX,DX </p><p><b>  MOV BH,AH&l

44、t;/b></p><p>  MOV BL,AL ;BX作隨機(jī)數(shù)</p><p><b>  POP AX</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><p

45、><b>  RET</b></p><p>  RANDOM ENDP</p><p><b>  START1: </b></p><p>  ; 計(jì)數(shù)器1計(jì)反應(yīng)時(shí)間</p><p>  MOV DX,TIM_CTL</p><p>  MOV A

46、L,CW_TIMER1</p><p>  OUT DX,AL ;計(jì)反應(yīng)時(shí)間</p><p>  ; 計(jì)數(shù)器2產(chǎn)生0.01秒時(shí)鐘</p><p>  MOV DX,TIM_CTL</p><p>  MOV AL,CW_TIMER2</p><p>  OUT D

47、X,AL</p><p>  MOV DX,TIMER2 </p><p>  MOV AX,10000 ;計(jì)數(shù)初值為10000,輸入1MHZ,輸出100HZ</p><p>  OUT DX,AL </p><p>  MOV AL,AH </p><p>  OUT

48、 DX,AL</p><p>  ;8255 A OUT,B OUT</p><p>  MOVDX,P8255_CTL</p><p>  MOVAX,10000000B ;A口輸出,PA0~3紅燈,PA4~7綠燈</p><p><b>  OUTDX,AL</b></p><

49、p>  MOV AH,09H ;顯示提示信息</p><p>  MOV DX,OFFSET MESS2</p><p>  INT 21H</p><p>  mov ah,08h </p><p>  int 21h</p><p> 

50、 cmp al,'q' ;按"q",測(cè)試退出</p><p>  jz quit01</p><p>  mov ah,08h ;等待鍵盤(pán)產(chǎn)生“1”</p><p>  int 21h</p><p>  cmp al,'1&#

51、39; ;按"1",測(cè)試開(kāi)始</p><p>  JNZstart1;其他鍵,重新開(kāi)始</p><p>  CALL RANDOM </p><p>  and bl,01h </p><p>  cmp bh,0 ;隨機(jī)數(shù)末尾數(shù)等于零則跳至紅燈,否則綠燈

52、</p><p>  jz redlight </p><p>  ;=============================================================</p><p>  greenlight: </p><p>  MOV DX,P8255A</p><p>

53、  MOV AL,00H </p><p>  OUT DX,AL ; 燈暗</p><p>  CALL RANDOM </p><p>  MOV AH,BH ; 倒計(jì)時(shí)</p><p>  MOV AL,BL ;bl隨機(jī)數(shù)</p><p

54、>  MOV CX,AX ;ax->cx </p><p><b>  LOOP $</b></p><p>  MOV DX,TIMER1 </p><p>  MOV AX,00H ;計(jì)數(shù)器1初植</p><p>  OUT DX

55、,AL</p><p>  OUT DX,AL</p><p>  MOVAL,01H;B口初值,PB0接GATE1,使GATE1高</p><p>  MOVDX,P8255B</p><p>  OUTDX,AL </p><p>  MOV DX,P8255A </p&

56、gt;<p>  MOV AL,0F0H</p><p>  OUT DX,AL ;綠燈亮</p><p>  jmp greenpress</p><p>  quit01: jmp quit </p><p>  redlight: </p><p>  

57、MOV DX,P8255A</p><p>  MOV AL,00H </p><p>  OUT DX,AL ; 燈暗</p><p>  CALL RANDOM </p><p>  MOV AH,BH ; 倒計(jì)時(shí)</p><p>  MOV

58、 AL,BL ; bx隨機(jī)數(shù)</p><p>  MOV CX,AX </p><p>  LOOP $ ;"$"操作符表示當(dāng)前地址,這條指令不斷執(zhí)行,直到cx=0</p><p>  MOV DX,TIMER1 </p><p>  MOV AX,00H

59、 ;初植</p><p>  OUT DX,AL</p><p>  OUT DX,AL</p><p>  MOVAL,01H;B口初值,PB0接GATE1</p><p>  MOVDX,P8255B</p><p><b>  OUTDX,AL</b></p

60、><p>  MOV DX,P8255A</p><p>  MOV AL,0FH </p><p>  OUT DX,AL ;紅燈亮</p><p>  jmp redpress </p><p>  greenpress:

61、 </p><p>  mov ah,08h ;等待鍵盤(pán)輸入“3”</p><p>  int 21h </p><p>  cmp al,'3' </p><p>  MOVAL,00H ;PB0變低,停止計(jì)數(shù)</p><p>  MOVDX,P8255B<

62、;/p><p><b>  OUTDX,AL</b></p><p>  jnz wrongmsg;不正確顯示錯(cuò)誤信息</p><p>  jmp lockk;正確則跳至顯示程序</p><p>  redpress: </p><p>  mov ah,08h ;等待鍵盤(pán)輸入

63、“2”</p><p>  int 21h </p><p>  cmp al,'2' </p><p>  MOVAL,00H ;PB0變低,停止計(jì)數(shù)</p><p>  MOVDX,P8255B</p><p><b>  OUTDX,AL</b>

64、</p><p>  jnz wrongmsg;不正確顯示錯(cuò)誤信息</p><p>  jmp lockk;正確則跳至顯示程序</p><p>  QUIT00:JMP START1</p><p>  lockk: </p><p>  MOV DX,TIMER1</p>

65、<p>  IN AL,DX</p><p>  XCHG AL,AH</p><p>  INAL,DX</p><p>  XCHGAL,AH ;AX為計(jì)數(shù)后值</p><p>  MOV BX,0</p><p>  SUB BX,AX;相減得到

66、反應(yīng)時(shí)間 </p><p>  MOVAX,BX</p><p>  AND AX,000FH</p><p>  MOV NUM1,AL;將要輸出的值分別放入num1和num2,num3,num4(低位到高位)</p><p>  MOVAX,BX</p><p>  AND AX,00f0H

67、 </p><p>  MOV CL,4</p><p>  SHR AX,CL</p><p>  MOV NUM2,AL</p><p>  MOVAX,BX</p><p>  AND AX,0f00H </p><p>  MOV

68、 CL,8</p><p>  SHR AX,CL</p><p>  MOV NUM3,AL</p><p><b>  MOVAX,BX</b></p><p>  AND AX,0f000H </p><p>  MOV CL,12</p>

69、<p>  SHR AX,CL</p><p>  MOV NUM4,AL </p><p><b>  LOP0: </b></p><p>  CALL DISP</p><p>  MOV DL,0FFH</p><p>  

70、MOV AH,06H ;直接控制臺(tái)I/O,al=輸入字符的asc碼,zf=0</p><p>  INT 21H</p><p>  JZ LOP0</p><p><b>  QUIT: </b></p><p>  mov ah,09h</p><p>  

71、mov dx,offset mess4</p><p>  int 21h</p><p>  mov ah,08h</p><p><b>  int 21h</b></p><p>  cmp al,'y'</p><p>  jz QUIT0

72、0</p><p>  cmp al,'Y' ;y/Y重新開(kāi)始</p><p>  jz QUIT00</p><p>  MOV AX,4C00H ;否則返回dos</p><p>  INT 21H</p><p>  wrongmsg: </p

73、><p>  MOV AH,09H ;顯示出錯(cuò)信息</p><p>  MOV DX,OFFSET MESS3</p><p>  INT 21H</p><p>  JMP quit</p><p>  ;====================================

74、================</p><p>  ; 以下為顯示子程序段</p><p>  DISP PROC NEAR </p><p>  MOVBL,NUM4;時(shí)間顯示形式:xx.xx秒</p><p>  CALLDISP_R;紅色代表秒</p><p>  MOVBL,

75、NUM3;黃色代表0.01秒</p><p>  CALLDISP_R;四個(gè)數(shù)字交替顯示</p><p>  MOVBL,NUM2</p><p>  CALLDISP_Y</p><p>  MOVBL,NUM1</p><p>  CALLDISP_Y</p><p>

76、;  DISP ENDP</p><p>  ;======================================================</p><p>  DISP_R PROC </p><p>  mov cx,0f0fh</p><p><b>  d1: </b></

77、p><p>  mov ah,01h</p><p><b>  push cx</b></p><p>  mov cx,0004h</p><p>  mov si,offset num</p><p>  mov bh,00h </p><p>  add si

78、,bx ;通過(guò)要顯示的數(shù)字選擇num中段碼,得到numx中相應(yīng)數(shù)字的碼</p><p><b>  next1: </b></p><p>  mov al,[SI]</p><p>  mov bx,offset numx</p><p>  xlat ;得到第一行碼&

79、lt;/p><p>  mov dx,led</p><p>  out dx,al</p><p>  mov al,ah</p><p>  mov dx,led_R</p><p>  out dx,al ;顯示第一行紅</p><p>  shl ah,01&l

80、t;/p><p><b>  inc si</b></p><p><b>  push cx</b></p><p>  mov cx,0ffffh</p><p>  delay1: </p><p>  loop delay1 ;延時(shí)</p&g

81、t;<p><b>  pop cx</b></p><p>  loop next1</p><p><b>  pop cx</b></p><p>  call delay</p><p><b>  RET</b></p><p&g

82、t;  DISP_RENDP</p><p>  ;======================================================</p><p>  DISP_Y PROC</p><p>  mov cx,0f0fh</p><p><b>  d2: </b></p>

83、<p>  mov ah,01h</p><p><b>  push cx</b></p><p>  mov cx,0004h</p><p>  mov si,offset num</p><p>  mov bh,00h </p><p>  add si,bx

84、 ;通過(guò)要顯示的數(shù)字選擇num中段碼,得到numx中相應(yīng)數(shù)字的碼</p><p><b>  next2: </b></p><p>  mov al,[SI]</p><p>  mov bx,offset numx</p><p>  xlat ;得到第一行碼</

85、p><p>  mov dx,led</p><p>  out dx,al</p><p>  mov al,ah</p><p>  mov dx,led_Y</p><p>  out dx,al ;顯示第一行紅</p><p>  shl ah,01<

86、/p><p><b>  inc si</b></p><p><b>  push cx</b></p><p>  mov cx,0ffffh</p><p>  delay2: </p><p>  loop delay2 ;延時(shí)</p&

87、gt;<p><b>  pop cx</b></p><p>  loop next2</p><p><b>  pop cx</b></p><p>  call delay</p><p><b>  RET</b></p><p&

88、gt;  DISP_Y ENDP</p><p>  ;=============================================================</p><p>  DELAY PROC NEAR ;產(chǎn)生延時(shí)為0.1秒的子程序段</p><p>  PUSH CX</p><p&g

89、t;  MOV CX,0F00H</p><p><b>  LOOP $</b></p><p>  POP CX</p><p><b>  RET</b></p><p>  DELAY ENDP</p><p>  CODE ENDS&l

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論