欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15067|回復: 9
收起左側

8086 4路競賽搶答器設計實習報告與源程序(8255+8259+8253+8086)

[復制鏈接]
ID:270563 發表于 2018-1-3 09:16 | 顯示全部樓層 |閱讀模式
word中有詳細的4路競賽搶答器的具體實驗流程圖,關于8086詳細解釋,8255等
微機原理與接口技術硬件實習報告

題        目:   競賽搶答器設計        

學 生 姓 名:卓*強

學  院(系):信息數理學院專 業 班 級:計算機141

校內指導教師:       潘*     專業技術職務:副教授

實 習 時 間:2017619 201777

硬件實習任務書

一、設計題目

4路競賽搶答器設計

二、設計背景

隨著計算機技術的不斷發展,基于微處理器的控制系統應用非常廣泛,通過自己動手設計一個基于8086CPU的競賽搶答器,進一步了解計算機的工作原理,接口技術,提高軟硬件綜合應用能力,即對微機原理,接口技術,匯編語言程序設計進行綜合訓練。

三、設計內容及目標

設計內容:
設計一個4路競賽搶答器,綜合應用8255并行接口、8259中斷和8253定時器等知識。邏輯開關K0---K3代表搶答按鈕,當某個邏輯開關閉合時,相當于搶答按鈕按下,此時在七段數碼管上將其號碼顯示出來,并使喇叭響一聲(或者以發光二極管代替),包括開始搶答信號的接收;計時器的倒計時;檢查搶答按鈕并顯示在數碼管上;任意鍵退出程序。
設計目標:
1、綜合運用相關課程中所學到的理論知識去獨立完成某一設計課題;
2、通過查閱手冊和相關文獻資料,培養學生獨立分析和解決問題的能力;
3、進一步熟悉8086CPU和常用接口電路,加深對專業知識和理論知識學習的認識和理解
4、學會撰寫硬件實習的總結報告;
5、培養嚴肅認真的工作作風和嚴謹的科學態度。

四、進度安排

周次
工 作 內 容
預 定 目 標
第17周周一
題目安排;圖書館查相關資料
查閱相關資料
第17周周二、周三
系統硬件設計及軟件設計
實現系統硬件和軟件設計
第17周周四
設計成果檢查及指導
確定設計成果
第17周周五
完善硬件及軟件設計;開始準備實習報告初稿。
完善軟件硬件設計
第18周
學習Proteus仿真軟件,并仿真系統
熟悉Proteus仿真軟件,并成功仿真系統
第19周周一至周四
完成實習任務;完善實習報告。
寫好硬件實習報告,調試好系統
第19周周五
答辯并且驗收實習報告
答辯并且驗收實習報告

五、設計時間:2017619日到  201777


  計算機科學與技術  系               指導教師    潘 操                                            



微機原理與接口技術硬件實習報告


目 錄

1 實習目的
2 課題方案原理
2.1 主要工程問題
2.2 解決方案
2.2.1提出方案
2.2.2方案選擇
2.3 相關核心模塊(技術)介紹
2.3.1并行接口芯片8255A
2.3.2中斷控制芯片8259A
2.3.3可編程定時芯片8253
3 課題設計及實現
3.1硬件設計
3.1.1硬件設計原理
3.1.2顯示選手電路設計
3.1.3計時電路設計
3.1.4中斷電路設計
3.2 軟件設計
3.2.1 軟件設計程序流程圖
3.2.2 軟件設計程序代碼及分析
4 實習結果分析
5 實習心得
5.1 實習日記
5.2 心得體會
參 考 文 獻



微機原理與接口技術硬件實習報告


