版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)》</p><p><b> 專業(yè)綜合設(shè)計(jì)報(bào)告</b></p><p> 姓 名: XXX 學(xué) 號: xxxxxxxx </p><p> 專 業(yè): XXX 實(shí) 驗(yàn) 室: 516 &
2、lt;/p><p> 組 別: 同組人員: XXX </p><p> 設(shè)計(jì)時(shí)間: 2011年 9月 19日 —— 2011年 10月 17日</p><p> 評定成績: 審閱教師: </p>
3、<p> 目 錄</p><p> 一.專業(yè)綜合設(shè)計(jì)的目的與要求………………………………………2</p><p> 二.原理設(shè)計(jì)……………………………………………………………3</p><p> 三.方案論證……………………………………………………………4</p><p> 四.方案實(shí)現(xiàn)與測試…………………
4、…………………………………8</p><p> 五.分析與總結(jié)…………………………………………………………9</p><p> 附錄…………………………………………………………………11</p><p> 一. 專業(yè)綜合設(shè)計(jì)的目的與要求</p><p><b> 1、課程設(shè)計(jì)目的</b></p>&
5、lt;p> ?。?)深入理解與運(yùn)用匯編語言進(jìn)行程序設(shè)計(jì),加強(qiáng)對指令的靈活調(diào)用,以完成特定的課程設(shè)計(jì)課題要求;</p><p> (2)將匯編程序設(shè)計(jì)與微機(jī)接口的連接相結(jié)合,從硬件角度深入理解與運(yùn)用8255的并行輸入輸出功能;</p><p> (3)通過對實(shí)際應(yīng)用中的問題分析解剖,細(xì)化為一個(gè)個(gè)小功能,分別構(gòu)造微機(jī)實(shí)驗(yàn)的模型。</p><p> ?。?)加強(qiáng)
6、團(tuán)隊(duì)內(nèi)部隊(duì)員交流、合作的能力,增強(qiáng)合作意識。</p><p> 2、課程設(shè)計(jì)的指標(biāo)和要求</p><p><b> 搶答反應(yīng)測試儀</b></p><p> 1)基本要求 (難度系數(shù)1.0)</p><p> 設(shè)計(jì)一個(gè)用于智力競賽的搶答計(jì)時(shí)器,同時(shí)能測試人的反應(yīng)時(shí)間。按啟動鈕,測試開始,2 個(gè)八段碼倒計(jì)時(shí)開始(如
7、從10 秒或20 秒倒計(jì)時(shí)),在隨機(jī)時(shí)間的內(nèi)點(diǎn)亮搶答允許燈,參賽雙方(或三方)分別按各自的搶答按鈕參與搶答。一旦其中一位按下按鈕,相應(yīng)的LED 顯示燈亮并響“嘟”的一聲,此時(shí)若其它按鈕按下均無效。若一直計(jì)數(shù)到零,無一人按下按鈕,則搶答結(jié)束(以后再按搶答鈕無效)。按測試鈕,在PC 機(jī)上顯示反應(yīng)時(shí)間XX.XX 秒。要求:</p><p> ?。?) 編制1 個(gè)隨機(jī)數(shù)產(chǎn)生子程序,由隨機(jī)數(shù)決定從按啟動鈕到點(diǎn)亮搶答允許燈的
8、時(shí)間(如在3 秒~15 秒之間內(nèi)任意變動),使被測試者對LED 亮的時(shí)間無法預(yù)見,以確保測試結(jié)果的可信;</p><p> (2) 必須在見到LED 亮后按測試鈕才有效,即一直按著按鈕或提前按下按鈕無效;</p><p> ?。?) 反應(yīng)時(shí)間顯示XX.XX 秒,準(zhǔn)確到百分之一秒。</p><p><b> 2)設(shè)計(jì)提示</b></p&
9、gt;<p> (1) 為確保從每次按啟動按鈕到LED 亮?xí)r間是不同的(真正隨機(jī)變化的),一開始可隨機(jī)讀取某100個(gè)RAM 單元值求和作為初始值,以后由測試到的反應(yīng)時(shí)間作為下一個(gè)隨機(jī)初始值;</p><p> (2) 搶答允許燈亮后立即檢測搶答按鈕狀態(tài),若未按下有效(若已按下無效),然后不斷掃描按鈕狀態(tài),直到有按下代表“響應(yīng)”動作。</p><p><b>
10、3)進(jìn)一步設(shè)計(jì)要求</b></p><p> (1)用8×8 點(diǎn)陣顯示反應(yīng)時(shí)間XX.XX 秒(用紅色代表秒, 綠色代表0.01 秒,交替顯示);</p><p> ?。?)在倒計(jì)時(shí)過程中附音樂伴奏;</p><p> ?。?)增加測試功能,測試人對不同事物的反應(yīng)(響應(yīng))時(shí)間。功能要求:按啟動鈕,測試開始,一旦紅燈亮,立即按紅燈測試鈕,一旦綠燈
11、亮,立即按綠燈測試鈕,但黃燈亮為干擾。若按錯鈕,則顯示出錯并響“嘟”一聲。編制2 個(gè)隨機(jī)數(shù)產(chǎn)生子程序,一個(gè)決定從按啟動鈕到LED 亮的時(shí)間,另一個(gè)決定亮何種顏色燈。</p><p><b> 二. 原理設(shè)計(jì)</b></p><p> 實(shí)驗(yàn)主要使用到8253和8255兩塊芯片。</p><p><b> 1、主體設(shè)計(jì)</b&
12、gt;</p><p> 輸入為一系列開關(guān)量和時(shí)鐘,輸出為數(shù)碼管的7段碼和LED顯示以及計(jì)算機(jī)屏幕信息。本次實(shí)驗(yàn)使用8253和8255來實(shí)現(xiàn)搶答的功能,并且來測試選手的反應(yīng)時(shí)間。數(shù)碼管用于倒計(jì)時(shí),LED燈來顯示允許搶答以及選手對應(yīng)的搶答燈,乒乓按鈕則用于主持人的各種操作和兩位選手的搶答。</p><p><b> 2、隨機(jī)數(shù)的產(chǎn)生</b></p>&
13、lt;p> 為了使測試者對LED亮的時(shí)間無法預(yù)見,確保測試結(jié)果的可信性,程序使用隨機(jī)數(shù)(在3 秒~15 秒之間內(nèi)任意變動)來確定按下啟動鈕到點(diǎn)亮搶答允許燈的時(shí)間。為確保從每次按啟動按鈕到LED 亮?xí)r間是不同的(真正隨機(jī)變化的),一開始可隨機(jī)讀取某100個(gè)RAM 單元值求和作為初始值,以后由測試到的反應(yīng)時(shí)間作為下一個(gè)隨機(jī)初始值。</p><p><b> 3、倒計(jì)時(shí)</b></
14、p><p> 倒計(jì)時(shí)從20S開始,程序使用面板上的1MHZ脈沖,利用8253進(jìn)行 10000分頻得到0.01S的基本計(jì)數(shù)脈沖,然后利用計(jì)數(shù)器計(jì)數(shù),例如計(jì)到N個(gè)脈沖,則反應(yīng)時(shí)間為(2000-N)*0.01S,取前兩位用于數(shù)碼管顯示倒計(jì)時(shí),單位為S。</p><p> 4、數(shù)碼管顯示倒計(jì)時(shí)</p><p><b> 預(yù)置數(shù)碼管斷碼:</b><
15、;/p><p> LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰七段碼</p><p> 由于倒計(jì)時(shí)需使用兩位數(shù)碼管,故程序中將實(shí)現(xiàn)數(shù)碼管的動態(tài)顯示,電路參考實(shí)驗(yàn)書中的動態(tài)顯示模塊,通過8255的輸出口C口的C0、C1控制數(shù)碼管的亮滅,將計(jì)數(shù)得到的整數(shù)時(shí)間逐個(gè)顯示出來。</p><p> 5、PC機(jī)顯示反
16、應(yīng)時(shí)間</p><p> 在檢測到測試牛按下后調(diào)用存在某內(nèi)存中的反應(yīng)時(shí)間進(jìn)行顯示即可。</p><p> 主持人按下?lián)尨鹪试S鍵則數(shù)碼管開始從20倒計(jì)時(shí),一段隨機(jī)時(shí)間后,搶答允許燈亮,開始搶答,搶答到的選手對應(yīng)的搶答燈亮,并且其他人不可以再做搶答。這是主持人再按下讀數(shù)按鈕,則在PC機(jī)上顯示該選手的反應(yīng)時(shí)間。</p><p><b> 三. 方案論證&l
17、t;/b></p><p> 1、系統(tǒng)實(shí)現(xiàn)硬件電路圖連接如圖2所示</p><p><b> 圖2 硬件連線圖</b></p><p> 8255設(shè)置為A口輸入,BC口輸出工作方式,A口檢測按鍵狀態(tài)。倒計(jì)時(shí)采用8253三個(gè)計(jì)數(shù)器級聯(lián)方式,計(jì)數(shù)器0接實(shí)驗(yàn)箱上1MHZ脈沖,從計(jì)數(shù)器2的OUT端口輸出1HZ時(shí)鐘,設(shè)其初值為20,則從20開
18、始倒計(jì)時(shí),從而用硬件實(shí)現(xiàn)倒計(jì)時(shí)功能。</p><p><b> 2、程序流程圖</b></p><p><b> 圖1 程序流程圖</b></p><p><b> 3、重要模塊</b></p><p><b> (1)倒計(jì)時(shí) </b></p
19、><p> 8253的計(jì)數(shù)器0接實(shí)驗(yàn)箱上1MHZ脈沖,設(shè)初值為1000,工作方式為2,OUT0產(chǎn)生頻率1KHZ低脈沖;OUT0接計(jì)數(shù)器1時(shí)鐘端,初值設(shè)為1000,工作方式為2,OUT1產(chǎn)生頻率為1HZ的第脈沖,所以計(jì)數(shù)器1表示倒計(jì)時(shí)MS;OUT1接計(jì)數(shù)器2時(shí)鐘端,初值設(shè)為20,工作方式設(shè)為2,實(shí)現(xiàn)20秒倒計(jì)時(shí)功能。</p><p> MOV DX , P8253M ; 82
20、53初始化</p><p> MOV AL , 00111100B ;8253 CNT0=10000 方式2 B</p><p> OUT DX , AL</p><p> MOVAX , 1000 ;賦初值</p><p> MOV DX , P8253A</p><p> OU
21、T DX , AL</p><p> MOVAL , AH </p><p> OUTDX , AL </p><p> MOV DX , P8253M</p><p> MOV AL , 01011101B ; CNT1=100 方式2</p><p> OUT DX , AL<
22、/p><p> MOVAL , 1000</p><p> MOV DX , P8253B</p><p> OUT DX , AL</p><p> MOV DX , P8253M</p><p> MOV AL , 10011101B ; CNT2=20 方式2 D</p>&
23、lt;p> OUT DX , AL</p><p> MOVAL , 20H ;數(shù)碼管顯示初值為20</p><p> MOV DX , P8253C</p><p> OUT DX , AL</p><p><b> ?。?)隨機(jī)數(shù)產(chǎn)生</b></p><p>
24、 為確保從每次按啟動鍵到LED燈點(diǎn)亮的時(shí)間是不同的,一開始可隨機(jī)讀取某100個(gè)RAM單元值求和作為初始值,這可以通過設(shè)置一個(gè)RANDOM變量,在程序初始化部分調(diào)用隨機(jī)數(shù)產(chǎn)生子程序RAND給其賦值實(shí)現(xiàn):</p><p> PRORAND PROC</p><p><b> PUSH CX</b></p><p><b> PU
25、SH SI</b></p><p> MOV CX , 100</p><p> MOV SI , 34H</p><p><b> ADDR: </b></p><p> XOR AL,AL</p><p> MOV AL , [SI]</p>&l
26、t;p> ADDRANDOM , AL</p><p><b> INC SI</b></p><p><b> LOOPADDR</b></p><p> AND RANDOM 07H</p><p><b> POPSI</b></p&g
27、t;<p><b> POPCX</b></p><p><b> RET</b></p><p> PRORAND ENDP</p><p> ?。?)反應(yīng)時(shí)間的計(jì)算</p><p> 在點(diǎn)亮搶答允許燈前提取當(dāng)前時(shí)間,記錄為START_S , START_MS 。在檢測
28、到有選手搶答后,再次提取當(dāng)前時(shí)間,記錄為END_S,END_MS。兩次相減,考慮邊界條件,則得到反應(yīng)時(shí)間 REACT_S,REACT_MS。按測試鍵,再將反應(yīng)時(shí)間顯示在屏幕上。</p><p><b> ;取當(dāng)前時(shí)間</b></p><p> MOVDX , P8253C</p><p> INAL ,DX</p>
29、<p> MOVAH , AL</p><p> MOVC_TIME , AL </p><p> AND AL , 0FH </p><p> MOVLEDL , AL </p><p> MOVCL , 4</p><p> RORAH , CL</p>
30、<p> ANDAH , 0FH</p><p> MOVLEDH , AH</p><p> ;DOS功能調(diào)用取點(diǎn)亮搶答燈時(shí)的精確時(shí)間 用于計(jì)算反應(yīng)時(shí)間</p><p> PUSH CX </p><p> PUSH DX </p><p> MOVAH , 2CH
31、</p><p><b> INT21H </b></p><p> MOVSTART_S , DH</p><p> MOVSTART_MS , DL</p><p><b> POPDX </b></p><p><b> POPCX<
32、;/b></p><p><b> ;計(jì)算反應(yīng)時(shí)間</b></p><p> MOVAL,END_S </p><p> MOVREACT_S , AL</p><p> MOVAL , START_S</p><p> SUBREACT_S , AL</p&
33、gt;<p> MOVAL,END_MS</p><p> MOV REACT_MS , AL</p><p> ADD REACT_MS , 100</p><p> DEC REACT_S</p><p> MOVAL , START_MS</p><p> SUBR
34、EACT_MS , AL</p><p> CMP REACT_MS , 100</p><p> JL NDEAL</p><p> SUBREACT_MS , 100</p><p> INC REACT_S</p><p> ?。?)搶答時(shí)“嘟”的響聲</p><p>
35、 INT 21H的功能號02H 功能描述:響鈴。入口參數(shù):AH=02H。通過DL輸入ASCII碼為07。本程序用這個(gè)中斷響鈴。</p><p> MOV DL,7 ;響鈴 ASCII碼為07</p><p><b> MOV AH,2</b></p><p><b> INT 21H</b>
36、;</p><p> ?。?)使搶答按鍵在搶答允許燈亮后按下才有效</p><p> 設(shè)置ENABLEA、ENABLEB變量表示選手有無搶答,如果搶答則屏蔽其答題信息。首先在搶答允許燈亮之前使其值賦0。在點(diǎn)亮搶答燈后立即(下一行程序)檢測按鍵狀態(tài),如果此時(shí)A鍵為‘1’,則說明A提前按鍵了,跳過檢測B,否則使其賦1,表示沒有提前按鍵。同理檢測B有無提前。在檢測A、B誰先搶答前,要先判斷對應(yīng)
37、的ENABLE值,如果為1,則繼續(xù)檢測A鍵是否為1,否則跳過再次循環(huán)檢測。</p><p> 四. 方案實(shí)現(xiàn)與測試</p><p> 調(diào)試分硬件調(diào)試和軟件調(diào)試,在實(shí)驗(yàn)時(shí),應(yīng)先進(jìn)行硬件調(diào)試,確保試驗(yàn)箱、各個(gè)芯片、連線均完好,在進(jìn)行軟件調(diào)試。</p><p> 硬件調(diào)試可通過一個(gè)簡單的方法進(jìn)行:選取一個(gè)以前實(shí)驗(yàn)調(diào)試好的標(biāo)準(zhǔn)程序運(yùn)行,所選程序要用到本次試驗(yàn)用到的各個(gè)
38、部件(8255各口,8253各口,280和288口),觀察運(yùn)行結(jié)果是否正常,如果正確,基本上說明硬件完好。也可DEBUG相關(guān)指令測試各個(gè)部件。</p><p> 軟件調(diào)試可以使用TD單步跟蹤,但是在前期這樣很浪費(fèi)時(shí)間,前期最好分模塊進(jìn)行調(diào)試,將每個(gè)小功能分別寫成一個(gè)程序,一個(gè)一個(gè)調(diào)試,調(diào)試小程序較為簡單。確保每個(gè)模塊均能實(shí)現(xiàn)相應(yīng)功能的前提下,用“滾雪球”的方式,將他們拼起來。在調(diào)試拼接程序時(shí)盡量不要改每個(gè)模塊內(nèi)
39、部代碼,因?yàn)樽钣锌赡艿膯栴}是時(shí)序和跳轉(zhuǎn)關(guān)系的問題。如果還是有問題,就可以用TD跟蹤。</p><p> 測試方案及結(jié)果如下表所示:</p><p> 由上面的測試方案及結(jié)果可得:設(shè)計(jì)的程序符合課程設(shè)計(jì)的要求。</p><p><b> 五.分析與總結(jié)</b></p><p><b> 1、分析</
40、b></p><p> 這個(gè)實(shí)驗(yàn)僅完成了基礎(chǔ)實(shí)驗(yàn)的部分,還可以通過改進(jìn)實(shí)現(xiàn)更多的功能。但是由于時(shí)間的問題就沒能完成進(jìn)一步設(shè)計(jì)要求。時(shí)候?qū)嶒?yàn)只能進(jìn)行一次搶答,通過做了一些其它的修改終于可以進(jìn)行多次搶答。由于程序框架設(shè)計(jì)的問題,程序的跳轉(zhuǎn)關(guān)系看起來有一些混亂。</p><p> 雖然,我僅僅完成了實(shí)驗(yàn)的基本要求,但是,我覺得自己已經(jīng)學(xué)到了很多。</p><p>
41、;<b> 2、總結(jié)</b></p><p> 這個(gè)課程設(shè)計(jì)實(shí)驗(yàn)的驗(yàn)收,意味著《微機(jī)系統(tǒng)與接口》這門課程的結(jié)束。</p><p> 通過這門課程的學(xué)習(xí),我對硬件設(shè)計(jì)有了一個(gè)較為系統(tǒng)的認(rèn)識。而實(shí)驗(yàn)課程的安排則讓我們對抽象理論知識有了一個(gè)更為直觀的認(rèn)識,也幫助我們加深了對這門課程的理解。之前的小實(shí)驗(yàn)我們緊緊是完成一些簡單的輸入輸出、中斷、一些芯片的使用、A/D及D/
42、A轉(zhuǎn)換等待,而這次實(shí)驗(yàn)將以前的小實(shí)驗(yàn)結(jié)合并且加以修改,則實(shí)現(xiàn)了許多可以在現(xiàn)實(shí)生活中應(yīng)用的程序。</p><p> 雖然實(shí)驗(yàn)的過程中遇到了一些問題,很多從未見過的問題都不知道該怎么解決,但是通過查閱書籍與其他同學(xué)的交流,最終還是克服了這些問題,完成了這個(gè)實(shí)驗(yàn)。程序并不完美,還有許多可以加以修改的地方,但是在實(shí)驗(yàn)的過程中學(xué)到了很多知識,并且弄明白了一些以前一直并不十分理解的問題。并且,通過本次設(shè)計(jì)實(shí)驗(yàn),我基本掌握了
43、軟硬件調(diào)試問題,從硬件角度深入理解與運(yùn)用8255的并行輸入輸出功能。同時(shí)這次課程設(shè)計(jì)也讓我體會到團(tuán)隊(duì)合作的重要性和在已有的學(xué)習(xí)實(shí)驗(yàn)任務(wù)重的情況下如何合理安排時(shí)間和協(xié)調(diào)組員工作進(jìn)度的重要性。</p><p> 總之,這次綜合設(shè)計(jì)實(shí)驗(yàn)讓我收獲很多。</p><p><b> 參考書目:</b></p><p> 楊素行《微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)
44、用》,北京,清華大學(xué)出版社,2004年</p><p> 微機(jī)實(shí)驗(yàn)及課程設(shè)計(jì)教程(試用版3.0),東南大學(xué)《微機(jī)系統(tǒng)與接口》課程組,2010年3月</p><p><b> 附錄</b></p><p> DATA SEGMENT</p><p> MESS1 DB '***************
45、****************',0AH,0DH</p><p> DB '* QIANG DA QI *',0AH,0DH</p><p> DB '* 08009313 08009303 *',0AH,0DH</p><p> DB '* DU CON
46、GYUAN WO YINGGE *',0AH,0DH</p><p> DB '*******************************',0AH,0DH,'$'</p><p> IOPORT EQU 0EC00H-280H</p><p> P8255A EQU IOPORT+288H
47、;開關(guān)輸入</p><p> P8255B EQUIOPORT+289H</p><p> P8255CEQU IOPORT+28AH</p><p> P8255M EQUIOPORT+28BH</p><p> IO0832 EQU IOPORT+298H</p><p> P825
48、3AEQUIOPORT+280H</p><p> P8253B EQUIOPORT+281H</p><p> P8253C EQUIOPORT+282H</p><p> P8253M EQUIOPORT+283H</p><p> LED7EQUIOPORT+289H ;接數(shù)碼管七段輸入</p>
49、<p> LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰七段碼</p><p> START_S DB ?</p><p> START_MS DB?</p><p> END_SDB?</p><p> END_MSDB?</p
50、><p> REACT_S DB 0</p><p> REACT_MS DB ?</p><p> LEDHDB?</p><p> LEDLDB?</p><p> RANDOMDB0 </p><p> C_TIMEDB?</p>
51、;<p> ENABLEADB?</p><p> ENABLEBDB?</p><p> DATA ENDS</p><p> STACKSSEGMENT STACK</p><p> DB100 DUP(?)</p><p> STACKSENDS</p&g
52、t;<p> CODE SEGMENT</p><p> ASSUME CS:CODE , DS:DATA,SS:STACKS</p><p><b> START: </b></p><p> MOV AX,DATA</p><p> MOV DS,AX</p>&l
53、t;p> MOV ES,AX</p><p> MOV AH,09H</p><p> MOV DX,OFFSET MESS1 ;顯示提示信息</p><p> INT 21H</p><p> MOV AX , DATA</p><p> MOV DS , AX<
54、;/p><p> MOV AX , STACKS</p><p> MOVSS , AX</p><p> MOVDX , P8255M ;8255初始化</p><p> MOV AL , 90H ;初始化8255控制字 A口輸入,B、C輸出</p><p> OUT DX , AL&
55、lt;/p><p> MOV DX , P8253M ;8253初始化</p><p> MOV AL , 00111100B ;8253 CNT0=10000 方式2 B</p><p> OUT DX , AL</p><p> MOVAX , 10000;賦初值</p><p>
56、MOV DX , P8253A</p><p> OUT DX , AL</p><p> MOVAL , AH </p><p> OUTDX , AL </p><p> MOV DX , P8253M</p><p> MOV AL , 01011101B ;8253 CNT
57、1=100 方式2 D</p><p> OUT DX , AL</p><p> MOVAL , 100</p><p> MOV DX , P8253B</p><p> OUT DX , AL</p><p> MOV DX , P8253M</p><p> MOV
58、 AL , 10011101B ;8253 CNT2=20 方式2 D</p><p> OUT DX , AL</p><p> MOVAL , 20H </p><p> MOV DX , P8253C</p><p> OUT DX , AL</p><p> CALL PRO
59、RAND ;產(chǎn)生初始隨機(jī)數(shù)</p><p> WAIT_FOR_START : </p><p> MOVAL , 00000110B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOVAL , 00001000B </p>
60、;<p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOVAL , 00001100B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOVAL , 00001010B
61、 </p><p> MOVDX , P8255M </p><p> OUTDX , AL MOVAL , 0;7段LED滅</p><p> MOVDX , LED7</p><p> OUTDX , AL </p><p> MOVAL , 00000100B </p>
62、<p> MOVDX , P8255M </p><p> OUTDX , AL</p><p><b> ;關(guān)斷7段</b></p><p> MOVAL , 00000000B; 數(shù)字低位</p><p> MOVDX , P8255M </p><p> O
63、UTDX , AL</p><p> MOVAL , 00000010B ;數(shù)字高位</p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOV DX , P8255A</p><p> IN AL , DX</p>&l
64、t;p> TEST AL , 01H ;判斷主持人開關(guān)是復(fù)位還是啟動</p><p> JZ WAIT_FOR_START </p><p><b> ;按下啟動鈕</b></p><p> MOVAL , 00000111B </p><p> MOVDX , P8255M &l
65、t;/p><p> OUTDX , AL</p><p><b> ;開始計(jì)數(shù)</b></p><p> ;C2-GATE0,1,2</p><p> MOVAL , 00000101B </p><p> MOVDX , P8255M </p><p> O
66、UTDX , AL</p><p> START_GAME :</p><p> MOV DX , P8255A</p><p> IN AL , DX</p><p> TEST AL , 01H ;判斷主持人開關(guān)是復(fù)位還是啟動</p><p> JZ WAIT_FOR_ST
67、ART</p><p> ;按下啟動鈕取當(dāng)前時(shí)間</p><p> MOVDX , P8253C</p><p> INAL ,DX</p><p> MOVAH , AL</p><p> MOVC_TIME , AL </p><p> AND AL , 0FH
68、</p><p> MOVLEDL , AL </p><p> MOVCL , 4</p><p> RORAH , CL</p><p> ANDAH , 0FH</p><p> MOVLEDH , AH </p><p><b> ;動態(tài)顯示7段</
69、b></p><p> MOV BL , LEDH</p><p> MOV BH , 0</p><p> LEA SI , LED</p><p> ADD SI , BX</p><p> MOV AL , BYTE PTR [SI]</p><p> MOV DX ,
70、LED7</p><p> OUT DX , AL</p><p><b> ;開啟CS0</b></p><p> MOVAL , 0000001B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p>
71、; CALLDELAY;延時(shí)一點(diǎn)</p><p><b> ;關(guān)閉CS0</b></p><p> MOVAL , 00000000B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOV BL , LEDL&
72、lt;/p><p> MOV BH , 0</p><p> LEA SI , LED</p><p> ADD SI , BX</p><p> MOV AL , BYTE PTR [SI]</p><p> MOV DX , LED7</p><p> OUT DX , AL <
73、;/p><p><b> ;開啟CS1</b></p><p> MOVAL , 00000011B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> CALLDELAY;延時(shí)一點(diǎn)</p><p>
74、;<b> ;關(guān)閉CS1</b></p><p> MOVAL , 00000010B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOVENABLEA , 0 ;屏蔽先搶答行為</p><p> MOVEN
75、ABLEB , 0 </p><p> MOVBL , C_TIME </p><p> SUB BL , 20</p><p> NEG BL ;求 20-BL</p><p> MOVDL , RANDOM </p><p> CMPBL , DL ;是否到了點(diǎn)亮搶答燈的時(shí)間</p&g
76、t;<p> JGLIGHT1</p><p> JMPSTART_GAME </p><p><b> LIGHT1:</b></p><p> PUSH CX ;DOS功能調(diào)用取點(diǎn)亮搶答燈時(shí)的精確時(shí)間 用于計(jì)算反應(yīng)時(shí)間</p><p> PUSH DX <
77、/p><p> MOVAH , 2CH </p><p><b> INT21H </b></p><p> MOVSTART_S , DH</p><p> MOVSTART_MS , DL</p><p><b> POPDX </b></p>
78、;<p><b> POPCX</b></p><p><b> LIGHT:</b></p><p> MOVAL , 00001001B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p&
79、gt; MOVDX , P8255A ;檢測開關(guān)狀態(tài)</p><p> INAL , DX </p><p> TESTAL , 01000000B;如果燈亮的時(shí)候是沒有按下就開啟搶答使能</p><p> JNZNEXT1</p><p> MOVENABLEA , 1</p><p>
80、<b> NEXT1:</b></p><p> TESTAL , 00100000B</p><p> JNZNEXT2</p><p> MOVENABLEB , 1</p><p><b> NEXT2:</b></p><p> CMPEN
81、ABLEA , 1;如果搶答使能而且按下了搶答鍵</p><p> JNENEXTB</p><p> TEST AL , 01000000B</p><p><b> JZNEXTB</b></p><p> MOVAL , 00001101B ;點(diǎn)亮A搶答燈</p><p&g
82、t; MOVDX , P8255M </p><p> OUTDX , AL</p><p> MOV DL,7 ;響鈴 ASCII碼為07</p><p><b> MOV AH,2</b></p><p><b> INT 21H</b></p&g
83、t;<p><b> JMPQUIT</b></p><p><b> NEXTB:</b></p><p> CMPENABLEB , 1</p><p><b> JNENEXT</b></p><p><b> ;B搶到了,亮L
84、7</b></p><p> TEST AL , 00100000B</p><p><b> JZNEXT</b></p><p> MOVAL , 00001111B ;點(diǎn)亮B搶答燈</p><p> MOVDX , P8255M </p><p> OUTD
85、X , AL</p><p> MOV DL,7 ;響鈴 ASCII碼為07</p><p><b> MOV AH,2</b></p><p><b> INT 21H</b></p><p><b> JMPQUIT</b></p
86、><p><b> SKIP1:</b></p><p> JMP WAIT_FOR_START;跳板</p><p> NEXT:;A、B都搶答無效或A、B都沒搶答</p><p> MOV DX , P8255A</p><p> IN AL , DX</p>
87、<p> TEST AL , 01H ;判斷主持人開關(guān)是復(fù)位還是啟動</p><p> JZ SKIP1</p><p><b> ;取當(dāng)前時(shí)間</b></p><p> MOVDX , P8253C</p><p> INAL ,DX</p><p&g
88、t; MOVAH , AL</p><p> MOVC_TIME , AL </p><p> AND AL , 0FH </p><p> MOVLEDL , AL </p><p> MOVCL , 4</p><p> RORAH , CL</p><p> A
89、NDAH , 0FH</p><p> MOVLEDH , AH </p><p> ;7段燈掃描不能停止</p><p> MOV BL , LEDH</p><p> MOV BH , 0</p><p> LEA SI , LED</p><p> ADD SI
90、, BX</p><p> MOV AL , BYTE PTR [SI]</p><p> MOV DX , LED7</p><p> OUT DX , AL</p><p><b> ;開啟CS0</b></p><p> MOVAL , 0000001B </p>
91、;<p> MOVDX , P8255M </p><p> OUTDX , AL</p><p> CALLDELAY;延時(shí)一點(diǎn)</p><p><b> ;關(guān)閉CS0</b></p><p> MOVAL , 00000000B </p><p> MOV
92、DX , P8255M </p><p> OUTDX , AL</p><p> MOV BL , LEDL</p><p> MOV BH , 0</p><p> LEA SI , LED</p><p> ADD SI , BX</p><p> MOV AL
93、 , BYTE PTR [SI]</p><p> MOV DX , LED7</p><p> OUT DX , AL </p><p><b> ;開啟CS1</b></p><p> MOVAL , 00000011B </p><p> MOVDX , P8255M &l
94、t;/p><p> OUTDX , AL</p><p> CALLDELAY;延時(shí)一點(diǎn)</p><p><b> ;關(guān)閉CS1</b></p><p> MOVAL , 00000010B </p><p> MOVDX , P8255M </p><p&g
95、t; OUTDX , AL</p><p> JMPLIGHT;繼續(xù)檢測按鍵,是否有人搶答</p><p><b> QUIT:</b></p><p><b> PUSH CX </b></p><p><b> PUSHDX </b></p>
96、;<p> MOVAH , 2CH </p><p><b> INT21H </b></p><p> MOVEND_S , DH</p><p> MOVEND_MS , DL</p><p><b> POPDX </b></p><
97、p><b> POPCX</b></p><p> MOV AL,END_S ;計(jì)算反應(yīng)時(shí)間</p><p> MOV REACT_S , AL</p><p> MOV AL , START_S</p><p> SUB REACT_S , AL</p><p>
98、 MOV AL,END_MS</p><p> MOV REACT_MS , AL</p><p> ADD REACT_MS , 100</p><p> DEC REACT_S</p><p> MOV AL , START_MS</p><p> SUB REACT_MS , AL&l
99、t;/p><p> CMP REACT_MS , 100</p><p> JL NDEAL</p><p> SUB REACT_MS , 100</p><p> INC REACT_S</p><p><b> NDEAL:</b></p><p>
100、; MOVDX , P8255A</p><p> INAL , DX ;檢測TEST鍵</p><p> TESTAL , 00000010B;有無按下檢測鍵</p><p> JZNTEST ;未按下</p><p> ;按下,顯示反應(yīng)時(shí)間</p><p><b>
101、 KEYT:</b></p><p> MOVDL , REACT_S</p><p> MOV RANDOM , AL</p><p> ADD RANDOM , 3 ;用上次的反應(yīng)時(shí)間做下次的隨機(jī)數(shù)初值</p><p> MOVCL , 4</p><p> RORDL , C
102、L </p><p> ANDDL , 0FH</p><p> ADDDL , 30H</p><p> MOVAH , 02H</p><p><b> INT21H</b></p><p> MOVDL , REACT_S</p><p> A
103、NDDL , 0FH</p><p> ADDDL , 30H</p><p><b> INT21H</b></p><p> MOVDL , 2EH</p><p><b> INT21H</b></p><p> MOVDL , REACT_M
104、S</p><p> MOVCL , 4</p><p> RORDL , CL </p><p> ANDDL , 0FH</p><p> ADDDL , 30H</p><p><b> INT21H</b></p><p> MOVDL ,
105、 END_MS</p><p> ANDDL , 0FH</p><p> ADDDL , 30H</p><p><b> INT21H</b></p><p><b> LOPER:</b></p><p> MOV DX,P8255A</p&g
106、t;<p> IN AL,DX</p><p> TESTAL,00000010B</p><p> JNZ LOPER</p><p><b> NTEST:</b></p><p><b> ;停止計(jì)數(shù)</b></p><p> MO
107、VAL , 00000100B </p><p> MOVDX , P8255M </p><p> OUTDX , AL</p><p><b> ;關(guān)主持人燈</b></p><p> MOVAL , 00000110B </p><p> ;MOVDX , P8255M
108、</p><p> OUTDX , AL</p><p><b> ;關(guān)搶答提示燈</b></p><p> MOVAL , 00001000B </p><p> ;MOVDX , P8255M </p><p> OUTDX , AL</p><p>
109、 JMPW_F_RESET</p><p><b> SKIP2: </b></p><p> JMP START</p><p> W_F_RESET:</p><p> MOVDX , P8255A</p><p> INAL , DX ;檢測TEST鍵</p
110、><p> TESTAL , 00000010B;有無按下檢測鍵</p><p> JNZKEYT ;按下,顯示反應(yīng)時(shí)間</p><p> MOV DX , P8255A</p><p> IN AL , DX</p><p> TEST AL , 01H ;判斷主持
111、人開關(guān)是復(fù)位還是啟動</p><p> JZ SKIP2</p><p> JMP W_F_RESET</p><p> DELAY PROC</p><p><b> PUSHCX </b></p><p> MOVCX ,100</p><p>
112、<b> ZZZ:</b></p><p><b> LOOPZZZ</b></p><p><b> POPCX</b></p><p><b> RET</b></p><p> DELAYENDP</p><p&
113、gt; PRORAND PROC</p><p><b> PUSH CX</b></p><p><b> PUSH SI</b></p><p> MOV CX , 100</p><p> MOV SI , 34H</p><p><b>
114、 ADDR:</b></p><p> XOR AL , AL</p><p> MOV AL , [SI]</p><p> ADD RANDOM , AL</p><p><b> INC SI</b></p><p> LOOP ADDR</p>
115、<p> AND RANDOM , 07H</p><p><b> POP SI</b></p><p><b> POP CX</b></p><p><b> RET</b></p><p> PRORAND ENDP</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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理課程設(shè)計(jì)--搶答計(jì)時(shí)器
- 微機(jī)原理課程設(shè)計(jì)-計(jì)時(shí)器
- 智力競賽搶答計(jì)時(shí)器的設(shè)計(jì)-eda課程設(shè)計(jì)
- 微機(jī)原理及應(yīng)用課程設(shè)計(jì)---可調(diào)計(jì)時(shí)器設(shè)計(jì)
- 時(shí)鐘計(jì)時(shí)器課程設(shè)計(jì)
- 籃球計(jì)時(shí)器課程設(shè)計(jì)
- 匯編課程設(shè)計(jì)報(bào)告--- 計(jì)時(shí)器
- 課程設(shè)計(jì)---vhdl秒表計(jì)時(shí)器
- 匯編課程設(shè)計(jì)報(bào)告--計(jì)時(shí)器
- 24秒計(jì)時(shí)器課程設(shè)計(jì)
- 多功能計(jì)時(shí)器課程設(shè)計(jì)
- 倒計(jì)時(shí)器課程設(shè)計(jì)
- 課程設(shè)計(jì)--倒計(jì)時(shí)計(jì)時(shí)器的設(shè)計(jì)
- 籃球比賽計(jì)時(shí)器(課程設(shè)計(jì))
- 課程設(shè)計(jì)--籃球比賽計(jì)時(shí)器
- 課程設(shè)計(jì)報(bào)告---倒計(jì)時(shí)器
- 智能倒計(jì)時(shí)器課程設(shè)計(jì)
- 智能倒計(jì)時(shí)器課程設(shè)計(jì)
- 課程設(shè)計(jì)---籃球30秒計(jì)時(shí)器
- 數(shù)字電子技術(shù)基礎(chǔ)課程設(shè)計(jì)--智力競賽搶答計(jì)時(shí)器
評論
0/150
提交評論