微機課程設計--搶答計時器_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《微機實驗及課程設計》</p><p><b>  專業(yè)綜合設計報告</b></p><p>  姓 名: XXX 學 號: xxxxxxxx </p><p>  專 業(yè): XXX 實 驗 室: 516 &

2、lt;/p><p>  組 別: 同組人員: XXX </p><p>  設計時間: 2011年 9月 19日 —— 2011年 10月 17日</p><p>  評定成績: 審閱教師: </p>

3、<p>  目 錄</p><p>  一.專業(yè)綜合設計的目的與要求………………………………………2</p><p>  二.原理設計……………………………………………………………3</p><p>  三.方案論證……………………………………………………………4</p><p>  四.方案實現(xiàn)與測試…………………

4、…………………………………8</p><p>  五.分析與總結…………………………………………………………9</p><p>  附錄…………………………………………………………………11</p><p>  一. 專業(yè)綜合設計的目的與要求</p><p><b>  1、課程設計目的</b></p>&

5、lt;p> ?。?)深入理解與運用匯編語言進行程序設計,加強對指令的靈活調(diào)用,以完成特定的課程設計課題要求;</p><p> ?。?)將匯編程序設計與微機接口的連接相結合,從硬件角度深入理解與運用8255的并行輸入輸出功能;</p><p>  (3)通過對實際應用中的問題分析解剖,細化為一個個小功能,分別構造微機實驗的模型。</p><p>  (4)加強

6、團隊內(nèi)部隊員交流、合作的能力,增強合作意識。</p><p>  2、課程設計的指標和要求</p><p><b>  搶答反應測試儀</b></p><p>  1)基本要求 (難度系數(shù)1.0)</p><p>  設計一個用于智力競賽的搶答計時器,同時能測試人的反應時間。按啟動鈕,測試開始,2 個八段碼倒計時開始(如

7、從10 秒或20 秒倒計時),在隨機時間的內(nèi)點亮搶答允許燈,參賽雙方(或三方)分別按各自的搶答按鈕參與搶答。一旦其中一位按下按鈕,相應的LED 顯示燈亮并響“嘟”的一聲,此時若其它按鈕按下均無效。若一直計數(shù)到零,無一人按下按鈕,則搶答結束(以后再按搶答鈕無效)。按測試鈕,在PC 機上顯示反應時間XX.XX 秒。要求:</p><p> ?。?) 編制1 個隨機數(shù)產(chǎn)生子程序,由隨機數(shù)決定從按啟動鈕到點亮搶答允許燈的

8、時間(如在3 秒~15 秒之間內(nèi)任意變動),使被測試者對LED 亮的時間無法預見,以確保測試結果的可信;</p><p> ?。?) 必須在見到LED 亮后按測試鈕才有效,即一直按著按鈕或提前按下按鈕無效;</p><p> ?。?) 反應時間顯示XX.XX 秒,準確到百分之一秒。</p><p><b>  2)設計提示</b></p&

9、gt;<p> ?。?) 為確保從每次按啟動按鈕到LED 亮時間是不同的(真正隨機變化的),一開始可隨機讀取某100個RAM 單元值求和作為初始值,以后由測試到的反應時間作為下一個隨機初始值;</p><p> ?。?) 搶答允許燈亮后立即檢測搶答按鈕狀態(tài),若未按下有效(若已按下無效),然后不斷掃描按鈕狀態(tài),直到有按下代表“響應”動作。</p><p><b>  

10、3)進一步設計要求</b></p><p> ?。?)用8×8 點陣顯示反應時間XX.XX 秒(用紅色代表秒, 綠色代表0.01 秒,交替顯示);</p><p> ?。?)在倒計時過程中附音樂伴奏;</p><p> ?。?)增加測試功能,測試人對不同事物的反應(響應)時間。功能要求:按啟動鈕,測試開始,一旦紅燈亮,立即按紅燈測試鈕,一旦綠燈