1 實習目的
(1)進一步掌握8255、8253以及8259顯示電路的編程方法。
(2)進一步掌握定時器的使用和編程以及中斷處理程序的編程方法。
(3)進一步熟悉8086CPU和常用接口電路,加深對專業知識和理論知識學習的認識和理解。
(4)程序功能按照要求實現,程序能夠自由開始競賽,競賽開始后選手進行搶答,搶答選手號碼通過數碼管顯示出來,選手回答時間進行計時,選手回答完畢重新開始下一輪搶答。
2 課題方案原理2.1 主要工程問題
此次實習利用8086芯片、并行接口芯片8255A、中斷接口芯片8259和定時芯片8253,設計一個4人競賽搶答器。通過8255A芯片要實現主持人的競賽控制、選手的搶答按鈕、選手號碼的顯示和倒計時顯示,顯然這通過一個8255A芯片是行不通的,所以本次實驗用到了2個8255A芯片分別來實現功能。
主持人能夠中斷計時,需要用8259芯片來實現比賽的中斷,這加大了程序的復雜度,需要用到不同的中斷類型去響應中斷。比賽要能夠計時,這需要將8255A芯片與8253芯片結合在一起。
2.2 解決方案2.2.1提出方案
方案一 選用8255A,8253,8259,數碼管
1.8253作為定時器使用。
2.8259利用IR0端作為計時暫停的中斷引入端。
3. 8255 作為并行輸入輸出,A口接4個搶答開關,B口接準備鍵、開始計時鍵、暫停鍵和關閉鍵,C口數碼管顯示。
  • 顯示區由3LED數碼管8個按鈕組成。
方案二 自鎖開關、NE555定時器、共陽極數碼管
  • 鎖存器鎖存號碼。
  • NE555定時器作為定時器使用
  • 共陽極數碼管作為顯示數字使用。
方案三 采用AT89C51作為系統控制器的方案。單片機可以通過編程實現各種不同的功能,同時經過多年發展越來越多的型號被制造出來滿足大多數使用需求。在方案中用模塊化設計思想,設計出各種所需要的模塊,再通過單片機聯系起來,從而形成一個整體,實現所需要的功能。
方案四 獨立式鍵盤、單片機、數碼管、蜂鳴器
系統采用6個獨立式鍵盤作為按鍵,通過單片機不停地掃描按鍵來控制LED數碼管的顯示以及蜂鳴器,當按下啟動按鍵后,經單片機處理,輸出控制信號,數碼管從30開始進入減計時并在數碼管上顯示剩余時間,在有選手按下按鍵時,就會有對應于這個按鍵的編碼在數碼管上顯示,同時蜂鳴器給出聲響來提示主持人和選手,如果在30秒內沒有選手搶答,則本次搶答無效,系統封鎖輸
入電路,禁止選手超時搶答,定時器上顯示00。
用一片四D觸發器74LS175和四輸入2或非門CD4002實現。四D觸發器輸出經四輸入或非門到四路搶答按鍵開關,加到觸發器的四個輸入端,同時經四輸入或非門和反相器作為四D觸發器的時鐘信號,四D觸發器清零端經上拉電阻接電源,同時經過清零控制開關到地。電路簡單成本低,稍加擴展就能達到實用化。
2.2.2方案選擇
方案一采用中斷,程序結構化更為清晰,且cpu少了循環掃描的時間,效率較高。而且多用了一個8259中斷控制芯片,一個8253定時/計時芯片,程序編制上涉及到中斷服務子程序的編寫,雖然稍顯復雜,但是能夠很好的實現實驗要求。電路所需的器件較少,電路連接簡單化,調試更方便,布局美觀。
方案二采用74LS375、74LS148、CD4511分別作為搶答信號的鎖存、編碼和譯碼輸出,來完成搶答部分,所需的元件較多且實際中實現鎖存功能時也比較繁瑣難實現,所需器件都是純電子器件,沒有軟件的參與,不易擴展和修改而且電路結構復雜、調試困難,電子器件管腳很多,實際搭建起來費時費力,連電路容易出錯,再就是學院器材庫中并沒有NE555定時器、74LS375鎖存器以及自鎖開關,找別的器材替換會導致電路連接更復雜。
方案三是選用了單片機,該方案不需要軟件編程,只需要硬件電路不出錯就可以實現需要的功能。但是電路結構復雜,不利于調試,成本較高,實際接線的時候會因導線連接混亂造成干擾和短路等故障,而且我們根本毫無頭緒。
方案四采用單片機,體積小、價格低、應用方便、穩定可靠、單片機將很多任務交給軟件編程去實現,大大簡化了外圍硬件電路,使外圍電路的實現簡單方便,電路所需的器件較少,電路連接簡單化,調試更方便,布局美觀。然而目前對于單片機的編程還不熟悉,無法單獨實現。
經過我們深思熟慮討論,決定采用效率更高、程序結構化更清晰的方案一,完成基本和擴展功能。用Proteus畫電路來進行仿真調試,再進行逐步改進、調試好后連接電路。
2.3 相關核心模塊(技術)介紹2.3.1并行接口芯片8255A
8255A芯片具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規模集成電路。8255A的通用性強,使用靈活,通過它CPU可直接與外設相連接。
8255A在使用前要寫入一個方式控制字,選擇A、B、C三個端口各自的工作方式,共有三種;
方式0 :基本的輸入輸出方式,即無須聯絡就可以直接進行的 I/O方式。其中A、B、C口的高四位或低四位可分別設置成輸入或輸出。
方式1 :選通I/O,此時接口和外圍設備需聯絡信號進行協調,只有A口和B口可以工作在方式1,此時C口的某些線被規定為A口或B口與外圍設備的聯絡信號,余下的線只有基本的I/O功能,即只工作在方式0.
方式2: 雙向I/O方式,只有A口可以工作在這種方式,該I/O線即可輸入又可輸出,此時C口有5條線被規定為A口和外圍設備的雙向聯絡線,C口剩下的三條線可作為B口方式1的聯絡線,也可以和B口一起方式0的I/O線。
8255A是一個并行輸入、輸出器件,具有24個可編程設置的I/O口,包括3組8位的I/O為PA口、PB口、PC口,又可分為2組12位的I/O口:A組包括A口及C口高4位,B組包括B口及C組的低4位。8255A引腳圖如下所示:

