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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論