11、亮,立即按綠燈測試鈕,但黃燈亮為干擾。若按錯鈕,則顯示出錯并響“嘟”一聲。編制2 個隨機數(shù)產(chǎn)生子程序,一個決定從按啟動鈕到LED 亮的時間,另一個決定亮何種顏色燈。</p><p><b>  二. 原理設計</b></p><p>  實驗主要使用到8253和8255兩塊芯片。</p><p><b>  1、主體設計</b&

12、gt;</p><p>  輸入為一系列開關量和時鐘,輸出為數(shù)碼管的7段碼和LED顯示以及計算機屏幕信息。本次實驗使用8253和8255來實現(xiàn)搶答的功能,并且來測試選手的反應時間。數(shù)碼管用于倒計時,LED燈來顯示允許搶答以及選手對應的搶答燈,乒乓按鈕則用于主持人的各種操作和兩位選手的搶答。</p><p><b>  2、隨機數(shù)的產(chǎn)生</b></p>&

13、lt;p>  為了使測試者對LED亮的時間無法預見,確保測試結果的可信性,程序使用隨機數(shù)(在3 秒~15 秒之間內(nèi)任意變動)來確定按下啟動鈕到點亮搶答允許燈的時間。為確保從每次按啟動按鈕到LED 亮時間是不同的(真正隨機變化的),一開始可隨機讀取某100個RAM 單元值求和作為初始值,以后由測試到的反應時間作為下一個隨機初始值。</p><p><b>  3、倒計時</b></

14、p><p>  倒計時從20S開始,程序使用面板上的1MHZ脈沖,利用8253進行 10000分頻得到0.01S的基本計數(shù)脈沖,然后利用計數(shù)器計數(shù),例如計到N個脈沖,則反應時間為(2000-N)*0.01S,取前兩位用于數(shù)碼管顯示倒計時,單位為S。</p><p>  4、數(shù)碼管顯示倒計時</p><p><b>  預置數(shù)碼管斷碼:</b><

15、;/p><p>  LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰七段碼</p><p>  由于倒計時需使用兩位數(shù)碼管,故程序中將實現(xiàn)數(shù)碼管的動態(tài)顯示,電路參考實驗書中的動態(tài)顯示模塊,通過8255的輸出口C口的C0、C1控制數(shù)碼管的亮滅,將計數(shù)得到的整數(shù)時間逐個顯示出來。</p><p>  5、PC機顯示反

16、應時間</p><p>  在檢測到測試牛按下后調(diào)用存在某內(nèi)存中的反應時間進行顯示即可。</p><p>  主持人按下?lián)尨鹪试S鍵則數(shù)碼管開始從20倒計時,一段隨機時間后,搶答允許燈亮,開始搶答,搶答到的選手對應的搶答燈亮,并且其他人不可以再做搶答。這是主持人再按下讀數(shù)按鈕,則在PC機上顯示該選手的反應時間。</p><p><b>  三. 方案論證&l

17、t;/b></p><p>  1、系統(tǒng)實現(xiàn)硬件電路圖連接如圖2所示</p><p><b>  圖2 硬件連線圖</b></p><p>  8255設置為A口輸入,BC口輸出工作方式,A口檢測按鍵狀態(tài)。倒計時采用8253三個計數(shù)器級聯(lián)方式,計數(shù)器0接實驗箱上1MHZ脈沖,從計數(shù)器2的OUT端口輸出1HZ時鐘,設其初值為20,則從20開

18、始倒計時,從而用硬件實現(xiàn)倒計時功能。</p><p><b>  2、程序流程圖</b></p><p><b>  圖1 程序流程圖</b></p><p><b>  3、重要模塊</b></p><p><b> ?。?)倒計時 </b></p