圖1  8255A引腳圖
2.3.2中斷控制芯片8259A
8259A是專門為了對8085A和8086/8088進行中斷控制而設計的芯片,它是可以用程序控制的中斷控制器。單個的8259A能管理8級向量優先級中斷。在不增加其他電路的情況下,最多可以級聯成64級的向量優級中斷系統。8259A有多種工作方式,能用于各種系統。各種工作方式的設定是在初始化時通過軟件進行的。 在總線控制器的控制下,8259A芯片可以處于編程狀態和操作狀態,編程狀態是CPU使用IN或OUT指令對8259A芯片進行初始化編程的狀態。
功能:就是在有多個中斷源的系統中,接受外部的中斷請求,并進行判斷,選中當前優先級最高的中斷請求,再將此請求送到cpu的INTR端;當cpu響應中斷并進入中斷子程序的處理過程后,中斷控制器仍負責對外部中斷請求的管理。
8259A的主要功能如下:
①一片8259A可以接受并管理8級可屏蔽中斷請求,通過8片8259A級聯可擴展至63級可屏蔽中斷優先控制。
②對每一級中斷都可以通過程序來屏蔽或允許。
③在中斷響應周期,8259A可為CPU提供相應的中斷類型碼。
④具有多種工作方式,并可通過編程來加以選擇。
8259A引腳圖如下所示:

圖2  8259A引腳圖
2.3.3可編程定時芯片8253
8253芯片是可編程計數器/定時器。8253內部有三個計數器,分別稱為計數器0、計數器1和計數器2,他們的機構完全相同。每個計數器的輸入和輸出都決定于設置在控制寄存器中的控制字,互相之間工作完全獨立。每個計數器通過三個引腳和外部聯系,一個為時鐘輸入端CLK,一個為門控信號輸入端GATE,另一個為輸出端OUT。每個計數器內部有一個8位的控制寄存器,還有一個16位的計數初值寄存器CR、一個計數執行部件CE和一個輸出鎖存器OL。
本次實驗8253作為定時器,作定時器時, 計數器的初值即定時系數應根據要求定時的時間進行如下運算才能得到:
定時系數=需要定時的時間/時鐘脈沖周期
①設置通道:向方式控制字寄存器端口寫入方式選擇控制字,用于確定要設置的通道及工作方式;
②計數/定時:向通道寫入計數值,啟動計數操作;
③讀取當前的計數值:向指定通道讀取當前計數器值時,8253將計數器值存入鎖存器,從鎖存器向外提供當前的計數器值,計數器則繼續作計數操作。
④計數到:當計數器減1為0時,通過引腳OUTi向外輸出“到”的脈沖信號。
計數初值輸入存放在初值寄存器中,計數開始或重裝入時被復制到計數器中。
鎖存器在非鎖存狀態,其值隨計數器的變化而變化;一旦鎖存了計數器的當前值,直到鎖存器值被讀取后才能解除鎖存狀態。


