久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15239|回復(fù): 9
收起左側(cè)

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

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

題        目:   競賽搶答器設(shè)計        

學(xué) 生 姓 名:卓*強

學(xué)  院(系):信息數(shù)理學(xué)院專 業(yè) 班 級:計算機141

校內(nèi)指導(dǎo)教師:       潘*     專業(yè)技術(shù)職務(wù):副教授

實 習(xí) 時 間:2017619 201777

硬件實習(xí)任務(wù)書

一、設(shè)計題目

4路競賽搶答器設(shè)計

二、設(shè)計背景

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

三、設(shè)計內(nèi)容及目標(biāo)

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

四、進度安排

周次
工 作 內(nèi) 容
預(yù) 定 目 標(biāo)
第17周周一
題目安排;圖書館查相關(guān)資料
查閱相關(guān)資料
第17周周二、周三
系統(tǒng)硬件設(shè)計及軟件設(shè)計
實現(xiàn)系統(tǒng)硬件和軟件設(shè)計
第17周周四
設(shè)計成果檢查及指導(dǎo)
確定設(shè)計成果
第17周周五
完善硬件及軟件設(shè)計;開始準備實習(xí)報告初稿。
完善軟件硬件設(shè)計
第18周
學(xué)習(xí)Proteus仿真軟件,并仿真系統(tǒng)
熟悉Proteus仿真軟件,并成功仿真系統(tǒng)
第19周周一至周四
完成實習(xí)任務(wù);完善實習(xí)報告。
寫好硬件實習(xí)報告,調(diào)試好系統(tǒng)
第19周周五
答辯并且驗收實習(xí)報告
答辯并且驗收實習(xí)報告

五、設(shè)計時間:2017619日到  201777


  計算機科學(xué)與技術(shù)  系               指導(dǎo)教師    潘 操                                            



微機原理與接口技術(shù)硬件實習(xí)報告


目 錄

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



微機原理與接口技術(shù)硬件實習(xí)報告


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

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


圖3 8253引腳圖

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


圖4 系統(tǒng)硬件原理圖

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


圖5 顯示選手電路原理圖

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


圖6計時電路原理圖

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

圖7 中斷電路原理圖

3.2 軟件設(shè)計3.2.1 軟件設(shè)計程序流程圖
圖8 系統(tǒng)主程序流程圖
3.2.2 軟件設(shè)計程序代碼及分析

4 實習(xí)結(jié)果分析

本次實習(xí)我們組是設(shè)計一個競賽搶答器,能夠?qū)崿F(xiàn)搶答、計時以及顯示的功能。我們運用兩個8255A芯片、一個8253芯片以及一個8259芯片來控制搶答過程的各項功能的實現(xiàn)。第一個8255A芯片A口控制搶答器的按鈕,B口控制準備、關(guān)閉、暫停以及計時按鈕,C口控制一個7段數(shù)碼管,用來顯示搶答的號碼。第二個8255A芯片A口控制片選信號,B口控制兩個7段數(shù)碼管用來顯示倒計時的時間,C口控制倒計時的開始和終止。8259芯片控制搶答器系統(tǒng)的中斷。

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





圖 9

圖 10

圖11

圖12





5 實習(xí)心得5.1 實習(xí)日記

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


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

6月22日

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

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


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

編寫搶答部分代碼段

編寫計時部分代碼段

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

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

6月30日

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


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

編寫、檢查和完善報告

7月4日

5.2 心得體會

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

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

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