19、><p>  8253的計數(shù)器0接實驗箱上1MHZ脈沖,設初值為1000,工作方式為2,OUT0產(chǎn)生頻率1KHZ低脈沖;OUT0接計數(shù)器1時鐘端,初值設為1000,工作方式為2,OUT1產(chǎn)生頻率為1HZ的第脈沖,所以計數(shù)器1表示倒計時MS;OUT1接計數(shù)器2時鐘端,初值設為20,工作方式設為2,實現(xiàn)20秒倒計時功能。</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> ?。?)隨機數(shù)產(chǎn)生</b></p><p> 

24、 為確保從每次按啟動鍵到LED燈點亮的時間是不同的,一開始可隨機讀取某100個RAM單元值求和作為初始值,這可以通過設置一個RANDOM變量,在程序初始化部分調(diào)用隨機數(shù)產(chǎn)生子程序RAND給其賦值實現(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> ?。?)反應時間的計算</p><p>  在點亮搶答允許燈前提取當前時間,記錄為START_S , START_MS 。在檢測

28、到有選手搶答后,再次提取當前時間,記錄為END_S,END_MS。兩次相減,考慮邊界條件,則得到反應時間 REACT_S,REACT_MS。按測試鍵,再將反應時間顯示在屏幕上。</p><p><b>  ;取當前時間</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)用取點亮搶答燈時的精確時間 用于計算反應時間</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>  ;計算反應時間</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>  (4)搶答時“嘟”的響聲</p><p>

35、  INT 21H的功能號02H 功能描述:響鈴。入口參數(shù):AH=02H。通過DL輸入ASCII碼為07。本程序用這個中斷響鈴。</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>  設置ENABLEA、ENABLEB變量表示選手有無搶答,如果搶答則屏蔽其答題信息。首先在搶答允許燈亮之前使其值賦0。在點亮搶答燈后立即(下一行程序)檢測按鍵狀態(tài),如果此時A鍵為‘1’,則說明A提前按鍵了,跳過檢測B,否則使其賦1,表示沒有提前按鍵。同理檢測B有無提前。在檢測A、B誰先搶答前,要先判斷對應

37、的ENABLE值,如果為1,則繼續(xù)檢測A鍵是否為1,否則跳過再次循環(huán)檢測。</p><p>  四. 方案實現(xiàn)與測試</p><p>  調(diào)試分硬件調(diào)試和軟件調(diào)試,在實驗時,應先進行硬件調(diào)試,確保試驗箱、各個芯片、連線均完好,在進行軟件調(diào)試。</p><p>  硬件調(diào)試可通過一個簡單的方法進行:選取一個以前實驗調(diào)試好的標準程序運行,所選程序要用到本次試驗用到的各個

38、部件(8255各口,8253各口,280和288口),觀察運行結果是否正常,如果正確,基本上說明硬件完好。也可DEBUG相關指令測試各個部件。</p><p>  軟件調(diào)試可以使用TD單步跟蹤,但是在前期這樣很浪費時間,前期最好分模塊進行調(diào)試,將每個小功能分別寫成一個程序,一個一個調(diào)試,調(diào)試小程序較為簡單。確保每個模塊均能實現(xiàn)相應功能的前提下,用“滾雪球”的方式,將他們拼起來。在調(diào)試拼接程序時盡量不要改每個模塊內(nèi)

39、部代碼,因為最有可能的問題是時序和跳轉關系的問題。如果還是有問題,就可以用TD跟蹤。</p><p>  測試方案及結果如下表所示:</p><p>  由上面的測試方案及結果可得:設計的程序符合課程設計的要求。</p><p><b>  五.分析與總結</b></p><p><b>  1、分析</

40、b></p><p>  這個實驗僅完成了基礎實驗的部分,還可以通過改進實現(xiàn)更多的功能。但是由于時間的問題就沒能完成進一步設計要求。時候實驗只能進行一次搶答,通過做了一些其它的修改終于可以進行多次搶答。由于程序框架設計的問題,程序的跳轉關系看起來有一些混亂。</p><p>  雖然,我僅僅完成了實驗的基本要求,但是,我覺得自己已經(jīng)學到了很多。</p><p>