圖3 8253引腳圖

3 課題設計及實現3.1硬件設計3.1.1硬件設計原理
本實驗用到了兩個8255芯片,第一個8255芯片的PC0至PC7分別與數碼管的八個引腳相連,將8255芯片中需要顯示的信息通過C口送入數碼顯示區,由顯示電路設計數碼管的亮滅顯示出來。8255芯片的PA0至PA7分別與4個撥碼開關相連,將四位選手的搶答信號(由撥碼開關控制)通過A口送入8255芯片。8255芯片的PB0口對應準備按鍵,PB3口對應結束按鍵,PB5口對應著開始計時按鍵,PB7口對應著重置系統按鍵。將搶答開始和結束等信號(由開始按鍵和結束按鍵控制)通過B口送入8255芯片。第二個8255芯片的PB0至PB7通過74L373譯碼電路分別與兩個數碼管的八個引腳相連,將8253芯片中的計時方式通過芯片的B口入數碼顯示區,由顯示電路設計數碼管的亮滅顯示出來。系統硬件原理圖如下圖所示:


圖4 系統硬件原理圖

3.1.2顯示選手電路設計
本實驗的其中一個8255芯片實現了數碼管的顯示、選手的搶答功能和主持人對本次搶答的控制。8255芯片工作在方式0,A端口與B端口輸入,C端口輸出。
8255芯片的A口與8個選手按鍵相連接,當選手搶答成功時,將選手號碼傳遞給芯片。而8255芯片的C口分別與數碼管的八個引腳相連,將A口傳遞過來的信息通過C口送入數碼顯示區,由數碼管的亮滅顯示出來。顯示選手電路原理圖如下圖所示:


圖5 顯示選手電路原理圖

3.1.3計時電路設計
本次試驗的匯編程序中設立了一個flag變量(初始值為0H),當程序掃描到有選手搶答后,flag加1,其他選手不能進行搶答。此時等待主持人按下第一個8255芯片上的開始計時按鍵,若按下計時鍵,程序將通過8253芯片的計時功能將片選信號由第二個8255芯片的B口送入數碼顯示區,可以從數碼管的亮滅顯示出來。計時電路原理圖如下圖所示:


圖6計時電路原理圖

3.1.4中斷電路設計
當主持人按下8255芯片上的結束按鍵或重置系統按鍵時,8255芯片將中斷信號傳遞給8259芯片,搶答結束。中斷電路原理圖如下圖所示:

圖7 中斷電路原理圖

3.2 軟件設計3.2.1 軟件設計程序流程圖
圖8 系統主程序流程圖
3.2.2 軟件設計程序代碼及分析

4 實習結果分析

本次實習我們組是設計一個競賽搶答器,能夠實現搶答、計時以及顯示的功能。我們運用兩個8255A芯片、一個8253芯片以及一個8259芯片來控制搶答過程的各項功能的實現。第一個8255A芯片A口控制搶答器的按鈕,B口控制準備、關閉、暫停以及計時按鈕,C口控制一個7段數碼管,用來顯示搶答的號碼。第二個8255A芯片A口控制片選信號,B口控制兩個7段數碼管用來顯示倒計時的時間,C口控制倒計時的開始和終止。8259芯片控制搶答器系統的中斷。

我們這個搶答器操作簡單,用戶能夠很快的了解其功能,使用方便。仿真效果如下圖所示,開始仿真后如圖9所示。開始使用時只要按下準備鍵,數碼管亮起“0”,如圖10所示,此時如果沒人搶答可按關閉鍵終止搶答回到如圖9時的狀態,如果有人搶答就會在數碼管顯示所搶答選手的號碼,如圖11所示。有人搶答成功后便可以按下計時按鈕開始進行30秒倒計時,如圖12所示。在倒計時期間內,按下暫停按鈕可以終止倒計時,之后重新按下準備鍵就可以開始新一輪的搶答。





