版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 2008~2009 學(xué)年 第 1 學(xué)期</p><p> 一、題義分析及解決方案</p><p><b> 1 題意需求分析</b></p&
2、gt;<p> 題目要求是用8086接口芯片設(shè)計(jì)一個四評委使用的評分系統(tǒng),接受四個評委的打分,輸出的是平均得分。</p><p> 由題目要求分析如下:</p><p> ?。?)題目要求四個評委給出自己的打分,可知設(shè)計(jì)的第一步就是主持人給出一個開始打分的指令,否則任何打分都是無效的;</p><p> ?。?)評委們接到打分指令后即可為選手輸入分
3、數(shù), 先設(shè)想用通用可編程鍵盤/顯示接口芯片INTEL8279與小鍵盤結(jié)合實(shí)現(xiàn)該步;</p><p> (3)接收所有評委的打分到指定緩沖區(qū)后,開始對數(shù)據(jù)進(jìn)行處理,求出平均分;</p><p> ?。?)將(3)步求出的平均分顯示出來。</p><p> 綜合題目要求分析提出以下四個問題:</p><p> ?。?)如何實(shí)現(xiàn)主持人發(fā)出指令表
4、示評分結(jié)束? </p><p> (2)用什么來作為外設(shè)讓評委進(jìn)行打分?</p><p> ?。?)怎樣求平均分? </p><p> ?。?)采用什么設(shè)備將平均分顯示出來? </p><p> 2 問題解決方法及思路</p><p> 基于以上問題分析此評
5、分系統(tǒng)是由四個評委組成的一個評分系統(tǒng)。對每位評委給出的分?jǐn)?shù)進(jìn)行累加,并求出平均分。</p><p> 評委分?jǐn)?shù)范圍是0~~10的整數(shù),將4位評委給出的分?jǐn)?shù)累加,由于最高分為10分,則用4位二進(jìn)制就可以表示每位評委的分?jǐn)?shù),用8279的RL0~RL7八位連接小鍵盤,將評委的分?jǐn)?shù)保存到8279的緩沖寄存器中,可同時將4位評委的分?jǐn)?shù)同時輸入。</p><p> 對求得平均分進(jìn)行分析,將4位評委
6、累加后除以4即得到平均分?jǐn)?shù),除以4后將會出現(xiàn)小數(shù)部分如:0.0、0.25、0.50、0.75這4種情況,要將最后得分顯示在LED上,就要用4個LED顯示,其中第二個LED存在小數(shù)點(diǎn),故用八段LED顯示,3個顯示要分別進(jìn)行輸出,通過位選碼對每一位的顯示進(jìn)行控制,還要通過段選碼對每一個LED的每一段進(jìn)行控制。這樣,就能將整個最后得分顯示出來了,還要考慮在顯示后一位時前一位會不會消失的情況。</p><p> 以上四
7、個問題解決其中(1)、(2)、(4)可以用硬件完成,而(3)即數(shù)據(jù)處理部分需由軟件來完成。</p><p><b> 2.1 硬件部分</b></p><p> 問題(1)可以利用小鍵盤上的任意一位輸入或邏輯開關(guān)的一位來實(shí)現(xiàn)。</p><p> 問題(2)評委可通過很多設(shè)備進(jìn)行數(shù)據(jù)輸入,如小鍵盤、邏輯開關(guān)等,小鍵盤做輸入設(shè)備其電路簡單,
8、但對其編程接受輸入數(shù)據(jù)相對復(fù)雜。邏輯開關(guān)的電路相對復(fù)雜,但編程接受輸入數(shù)據(jù)的程序簡單,且兼于實(shí)驗(yàn)室設(shè)備,故選擇小鍵盤作為輸入設(shè)備。輸入數(shù)據(jù)會很方便。</p><p> 問題(4)輸出設(shè)備既可用發(fā)光二極管也可用LED顯示器,但相對于前者,后者對結(jié)果的顯示一目了然,故本設(shè)計(jì)選擇LED顯示器作輸出設(shè)備。</p><p> 2.2 軟件部分 </p><p> (1
9、)讀數(shù)據(jù)程序:采用小鍵盤與8279芯片相結(jié)合,故可8279的相應(yīng)端口進(jìn)行合適的參數(shù)設(shè)置,數(shù)據(jù)端口地址為0B0H,控制端口的地址為0B1H。RLrr5~RL7八位中最高位作為指令開關(guān)。</p><p> ?。?)數(shù)據(jù)處理:每次讀數(shù)據(jù)累加求和,并取數(shù)據(jù)整數(shù)和小數(shù)部分,從OUTA0~OUTA3輸出到LED顯示器.當(dāng)四個評委均輸入完畢,將累加和采用邏輯右移2位的方式求平均分.在計(jì)算輸入的時候,用兩位輸入來控制一位數(shù)的輸入
10、,將AL的值賦給中間變量TEMP,然后將TEMP*10,然后累加,求出輸入的數(shù),進(jìn)行和的累加。</p><p> ?。?)數(shù)據(jù)輸出:平均分整數(shù)和小數(shù)部分分別輸出到LED.分析整數(shù)0-40之間的數(shù)除以4的小數(shù)部分, 平均分處理方法,(也可采用四舍五入的方法保留一位小數(shù))。</p><p> 表1-1:小數(shù)部分的求解方法見上表</p><p><b> 二
11、、硬件設(shè)計(jì)</b></p><p> 2.1 選擇芯片8279</p><p> 圖2-18279內(nèi)部邏輯框圖</p><p> 2.1.1 芯片8279在本設(shè)計(jì)中的作用</p><p> 8279連接4*4的鍵盤及8位顯示器的電路,即可顯示按下鍵對應(yīng)的鍵值。</p><p> 2.1.2 芯
12、片8279的功能分析</p><p> 生產(chǎn)廠家:Intel公司特性:Intel8279芯片是一種通用的可編程序的鍵盤、顯示接口器件,單個芯片就能完成鍵盤輸入和LED顯示控制兩種功能。其內(nèi)部結(jié)構(gòu)如圖6-10-1所示。8279包括鍵盤輸入和顯示輸出兩個部分。 鍵盤部分提供的掃描方式,可以和64個按鍵或傳感器的陣列相連。能自動消除開關(guān)抖動以及N個鍵同時按下的保護(hù)。 顯示部分按掃描的方式工作??梢燥@
13、示8或16位LED顯示塊。 一、8279電路工作原理 根據(jù)結(jié)構(gòu)框圖,分別介紹各部分電路工作原理。 1.I/O控制及數(shù)據(jù)緩沖器 數(shù)據(jù)緩沖器是雙向緩沖器,連接內(nèi)、外總線,用于傳送CPU和8279之間的命令或數(shù)據(jù);I/O控制線是CPU對8279進(jìn)行控制的引線。CS是8279的片選信號,CS=0時,8279才被允許讀出或?qū)懭胄畔?。WR、RD為來自CPU的控制信號。 A0用于區(qū)別信息特性:A0=1時,表示數(shù)據(jù)緩沖
14、器輸入為指令、輸出為狀態(tài)字;A=0時,輸入、輸出皆為數(shù)據(jù)。 2.控制與定時寄存器及定時控制 控制與定時寄存器用來寄存鍵盤及顯示的工作方式,以及由CPU編程的其它操作方式。</p><p> 4、芯片8279的技術(shù)參數(shù)</p><p><b> 表 2-10</b></p><p> 2.2 選擇芯片LED </p&
15、gt;<p> 2.2.1 LED在本設(shè)計(jì)中的作用</p><p> 顯示最后得分,共三塊,一塊用來顯示其整數(shù)部分的十位,一塊用來顯示其整數(shù)部分個位,另一塊用來顯示其小數(shù)部分(保留一位小數(shù))。</p><p> 2.2.2 LED的功能分析</p><p> LED顯示電路較為簡單,成本也較低,在功能單一的儀器儀表與機(jī)電設(shè)備中應(yīng)用較廣。但當(dāng)
16、設(shè)備顯示的點(diǎn)或位較多時,就需要采用一定的驅(qū)動電路與相應(yīng)的驅(qū)動方式。利用專用接口芯片如8255作為計(jì)算機(jī)芯片的端口擴(kuò)展,并通過軟件編程加外部驅(qū)動實(shí)現(xiàn)。</p><p> 表2-2. LED顯示管段選碼編碼表</p><p> 2.2.3 LED數(shù)碼管的顯示方式</p><p> (1)靜態(tài):數(shù)碼管顯示過程持續(xù)得到信號,與數(shù)碼管接口的I/O口線為專用。特點(diǎn)是無閃
17、爍,元器件多,占I/O線多,無須掃描,節(jié)省CPU時間,編程簡單。</p><p> (2)動態(tài):數(shù)碼管顯示過程輪流得到信號,與各數(shù)碼管接口的I/O口線為共用。特點(diǎn)是有閃爍,元器件少,占I/O線少,必須掃描,花費(fèi)CPU時間,編程復(fù)雜 (有多個LED時尤為突出)。</p><p> 2.2.4 芯片LED的技術(shù)參數(shù) </p><p> 消耗功率 PM=15
18、0mW 最大工作電流 IFM=100mA 正常工作電流 IF=40mA </p><p> 正向壓降 VF ≤ 1.8V 燃亮電壓為5v</p><p> 共陰極LED的PM=300mW,IFM=200 mA,IF=60mA,VF ≤ 1.8V,VR≥5V,發(fā)紅光。</p><p> LED的技術(shù)參數(shù)分析</p><
19、;p> LED發(fā)光二極管的壓降一般為1.5-2.0V,其工作電流一般取10-20Ma,發(fā)光二極管可應(yīng)用于直流驅(qū)動電路、交流驅(qū)動電路和脈沖驅(qū)動電路。</p><p> 共陽極公共端接陽極,低電平有效(燈亮), 共陽極數(shù)碼管內(nèi)部發(fā)光二極管的陽極(正極)都聯(lián)在一起,此數(shù)碼管陽極(正極)在外部只有一個引腳共陰極公共端接陰極,高電平有效(燈亮),共陰極數(shù)碼管內(nèi)部發(fā)光二極管的陰極(負(fù)極)都聯(lián)在一起,此數(shù)碼管陰極(
20、負(fù)極)在外部只有一個引腳</p><p><b> 2.3 小鍵盤</b></p><p> 2.3.1 小鍵盤在本設(shè)計(jì)中的作用</p><p> 評委通過小鍵盤置數(shù),輸入分?jǐn)?shù)。四個評委各個依次打分,系統(tǒng)讀取開關(guān)量,再將處理后的數(shù)據(jù)在LED上顯示出來。 圖2-3</p><p>
21、; 2.3.2 小鍵盤的邏輯圖 </p><p> 如右圖: </p><p> 2.4 選擇芯片74LS240</p><p> 2.4.1 74LS240芯片引腳圖</p><p> 2.4.2 74LS240技術(shù)參數(shù)</p>
22、;<p> 表2-13 74LS240技術(shù)參數(shù)</p><p> 2.5 芯片比較 </p><p><b> 表2-14</b></p><p><b> 表2-15</b></p><p> 2.6 硬件總邏輯圖及其說明</p>
23、<p> 圖 2-5 實(shí)驗(yàn)硬件原理圖</p><p> 說明:由于實(shí)驗(yàn)室設(shè)備中很多芯片已經(jīng)集成,故給連線帶來很大方便性,使的連線簡單了許多。</p><p> 8279的RL0~RL7連接4*4鍵盤,SL0~SL2三位用來74L138的輸入,輸出的8位作為LED的段選,OUTA0~OUTA3四位作為芯片4511的輸入,輸出的7位作為LED的位選,8279的數(shù)據(jù)DB0~D
24、B7與PCI卡的數(shù)據(jù)線連接,其中A0連接A0,CS連接CS0,讀寫信號的連接如圖。</p><p><b> 三、程序流程圖</b></p><p> 3.1 主程序流程圖:</p><p><b> N</b></p><p><b> Y</b></p>
25、<p><b> Y</b></p><p><b> N</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> 處理小數(shù)子程序:</b></p&g
26、t;<p> 3.3 掃描按鍵子過程:</p><p> 3.4 清除子過程:</p><p> 3.5 程序清單及注釋:</p><p> .MODEL TINY</p><p> PCIBAR3 EQU 1CH ;8位I/O空間基地址(它就是實(shí)驗(yàn)儀的基地址,也為DMA & 32
27、BIT+RAM板卡上的8237提供基地址)</p><p> Vendor_ID EQU 10EBH ;廠商ID號</p><p> Device_ID EQU 8376 ;設(shè)備ID號 </p><p> .STACK 100</p><p><b> .DATA</b&
28、gt;</p><p> IO_Bit8_BaseAddress DW ?</p><p> msg0 DB 'BIOS不支持訪問PCI $'</p><p> msg1 DB '找不到Star PCI9052板卡 $'</p><p>
29、 msg2 DB '讀8位I/O空間基地址時出錯$'</p><p> SUM DB 0H ;分?jǐn)?shù)和</p><p> TEMP DB 0H ;中間變量 </p><p> KEYCOUNT DB ? ;按鍵數(shù)目</p&g
30、t;<p> COUNT DB ? </p><p> ;乘10的時候,保存AL所用的中間變量</p><p> LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;不帶小數(shù)點(diǎn)的整數(shù)</p><p> DB 080H,90H,8
31、8H,83H,0C6H,0A1H,86H,8EH </p><p> LED_TBB DB 040H,079H,024H,030H,19H,12H,02H,078H ;帶小數(shù)點(diǎn)的整數(shù)</p><p> DB 000H,10H,08H,03H,046H,021H,06H,0EH</p><p> CMD
32、_8279 DW 00B1H ;8279命令字、狀態(tài)字地址</p><p> DATA_8279 DW 00B0H ;8279讀寫數(shù)據(jù)口的地址,由于偏移地址則CS接PCI卡的CS5!!!</p><p><b> .CODE</b></p><p> START: MOV
33、 AX,@DATA</p><p> MOV DS,AX</p><p><b> NOP</b></p><p> CALL InitPCI</p><p> CALL ModifyAddress ;根據(jù)PCI提供的基地址,將偏移地址轉(zhuǎn)化為實(shí)地址</p><p&g
34、t; CALL INIT8279 ;初始化子程序</p><p> MOV KEYCOUNT,0 </p><p> MOV CX,0 </p><p> ;---------------------------------------------------------------------
35、--------------------</p><p><b> ;主程序</b></p><p> START1: CALL IfExit</p><p> JZ START11</p><p> JMP Exit</p><p> START11:
36、 CALL SCAN_KEY ;鍵掃描</p><p> JNC START1 ;沒有按鍵</p><p> XCHG AL,KEYCOUNT </p><p> INC AL</p><p> CMP AL,9<
37、/p><p> JNZ START2</p><p> MOV CX,0 ;在進(jìn)入下一個數(shù)的輸入的時候,由于CX是判斷兩位輸入是一個數(shù),故要清零??! </p><p> MOV KEYCOUNT,0 </p><p> CALL
38、 INIT8279_1 </p><p> ;8個數(shù)碼塊全有字符顯示后,再按鍵,清除顯示 </p><p> MOV AL,SUM </p><p><b> ;計(jì)算部分</b></p><p> CMP AL,28H</p><p> JNE
39、 NOTSHI</p><p> MOV AL,01H </p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p> MOV A
40、L,0H</p><p> LEA BX,LED_TBB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p> MOV AL,0H</p><p> CALL XIAOSHU
41、 </p><p> JMP HUAN </p><p> NOTSHI: ;上面處理等于10的情況,下面的分支是小于10的情況</p><p> PUSH AX</p><p> MOV AL,0H</p><p> LEA BX,LED_TAB
42、 ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> POP AX</p><p> MOV BL,AL</p><p> AND AL,00000
43、011B ;將小數(shù)的兩位取出</p><p> MOV BH,AL</p><p> MOV AL,BL</p><p> AND AL,1111100B ;將整數(shù)的六位取出</p><p> MOV CL,2</p><p> SHR AL,CL
44、 ;AL里保存整數(shù)部分</p><p> MOV AH,BH ;AH里保存小數(shù)部分</p><p> MOV CL,00H ;主程序需要CL進(jìn)行循環(huán),所以在計(jì)算以后將CL清零</p><p> AND AL,3FH </p><
45、;p> LEA BX,LED_TBB ;帶小數(shù)點(diǎn)的字型碼表 </p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,AH
46、 </p><p> CALL XIAOSHU </p><p><b> ;計(jì)算部分</b></p><p> HUAN: MOV SUM,0</p><p> CALL INIT8279_1&l
47、t;/p><p> JMP START1</p><p> START2: XCHG AL,KEYCOUNT </p><p> CALL KEY_NUM ;鍵值轉(zhuǎn)換為鍵號</p><p> CMP AL,09H </p>
48、<p> ;輸入的鍵值不在0~9范圍內(nèi),及輸入錯誤,重新輸入</p><p> JG CHULI</p><p> INC CL</p><p> CMP CL,2 </p><p> JNE NO10 </p><p> MOV
49、 CL,0 ;主程序需要CL進(jìn)行循環(huán),所以在計(jì)算以后將CL清零</p><p> ADD TEMP,AL </p><p> ;求TEMP+AL的值</p><p> MOV AH,TEMP</p><p> CMP AH,0AH &
50、lt;/p><p> ;輸入的值大于10的話,重新輸入</p><p> JG CHULI</p><p> ADD SUM,AH</p><p> MOV TEMP,0H </p><p> JMP NO9 </p><p> NO10:
51、 </p><p> MOV COUNT,AL ;求TEMP*10的值</p><p> MOV AH,0AH </p><p><b> MUL AH</b></p><p> MOV TEMP,AL</p><p>
52、MOV AL,COUNT </p><p> NO9: </p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRI
53、TE_DATA</p><p> JMP START1 </p><p> CHULI: </p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE
54、_DATA </p><p> CALL INIT8279_1</p><p> MOV SUM,0 </p><p> MOV KEYCOUNT,0 </p><
55、;p> JMP START1 </p><p> START_EXIT: JMP $ </p><p> ;------------------------------------------------</p><p> ;處理小數(shù)部分 </p><p> XIAOSHU
56、 PROC NEAR</p><p> PUSH AX</p><p> PUSH BX</p><p> PUSH CX</p><p> PUSH DX</p><p> CMP AL,0H</p><p> JE X0<
57、/p><p> CMP AL,01H</p><p> JE X1</p><p> CMP AL,02H</p><p> JE X2</p><p> CMP AL,03H</p><p> JE X3</p>&l
58、t;p><b> X0:</b></p><p> MOV AL,0H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p>&
59、lt;p> MOV AL,0</p><p> JMP X4</p><p><b> X1: </b></p><p> MOV AL,02H</p><p> AND AL,3FH</p><p> LEA BX,LED_TAB
60、 ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,05H</p><p> JMP X4</p><p><b> X2:</b></p&g
61、t;<p> MOV AL,05H</p><p> AND AL,3FH</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p>&l
62、t;p> MOV AL,0H</p><p> JMP X4</p><p><b> X3: </b></p><p> MOV AL,07H</p><p> AND AL,3FH</p><p> LEA BX,LED_TA
63、B ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,05H</p><p> X4: AND AL,3FH</p><p> LEA BX
64、,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p> XIANSHI: </p><p> CALL SCAN_KEY ;鍵掃描</p><p> JNC
65、 XIANSHI </p><p> ;鍵的輸入來控制顯示結(jié)果的時間</p><p> POP DX</p><p> POP CX</p><p> POP BX</p><p> POP AX</p><p> XIAOSHU
66、ENDP</p><p> ;------------------------------------------------</p><p><b> ;8279初始化</b></p><p> INIT8279 PROC NEAR</p><p> MOV DX,CMD_8279
67、 ;CMD_8279為寫命令地址、讀狀地址</p><p> MOV AL,34H ;可編程時鐘設(shè)置,設(shè)置分頻系數(shù)(20分頻)</p><p> OUT DX,AL</p><p> MOV AL,0H ;8位字符顯示,左邊輸入,外部譯碼鍵掃描方式,雙鍵互鎖,10H右入口</p><p>
68、OUT DX,AL </p><p> CALL INIT8279_1</p><p><b> RET</b></p><p> INIT8279 ENDP</p><p> INIT8279_1 PROC NEAR</p><p> CALL
69、 CLEAR ;清顯示</p><p> MOV AL,90H ;從第一個數(shù)碼管開始移位顯示,寫顯示RAM命令</p><p> OUT DX,AL</p><p><b> RET</b></p><p> INIT8279_1 ENDP</p><
70、p> ;-----------------------------------------------------------------------------------</p><p><b> ;清除</b></p><p> CLEAR PROC NEAR</p><p> MOV DX,CMD_
71、8279</p><p> MOV AL,0DEH ; 清除命令,將顯示RAM全部置1</p><p> OUT DX,AL</p><p> WAIT1: IN AL,DX</p><p> TEST AL,80H ;10000000B,寫顯示RAM,初始位為00
72、00</p><p> JNZ WAIT1 ; 顯示RAM清除完畢嗎?</p><p><b> RET</b></p><p> CLEAR ENDP</p><p> ;------------------------------------------------</p&g
73、t;<p><b> ;掃描</b></p><p> SCAN_KEY PROC NEAR</p><p> MOV DX,CMD_8279</p><p> IN AL,DX ;讀狀態(tài)</p><p> READ_FIFO: AND AL,
74、7</p><p> JZ NO_KEY ;是否有鍵按下</p><p> READ: MOV AL,40H</p><p> OUT DX,AL ;讀FIFO RAM,初始地址為000H</p><p> MOV DX,DATA_8279</p><
75、p> IN AL,DX</p><p> STC ;有鍵</p><p> SCAN_KEY1: RET</p><p> NO_KEY: CLC ;無鍵按下,清CF</p><p> JMP SCAN_KEY1</p><p> SCAN_KE
76、Y ENDP</p><p> ;------------------------------------------------</p><p><b> ;鍵值轉(zhuǎn)換</b></p><p> KEY_NUM PROC NEAR</p><p> AND AL,3FH
77、 ;00111111B清除高兩位,鍵值轉(zhuǎn)換為鍵號</p><p><b> RET</b></p><p> KEY_NUM ENDP</p><p> ;------------------------------------------------</p><p><b> ;讀數(shù)據(jù)
78、</b></p><p> WRITE_DATA PROC NEAR</p><p> MOV DX,DATA_8279 ;DATA_8279為讀寫數(shù)據(jù)口的地址</p><p> OUT DX,AL</p><p><b> RET</b></p><
79、;p> WRITE_DATA ENDP</p><p><b> ;PCI卡初始化</b></p><p> IfExit PROC NEAR</p><p> PUSH AX</p><p> PUSH DX</p><p> MOV
80、 AH,06H</p><p> MOV DL,0FFH</p><p> INT 21H</p><p> POP DX</p><p> POP AX</p><p><b> RET</b></p><p> IfExit
81、 ENDP </p><p> InitPCI PROCNEAR</p><p> MOVAH,00H</p><p> MOVAL,03H</p><p> INT10H;清屏</p><p> MOVAH,0B1H</p><p>
82、 MOVAL,01H</p><p><b> INT1AH</b></p><p><b> CMPAH,0</b></p><p> JZ InitPCI2</p><p> LEADX,msg0</p><p> InitPCI1:
83、 MOVAH,09H</p><p><b> INT21H</b></p><p><b> JMPExit</b></p><p> InitPCI2: MOVAH,0B1H</p><p> MOVAL,02H</p><p> MOV
84、CX,Device_ID</p><p> MOVDX,Vendor_ID</p><p><b> MOVSI,0</b></p><p><b> INT1AH</b></p><p> JNCInitPCI3;是否存在Star PCI9052板卡</p>&
85、lt;p> LEADX,msg1</p><p> JMPInitPCI1</p><p> InitPCI3:MOVDI,PCIBAR3</p><p> MOVAH,0B1H</p><p> MOVAL,09H</p><p> INT1AH;讀取該卡PCI9052基地址&l
86、t;/p><p> JNCInitPCI4</p><p> LEADX,msg2</p><p> JMPInitPCI1</p><p> InitPCI4:ANDCX,0FFFCH</p><p> MOVIO_Bit8_BaseAddress,CX</p><p>&l
87、t;b> RET</b></p><p> InitPCIENDP</p><p> ModifyAddress PROC NEAR</p><p> ADD CMD_8279,CX</p><p> ADD DATA_8279,CX</p><p><b
88、> RET</b></p><p> ModifyAddress ENDP </p><p> Exit: MOV AH,4CH</p><p> INT 21H</p><p> END START</p><p> 在實(shí)驗(yàn)過程中,老師要求將四
89、位評委改成八位評委,并且每位評委分?jǐn)?shù)只占LED顯示的一位,程序如下:.</p><p> MODEL TINY</p><p> PCIBAR3 EQU 1CH ;8位I/O空間基地址(它就是實(shí)驗(yàn)儀的基地址,也為DMA & 32 BIT+RAM板卡上的8237提供基地址)</p><p> Vendor_ID EQU
90、 10EBH ;廠商ID號</p><p> Device_ID EQU 8376 ;設(shè)備ID號 </p><p> .STACK 100</p><p><b> .DATA</b></p><p> IO_Bit8_BaseAddress DW ?<
91、;/p><p> msg0 DB 'BIOS不支持訪問PCI $'</p><p> msg1 DB '找不到Star PCI9052板卡 $'</p><p> msg2 DB '讀8位I/O空間基地址時出錯$'</p><p
92、> SUM DB 0H ;分?jǐn)?shù)和</p><p> TEMP DB 0H ;中間變量 </p><p> KEYCOUNT DB ? ;按鍵數(shù)目</p><p> COUNT DB ? </p><p
93、> ;乘10的時候,保存AL所用的中間變量</p><p> LED_TAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;不帶小數(shù)點(diǎn)的整數(shù)</p><p> DB 080H,90H,88H,83H,0C6H,0A1H,86H,8EH </p><p> L
94、ED_TBB DB 040H,079H,024H,030H,19H,12H,02H,078H ;帶小數(shù)點(diǎn)的整數(shù)</p><p> DB 000H,10H,08H,03H,046H,021H,06H,0EH</p><p> CMD_8279 DW 00B1H ;8279命令字、狀態(tài)字地址</p><p&
95、gt; DATA_8279 DW 00B0H ;8279讀寫數(shù)據(jù)口的地址,由于偏移地址則CS接PCI卡的CS5!!!</p><p><b> .CODE</b></p><p> START: MOV AX,@DATA</p><p> MOV DS,AX</p>&l
96、t;p><b> NOP</b></p><p> CALL InitPCI</p><p> CALL ModifyAddress ;根據(jù)PCI提供的基地址,將偏移地址轉(zhuǎn)化為實(shí)地址</p><p> CALL INIT8279 ;初始化子程序</p><p> MOV
97、 KEYCOUNT,0 </p><p> MOV CX,0 </p><p> ;-----------------------------------------------------------------------------------------</p><p><b> ;主程序</
98、b></p><p> START1: CALL IfExit</p><p> JZ START11</p><p> JMP Exit</p><p> START11: CALL SCAN_KEY ;鍵掃描</p><p> JNC
99、 START1 ;沒有按鍵</p><p> XCHG AL,KEYCOUNT </p><p> INC AL</p><p> CMP AL,9</p><p> JNZ START2</p><p> MOV
100、 KEYCOUNT,0 </p><p> CALL INIT8279_1 </p><p> ;8個數(shù)碼塊全有字符顯示后,再按鍵,清除顯示 </p><p> MOV AL,SUM </p><p><b> ;計(jì)算部分</b></p><p&
101、gt; CMP AL,48H</p><p> JNE NOTSHI</p><p> MOV AL,09H</p><p> LEA BX,LED_TBB ;字型碼表</p><p><b> XLAT</b></p><p> CALL
102、 WRITE_DATA</p><p> MOV AL,0H</p><p> CALL XIAOSHU </p><p> JMP HUAN </p><p> NOTSHI: </p><p> PUSH AX</p>&l
103、t;p> POP AX</p><p> MOV BL,AL</p><p> AND AL,00000111B ;將小數(shù)的兩位取出</p><p> MOV BH,AL</p><p> MOV AL,BL</p><p> AND AL,1111
104、1000B ;將整數(shù)的六位取出</p><p> MOV CL,3</p><p> SHR AL,CL ;AL里保存整數(shù)部分</p><p> MOV AH,BH ;AH里保存小數(shù)部分</p><p> LEA BX,LED_TBB ;帶小數(shù)點(diǎn)的字型碼表
105、 </p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,AH </p><p> CALL
106、 XIAOSHU </p><p><b> ;計(jì)算部分</b></p><p> HUAN: MOV SUM,0</p><p> CALL INIT8279_1</p><p> JMP START1</p&g
107、t;<p> START2: XCHG AL,KEYCOUNT </p><p> CALL KEY_NUM ;鍵值轉(zhuǎn)換為鍵號</p><p> CMP AL,09H </p><p> ;輸入的鍵值不在0~9范圍內(nèi),及輸入錯誤,重新輸入</p
108、><p> JG CHULI</p><p> MOV AH,AL</p><p> CMP AH,09H </p><p> ;輸入的值大90的話,重新輸入</p><p> JG CHULI</p><p> ADD
109、 SUM,AH</p><p> JMP NO9 </p><p> NO9: </p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_
110、DATA</p><p> JMP START1 </p><p> CHULI: </p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DA
111、TA </p><p> CALL INIT8279_1</p><p> MOV SUM,0 </p><p> MOV KEYCOUNT,0 </p><p&
112、gt; JMP START1 </p><p> START_EXIT: JMP $ </p><p> ;------------------------------------------------</p><p><b> ;處理小數(shù)部分 </b></p><p><b&
113、gt; X5: </b></p><p> MOV AL,06H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p>
114、; MOV AL,02H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,05H</p><p><b
115、> JMP X8</b></p><p><b> X6: </b></p><p> MOV AL,07H</p><p> AND AL,1FH</p><p> LEA BX,LED_TAB ;字型碼表</p><p&
116、gt;<b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,05H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><
117、;p> CALL WRITE_DATA</p><p> MOV AL,0</p><p> JMP X8</p><p><b> X7: </b></p><p> MOV AL,08H</p><p> AND AL,1FH&
118、lt;/p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,07H</p><p> LEA BX,LED_TAB
119、 ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p> MOV AL,05H </p><p> JMP X8 </p><p> XIAOSHU PROC N
120、EAR</p><p> PUSH AX</p><p> PUSH BX</p><p> PUSH CX</p><p> PUSH DX</p><p> CMP AL,0H</p><p> JE X0</p><
121、p> CMP AL,01H</p><p> JE X1</p><p> CMP AL,02H</p><p> JE X2</p><p> CMP AL,03H</p><p> JE X3</p><p> CMP
122、 AL,04H</p><p> JE X4</p><p> CMP AL,05H</p><p> JE X5</p><p> CMP AL,06H</p><p> JE X6</p><p> CMP AL,07
123、H</p><p> JE X7</p><p><b> X0:</b></p><p> MOV AL,0H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p&
124、gt;<p> CALL WRITE_DATA </p><p> MOV AL,0H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p>
125、<p> MOV AL,0</p><p> JMP X8</p><p><b> X1: </b></p><p> MOV AL,01H</p><p> AND AL,1FH</p><p> LEA BX,LED_TA
126、B ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,02H</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b>
127、 XLAT</b></p><p> CALL WRITE_DATA</p><p> MOV AL,05H</p><p> JMP X8</p><p><b> X2:</b></p><p> MOV AL,02H</p>
128、<p> AND AL,1FH</p><p> LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA </p><p> MOV AL,05H</p><p&
129、gt; LEA BX,LED_TAB ;字型碼表</p><p><b> XLAT</b></p><p> CALL WRITE_DATA</p><p> MOV AL,0H</p><p> JMP X8</p><p><b>
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口課程設(shè)計(jì)
- 競賽搶答器課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 競賽搶答器課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口技術(shù)課程設(shè)計(jì)報(bào)告
- 交通燈-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口電子鐘課程設(shè)計(jì)報(bào)告
- c語言課程設(shè)計(jì)之評分系統(tǒng)
- 微機(jī)課程設(shè)計(jì)報(bào)告
- 接口課程設(shè)計(jì)報(bào)告
- 接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口課程設(shè)計(jì)報(bào)告--數(shù)字鐘實(shí)驗(yàn)
- c語言課程設(shè)計(jì)--比賽評分系統(tǒng)的設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)(電子鐘)
- 微機(jī)系統(tǒng)與接口課程設(shè)計(jì)-電子琴
- 微機(jī)接口課程設(shè)計(jì)---位移的測量
- 微機(jī)接口課程設(shè)計(jì)--交通燈設(shè)計(jì)
- 微機(jī)接口音樂點(diǎn)歌課程設(shè)計(jì)
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
評論
0/150
提交評論