單片機源程序如下:
  1. ;...............................................設(shè)置各個芯片的端口
  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定義字節(jié),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;關(guān)中斷,防止有些硬件中斷對程序的干擾
  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              ;設(shè)置中斷向量   源變址寄存器,用于存放源操作數(shù)的偏移地址
  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不用,標(biāo)志位,邊沿觸發(fā),8086不用,單級使用,需要設(shè)置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 標(biāo)志位,特殊全嵌套方式,8259A為從片,AEOI自動結(jié)束中斷,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結(jié)束中斷
  62.         OUT DX,AL
  63.               ;完成8259初始化

  64.               mov al,cnt;控制操作次數(shù)
  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;數(shù)碼管不亮
  86. ;**********************************程序初始化
  87. L:
  88.               mov dx,302h;指向B口
  89.               in al,dx;獲取B口內(nèi)容
  90.               cmp al,0ffh;判斷是否什么都沒按
  91.               jz L
  92.               call delay10
  93.               cmp al,011111110b              ;判斷是不是按下準備鍵
  94.               jz  L1;跳轉(zhuǎn)到開始段代碼
  95.               jmp L
  96. ;**********************************復(fù)位()
  97. L3:            
  98.               mov dx,IPC;指向A8255C口
  99.               mov al,011000000b
  100.               out dx,al                            ;數(shù)碼管復(fù)位為0
  101.             
  102. ;***********************************開始 數(shù)碼管顯示為0
  103. L1:            
  104.               mov dx,304h;指向C口
  105.               mov al,0c0h
  106.               mov flag,0;無人搶答
  107.               nop;產(chǎn)生微小延遲


  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;獲取內(nèi)容
  118.               cmp al,7fh;判斷是否按了重置系統(tǒng)按鍵
  119.               jz L3;跳到復(fù)位段
  120.               cmp al,0F7h;判斷是否按了結(jié)束按鍵
  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. ;**********************************根據(jù)按下的值查表
  134. GKEY:
  135.               mov               ah,keydata[bx];查0-7數(shù)據(jù)表
  136.               cmp               al,ah;比較是否與選手號相同
  137.               jz               DISP;相同跳轉(zhuǎn)到DISP
  138.               inc               bl;不相同加1繼續(xù)比較
  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;數(shù)碼管輸出選手號
  147.               mov tmp,al;將選手號賦給tmp(3fh)
  148.               mov dx,IPB;指向C8255B口
  149. ;*********************************延時等待計時
  150. waits:
  151.               call delay10
  152.               in al,dx;獲取B口內(nèi)容
  153.               cmp al,11011111b              ;判斷是不是按下計時鍵
  154.               jz L4;若按下計時鍵跳轉(zhuǎn)到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、只讀低字節(jié)、方式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、只讀高字節(jié)、方式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. ;********************************數(shù)碼管計數(shù)的顯示
  189. LSP:     

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

  198.        mov dx,APA              ;              指向A8255A口
  199.        mov al,ah;(00000010B)與SB1數(shù)碼管相連
  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. ;.....................................結(jié)束計時
  210. ire:
  211.               mov dx,APC;指向A8255C口
  212.               mov al,0
  213.               out dx,al;結(jié)束與8253的連接

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


  223. IT proc
  224.        cli;關(guān)閉中斷
  225. ;********************************計時100ms   
  226.        inc MS;初始為0H
  227.        cmp MS,200H;調(diào)節(jié)時間快慢
  228.        jne re;相等跳轉(zhuǎn)(打開中斷)
  229.        mov MS,0H
  230.        jmp ad
  231. ;********************************秒的第二位減為0時重新賦值為9
  232. init:
  233.        mov HH,0aH;第二位計時器變?yōu)?
  234.        DEC HL;第一位計時器減1
  235.        jmp ad
  236. ;*******************************倒計時計數(shù) 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;獲取內(nèi)容
  257.               cmp al,7fh;判斷是否按重置系統(tǒng)鍵
  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跳轉(zhuǎn)到out1
  268.               cmp HH,0;比較第二位計時器是否為0
  269.               jz  init;第二位計時器變?yōu)?,第一位計時器減一(數(shù)碼管輸出)
  270.               jmp oend
  271. ;******************************計數(shù)判斷以及跳轉(zhuǎn)
  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跳轉(zhuǎn)oend
  284.               jmp ire;若為0結(jié)束計時
  285. ……………………

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

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



回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

你知道原因了嗎?
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:1104687 發(fā)表于 2023-12-17 17:44 | 顯示全部樓層
學(xué)長唉。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.超碰| 中文在线观看免费高清 | 午夜激情在线观看 | 欧美黄网站 | 免费一级a毛片 | 午夜网| 精品在线免费视频 | 久久久精品一区 | 视频一区二区三区在线观看 | 在线观看国产黄色 | 国内精品视频在线观看 | 国产小视频在线 | 日韩精品一级 | av在线播放观看 | 国产福利视频在线 | 亚洲精品一区二三区不卡 | 国产福利小视频 | 国产午夜av | 国产色网站 | 日本欧美视频 | 欧美日韩国产在线 | 亚洲国产网站 | 毛片在线免费播放 | 成年女人毛片 | 成人香蕉网 | 日韩欧美一级片 | 特黄aaaaaaaaa真人毛片 | 日韩在线欧美 | 日韩国产一区二区三区 | 亚洲欧美国产毛片在线 | 亚洲精品中文字幕乱码三区91 | 中文在线观看免费网站 | 欧美三级韩国三级日本三斤在线观看 | 成人免费毛片入口 | av不卡在线观看 | 欧美国产视频 | 午夜视频在线看 | 国产蜜臀av| 天天视频黄 | www.国产精品.com | 亚洲免费小视频 |