圖 9

圖 10

圖11

圖12





5 實習心得5.1 實習日記

2017年6月19日-22日   十七周星期一至十七周星期四


卓長強(組長)
張遲
仲文
吳智文
6月19日
圖書館查閱資料
6月20日
網上查閱資料,構思電路和主程序流程圖
6月21日
構思及完成主程序流程圖
構思及完成硬件電路圖

6月22日

老師檢查,提出問題
思考老師提出的問題及修改方案

2017年6月23日-30日   十七周星期五至十八周星期五


卓長強
張遲(組長)
仲文(組長)
吳智文
6月23日
修改主程序流程圖
修改硬件電路圖
6月26日

編寫搶答部分代碼段

編寫計時部分代碼段

6月27日
6月28日
合并代碼段,運行、仿真、調試及連線
6月29日

修改完善代碼,并嘗試拓展功能

6月30日

2017年7月3日-4日   十八周星期五至十九周星期二


卓長強
張遲
仲文
吳智文(組長)
7月3日

編寫、檢查和完善報告

7月4日

5.2 心得體會

本次實習是針對我們所學的知識完成一個搶答器的設計,綜合應用8255并行接口、8259中斷和8253定時器等學過的知識進行設計,在我們組員的共同努力下最終完成了這次實習任務,搶答器能夠正常工作,實現了搶答、計時、重置等功能。

通過這次實習,我對所學的知識掌握的更加透徹了,讓我更好的掌握了8259A、8255A、8253芯片的工作原理、方式及其應用。在這次實習中我們也遇到了很多困難,但是在我們組員的互相協助下克服了一個個難題,這讓我們意識到了團隊的重要性,在組員的團結合作下,工作效率越來越高,很多問題都能迎刃而解,最終完成了搶答器的設計。此次設計中,我深刻的體會到了知識的重要性,還要求我們要善于思考。同時設計不能單純的考慮設計本身,要想到它是否切合實際,能否適用,我們的這個搶答器功能還不是很完善,但是也能很好實現搶答的功能,希望經過進一步的努力讓這個作品更加完美。

參 考 文
[1]仁向民·《微機接口技術實用教程》[M].北京:清華大學出版社
[2]周荷琴,吳秀清.微型計算機原理與接口技術[M].合肥:中國科學技術大學出版社,2008年6月.
[3]張雪蘭、譚毓安·《匯編語言程序設計》[M].北京:清華大學出版社
[4]寧飛,王維華,孔宇.微型計算機原于是與接口實踐[M].北京:清華大學出版社,2006.
[5]裘雪紅,李伯成,劉凱.微型計算機原理及接口技術[M].西安:西安電子科技大學出版社.2007年3月.
[6]劉紅玲、邵曉根·《微機原理與接口技術》[M].北京:中國電力出版社