41、;<b>  2、總結</b></p><p>  這個課程設計實驗的驗收,意味著《微機系統(tǒng)與接口》這門課程的結束。</p><p>  通過這門課程的學習,我對硬件設計有了一個較為系統(tǒng)的認識。而實驗課程的安排則讓我們對抽象理論知識有了一個更為直觀的認識,也幫助我們加深了對這門課程的理解。之前的小實驗我們緊緊是完成一些簡單的輸入輸出、中斷、一些芯片的使用、A/D及D/

42、A轉換等待,而這次實驗將以前的小實驗結合并且加以修改,則實現(xiàn)了許多可以在現(xiàn)實生活中應用的程序。</p><p>  雖然實驗的過程中遇到了一些問題,很多從未見過的問題都不知道該怎么解決,但是通過查閱書籍與其他同學的交流,最終還是克服了這些問題,完成了這個實驗。程序并不完美,還有許多可以加以修改的地方,但是在實驗的過程中學到了很多知識,并且弄明白了一些以前一直并不十分理解的問題。并且,通過本次設計實驗,我基本掌握了

43、軟硬件調(diào)試問題,從硬件角度深入理解與運用8255的并行輸入輸出功能。同時這次課程設計也讓我體會到團隊合作的重要性和在已有的學習實驗任務重的情況下如何合理安排時間和協(xié)調(diào)組員工作進度的重要性。</p><p>  總之,這次綜合設計實驗讓我收獲很多。</p><p><b>  參考書目:</b></p><p>  楊素行《微型計算機系統(tǒng)原理及應

44、用》,北京,清華大學出版社,2004年</p><p>  微機實驗及課程設計教程(試用版3.0),東南大學《微機系統(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、;開關輸入</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)生初始隨機數(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>  ;關斷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 ;判斷主持人開關是復位還是啟動</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>  ;開始計數(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 ;判斷主持人開關是復位還是啟動</p><p>  JZ WAIT_FOR_ST

67、ART</p><p>  ;按下啟動鈕取當前時間</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;延時一點</p><p><b>  ;關閉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;延時一點</p><p>

74、;<b>  ;關閉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 ;是否到了點亮搶答燈的時間</p&g

76、t;<p>  JGLIGHT1</p><p>  JMPSTART_GAME </p><p><b>  LIGHT1:</b></p><p>  PUSH CX ;DOS功能調(diào)用取點亮搶答燈時的精確時間 用于計算反應時間</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 ;檢測開關狀態(tài)</p><p>  INAL , DX </p><p>  TESTAL , 01000000B;如果燈亮的時候是沒有按下就開啟搶答使能</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 ;點亮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 ;點亮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 ;判斷主持人開關是復位還是啟動</p><p>  JZ SKIP1</p><p><b>  ;取當前時間</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;延時一點</p><p><b>  ;關閉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;延時一點</p><p><b>  ;關閉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 ;計算反應時間</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>  ;按下,顯示反應時間</p><p><b>

101、  KEYT:</b></p><p>  MOVDL , REACT_S</p><p>  MOV RANDOM , AL</p><p>  ADD RANDOM , 3 ;用上次的反應時間做下次的隨機數(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>  ;停止計數(shù)</b></p><p>  MO

107、VAL , 00000100B </p><p>  MOVDX , P8255M </p><p>  OUTDX , AL</p><p><b>  ;關主持人燈</b></p><p>  MOVAL , 00000110B </p><p>  ;MOVDX , P8255M

108、</p><p>  OUTDX , AL</p><p><b>  ;關搶答提示燈</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 ;按下,顯示反應時間</p><p>  MOV DX , P8255A</p><p>  IN AL , DX</p><p>  TEST AL , 01H ;判斷主持

111、人開關是復位還是啟動</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論