版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b> 摘要1</b></p><p><b> 關(guān)鍵詞1</b></p><p><b> 第一章引言2</b>
2、;</p><p> 第二章 硬件系統(tǒng)設(shè)置3</p><p> 2.1 硬件系統(tǒng)原理圖3</p><p> 2.2 芯片資料介紹4</p><p> 2.2.1 8253芯片4</p><p> 2.2.1.1 8253內(nèi)部計(jì)數(shù)器的3個(gè)引腳4</p><p> 2.2.
3、1.2 8253的工作方式4</p><p> 2.2.1.3 8253的編程4</p><p> 2.2.2 8255芯片5</p><p> 2.2.2.1 連接外設(shè)的數(shù)據(jù)端口5</p><p> 2.2.2.2 8255工作方式5</p><p> 2.2.2.3 8255的編程
4、5</p><p> 2.2.3 8259芯片6</p><p> 2.2.3.1 8259的編程及操作方式6</p><p> 2.2.4 74ls240芯片7</p><p> 2.2.4.1 74ls240內(nèi)部結(jié)構(gòu)7</p><p> 2.2.4.2 芯片介紹7</p>
5、<p> 2.2.5 75452芯片7</p><p> 2.2.5.1 75452內(nèi)部結(jié)構(gòu)7</p><p> 2.2.5.2 芯片介紹8</p><p> 2.3 線路連線8</p><p> 2.3.1 實(shí)驗(yàn)連線8</p><p> 2.3.2 時(shí)鐘脈沖的產(chǎn)生8<
6、;/p><p> 2.3.3 鍵盤的設(shè)置9</p><p> 2.3.4 LED顯示器的設(shè)置10</p><p> 第三章 軟件系統(tǒng)設(shè)置12</p><p> 3.1程序流程圖12</p><p> 3.1.1 主程序流程圖12</p><p> 3.1.2 ‘0’ 處
7、理流程圖(開始計(jì)時(shí))13</p><p> 3.1.3 ‘1’處理流程圖(名次存儲(chǔ))13</p><p> 3.1.4 ‘2’ 處理流程圖(顯示成績(jī))14</p><p> 3.1.5‘3’處理流程圖(比賽結(jié)束1)15</p><p> 3.1.6 ‘4’處理流程圖(比賽結(jié)束2)15</p><p
8、> 3.1.7 中斷處理流程圖16</p><p> 3.2 參數(shù)信息17</p><p> 第四章 課程設(shè)計(jì)總結(jié)18</p><p> 4.1 心得體會(huì)18</p><p> 4.2 源程序清單19</p><p> 4.3 參考文獻(xiàn)25</p><p>&l
9、t;b> 摘要</b></p><p> 數(shù)字式秒表是一種用于體育中田徑比賽的一種計(jì)時(shí)裝置。</p><p> 本次課程設(shè)計(jì)是做一個(gè)數(shù)字式秒表,主要是利用8253作為定時(shí)器,為秒表提供定時(shí)脈沖,使用7段碼顯示器作為秒表時(shí)間顯示,用鍵盤控制秒表。 </p><p> 數(shù)字式秒表擁有以下幾點(diǎn)功能:</p><p> 1
10、:可控制比賽的開始和結(jié)束和繼續(xù)比賽;</p><p> 2:可記錄成績(jī),依次排名,給予顯示在第一位;</p><p> 3:可通過按鍵關(guān)閉設(shè)備</p><p><b> 關(guān)鍵詞</b></p><p> 80X86,8259中斷,8255,8253,鍵盤,LED動(dòng)態(tài)顯示 </p><p>
11、;<b> 引言</b></p><p> 微型計(jì)算機(jī)的新技術(shù)、新機(jī)型,新應(yīng)用層出不窮,日新月異。使得微機(jī)硬件得到飛速發(fā)展!人們對(duì)計(jì)算機(jī)計(jì)算的精度和軟件的逐步更新提出更高的要求。</p><p> 秒表在我們的生活總運(yùn)用比較廣泛,從各項(xiàng)體育賽事,到個(gè)人手機(jī)上的倒計(jì)時(shí)器,無處不在,怎樣提高其計(jì)算精度,提高運(yùn)算效率成為首要因素,基于此,此次課設(shè)我們用匯編語言,利用8
12、086CPU和PCI試驗(yàn)箱進(jìn)行數(shù)字式秒表的制作,我們將從硬件系統(tǒng)設(shè)置、軟件系統(tǒng)設(shè)置、課設(shè)總結(jié)(包括匯編源代碼、硬件系統(tǒng)設(shè)置原理圖,參考文獻(xiàn))幾方面介紹本次課設(shè)的主要成果。</p><p> 此課設(shè)主要利用8253的定時(shí)器輸出為秒表提供定時(shí)脈沖,7段碼顯示器作為秒表時(shí)間顯示,用鍵盤控制秒表的工作過程。鍵盤控制秒表計(jì)時(shí)的開始,記錄,結(jié)束,計(jì)時(shí)結(jié)束后按相應(yīng)按鍵顯示所記錄的時(shí)間。計(jì)時(shí)范圍為1分鐘,滿1分鐘自動(dòng)退出比賽,
13、計(jì)時(shí)精度為0.1秒。</p><p> 第一章為引言,粗略地介紹此次課設(shè)的主要內(nèi)容。</p><p> 第二章為硬件系統(tǒng)設(shè)置,在此章中從基本芯片入手,介紹8253、8255、8259的內(nèi)部結(jié)構(gòu)功能、工作方式以及初始化編程和74LS240P,75425N的真值狀態(tài),工作環(huán)境,以便讀者更容易了解此課設(shè)的基本部件,對(duì)硬件原理有逐步深入的了解。另外,從鍵盤和LED顯示器的設(shè)定的原理、編程進(jìn)行詳
14、細(xì)的描述。</p><p> 第三章為軟件系統(tǒng)設(shè)置,在此章中我們從秒表的五大功能機(jī)制入手,軟件設(shè)置中,我們給出了主程序,中斷程序以及各功能模塊的程序流程圖,使之實(shí)現(xiàn)一目了然。此外,還給出了參數(shù)信息,增加了匯編源代碼的可讀性。</p><p> 第四章為課程設(shè)計(jì)總結(jié)。此部分包括心得體會(huì),附錄1(匯編源代碼,)和附錄2(參考文獻(xiàn))。</p><p> 在此課設(shè)中,
15、韓雁老師在硬件的檢測(cè),軟件的設(shè)置方面都給出了精心的指點(diǎn),在此表示衷心的感謝!</p><p> 第二章 硬件系統(tǒng)設(shè)置</p><p> 2.1 硬件系統(tǒng)原理圖</p><p> 此章節(jié)主要介紹硬件系統(tǒng)原理圖,其中鍵盤和顯示器在后面詳細(xì)介紹.</p><p> 數(shù)字式秒表系統(tǒng)構(gòu)成圖</p><p> 2.2 芯
16、片資料介紹</p><p> 此部分從芯片的工作方式以及初始化編程方面介紹8253、8255、8259芯片。</p><p> 2.2.1 8253芯片</p><p> 2.2.1.1 8253內(nèi)部計(jì)數(shù)器的3個(gè)引腳</p><p> CLK(時(shí)鐘)——輸入,在計(jì)數(shù)過程中,此引腳上每輸入1個(gè)時(shí)鐘信號(hào)(下降沿),減1計(jì)數(shù)器的計(jì)數(shù)值將
17、減1</p><p> GATE(門控)——輸入,控制計(jì)數(shù)器工作:</p><p> 軟件觸發(fā)時(shí),作用開啟/關(guān)閉計(jì)數(shù):高電平允許,低電平禁止。</p><p> 硬件觸發(fā)/重觸發(fā):上升沿將初值送入減1計(jì)數(shù)器</p><p> OUT(計(jì)數(shù)器輸出)——輸出,根據(jù)設(shè)置工作方式的不同, OUT引腳可輸出單個(gè)或連續(xù)的波形信號(hào)。一般是在計(jì)數(shù)過程
18、結(jié)束時(shí)(計(jì)數(shù)值歸0),OUT引腳信號(hào)發(fā)生變化。</p><p> 2.2.1.2 8253的工作方式</p><p> 方式0 —— 計(jì)數(shù)結(jié)束中斷</p><p> 方式1 —— 可編程單穩(wěn)</p><p> 方式2 —— 連續(xù)負(fù)脈沖發(fā)生器</p><p> 方式3 —— 連續(xù)方波發(fā)生器</p>
19、<p> 方式4 —— 軟件觸發(fā)選通</p><p> 方式5 —— 硬件觸發(fā)選通</p><p> 本次課設(shè)中8253工作在方式3,此方式為可軟、硬件觸發(fā)的方波發(fā)生器,N=Fclk/Tclk,在本次設(shè)計(jì)中,F(xiàn)clK信號(hào)為1.193MHZ,輸出信號(hào)為100HZ,N為11930。其端口地址為40~43H,40H口用于計(jì)數(shù)器0,41H口用于計(jì)數(shù)器1,42H口用于計(jì)數(shù)器2,4
20、3H口用于狀態(tài)和控制口。</p><p> 2.2.1.3 8253的編程</p><p> 8253加電后的工作方式不確定,必須經(jīng)初始化編程后,才能正常工作</p><p><b> 初始化編程:</b></p><p><b> 先寫入控制字</b></p><p&
21、gt;<b> 再寫入計(jì)數(shù)初值</b></p><p> 工作后,可隨時(shí)讀取計(jì)數(shù)值</p><p> 一般先將計(jì)數(shù)值鎖存在通道內(nèi)的鎖存器中</p><p> 然后可分兩次讀取16位的計(jì)數(shù)值</p><p><b> 初始化程序片段:</b></p><p> Mo
22、v al,計(jì)數(shù)器控制字</p><p> Mov dx,控制寄存器端口</p><p> Out dx,al</p><p> Mov ax,計(jì)數(shù)器初值</p><p> Mov dx,計(jì)數(shù)器端口</p><p> Out dx,al ;寫計(jì)數(shù)器的初值低字節(jié)</p>
23、;<p> Mov al,ah </p><p> Out dx,al ;寫計(jì)數(shù)器計(jì)數(shù)初值高字節(jié)</p><p> 2.2.2 8255芯片</p><p> 2.2.2.1 連接外設(shè)的數(shù)據(jù)端口</p><p> 端口A:PA0-PA7 (A組控制)</p><p>
24、; 常作數(shù)據(jù)端口使用,功能最強(qiáng)大</p><p> 端口B:PB0-PB7 (B組控制)</p><p><b> 常作數(shù)據(jù)端口使用</b></p><p> 端口C:PC4-PC7 (A組控制), PC0-PC3 (B組控制)</p><p> 可作數(shù)據(jù)、狀態(tài)或控制端口使用可拆分成兩個(gè)4位端口分別輸入或輸出每
25、位可獨(dú)立進(jìn)行輸出控制(位控制)</p><p> 2.2.2.2 8255工作方式</p><p> 方式0:基本輸入輸出方式(不帶聯(lián)絡(luò))</p><p> 適用于無條件傳送和查詢方式的接口電路</p><p> 方式1:選通輸入輸出方式(帶輸入聯(lián)絡(luò)或輸出聯(lián)絡(luò))</p><p> 適用于查詢和中斷方式的接口
26、電路</p><p> 方式2:雙向選通方式(同時(shí)帶輸入聯(lián)絡(luò)和輸出聯(lián)絡(luò))</p><p> 適用于可雙向傳送數(shù)據(jù)的外設(shè),適用于查詢和中斷方式的接口電路</p><p> 2.2.2.3 8255的編程</p><p> 編程:只寫 1 個(gè)方式控制字到控制口。</p><p> D7:方式字/復(fù)位字選擇位,‘
27、1’時(shí)為8255A方式控制字,‘0’時(shí)為PC口的置/復(fù)位控制字,當(dāng)D7為‘1’時(shí),其余各位的含義為:</p><p> D6~D5:A組選擇方式選擇位?!?0’為方式0,‘01’為方式1,‘10’為方式2。</p><p> D2:B組方式選擇位?!?’為方式0,‘1’為方式1.</p><p> D4、D3、D1、D0:分別為PA口、PC7~PC4口、PB口
28、、PC3~PC0口輸入/輸出方式選擇位?!?’為輸出,‘1’為輸入。</p><p> 工作過程中:通過數(shù)據(jù)端口對(duì)外設(shè)數(shù)據(jù)進(jìn)行讀寫</p><p> 本次課設(shè)8255均工作在方式0,其把PA口、PB口和PC口的高4位、低4位都作為基本輸入/輸出口,可以獨(dú)立地設(shè)置為輸入或輸出方式。</p><p><b> 初始化程序片段:</b><
29、/p><p> Mov al,方式選擇控制字</p><p> Mov dx,端口號(hào) ;如果端口號(hào)>256,所以用dx間接尋址</p><p> Out dx,al ;寫入控制寄存器</p><p> 2.2.3 8259芯片</p><p> 2.2.3
30、.1 8259的編程及操作方式</p><p><b> 初始化編程</b></p><p> 在8259開始工作前:</p><p> 用戶必須對(duì)8259A進(jìn)行初始化編程。通過寫入初始化命令字ICW對(duì)8259A進(jìn)行初始化</p><p><b> 中斷操作編程</b></p>
31、<p> 在8259A工作期間:</p><p> 可以隨時(shí)向8259A寫入操作命令字OCW,使之按用戶設(shè)置的新的工作方式進(jìn)行工作</p><p> ,用戶還可以通過寫操作命令字OCW通知8259A</p><p><b> 操作方式編程</b></p><p> OCW1,其格式為:</p
32、><p> OCW1也可稱為屏蔽操作字,其被寫入8259內(nèi)部的中斷屏蔽寄存器IMR。OCW1的8位與IR0~I(xiàn)R7相對(duì)應(yīng),當(dāng)其某一位為1時(shí),即相應(yīng)IR上的輸入信號(hào)被屏蔽。IMR中的內(nèi)容在任何時(shí)候都可讀出或?qū)懭?,只要訪問奇口地址。</p><p> OCW2,其用于設(shè)置中斷結(jié)束方式和優(yōu)先級(jí)循環(huán)方式。其格式為:</p><p> OCW3,其用于設(shè)置特殊中斷屏蔽方式和
33、程序查詢方式、讀狀態(tài)方式。其格式為:</p><p><b> 初始化程序片段:</b></p><p> Mov al,00010101B ;ICW1,邊沿觸發(fā),要ICW4,級(jí)聯(lián)要ICW3</p><p> Out 20h,al ;寫入ICW1</p><p> Mov
34、 al,00001000B ;ICW2:設(shè)置ir0中斷類型號(hào)</p><p> Out 21h,al ;寫入ICW2</p><p> Mov al,00000101B ;ICW3:主片8259A的IR2接從片INT</p><p> Mov al,00000101B ;ICW4:不用緩沖,
35、正常中斷結(jié)束,非特殊全嵌套方式</p><p> Out 21h,al ;寫入ICW4</p><p> 2.2.4 74ls240芯片</p><p> 2.2.4.1 74ls240內(nèi)部結(jié)構(gòu)</p><p> 74ls240內(nèi)部結(jié)構(gòu)</p><p> 2.2.4.2 芯片
36、介紹 </p><p><b> 真值表</b></p><p> 正常工作溫度及其壓值:25℃,5V,工作電流-15MA,24MA</p><p>
37、 溫度范圍:-25-75℃,在此課設(shè)中用作反向驅(qū)動(dòng)器,增大輸出電流。</p><p> 2.2.5 75452芯片</p><p> 2.2.5.1 75452內(nèi)部結(jié)構(gòu)</p><p> 2.2.5.2 芯片介紹</p><p><b> 真值表</b></p><p> 正常工作
38、壓值范圍:4.75-5.25V.工作電流400MA,500MA</p><p> 正常工作溫度范圍:0-70℃,在此課設(shè)中用作反向驅(qū)動(dòng)器。</p><p><b> 2.3 線路連線</b></p><p> 此部分從實(shí)驗(yàn)連線,時(shí)鐘脈沖,鍵盤和LED顯示詳細(xì)介紹硬件部分的工作原理。</p><p> 2.3.1
39、 實(shí)驗(yàn)連線</p><p> 8255模塊的SWR、SRD分別連到ISA總線接口模塊的IOWR、IORD。</p><p> 8255模塊的數(shù)據(jù)(AD0~AD7)、地址線(A0~A7)分別連到ISA總線接口模塊的數(shù)據(jù)(LAD0~QD7)、地址線(LA0~LA7)。</p><p> 8255模塊選通線CE連到ISA總線接口模塊的IOY0。</p>
40、<p> 8255的PA0~PA7連到鍵盤顯示模塊的KD0~KD7;8255的PB0~PB3連到鍵盤顯示模塊的KL1~KL4;8255的PC0~PC3連到鍵盤顯示模塊KH1~KH4。</p><p> 2.3.2 時(shí)鐘脈沖的產(chǎn)生</p><p> 8253的D7到D0接總線上,gate端接高電平,out0接8259的IR0,通過次部分可以產(chǎn)生100hz的信號(hào),具體連線如
41、下圖:</p><p><b> 時(shí)鐘脈沖產(chǎn)生示意圖</b></p><p> 2.3.3 鍵盤的設(shè)置</p><p> 鍵盤的接口一般分為獨(dú)立式和矩陣式。</p><p> 獨(dú)立式按鍵就是各按鍵相互獨(dú)立、每個(gè)按鍵各接一根輸入線,一根輸入線上的按鍵是否按下不會(huì)影響其他輸入線上的工作狀態(tài)。因此,通過檢測(cè)輸入線的電
42、平狀態(tài)可以很容易判斷哪個(gè)按鍵被按下了。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單。但每個(gè)按鍵需占用一根輸入線,在按鍵數(shù)量較多時(shí),輸入口浪費(fèi)大,電路結(jié)構(gòu)顯得很繁雜。故此種鍵盤適用于按鍵較少或操作速度較高的場(chǎng)合。若采用此方式,,各按鍵開關(guān)均采用上拉電阻,這是為了保證在按鍵斷開時(shí),各IO口線有確定的高電平。當(dāng)然如輸入口線內(nèi)部已有上拉電阻,則外電路的上拉電阻可省去。</p><p> 矩陣式鍵盤適用于按鍵數(shù)量較多的場(chǎng)合,它由
43、行線和列線組成,按鍵位于行、列的交叉點(diǎn)上,一個(gè)4*4的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)含有16個(gè)按鍵的鍵盤。很明顯,在按鍵數(shù)量較多的場(chǎng)合,矩陣鍵盤與獨(dú)立式按鍵鍵盤相比,要節(jié)省很多的I/O口。行、列線分別接到按鍵的兩端。行線通過上拉電阻接到+5V上。平時(shí)無按鍵時(shí),行、列線處于高電平狀態(tài),而當(dāng)有鍵按下時(shí),行、列線將導(dǎo)通,因此行線電平狀態(tài)將由與此行線相連的列線電平?jīng)Q定。按鍵的識(shí)別在此課設(shè)中采用掃描法。讓所有的列線處于低電平,當(dāng)有鍵按下時(shí),按鍵所在的行電
44、平將被拉成低電平,根據(jù)此行電平的變化,便能判定此行有鍵被按下。為了進(jìn)一步判定到底哪一列的鍵被按下,可在某一時(shí)刻只讓一條列線處于低電平,而其余所有列線處于高電平。</p><p><b> 鍵盤接線圖</b></p><p><b> 鍵盤掃描程序:</b></p><p> prog: mov bl,0
45、 ;鍵號(hào)的初值為0 </p><p> mov cl,0efh ;送掃描初值</p><p> mov dl,4 ;計(jì)數(shù)值為行數(shù)</p><p> frow: mov al,cl ;掃描一行</p><p> mov dx,protc </p>&l
46、t;p> rcl al,1 ;修改行掃描</p><p> mov cl,al ;讀列線無效,判別是否有列線為低</p><p> in al,dx</p><p> and al,0fh</p><p> cmp al,0fh</p><p>
47、 jnz fcol ;有列線為低電平,則轉(zhuǎn)fcol</p><p> mov al,bl ;沒有則使鍵號(hào)寄存器的值=鍵號(hào)值+列數(shù)/行數(shù)</p><p> add al,4 </p><p> mov bl,al</p><p> dec dl ;行
48、未掃描完,則轉(zhuǎn)frow</p><p> jnz frow </p><p> jmp down ;已掃描完,則轉(zhuǎn)down</p><p> fcol: or al,0f0h ;此列為低電平,則轉(zhuǎn)proce</p><p> rcr al,1 </p&g
49、t;<p> jnc proce</p><p> inc bl ;如果未找到低電平的列線,則使鍵號(hào)=鍵號(hào)+1,轉(zhuǎn)fcol繼續(xù)</p><p> proce: …… ;鍵命令處理程序</p><p><b> ……</b></p><p> D
50、own:……. ;后續(xù)處理程序 </p><p> 2.3.4 LED顯示器的設(shè)置</p><p> LED是7段碼顯示,并且是共陰的,將8255的PA0-PA7接到鍵盤顯示單元的KD0-KD7,PC0-PC3接到KH1-KH4,通過次部分可讓LED動(dòng)態(tài)顯示相應(yīng)的信息。</p><p><b>
51、 LED顯示器原理圖</b></p><p> 八位LED顯示程序:</p><p> Led: mov di,offset buffdata ;指向緩沖區(qū)首地址</p><p> Mov cl,80h ;使最左邊LED亮</p><p> Disi: mov bl,
52、[di+1] ;bl中為要顯示的數(shù)</p><p><b> Push bx</b></p><p><b> Pop ax</b></p><p> Mov bx,offset table ;段表首址送bx</p><p> Xlat
53、 ;段碼送al</p><p> Mov dx,porta ;段碼送段控端口porta</p><p> Out dx,al </p><p> Mov al,cl ;位掃描碼送為控端口portb</p>
54、;<p> Mov dx,portb </p><p> Out dx,al ;保存位掃描碼</p><p> Push cx ;延時(shí)</p><p> Mov cx,30h</p><p> Delay: loop
55、delay</p><p><b> Pop cx</b></p><p> Cmp cl,01 ;顯示掃描到最右邊LED碼?</p><p> Jz quit ;是,則已顯示一遍,退出</p><p> Inc di
56、 ;否,則指向下一位LED</p><p> Shr cl,1 ;位碼指向下一位</p><p> Jmp disi ;顯示下一位LED</p><p> Quit : ret</p><p> Table: db c0
57、h,…,8eh ;0~F的段碼</p><p> Buffdata: db 8dup(?) ;8個(gè)字節(jié)的緩沖區(qū)</p><p> 此課設(shè)使用共陰結(jié)構(gòu),陰極控制端為低電平,數(shù)碼顯示短輸入高電平時(shí)發(fā)亮。</p><p> 顯示器的工作方式有靜態(tài)顯示和動(dòng)態(tài)顯示。所謂靜態(tài)顯示,就是當(dāng)顯示器顯示某一個(gè)字符時(shí)
58、,相應(yīng)的二極管恒定地導(dǎo)通或截止。優(yōu)點(diǎn)是顯示穩(wěn)定,在發(fā)光二極管導(dǎo)通電流一定的情況下顯示器的亮度大,在系統(tǒng)運(yùn)行過程中,僅在需要更新顯示內(nèi)容時(shí)CPU才執(zhí)行一次顯示更新子程序,大大節(jié)省了CPU的時(shí)間,提高CPU的利用率。</p><p> 所謂動(dòng)態(tài)顯示,就是一位一位地輪流點(diǎn)亮各位顯示器,對(duì)于每一位顯示器來說,每隔一段時(shí)間點(diǎn)亮一次。顯示器的亮度與導(dǎo)通電流有關(guān),也與點(diǎn)亮?xí)r間和間隔時(shí)間的比例有關(guān)。調(diào)整電流和時(shí)間參數(shù),可實(shí)現(xiàn)亮
59、度較高比較穩(wěn)定的顯示。此課設(shè)中使用的是動(dòng)態(tài)顯示,8255的A口作為掃描口,經(jīng)反向驅(qū)動(dòng)器75452接顯示器公共極,B口作為數(shù)據(jù)口,接到顯示器的各個(gè)段。</p><p> 第三章 軟件系統(tǒng)設(shè)置</p><p><b> 3.1程序流程圖</b></p><p> 此部分包括主程序,0處理流程圖,1處理流程圖,2處理流程圖,3處理流程圖,4處理
60、流程圖,中斷處理流程圖以及軟件設(shè)置各模塊能實(shí)現(xiàn)的功能。</p><p> 3.1.1 主程序流程圖</p><p> 該功能塊的主要作用:清顯示緩沖區(qū),使LED顯示燈開始顯示時(shí)值全為“0”,設(shè)置標(biāo)志單元的值。</p><p> 3.1.2 ‘0’ 處理流程圖(開始計(jì)時(shí)) </p><p> 3.1.3 ‘1’處理流程圖(名次存儲(chǔ)
61、) </p><p> N </p><p><b> Y</b>
62、</p><p><b> N</b></p><p> Y </p><p> 1功能塊:是記錄成績(jī),當(dāng)將按下2鍵時(shí)將LED燈顯示的時(shí)間存儲(chǔ)起來,并將該成績(jī)的名次存儲(chǔ)起來。首
63、先讀標(biāo)志單元,根據(jù)相應(yīng)單元的值來判斷是否繼續(xù)執(zhí)行。若可繼續(xù)執(zhí)行則將當(dāng)前的成績(jī)和名次存儲(chǔ),然后將名次變量加1。為了判斷是否記錄滿8個(gè)成績(jī),還需設(shè)置了一個(gè)記錄標(biāo)志,用于記錄當(dāng)前已記錄了幾個(gè)成績(jī),若記錄滿8個(gè),則清除可存儲(chǔ)標(biāo)志位,再按1</p><p> 鍵就不能再記錄數(shù)據(jù)了。</p><p> 3.1.4 ‘2’ 處理流程圖(顯示成績(jī)) </p><p><
64、b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> 2功能塊:首先讀取標(biāo)志單元的信息,檢查其是否符合條件,若符合條件則取記錄數(shù),再將對(duì)應(yīng)數(shù)據(jù)輸出顯示,這
65、里要建立了一個(gè)標(biāo)志單元用來記錄當(dāng)前以經(jīng)顯示過的記錄數(shù),每輸出一個(gè)記錄,該標(biāo)志單元就加一,然后與總記錄數(shù)比較,若超過總記錄數(shù)則將該標(biāo)志單元清零。</p><p> ‘3’處理流程圖(比賽結(jié)束1)</p><p> 3功能塊:退出返回DOS需要復(fù)原中斷矢量,若不復(fù)原中斷矢量,可能會(huì)發(fā)生不可預(yù)料的錯(cuò)誤,8259關(guān)中斷,cpu關(guān)中斷,關(guān)閉程序。</p><p> 3.
66、1.6 ‘4’處理流程圖(比賽結(jié)束2)</p><p> 4功能塊: 1.比賽結(jié)束將標(biāo)志單元的D0位(比賽開始/結(jié)束位)和D2位(可否存儲(chǔ)成績(jī)位)均置“0”,清空所有標(biāo)志,代表比賽結(jié)束</p><p> 2.顯示停止,并顯示最后一次顯示的內(nèi)容。</p><p> 3.1.7 中斷處理流程圖</p><p><b> N
67、</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</
68、b></p><p><b> N</b></p><p><b> Y</b></p><p> 中斷處理程序在該設(shè)計(jì)中是很的重要的,數(shù)字式秒表時(shí)間的走動(dòng)、鍵盤掃描過程中對(duì)按鍵功能的執(zhí)行都要通過中斷程序來實(shí)現(xiàn)。</p><p> 首先進(jìn)入中斷程序就要保護(hù)現(xiàn)場(chǎng), 這一點(diǎn)是至關(guān)重要的。若
69、不保護(hù)CPU當(dāng)前的執(zhí)行狀態(tài),當(dāng)中斷程序返回時(shí),CPU有可能處在錯(cuò)誤的狀態(tài)。應(yīng)通過一系列推入堆棧指令來保護(hù)中斷時(shí)的現(xiàn)場(chǎng)。</p><p> 主程序的初始化中設(shè)置了中斷的頻率為每隔0.01秒發(fā)生一次,而我們要的精度是0.1秒。用count單元來記錄是否到0.1秒,將count單元的值和10比較,到10則為0.1秒,否則count值加1。秒單元值的變化與此類似,當(dāng)0.1秒單元值為10時(shí),秒低位單元的值才加1;當(dāng)秒低位
70、單元的值為10時(shí),秒高位單元值才加1,當(dāng)秒高位單元值為6時(shí)應(yīng)清零。計(jì)時(shí)滿1分鐘時(shí)自動(dòng)結(jié)束,在秒高位單元清零時(shí)還應(yīng)將D0(比賽開始/結(jié)束位)和D2(是否可存儲(chǔ)位)清零。</p><p><b> 3.2 參數(shù)信息</b></p><p> inttype 定義8號(hào)中斷</p><p> p8253ctr1 定義8253控制
71、口</p><p> p8253ctr0 定義8253計(jì)數(shù)器1的端口</p><p> p8255ct1 定義8255控制端口</p><p> cnt1定義8253的初值(用于產(chǎn)生100HZ的信號(hào))</p><p> display 定義顯示提示信息</p><p>
72、asctab 定義一張表,用于顯示鍵盤輸入的顯示</p><p> count定義計(jì)數(shù),用于0.1秒計(jì)一個(gè)數(shù)</p><p> buff定義顯示緩沖期,并給顯示緩沖器定義初值為0</p><p> mc 定義一個(gè)存儲(chǔ)空間,用于記錄8個(gè)選手的成績(jī)和名次</p><p> bit
73、定義位選信號(hào)</p><p> desg 定義一張共陽的LED表</p><p> flag 定義標(biāo)識(shí)符flag</p><p> point dw str 將地址傳給指針point</p><p> mess 顯示桌面</p><
74、p> 第四章 課程設(shè)計(jì)總結(jié)</p><p><b> 4.1 心得體會(huì)</b></p><p> 本次課程設(shè)計(jì)從總體上來說是對(duì)芯片8253、8255,8259的應(yīng)用。8253用來產(chǎn)生產(chǎn)生時(shí)鐘脈沖;8255是一個(gè)并口,連接控制LED顯示器和鍵盤,8259是用來產(chǎn)生中斷。</p><p> 8253產(chǎn)生產(chǎn)生時(shí)鐘脈沖,并每0.1s給82
75、59產(chǎn)生一次中斷,通過CPU產(chǎn)生中斷響應(yīng),并掃描鍵盤,如果有鍵按下,則按照響應(yīng)的情況來判斷是否在中斷中進(jìn)行計(jì)數(shù),如果是0鍵按下,則開始計(jì)數(shù),計(jì)數(shù)的時(shí)候?qū)㈨憫?yīng)的字符輸?shù)斤@示緩沖器,并同過8255并口,動(dòng)態(tài)的顯示在LED上;如果是M鍵盤按下,仍舊計(jì)數(shù),并通過一個(gè)指針將當(dāng)前的數(shù)值傳到mc相應(yīng)的單元中,并進(jìn)行count計(jì)數(shù),判斷其是否超出限制,如果超出限制則停止計(jì)數(shù),如果沒有超出限制則進(jìn)行計(jì)數(shù);如果是P鍵按下,中斷中跳過計(jì)數(shù)部分,并將相應(yīng)要顯示
76、的內(nèi)容從mc中輸出到顯示緩沖區(qū),按照一個(gè)指針來循環(huán)顯示要顯示的內(nèi)容;如果按下的是4鍵,則表示比賽結(jié)束,將所有的標(biāo)志單元都清空,中斷中也跳過計(jì)數(shù)部分,輸出停留在最后顯示的內(nèi)容上;如果按下的是3鍵,則表示整個(gè)程序的運(yùn)行結(jié)束,8259關(guān)中斷,CPU關(guān)中斷。</p><p> 在程序中多次用到壓棧,彈出操作,目的是在中斷程序執(zhí)行前將所有中斷程序中用到的寄存器都入棧,在中斷結(jié)束之前都要將剛才入棧的寄存器出棧,在程序中多次
77、用到延時(shí)程序,在沒個(gè)高速設(shè)備相低速設(shè)備輸出的時(shí)候都要進(jìn)行延時(shí),在掃描鍵盤中,我們?cè)诎存I按下的時(shí)候和按鍵釋放的時(shí)候都進(jìn)行了延時(shí),確保按鍵的有效性和按鍵抖動(dòng)的濾去。在顯示單元我們用到動(dòng)態(tài)顯示的方法,既可以減少線路上的成本也可以提高資源的有效利用,我們將8255的A口用于顯示字符,8255的C口用于位選,選擇哪個(gè)LED將顯示數(shù)據(jù)。鍵盤單元中,我們也是使用8255來作為控制的接口,共用了8255的C口來輸出,8255的B口用來讀取,兩個(gè)口一起工
78、作來定位鍵盤上哪個(gè)鍵被按下。最終的課程設(shè)計(jì)能達(dá)到最初設(shè)定的目標(biāo)。</p><p> 在課程設(shè)計(jì)前幾天,我們組先用LED顯示、鍵盤控制8259A中斷三個(gè)程序?qū)ξ覀兊膬x器箱進(jìn)行了初步檢測(cè)。在確認(rèn)無誤后,對(duì)三條程序進(jìn)行累加,然后對(duì)五個(gè)功能鍵進(jìn)行分別設(shè)定,反復(fù)調(diào)試、編譯、鏈接,在老師的精心指導(dǎo)下完成了此次課程設(shè)計(jì),在此再次表示衷心的感謝!</p><p> 4.2 源程序清單</p&g
79、t;<p> inttype equ 08h ;定義8號(hào)中斷</p><p> p8253ctrl equ 43h ;定義8253控制口</p><p> p8253cto equ 40h ;定義8253計(jì)數(shù)器
80、1的端口 </p><p> p8255ctl equ 0c803h ;定義8255控制端口</p><p> cnto equ 11930 ;用來計(jì)算頻率</p><p> .model small
81、 ;定義為小模式</p><p> .data ;數(shù)據(jù)段</p><p> str db 36 dup (?) ;定義一個(gè)數(shù)組存放前八個(gè)成績(jī)</p><p> flag db 0
82、 ;定義標(biāo)志位</p><p> mc db 1 ;定義存放名次</p><p> num db 1 ;定義名次</p><p> count db 0
83、 ;定義計(jì)數(shù),用于0.1秒計(jì)一個(gè)數(shù)</p><p> point dw str ;定義指針</p><p> point2 dw str ;定義指針</p><p> buff db 0,0,0,0
84、 ;定義顯示緩沖區(qū),用于顯示鍵盤輸入的顯示</p><p> buff2 db 0,0,0,0 ;定義顯示緩沖區(qū),用于顯示鍵盤輸入的顯示</p><p> bit db 1 ;定義位選信號(hào)</p><p>
85、mess db '0-開始比賽 1-記錄成績(jī) 2-顯示成績(jī) 3-退出返回DOS 4-結(jié)束比賽 :',0dh,0ah,'$'</p><p> dseg db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h </p><p> asctab db "0123456789ABCDEF" <
86、;/p><p> .code ;代碼段</p><p> mov ax,@data ;段地址初始化</p><p> mov ds,ax </p><p> mov ah,9
87、 ;9號(hào)調(diào)用,用于顯示提示信息</p><p> lea dx,mess ;將mess的偏移量送給dx</p><p> int 21h ;顯示提示信息</p><p> mov al,36h
88、 ;寫8253方式字</p><p> mov dx,p8253ctrl</p><p><b> out dx,al</b></p><p> mov ax,cnto </p><p> mov dx,p8253cto ;寫初值</p><p&g
89、t; out dx,al ;先寫低位</p><p><b> mov al,ah</b></p><p> out dx,al ;再寫高位</p><p> mov al,81h
90、 ;8255初始化</p><p> mov dx,p8255ctl ;將方式字輸出到8255控制口</p><p><b> out dx,al</b></p><p> mov al,inttype ;DOS調(diào)用,讀取中斷向量</p>
91、<p> mov ah,35h ;es:bx=中斷向量 </p><p><b> int 21h</b></p><p><b> push es</b></p><p> push bx ;
92、將cpu自己的8號(hào)中斷向量保護(hù) </p><p><b> push ds</b></p><p> mov ax,@data ;初始化</p><p><b> mov es,ax</b></p><p> mov dx,offset int
93、p ;取intp的偏移量 </p><p> mov ax,seg intp ;取intp的段地址</p><p><b> mov ds,ax</b></p><p> mov al,inttype ;設(shè)置inttp
94、ye的新中斷向量</p><p> mov ah,25h ; ES:BX=中斷向量</p><p><b> int 21h</b></p><p> pop ds ;ds出棧</p><p> in
95、al,21h ;CPU開中斷(開IR0)</p><p> and al,0feh</p><p> out 21h,al</p><p><b> sti</b></p><p> ab: call button
96、 ;鍵盤調(diào)用</p><p> cmp al,'3' ;判斷是否按下3號(hào)鍵</p><p> jz rp ;如果是則轉(zhuǎn)向rp</p><p> cmp al,'1'
97、 ;判斷是否按下3號(hào)鍵</p><p> jz mp ;如果是則轉(zhuǎn)向mp</p><p> cmp al,'4' ;判斷是否按下4號(hào)鍵</p><p> jz ap
98、 ;如果是則轉(zhuǎn)向ap</p><p> cmp al,'2' ;判斷是否按下2號(hào)鍵</p><p> jz pp ;如果是則轉(zhuǎn)向pp</p><p> cmp al,2 ;
99、判斷是否按下3號(hào)鍵</p><p> jnz ab ;如果是則轉(zhuǎn)向ab</p><p> OR flag,05h ;如果按鍵為2,則標(biāo)志位最后一位為1</p><p><b> jmp ab</b></p><
100、p> mp: test flag,04h ;存儲(chǔ)代碼 </p><p><b> jz ab</b></p><p><b> mov al,mc</b></p><p> mov buff,al ;將第一位
101、的名次先放到buff,然后放到數(shù)組</p><p> lea si,buff</p><p> mov di,point</p><p><b> mov cx,4</b></p><p><b> cld</b></p><p><b> rep mov
102、sw</b></p><p> cmp mc,8 ;名次到了8,標(biāo)志位清0</p><p> jz go ;轉(zhuǎn)向go段程序</p><p> inc mc ;inc自加&l
103、t;/p><p> add point,4</p><p><b> jmp ab</b></p><p> go: and flag,0fah</p><p> lea bx,str</p><p> mov point,bx</p><p><b>
104、; jmp ab</b></p><p> pp: and flag,0feh</p><p> cmp num,9 ;判斷是否按過8次,如果不是則退出</p><p><b> jz ab</b></p><p><b> in
105、c num</b></p><p> lea di,buff</p><p> mov si,point2</p><p><b> mov cx,4</b></p><p><b> cld</b></p><p><b> rep movs
106、w</b></p><p> add point2,4</p><p><b> jmp ab</b></p><p> ap: push bx</p><p> and flag,0 ;對(duì)標(biāo)志位和名次及num進(jìn)行初始化</p>
107、<p> mov mc,1 ;名次置1</p><p> mov num,1 ;計(jì)數(shù)置1</p><p> lea bx,str </p><p> mov point,bx</p><p> mov point2
108、,bx</p><p> mov buff,0 ;將1位顯示器緩沖器置0</p><p> mov buff+1,0 ;將2位顯示器緩沖器置0</p><p> mov buff+2,0 ;將3位顯示器緩沖器置0&
109、lt;/p><p> mov buff+3,0 ;將4位顯示器緩沖器置0</p><p><b> pop bx</b></p><p><b> jmp ab</b></p><p> rp: cli</p><p>
110、;<b> pop dx </b></p><p><b> pop ds</b></p><p> mov al,inttype </p><p> mov ah,25h</p><p> int 21h ;dos調(diào)用</p
111、><p> mov ah,4ch ;帶返回碼終結(jié)程序</p><p> int 21h ;主程序結(jié)束</p><p> intp: push si ;將ax、bx、dx、si、cx入棧,保護(hù)cpu
112、現(xiàn)場(chǎng)</p><p><b> push di</b></p><p><b> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b></p><p>&
113、lt;b> push dx</b></p><p> test flag,01h ;判斷標(biāo)志位D0是否為1,為1則開始,否則不計(jì)數(shù)</p><p><b> jz iexit</b></p><p> inc count
114、 ;次數(shù)加1</p><p> cmp count,10 ;將count與10比較</p><p> jnz iexit ;若count不等于10,則轉(zhuǎn)iexit</p><p> mov count,0 ;否
115、則count置0</p><p> inc buff+3 ;秒的那位加1</p><p> cmp buff+3,10 ;將秒的那位與10比較</p><p> jnz iexit ;若秒的那位不等于10,則轉(zhuǎn)
116、iexit</p><p> inc buff+2 ;否則向秒的高位進(jìn)1</p><p> mov buff+3,0 ;秒位置0</p><p> cmp buff+2,10 ;秒的高位與10比較</p>
117、<p> jnz iexit ;不為10則轉(zhuǎn)iexit</p><p> inc buff+1 ;否則分位加1</p><p> mov buff+2,0 ;秒的高位置0</p><p> c
118、mp buff+1,6 ;秒位與6比較</p><p> jnz iexit ;若不等則轉(zhuǎn)iexit</p><p> mov buff+1,0 ;分位置1</p><p> and flag,0feh
119、 </p><p> iexit: lea bx,dseg ;去數(shù)據(jù)表的首地址</p><p> lea si,buff ;取緩沖區(qū)的首地址</p><p> agi: mov al,[si]
120、 ;將si的內(nèi)容送給al</p><p> xlat ;將ASCⅡ碼轉(zhuǎn)換成數(shù)據(jù)</p><p><b> mov ah,al</b></p><p> mov dx,0c801h</p><p> mov al,bit&
121、lt;/p><p> out dx ,al</p><p> cmp al,04h ;判斷是否為第二位,是則加點(diǎn),否則繼續(xù)</p><p><b> jnz q1</b></p><p> and ah,7fh</p><p> q1:
122、 mov dx,0c800h ;取相應(yīng)的段和位</p><p><b> mov al,ah</b></p><p><b> out dx,al</b></p><p><b> mov di,30</b></p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì).
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)--流水燈
- 微機(jī)接口技術(shù)課程設(shè)計(jì)--數(shù)字存儲(chǔ)示波器設(shè)計(jì)
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)----數(shù)字信號(hào)發(fā)生器
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)-交通燈
- 紅外通信-微機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì) --存儲(chǔ)器
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告書
- 《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)
- 微機(jī)接口技術(shù)課程設(shè)計(jì)報(bào)告
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)-----交通燈設(shè)計(jì)
- 電子表設(shè)計(jì)(微機(jī)原理與接口技術(shù)課程設(shè)計(jì))
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)報(bào)告——電子琴
- 單機(jī)微機(jī)原理與接口技術(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論