單片機源程序如下:
  1. ;...............................................設置各個芯片的端口
  2. C8255 EQU 306H                            ;0011 0000 0110b
  3. IPA EQU 300H                            ;0011 0000 0000b
  4. IPB EQU 302H                            ;0011 0000 0010b
  5. IPC EQU 304H                            ;0011 0000 0100b

  6. A8255 EQU 206H                            ;0010 0000 0110b
  7. APA EQU 200H                            ;0010 0000 0000b
  8. APB EQU 202H                            ;0010 0000 0010b
  9. APC EQU 204H                            ;0010 0000 0100b

  10. C8253 EQU 106H                            ;0001 0000 0110b
  11. CPA EQU 100H                            ;0001 0000 0000b
  12. CPB EQU 102H                            ;0001 0000 0010b
  13. CPC EQU 104H                            ;0001 0000 0100b
  14.             

  15. code              segment 'code' ;定義代碼段
  16.               assume cs:code,ds:code
  17. ;.............................................偽指令(DB定義字節,DW定義字)
  18.                   TEMP DB 100 DUP(11)
  19.     LED DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
  20.     HH  DB 00H
  21.     HL  DB 00H
  22.     LP  DB 0H
  23.     MS  DW 0H
  24.             
  25. main proc far
  26. start:            
  27.               mov ax,code              ;建立DS段地址
  28.               mov ds,ax

  29. ;寫中斷***************************************************
  30.               cli;關中斷,防止有些硬件中斷對程序的干擾
  31.               mov cx,100h
  32. ini:
  33.               mov ax,0
  34.               mov es,ax  ; 附加段寄存器置0
  35.               mov dx,cx
  36.               dec dx
  37.               shl dx,1
  38.               shl dx,1
  39.               mov si,dx              ;設置中斷向量   源變址寄存器,用于存放源操作數的偏移地址
  40.               mov ax,offset int0 ;取中斷號0的偏移地址
  41.               ;stosw              ;存入串指令的字操作
  42.               mov es:[si],ax
  43.               mov ax,cs              ;seg int0
  44.               ;stosw              ;
  45.               mov es:[si+2],ax
  46.               loop ini

  47.                                           ;初始化8259
  48.         mov al,00010011b  ;000 1 0 0 1 1 8086不用,標志位,邊沿觸發,8086不用,單級使用,需要設置ICW4
  49.               mov dx,400H
  50.               out dx,al
  51.             
  52.               mov al,060h  ;01100 000 中斷類型號n的高5位  IR0
  53.               mov dx,402h
  54.               out dx,al

  55.               mov al,1bh  ;000 1  10 1 1 標志位,特殊全嵌套方式,8259A為從片,AEOI自動結束中斷,8086配置
  56.               out dx,al

  57.                      MOV DX,402h
  58.         MOV AL,00H               ;OCW1,八個中斷全部開放
  59.         OUT DX,AL

  60.         MOV DX,400h
  61.         MOV AL,60H              ;OCW2,非特殊EOI結束中斷
  62.         OUT DX,AL
  63.               ;完成8259初始化

  64.               mov al,cnt;控制操作次數
  65.         mov dx,0600h
  66.               out dx,al
  67.               sti;開中斷,允許硬件中斷
  68. ;*********************************************************


  69.               xor ax,ax
  70.                   mov es,ax
  71.             
  72.               mov ax,offset IT
  73.               mov es:[8H],ax

  74.               mov ax,seg IT
  75.               mov es:[0AH],ax
  76.                            
  77. ;**********************************初始化C8255            
  78. LL:
  79.               cli
  80.               mov dx,306H              ;指向控制寄存器
  81.               mov al,92h  ;A口方式0輸入,B口方式0輸入,C口輸出
  82.               out dx,al
  83.               mov dx,304h;指向C口
  84.               mov al,0FFh
  85.               out dx,al;數碼管不亮
  86. ;**********************************程序初始化
  87. L:
  88.               mov dx,302h;指向B口
  89.               in al,dx;獲取B口內容
  90.               cmp al,0ffh;判斷是否什么都沒按
  91.               jz L
  92.               call delay10
  93.               cmp al,011111110b              ;判斷是不是按下準備鍵
  94.               jz  L1;跳轉到開始段代碼
  95.               jmp L
  96. ;**********************************復位()
  97. L3:            
  98.               mov dx,IPC;指向A8255C口
  99.               mov al,011000000b
  100.               out dx,al                            ;數碼管復位為0
  101.             
  102. ;***********************************開始 數碼管顯示為0
  103. L1:            
  104.               mov dx,304h;指向C口
  105.               mov al,0c0h
  106.               mov flag,0;無人搶答
  107.               nop;產生微小延遲


  108. ;***********************************初始化A8255并進行按鍵檢測            
  109. AGAIN:
  110.               mov dx,0206h;指向A8255寄存器端口
  111.               mov al,92h ;A口方式0輸入,B口方式0輸入,C口輸出
  112.               out dx,al
  113.               mov dx,0204h;指向C口
  114.               mov al,0c0h;不可計時
  115.               out dx,al
  116.               mov dx,0302h;指向C8255的B口
  117.               in al,dx;獲取內容
  118.               cmp al,7fh;判斷是否按了重置系統按鍵
  119.               jz L3;跳到復位段
  120.               cmp al,0F7h;判斷是否按了結束按鍵
  121.               jz LL
  122.             
  123.               mov dx,0300h;指向C8255A端口
  124.               in al,dx
  125.               cmp al,0FFh;判斷是否沒有人搶答
  126.               jz AGAIN


  127.               call delay10                            ;延時防抖動
  128.               in al,dx;將選手號賦給al
  129.               cmp flag,1                            ;按下鍵后,判斷flag是否為1
  130.               jz AGAIN

  131.               inc flag;flag加1,其他選手不能再按
  132.               mov bx,0
  133. ;**********************************根據按下的值查表
  134. GKEY:
  135.               mov               ah,keydata[bx];查0-7數據表
  136.               cmp               al,ah;比較是否與選手號相同
  137.               jz               DISP;相同跳轉到DISP
  138.               inc               bl;不相同加1繼續比較
  139.               LOOP               GKEY
  140. ;**********************************再查表并顯示搶答的一組
  141. DISP:
  142.               inc bl
  143.               mov al,segdata[bx]
  144.               mov dx,IPC;指向C8255C口
  145.               not al
  146.               out dx,al;數碼管輸出選手號
  147.               mov tmp,al;將選手號賦給tmp(3fh)
  148.               mov dx,IPB;指向C8255B口
  149. ;*********************************延時等待計時
  150. waits:
  151.               call delay10
  152.               in al,dx;獲取B口內容
  153.               cmp al,11011111b              ;判斷是不是按下計時鍵
  154.               jz L4;若按下計時鍵跳轉到L4
  155.         jmp waits;等待按下計時鍵
  156. ;*********************************開始計時,計時完跳回程序最初位置
  157. L4:            
  158. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  159. mov sxh,0
  160. mov sss,1
  161. ;*********************************初始化
  162.        mov dx,A8255    ;選中控制寄存器  
  163.        mov al,80H   ;命令字 10000000(A、B、C口輸出)
  164.        out dx,al    ;初始化A8255

  165.        mov dx,C8253   ;00010110
  166.        mov al,00010100B;通道0、只讀低字節、方式2(二進制)
  167.        out dx,al   ;初始化8253   

  168.        mov ax,03E8H  ;十進制為1000   

  169.        mov dx,CPA                            ;指向8253通道0
  170.        mov al,0H
  171.        out dx,al

  172.        mov dx,C8253   ;001000              *****
  173.        mov al,00100100B;通道0、只讀高字節、方式2
  174.        out dx,al

  175.        mov dx,CPA   ;指向8253通道0
  176.        mov al,ah
  177.        out dx,al

  178.        mov dx,APC              ;              指向A8255C口
  179.        mov al,00010000B;與8253的start連接,開始計時
  180.        out dx,al
  181.               mov HH,00H;第二位計時器初值
  182.               mov HL,03H;第一位計時器初值
  183.               sti;打開中斷
  184. ;********************************初始賦值
  185. LOP1:
  186.        mov ah,00000010B;連接第二個計時器
  187.        mov LP,0
  188. ;********************************數碼管計數的顯示
  189. LSP:     

  190.        mov bx,offset HH
  191.        mov al,LP
  192.        xlat
  193.        mov bx,offset LED;數碼管數據表首地址
  194.        xlat ;查表,AL<-(BX+AL)
  195.             
  196.        mov dx,APB              ;              指向A8255B口
  197.        out dx,al ;輸出數據

  198.        mov dx,APA              ;              指向A8255A口
  199.        mov al,ah;(00000010B)與SB1數碼管相連
  200.        out dx,al

  201.        mov dx,APA              ;指向A8255A口
  202.        mov al,0H
  203.        out dx,al


  204.        shr ah,1;向右移1(00000001B)
  205.        inc LP

  206.        cmp ah,0H
  207.        jz  LOP1
  208.        loop LSP            
  209. ;.....................................結束計時
  210. ire:
  211.               mov dx,APC;指向A8255C口
  212.               mov al,0
  213.               out dx,al;結束與8253的連接

  214.               mov sss,0
  215. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  216.               jmp LL
  217. ;********************************延時循環
  218. ;loop1:
  219.               ;loop $
  220.               ;loop AGAIN
  221.               ret
  222. main endp


  223. IT proc
  224.        cli;關閉中斷
  225. ;********************************計時100ms   
  226.        inc MS;初始為0H
  227.        cmp MS,200H;調節時間快慢
  228.        jne re;相等跳轉(打開中斷)
  229.        mov MS,0H
  230.        jmp ad
  231. ;********************************秒的第二位減為0時重新賦值為9
  232. init:
  233.        mov HH,0aH;第二位計時器變為9
  234.        DEC HL;第一位計時器減1
  235.        jmp ad
  236. ;*******************************倒計時計數 C8255實時顯示搶答組號
  237. ad:
  238.               push dx
  239.               push ax
  240.               push bx
  241.               push cx
  242.               mov dx,C8255              ;0111 0000 0000b,8255A控制端口地址
  243.               mov al,92H              ;10010010b,方式選擇字:PA,PB輸入、PC輸出
  244.               out dx,al
  245.             
  246.               mov al,tmp
  247.               mov dx,IPC;指向C8255C口
  248.               out dx,al;輸出選手號
  249.             
  250.               pop cx
  251.               pop bx
  252.               pop ax
  253.               pop dx
  254.               out dx,al
  255.               mov dx,IPB;指向C8255B口
  256.               in al,dx;獲取內容
  257.               cmp al,7fh;判斷是否按重置系統鍵
  258.               jz start;回到start

  259.               cmp sxh,01h
  260.               jnz FH
  261. RES:
  262.               mov HH,0
  263.               mov HL,0
  264.               mov cx,0

  265. FH:
  266.     cmp HL,0;比較第一位計時器是否為0(初始為3)
  267.               JZ  out1;若為0跳轉到out1
  268.               cmp HH,0;比較第二位計時器是否為0
  269.               jz  init;第二位計時器變為9,第一位計時器減一(數碼管輸出)
  270.               jmp oend
  271. ;******************************計數判斷以及跳轉
  272. oend:
  273.        DEC HH              ;第二位計時器減一
  274.        cmp HH,00H
  275.        jne re
  276.        cmp HL,00H;判斷第一位計時器是否為0
  277.        jz out2
  278.        cmp HL,00H
  279.        jz re
  280.        jmp re
  281. out1:
  282.               cmp HH,0;判斷第二位計時器是否為0
  283.   jnz oend;不為0跳轉oend
  284.               jmp ire;若為0結束計時
  285. ……………………

  286. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整的word格式實驗報告文檔51黑下載地址(內含清晰圖片與完整程序):
競賽搶答器設計.doc (1.67 MB, 下載次數: 181)



回復

使用道具 舉報

ID:271823 發表于 2018-1-5 13:17 | 顯示全部樓層
請問你這個項目源碼包還有備份保留嗎
回復

使用道具 舉報

ID:271823 發表于 2018-1-5 13:52 | 顯示全部樓層
請問這個項目的源碼包還有備份存在嗎?可不可以給我發一份呢
回復

使用道具 舉報

ID:282852 發表于 2018-2-7 20:19 | 顯示全部樓層
有最后50多行的代碼嗎
回復

使用道具 舉報

ID:334927 發表于 2018-6-9 22:26 | 顯示全部樓層
為什么按文件里的程序和硬件連接仿真不出結果呢
回復

使用道具 舉報

ID:451030 發表于 2018-12-24 16:46 | 顯示全部樓層
浚宇y 發表于 2018-6-9 22:26
為什么按文件里的程序和硬件連接仿真不出結果呢

你知道原因了嗎?
回復

使用道具 舉報

ID:479827 發表于 2019-2-24 15:45 | 顯示全部樓層
你的Proteus仿真文件還在嗎
回復

使用道具 舉報

ID:566282 發表于 2019-6-18 23:57 | 顯示全部樓層
有人知道原因了嗎,我查了可能是cpu的問題
回復

使用道具 舉報

ID:373720 發表于 2019-6-23 15:04 來自觸屏版 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:1104687 發表于 2023-12-17 17:44 | 顯示全部樓層
學長唉。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表