版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 計(jì)算機(jī)科學(xué)與技術(shù)系</b></p><p><b> 微機(jī)原理與接口技術(shù)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 2008~2009 學(xué)年第1學(xué)期</p><p><b> 2009年1月<
2、/b></p><p> 一、題義分析與解決方案</p><p><b> 1.題義需求分析</b></p><p> 本課題需要設(shè)計(jì)一個(gè)應(yīng)用接口芯片作為四個(gè)七段LED數(shù)碼管輸出口,編一個(gè)程序,使用四個(gè)LED數(shù)碼管循環(huán)快速閃爍數(shù)字(顯示0—100),15秒后停滯,此號(hào)碼即為隨機(jī)中獎(jiǎng)號(hào)碼。</p><p>
3、根據(jù)課題的設(shè)計(jì)要求,作如下的分析:</p><p> 抽獎(jiǎng)器需要顯示抽獎(jiǎng)數(shù)字,初始值為000,可以控制抽獎(jiǎng)開(kāi)始,抽獎(jiǎng)開(kāi)始后要不停的顯示隨機(jī)數(shù)直到15秒后停滯。</p><p> 根據(jù)以上分析可知,我們需要解決以下幾個(gè)問(wèn)題:</p><p> ①隨機(jī)數(shù)怎么樣產(chǎn)生?</p><p> ?、谠趺礃哟鎯?chǔ)產(chǎn)生的隨機(jī)數(shù)?</p>&l
4、t;p> ?、凼褂檬裁礃拥慕涌陔娐穪?lái)實(shí)現(xiàn)?</p><p><b> ?、苋绾物@示隨機(jī)數(shù)?</b></p><p> 2.解決問(wèn)題方法與思路</p><p> 根據(jù)以上的題義需求分析,現(xiàn)在對(duì)上述四個(gè)問(wèn)題進(jìn)行逐一解決。下面我們可用列表比較的方法來(lái)選擇器件,具體器件的名稱(chēng)和特點(diǎn)如表1-1所示。由表1-1可以得到以下分析結(jié)果:</p&
5、gt;<p> 隨機(jī)數(shù)通過(guò)軟件的方法來(lái)實(shí)現(xiàn)。1秒設(shè)置問(wèn)題用軟件實(shí)現(xiàn):因?yàn)槌杀镜?,而且是?yàn)證型實(shí)驗(yàn),無(wú)需精確。接口電路采用8255芯片:因?yàn)樵诔楠?jiǎng)器設(shè)計(jì)時(shí),距離很近,而且要求數(shù)據(jù)各位同時(shí)傳送,這些都符合8255可編程并行接口的特點(diǎn)。顯示問(wèn)題選用LED:因?yàn)镺LED效果佳,但價(jià)格高,LCD不穩(wěn)定,容易出現(xiàn)閃爍問(wèn)題,驅(qū)動(dòng)器選擇74LS244:因?yàn)楸菊n程設(shè)計(jì)只需單向傳送,74LS245顯得浪費(fèi)。 綜上所述,本課程設(shè)計(jì)需要一塊80
6、86CPU,一片8255A可編程并行接口芯片,七段LED顯示器,74LS244驅(qū)動(dòng)器。</p><p> 表1-1 器件對(duì)比表</p><p><b> 1) 硬件部分</b></p><p> 8255A工作于方式0,將PC口作為輸入端,將PB口和PA口作為輸出端,PB口用來(lái)輸出位選碼,PA口用來(lái)輸出段選碼。顯示器初始狀態(tài)顯示為000。
7、</p><p><b> 2)軟件部分</b></p><p> 通過(guò)觀(guān)察和實(shí)際檢測(cè)可以知道程序的每條指令的硬件時(shí)間執(zhí)行時(shí)時(shí)非??斓?,每秒8086可以執(zhí)行8萬(wàn)次以上的操作。所以我們可以如下設(shè)置隨即函數(shù):開(kāi)始抽獎(jiǎng)時(shí)顯示000,隨機(jī)數(shù)產(chǎn)生函數(shù)中產(chǎn)生的數(shù)字從0開(kāi)始,第一個(gè)數(shù)時(shí)0,第二個(gè)數(shù)便在第一個(gè)數(shù)基礎(chǔ)上加一,如循環(huán)往復(fù)執(zhí)行,到100時(shí)再?gòu)囊婚_(kāi)始重新進(jìn)行加一運(yùn)算。 這
8、樣我們可以保證在一秒的時(shí)間內(nèi)隨機(jī)數(shù)可以從0變化到100已滿(mǎn)足隨機(jī)抽獎(jiǎng)器的需要。</p><p><b> 二、硬件設(shè)計(jì)</b></p><p><b> 1. 8255芯片</b></p><p> 1) 8255A在本設(shè)計(jì)中的作用</p><p> 從PC口輸入開(kāi)關(guān)量,從PA口和PB口進(jìn)行
9、輸出顯示。</p><p> 2) 8255A的功能分析</p><p> 下面主要介紹方式0的工作特點(diǎn),8255A工作方式0又稱(chēng)為基本輸入/輸出(同步傳送)方式,該方式下可將三個(gè)數(shù)據(jù)端口劃分為四個(gè)獨(dú)立的部分,A口和B口作為兩個(gè)8位端口,C口高四位和低四位可用作兩個(gè)4位端口。方式0使用在無(wú)條件傳送和查詢(xún)式傳送兩種場(chǎng)合。無(wú)條件傳送一般用于簡(jiǎn)單的外部設(shè)備,例如:鍵盤(pán)、開(kāi)關(guān)量的輸入,狀態(tài)指示
10、燈等等,此時(shí)不使用聯(lián)絡(luò)信號(hào)。而查詢(xún)傳送</p><p> 時(shí),A口和B口作為數(shù)據(jù)的輸出,C口的若干位作為聯(lián)絡(luò)信號(hào)。其具體功能如表2-1所示,8255A的方式控制字表如圖2-1所示。</p><p> 表2-1 8255A的端口錄址及操作功能表</p><p> D7 D6 D5 D4 D3 D2
11、 D1 D0</p><p> 1:工作方式 A口方式0輸出 B口方式0輸出</p><p> C口高4位輸入 C口低4位輸入</p><p> 表2-2 8255A的方式控制字</p><p> 3) 8255部分技術(shù)參數(shù)分析&
12、lt;/p><p> 8255A的技術(shù)參數(shù)表如表2-3所示:</p><p> 表2-3 8255A技術(shù)參數(shù)表</p><p> 8255A工作最大電流為120MA,VCC為-5V~+5V,I(DAR)工作電流最大為4.0mA,最小為1.0mA。</p><p> 2. 選擇器件LED</p><p> 1) L
13、ED在本設(shè)計(jì)中的作用</p><p> LED發(fā)光二級(jí)管在本設(shè)計(jì)中作為終端輸出顯示器,顯示時(shí)間的分秒。</p><p> 2) LED功能分析</p><p> 1. 物理構(gòu)造:LED發(fā)光二級(jí)管,采用砷化鎵、鎵鋁砷、和磷化鎵等材料制成,其內(nèi)部結(jié)構(gòu)為一個(gè)PN結(jié),具有單向?qū)щ娦浴F涫疽鈭D如圖2-2所示,真值表如表2-4所示。</p><p>
14、; 圖2-1 LED發(fā)光管示意圖</p><p> 2. 工作原理:當(dāng)在發(fā)光二極管PN結(jié)上加正向電壓時(shí),PN結(jié)勢(shì)壘降低,載流子的擴(kuò)散運(yùn)動(dòng)大于漂移運(yùn)動(dòng),致使P區(qū)的空穴注入到N區(qū),N區(qū)的電子注入到P區(qū),這樣相互注入的空穴與電子相遇后會(huì)產(chǎn)生復(fù)合,復(fù)合時(shí)產(chǎn)生的能量大部分以光的形式出現(xiàn)。</p><p> 3. 將七個(gè)發(fā)光管進(jìn)行組合,排列成數(shù)字圖形8,再根據(jù)需要控制七個(gè)管的亮與滅,即可顯示出
15、定義數(shù)字。</p><p> 表2-4 LED發(fā)光二極管的真值表</p><p> 3) LED技術(shù)參數(shù)分析</p><p> LED發(fā)光二極管的壓降一般為1.5-2.0V,其工作電流一般取10-20Ma,發(fā)光二極管可應(yīng)用于直流驅(qū)動(dòng)電路、交流驅(qū)動(dòng)電路和脈沖驅(qū)動(dòng)電路。</p><p> 由于8255A的最大驅(qū)動(dòng)電流為4.0mA,而LE
16、D的工作電流一般為10-20mA,所以需要加一個(gè)驅(qū)動(dòng)器74LS244。</p><p> 3. 驅(qū)動(dòng)器74LS244</p><p> 1)芯片在本設(shè)計(jì)中的作用</p><p> 主要用于驅(qū)動(dòng)LED顯示器,從而顯示出數(shù)字。</p><p> 2) 74LS244的功能分析</p><p> 74LS244的主
17、要功能就是實(shí)現(xiàn)驅(qū)動(dòng),8255A的驅(qū)動(dòng)電流遠(yuǎn)遠(yuǎn)小于LED的驅(qū)動(dòng)電流。</p><p> 3) 74LS244的技術(shù)參數(shù)分析</p><p> 74LS244的技術(shù)參數(shù)表如表2-5所示:</p><p> 表2-5 74LS244的技術(shù)參數(shù)表</p><p> 由于74LS244的驅(qū)動(dòng)電流為24mA,滿(mǎn)足題義要求,可以使計(jì)時(shí)數(shù)字從LED
18、發(fā)光二極管上顯示出來(lái)。</p><p> 4. 選擇芯片4—邏輯開(kāi)關(guān)</p><p> 1)開(kāi)關(guān)在本次設(shè)計(jì)中的作用</p><p> 本設(shè)計(jì)中開(kāi)關(guān)主要起到復(fù)位和控制的作用。</p><p><b> 2) 功能分析</b></p><p> 二進(jìn)制邏輯開(kāi)關(guān)主要是用來(lái)輸入信息的,當(dāng)開(kāi)關(guān)撥
19、上時(shí)為1,撥下時(shí)為0;</p><p><b> 3)技術(shù)參數(shù)</b></p><p> 當(dāng)K接VCC=+5V時(shí)為1,接地時(shí)輸出為0。</p><p> 5. 硬件總邏輯圖及其說(shuō)明</p><p> 圖2-2 硬件總邏輯圖</p><p> 說(shuō)明:PC機(jī)的AD0~AD7經(jīng)數(shù)據(jù)總線(xiàn)與825
20、5A的D0~D7相連,地址線(xiàn)A1、A0與8255的A0、A1相連,即偶地址有效。控制總線(xiàn)RD、WR、RESET分別與8255相應(yīng)的控制信號(hào)線(xiàn)連接。片選信號(hào)CS0與8255的CS信號(hào)連接,則8255的端口地址為04A0~04A6。8255的PA口用于存放位選碼,使用的是高四位,分別連接到四個(gè)七段LED顯示器上。使用的是共陰極接;PB口用于存放段選碼,八位全部連接到八個(gè)二極管上;PC口用作信號(hào)輸入。</p><p>
21、<b> 三、控制程序設(shè)計(jì)</b></p><p> 1. 控制程序設(shè)計(jì)思路說(shuō)明</p><p> 本課程設(shè)計(jì)用到了三片LED顯示芯片,分別顯示隨機(jī)數(shù)的百分位、十分位、個(gè)位。為節(jié)省硬件,所以采用動(dòng)態(tài)掃描顯示方式,每次只使一位LED顯示器公共端的電平有效,因而每次只有一位LED顯示器發(fā)光。但由于人眼的視覺(jué)暫留的效應(yīng),只要間隔的時(shí)間足夠短,則依次從右向左顯示時(shí)就感覺(jué)
22、是3位LED是同時(shí)點(diǎn)亮一樣。用8255的PA口接LED顯示器的公共端作位選擇,用PB口接LED的各片的發(fā)光二極管作段選擇的控制,用PC口接二進(jìn)制開(kāi)關(guān)作初始值的控制輸入和復(fù)位。在本程序中用了一個(gè)延時(shí)子程序來(lái)完成這個(gè)功能的。在LED顯示器上顯示的數(shù)字是從0~9共十個(gè)字符,將其相應(yīng)的轉(zhuǎn)換代碼存入一個(gè)緩沖區(qū)中,用查表轉(zhuǎn)換的方式來(lái)控制編程調(diào)用。</p><p><b> 2. 程序流程圖</b>&l
23、t;/p><p> 圖3-1 程序流程圖</p><p><b> 3. 控制程序</b></p><p> .MODELTINY</p><p> PCIBAR3EQU1CH;8位I/O空間基地址(它就是實(shí)驗(yàn)儀的基地址, 也為DMA & 32 BIT RAM板卡上的8237提供基地址) <
24、/p><p> Vendor_IDEQU 10EBH;廠(chǎng)商ID號(hào)</p><p> Device_IDEQU8376;設(shè)備ID號(hào)</p><p> .STACK100</p><p><b> .DATA</b></p><p> IO_Bit8_BaseAddress
25、DW?</p><p> msg0DB'BIOS不支持訪(fǎng)問(wèn)PCI $'</p><p> msg1DB'找不到Star PCI9052板卡 $'</p><p> msg2DB'讀8位I/O空間基地址時(shí)出錯(cuò)$' </p><p> COM_ADDD
26、W00F3H;控制口偏移量</p><p> PA_ADDDW00F0H;PA口偏移量</p><p> PB_ADDDW00F1H;PB口偏移量</p><p> PC_ADDDW00F2H;PC口偏移量</p><p> duanxuan db 3fH,06H,5bH,4fH,66H,6dH,7dH,0
27、7H,7fH,6fH ;段選碼</p><p> shuju db 00h,00h,00h ;要顯示的數(shù)據(jù)值</p><p> zjh db 0ah,0ah,0ah,0ah,0ah,0ah,0ah,0ah,0ah ;中獎(jiǎng)號(hào)碼</p><p><b> .CODE</b></p><p> START
28、:MOVAX,@DATA</p><p> MOVDS,AX</p><p><b> NOP</b></p><p> CALLInitPCI</p><p> CALLModifyAddress;根據(jù)PCI提供的基地址,將偏移地址轉(zhuǎn)化為實(shí)地址</p><p> st
29、rat: mov al,89h ; 8255芯片初始化,c口輸入,a,b口輸出,b口段選,a口位選化工作方式控制字 </p><p> mov dx,COM_AD ;工作方式寄存器端口地址 </p><p><b> out dx,al</b></p><p> lo
30、op3: mov dx,PC_ADD ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,80h ;判斷最高位是否為1 </p><p> cmp al,80h ;為1時(shí)進(jìn)入抽獎(jiǎng)程序</p><p> jnz loop3
31、 ;不等于1時(shí)調(diào)回上部繼續(xù)檢查直到K8為1時(shí)才執(zhí)行下面程序</p><p><b> Loop5: </b></p><p> call display1 ;調(diào)用顯示子程序顯示</p><p> mov dx,PC_ADD ;送PC口端口地址</p><p> in a
32、l,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,0c0h ;判斷最高位是否為1 </p><p> cmp al,0c0h </p><p> jnz loop11</p><p><b> loop6: </b>&l
33、t;/p><p> call suijishu ;調(diào)用隨機(jī)數(shù)函數(shù)產(chǎn)生隨機(jī)數(shù)</p><p> call display1 ;顯示隨機(jī)函數(shù)</p><p> mov dx,PC_ADD ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p>
34、 and al,0d0h </p><p> cmp al,0d0h </p><p><b> jnz loop6</b></p><p> loop9: call display1 ;顯示隨機(jī)函數(shù)</p><p> mov dx,PC_ADD
35、 ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,01h </p><p> cmp al,01h </p><p> jnz loop9 </p><p> call qingchu </p>
36、<p> jmp loop3</p><p> loop11: mov dx,PC_ADD ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,0a0h ;判斷四位是否為1 </p><p>
37、; cmp al,0a0h </p><p> jnz loop5 </p><p> loop14: call suijishu</p><p> call display1</p><p> mov dx,PC_ADD</p><p><b> in al,dx
38、</b></p><p> and al,0b0h ;判斷第四位否為1 </p><p> cmp al,0b0h</p><p> jnz loop14</p><p> mov al,[shuju]</p><p> mov [zjh],al</p><p
39、> mov al,[shuju+1]</p><p> mov [zjh+1],al</p><p> mov al,[shuju+2]</p><p> mov [zjh+2],al</p><p> loop17: call display1</p><p> mov dx,PC_ADD
40、 ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,0b0h ;判斷四位是否為1 </p><p> cmp al,0b0h </p><p> jz loop17 </p><p> lo
41、op15: call suijishu</p><p> call display1 </p><p> mov dx,PC_ADD ;送PC口端口地址</p><p><b> in al,dx</b></p><p> and al,0b0h ;判斷第四位否為1 </p&
42、gt;<p> cmp al,0b0h</p><p> jnz loop15</p><p> mov al,[shuju]</p><p> mov [zjh+3],al</p><p> mov al,[shuju+1]</p><p> mov [zjh+4],al</p>
43、;<p> mov al,[shuju+2]</p><p> mov [zjh+5],al</p><p> loop18: call display1</p><p> mov dx,PC_ADD ;送PC口端口地址 </p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p>&
44、lt;p> and al,0b0h ;判斷四位是否為1 </p><p> cmp al,0b0h </p><p> jz loop18 </p><p> loop16: call suijishu</p><p> call display1 </p><
45、;p> mov dx,PC_ADD ;送PC口端口地址 </p><p><b> in al,dx</b></p><p> and al,0b0h ;判斷第四位否為1 </p><p> cmp al,0b0h</p><p> jnz loop16</p>&
46、lt;p> mov al,[shuju]</p><p> mov [zjh+6],al</p><p> mov al,[shuju+1]</p><p> mov [zjh+7],al</p><p> mov al,[shuju+2]</p><p> mov [zjh+8],al <
47、;/p><p> loop19: call display1</p><p> mov dx,PC_ADD ;送PC口端口地址 </p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p><p> and al,0b0h ;判斷四位是否為1 </p><
48、p> cmp al,0b0h </p><p> jz loop19 </p><p> loop66: call display2</p><p> mov dx,PC_ADD ;送PC口端口地址</p><p> in al,dx ;讀入八位開(kāi)關(guān)量</p>
49、;<p> and al,01h </p><p> cmp al,01h </p><p> jnz loop66</p><p> call qingchu </p><p> jmp loop3 </p><p> display1 proc
50、near </p><p> push si ;保護(hù)斷點(diǎn)</p><p><b> push dx</b></p><p> push cx </p><p><b> push bx</b></p>&l
51、t;p> push ax </p><p> push di </p><p> mov di,1h ;設(shè)置循環(huán)次數(shù),控制時(shí)間變化的快慢</p><p> loop1: mov si,offset shuju ;shuju數(shù)據(jù)緩沖區(qū)首地址送SI</p><p> mov
52、cx,3 ;控制對(duì)三位segment的分時(shí)顯示</p><p> mov ah,11111011b ;設(shè)置位選, 選中最低位</p><p> loop2: mov al, byte ptr [si] ;將si指向的suju數(shù)據(jù)緩沖區(qū)的值賦給al</p><p> mov bx,offset duanxuan
53、 ;將segment的首地址送入bx中</p><p> xlat ;查segment表,[al+bx]->al</p><p> mov dx,PB_ADD ;送PB口地址</p><p> out dx,al ;送段選碼</p><p>
54、 mov al,ah ;位選碼</p><p> mov dx,PA_ADD ;送PA口地址</p><p> out dx,al ;送位選碼</p><p> call delay ;調(diào)用延時(shí)子程序</p><p> mov al,0ffh
55、 ;禁止顯示</p><p><b> out dx,al</b></p><p> add si,1 ;指針下移(控制顯示位)</p><p> ror ah,1 ;設(shè)置下次顯示的位選碼</p><p> loop loop2 ;顯示下一位<
56、;/p><p> dec di ;控制顯示一秒</p><p> jne loop1 ;di不為零時(shí)循環(huán)(控制每秒顯示時(shí)間)</p><p> pop di ;恢復(fù)斷點(diǎn)</p><p><b> pop ax</b></p><
57、;p><b> pop bx </b></p><p><b> pop cx</b></p><p><b> pop dx</b></p><p><b> pop si</b></p><p><b> ret</b&
58、gt;</p><p> display1 endp</p><p> display2 proc near </p><p> push si ;保護(hù)斷點(diǎn)</p><p><b> push dx</b></p><p> pu
59、sh cx </p><p><b> push bx</b></p><p> push ax </p><p> push di </p><p> mov cx,100 </p><p> loop36: push cx
60、 </p><p> mov si,offset zjh ;shuju數(shù)據(jù)緩沖區(qū)首地址送SI</p><p> mov cx,3 ;控制對(duì)三位segment的分時(shí)顯示</p><p> mov ah,11111011b ;設(shè)置位選, 選中最低位</p><p> loop32: mo
61、v al, byte ptr [si] ;將si指向的suju數(shù)據(jù)緩沖區(qū)的值賦給al</p><p> mov bx,offset duanxuan ;將segment的首地址送入bx中</p><p> xlat ;查segment表,[al+bx]->al</p><p> mov dx,PB_AD
62、D ;送PB口地址</p><p> out dx,al ;送段選碼</p><p> mov al,ah ;位選碼</p><p> mov dx,PA_ADD ;送PA口地址</p><p> out dx,al ;送位
63、選碼</p><p> call delay ;調(diào)用延時(shí)子程序</p><p> mov al,0ffh ;禁止顯示</p><p><b> out dx,al</b></p><p> add si,1 ;指針下移(控制顯示位)</p>&
64、lt;p> ror ah,1 ;設(shè)置下次顯示的位選碼</p><p> loop loop32 ;顯示下一位\</p><p><b> pop cx</b></p><p> loop loop36</p><p> call dl500ms </p>
65、<p> mov cx,100 </p><p> loop37: push cx </p><p> mov si,offset zjh ;shuju數(shù)據(jù)緩沖區(qū)首地址送SI</p><p><b> add si,3</b></p><p> mov cx,3
66、 ;控制對(duì)三位segment的分時(shí)顯示</p><p> mov ah,11111011b ;設(shè)置位選, 選中最低位</p><p> loop33: mov al, byte ptr [si] ;將si指向的suju數(shù)據(jù)緩沖區(qū)的值賦給al</p><p> mov bx,offset duanxuan ;將seg
67、ment的首地址送入bx中</p><p> xlat ;查segment表,[al+bx]->al</p><p> mov dx,PB_ADD ;送PB口地址</p><p> out dx,al ;送段選碼</p><p> mov al
68、,ah ;位選碼</p><p> mov dx,PA_ADD ;送PA口地址</p><p> out dx,al ;送位選碼</p><p> call delay ;調(diào)用延時(shí)子程序</p><p> mov al,0ffh
69、 ;禁止顯示</p><p><b> out dx,al</b></p><p> add si,1 ;指針下移(控制顯示位)</p><p> ror ah,1 ;設(shè)置下次顯示的位選碼</p><p> loop loop33 ;顯示下一位</p
70、><p><b> pop cx</b></p><p> loop loop37 </p><p> call dl500ms </p><p> mov cx,100 </p><p> loop38: push cx </p><p> mo
71、v si,offset zjh ;shuju數(shù)據(jù)緩沖區(qū)首地址送SI</p><p><b> add si,6</b></p><p> mov cx,3 ;控制對(duì)三位segment的分時(shí)顯示</p><p> mov ah,11111011b ;設(shè)置位選, 選中最低位</p><
72、p> loop34: mov al, byte ptr [si] ;將si指向的suju數(shù)據(jù)緩沖區(qū)的值賦給al</p><p> mov bx,offset duanxuan ;將segment的首地址送入bx中</p><p> xlat ;查segment表,[al+bx]->al</p><p&
73、gt; mov dx,PB_ADD ;送PB口地址</p><p> out dx,al ;送段選碼</p><p> mov al,ah ;位選碼</p><p> mov dx,PA_ADD ;送PA口地址</p><p> out
74、dx,al ;送位選碼</p><p> call delay ;調(diào)用延時(shí)子程序</p><p> mov al,0ffh ;禁止顯示</p><p><b> out dx,al</b></p><p> add si,1 ;指針下移(控制
75、顯示位)</p><p> ror ah,1 ;設(shè)置下次顯示的位選碼</p><p> loop loop34 ;顯示下一位 </p><p><b> pop cx</b></p><p> loop loop38</p><p> call
76、dl1000ms </p><p> pop di ;恢復(fù)斷點(diǎn)</p><p><b> pop ax</b></p><p><b> pop bx </b></p><p><b> pop cx</b></p><p
77、><b> pop dx</b></p><p><b> pop si</b></p><p><b> ret</b></p><p> display2 endp</p><p> delay proc near ;延時(shí)
78、子程序,實(shí)現(xiàn)延時(shí)的功能</p><p> push cx ;將cx 的內(nèi)容保存入棧</p><p> mov cx,6000h ;設(shè)置循環(huán)次數(shù)(控制延時(shí)時(shí)間)</p><p> loop7: nop ;空操作,用于延時(shí)</p><p> loop loop7
79、 ;循環(huán)延時(shí)</p><p> pop cx ;恢復(fù)斷點(diǎn)</p><p> ret ;返回調(diào)用程序</p><p> delay endp </p><p> dl500ms proc near</p><p><b>
80、push ax</b></p><p><b> push dx</b></p><p> mov dx,1000</p><p> mov ah,0ffh</p><p><b> int 21h</b></p><p><b> pop d
81、x</b></p><p><b> pop ax</b></p><p><b> ret </b></p><p> dl500ms endp</p><p> dl1000ms proc near</p><p><b> push ax
82、</b></p><p><b> push dx</b></p><p> mov dx,2000</p><p> mov ah,0ffh</p><p><b> int 21h</b></p><p><b> pop dx</b
83、></p><p><b> pop ax</b></p><p><b> ret </b></p><p> dl1000ms endp</p><p> suijishu proc near</p><p> push si
84、 ;保護(hù)斷點(diǎn)</p><p><b> push dx</b></p><p> push cx </p><p><b> push bx</b></p><p> push ax </p><p> push di <
85、;/p><p> mov al,[shuju]</p><p> mov cx,100</p><p><b> mul cx</b></p><p><b> mov bx,ax</b></p><p> mov al,[shuju+1]</p><
86、;p><b> mov cx,10</b></p><p><b> mul cx</b></p><p><b> add bx,ax</b></p><p> mov al,[shuju+2]</p><p><b> add ax,bx</
87、b></p><p><b> inc ax</b></p><p> cmp ax,101</p><p><b> jb jx</b></p><p><b> sub ax,ax</b></p><p><b> jx:
88、 </b></p><p> MOV CL,100</p><p><b> DIV CL</b></p><p> MOV [shuju],AL</p><p> MOV AL,AH</p><p> MOV AH,00H</p><p>
89、; MOV CL,10</p><p><b> DIV CL</b></p><p> MOV [shuju+1],AL</p><p> MOV [shuju+2],AH</p><p> pop di ;恢復(fù)斷點(diǎn)</p><p><b>
90、; pop ax</b></p><p><b> pop bx </b></p><p><b> pop cx</b></p><p><b> pop dx</b></p><p><b> pop si</b></p&g
91、t;<p><b> ret</b></p><p> suijishu endp</p><p> qingchu proc near</p><p> push si ;保護(hù)斷點(diǎn)</p><p><b> push dx</b></p
92、><p> push cx </p><p><b> push bx</b></p><p> push ax </p><p><b> push di</b></p><p><b> sub ax,ax</b&g
93、t;</p><p> mov [shuju],al</p><p> mov [shuju+1],al</p><p> mov [shuju+2],al</p><p> mov [zjh],al</p><p> mov [zjh+1],al</p><p> mov [zjh
94、+2],al</p><p> mov [zjh+3],al</p><p> mov [zjh+4],al</p><p> mov [zjh+5],al</p><p> mov [zjh+6],al</p><p> mov [zjh+7],al</p><p> mov [z
95、jh+8],al</p><p> pop di ;恢復(fù)斷點(diǎn)</p><p><b> pop ax</b></p><p><b> pop bx </b></p><p><b> pop cx</b></p><p&
96、gt;<b> pop dx</b></p><p><b> pop si</b></p><p><b> ret</b></p><p> qingchu endp</p><p> InitPCIPROCNEAR</p><p>
97、 MOVAH,00H</p><p> MOVAL,03H</p><p> INT10H;清屏</p><p> MOVAH,0B1H</p><p> MOVAL,01H</p><p><b> INT1AH</b></p><p&g
98、t;<b> CMPAH,0</b></p><p> JZInitPCI2</p><p> LEADX,msg0</p><p> InitPCI1:MOVAH,09H</p><p><b> INT21H</b></p><p><
99、;b> JMPExit</b></p><p> InitPCI2:MOVAH,0B1H</p><p> MOVAL,02H</p><p> MOVCX,Device_ID</p><p> MOVDX,Vendor_ID</p><p><b> MOV
100、SI,0</b></p><p><b> INT1AH</b></p><p> JNCInitPCI3;是否存在Star PCI9052板卡</p><p> LEADX,msg1</p><p> JMPInitPCI1</p><p> InitP
101、CI3:MOVDI,PCIBAR3</p><p> MOVAH,0B1H</p><p> MOVAL,09H</p><p> INT1AH;讀取該卡PCI9052基地址</p><p> JNCInitPCI4</p><p> LEADX,msg2</p>&
102、lt;p> JMPInitPCI1</p><p> InitPCI4:ANDCX,0FFFCH</p><p> MOVIO_Bit8_BaseAddress,CX</p><p><b> RET</b></p><p> InitPCIENDP</p><p&
103、gt; ModifyAddressPROCNEAR</p><p> ADDCOM_ADD,CX</p><p> ADDPA_ADD,CX</p><p> ADDPB_ADD,CX</p><p> ADDPC_ADD,CX</p><p><b> RET</
104、b></p><p> ModifyAddressENDP</p><p> Exit:MOVAH,4CH</p><p><b> INT21H</b></p><p><b> END</b></p><p><b> 四、上機(jī)調(diào)試過(guò)
105、程</b></p><p><b> 1. 硬件調(diào)試:</b></p><p> 因?yàn)楸敬握n程設(shè)計(jì)采用的是STAR ES598PCI實(shí)驗(yàn)儀,通過(guò)借用上位機(jī)的CPU來(lái)完成實(shí)驗(yàn),這樣就不需要我們?cè)僭趩纹瑱C(jī)上另外插上一個(gè)CPU,而芯片74LS273都已經(jīng)集成在一塊電路板上,節(jié)省了連線(xiàn),除此以外還需要8255A一片,它是作為可編程接口芯片實(shí)現(xiàn)了外設(shè)(LED數(shù)碼
106、管顯示器)與8086之間的數(shù)據(jù)傳輸,解決了兩者之間的速度不匹配的矛盾,具有數(shù)據(jù)緩沖功能。從而實(shí)現(xiàn)了8255A對(duì)LED的控制,讓它顯示出時(shí)間的字樣。最后,還需要十六位邏輯開(kāi)關(guān)一個(gè),來(lái)控制整個(gè)抽獎(jiǎng)活動(dòng)。</p><p> 在硬件接線(xiàn)連接時(shí),應(yīng)將8255A的PA0~PA7分別與LED顯示器的LED0~LED7相連。PB7~PB0分別與LED顯示器的a~h相連,PC0~PC7分別與邏輯電平開(kāi)關(guān)電路的K1~K8相連, A
107、1和A2分別與地址鎖存器的A1和A2相接,由于本次實(shí)驗(yàn)采用的是STAR ES598PCI實(shí)驗(yàn)儀,譯碼芯片都集成在了一塊電路板上,所以讀寫(xiě)控制線(xiàn)都不要連接了。在連線(xiàn)完畢后,測(cè)試串口是否通訊成功。</p><p><b> 2.軟件調(diào)試:</b></p><p> 1.由于此次實(shí)驗(yàn)的設(shè)備原因,在正式編程之前要加入一段設(shè)備的初始化程序,檢查設(shè)備,讀取設(shè)備的一些信息,然后
108、是自己設(shè)計(jì)代碼完成實(shí)驗(yàn)要求,</p><p> 2.因?yàn)橛刑嗟呐袛?,再根?jù)判斷轉(zhuǎn)去執(zhí)行不同的操作,這就需要使用標(biāo)號(hào),但同樣的,標(biāo)號(hào)如果使用太多就又會(huì)給程序產(chǎn)生邏輯上的混亂,這點(diǎn)也是需要很注意的。其他的為語(yǔ)法錯(cuò)誤,所以修改起來(lái)較容易。</p><p><b> 3. 聯(lián)機(jī)調(diào)試:</b></p><p> 將軟、硬件結(jié)合起來(lái),進(jìn)行聯(lián)機(jī)調(diào)試
109、,在調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題,以及如何解決這些問(wèn)題的,現(xiàn)總結(jié)如下:</p><p> 問(wèn)題一:在編碼正確后,顯示在LED數(shù)碼管上的數(shù)字不停跳躍,無(wú)法讀出數(shù)據(jù)。</p><p> 解決方法:要解決這個(gè)問(wèn)題,可以在每個(gè)延時(shí)子程序的后面加上</p><p> MOV AL,0FFH</p><p> MOV DX,PC_ADD</p&g
110、t;<p> OUT DX,AL ;禁止顯示</p><p> 因?yàn)樵谶M(jìn)入第二個(gè)數(shù)字的顯示時(shí),如果不關(guān)一個(gè)位選碼(即禁止顯示),則數(shù)字要在兩個(gè)數(shù)碼管之間跳躍,使人看不清楚。因此,要在每個(gè)數(shù)字顯示后均要禁止顯示,防止串位,使之看見(jiàn)清楚。</p><p> 問(wèn)題二:在實(shí)現(xiàn)一次抽三個(gè)中獎(jiǎng)數(shù)時(shí)抽獎(jiǎng)完畢后不能顯示三個(gè)中獎(jiǎng)號(hào)。 <
111、;/p><p> 解決方法: 先申請(qǐng)一個(gè)空間用以存儲(chǔ)每次中獎(jiǎng)的號(hào)碼,等到三次抽獎(jiǎng)完畢后再?gòu)腖ED上輸出中獎(jiǎng)號(hào)碼。</p><p> 問(wèn)題三:每次抽獎(jiǎng)完成后想進(jìn)行下次抽獎(jiǎng)必須關(guān)機(jī)重新運(yùn)行。</p><p> 解決方法:我們可以設(shè)置一個(gè)開(kāi)關(guān)變量用于復(fù)位操作。每次執(zhí)行玩抽獎(jiǎng)后按復(fù)位開(kāi)關(guān)將數(shù)據(jù)區(qū)的數(shù)據(jù)清除并返還到初始狀態(tài)。</p><p><
112、b> 4. 聯(lián)機(jī)調(diào)試</b></p><p> 將設(shè)計(jì)程序裝入下位機(jī),進(jìn)行聯(lián)機(jī)調(diào)試。將程序先全速運(yùn)行挑撥開(kāi)關(guān),觀(guān)察LED的顯示,再單步運(yùn)行對(duì)照寄存器內(nèi)容修改程序,多次進(jìn)行后得出正確結(jié)果。</p><p> 五、設(shè)計(jì)總結(jié)及問(wèn)題討論</p><p> 1. 課程設(shè)計(jì)結(jié)果及分析</p><p><b> 1
113、) 設(shè)計(jì)結(jié)果</b></p><p> 當(dāng)程序開(kāi)始全速運(yùn)行時(shí),LED顯示器上無(wú)顯示。</p><p> 置開(kāi)關(guān)開(kāi)K8為1時(shí)抽獎(jiǎng)器開(kāi)始工作,LED顯示器上顯示“000”。</p><p> 若K7為1則進(jìn)入單次抽獎(jiǎng)程序。在置K5為1開(kāi)始抽獎(jiǎng),LED顯示器上閃爍顯示隨機(jī)號(hào),置K4為1產(chǎn)生中獎(jiǎng)號(hào),并在LED顯示器上顯示。如需復(fù)位則先將所有開(kāi)關(guān)置為0,再
114、將K1置為1.此時(shí)復(fù)位完成。如需重新開(kāi)始則將K1置為0后置K8為1.</p><p> 若K6為1則進(jìn)入一次抽三個(gè)中獎(jiǎng)號(hào)的程序。在置K5為1開(kāi)始抽獎(jiǎng),LED顯示器上閃爍顯示隨機(jī)號(hào),第一次置K4為1產(chǎn)生第一個(gè)中獎(jiǎng)號(hào),并在LED顯示器上顯示。再將K4撥為0,此時(shí)LED顯示器上重新顯示隨機(jī)數(shù),再置K4為1產(chǎn)生第二個(gè)隨機(jī)數(shù)并在LED顯示器上顯示,再將K4撥為0,此時(shí)LED顯示器上重新顯示隨機(jī)數(shù),置K4為1產(chǎn)生第三個(gè)隨機(jī)
115、數(shù)并在LED顯示器上顯示。此時(shí)三次抽獎(jiǎng)完畢。置K4為0這是LED顯示器上循環(huán)顯示三個(gè)中獎(jiǎng)號(hào)。如需復(fù)位則先將所有開(kāi)關(guān)置為0,再將K1置為1.此時(shí)復(fù)位完成。如需重新開(kāi)始則將K1置為0后置K8為1.</p><p><b> 2) 結(jié)果分析</b></p><p> 將8255A的 A口(PA0-PA7)作為輸出用(送位選碼),B口(PB0-PB7)作為輸出用(送段選碼
116、),C口作為輸入用(輸入開(kāi)關(guān)變量)。程序首先從8255A的C口讀取開(kāi)關(guān)量,根據(jù)開(kāi)關(guān)值判斷所需執(zhí)行的程序段,再執(zhí)行程序段并將得到的數(shù)據(jù)同過(guò)PA口的位選和PB口的段選在LED顯示器上顯示出來(lái)。</p><p><b> 2. 問(wèn)題討論</b></p><p> 聯(lián)機(jī)調(diào)試中出現(xiàn)的問(wèn)題解決方法如下:</p><p> 1)對(duì)照程序經(jīng)單步執(zhí)行后,發(fā)
117、現(xiàn)問(wèn)題出現(xiàn)在未對(duì)時(shí)間數(shù)值進(jìn)行LED段選碼的轉(zhuǎn)換。在添加X(jué)LAT等指令后,使得存人BX中的段選碼的起始偏移地址與AL中的時(shí)間數(shù)值相加得出對(duì)應(yīng)的段選碼地址,取出后送入LED數(shù)碼管中顯示。</p><p> 2)調(diào)整LED數(shù)碼管的閃爍延時(shí),使其顯示正常;接著再對(duì)照手表調(diào)整秒進(jìn)位延時(shí),使LED數(shù)碼管的分、秒顯示與正常時(shí)鐘相同步。</p><p> 3. 收獲、體會(huì)和建議</p>
118、<p> 本次的課程設(shè)計(jì),最大的收獲就是將理論知識(shí)和實(shí)踐結(jié)合起來(lái),鍛煉了自己的動(dòng)手能力,鍛煉自己分析問(wèn)題、解決問(wèn)題的能力。為了完成本任務(wù)要求完成的功能,需要用到哪些芯片,各個(gè)芯片之間該怎么連接等等,因此必須復(fù)習(xí)之前學(xué)過(guò)的相關(guān)知識(shí),勤查資料,如芯片的功能、參數(shù),甚至成本等都是我們需要在設(shè)計(jì)前需要考慮的,這樣不但達(dá)到了更牢靠的掌握舊知識(shí)的目的,而且又拓寬了我們的知識(shí)面,學(xué)會(huì)了更多的新知識(shí),也培養(yǎng)了自己獨(dú)立思考分析解決問(wèn)題的能力。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 隨機(jī)抽獎(jiǎng)器課程設(shè)計(jì)
- 抽獎(jiǎng)機(jī)課程設(shè)計(jì)報(bào)告
- java抽獎(jiǎng)程序課程設(shè)計(jì)
- c_課程設(shè)計(jì)---模擬抽獎(jiǎng)軟件設(shè)計(jì)
- c#課程設(shè)計(jì)--公司抽獎(jiǎng)管理系統(tǒng)設(shè)計(jì)
- c-課程設(shè)計(jì)—模擬抽獎(jiǎng)軟件設(shè)計(jì)
- c#課程設(shè)計(jì)—模擬抽獎(jiǎng)軟件設(shè)計(jì)
- 《隨機(jī)信號(hào)處理》課程設(shè)計(jì)
- 09隨機(jī)過(guò)程課程設(shè)計(jì)論文
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--隨機(jī)漫步
- 時(shí)序比較器課程設(shè)計(jì)
- 課程設(shè)計(jì)--轉(zhuǎn)速器盤(pán)
- 離合器課程設(shè)計(jì)
- 穩(wěn)壓器課程設(shè)計(jì)
- 減速器課程設(shè)計(jì)
- 籃球計(jì)分器課程設(shè)計(jì)
- 傳感器課程設(shè)計(jì)
- 傳感器課程設(shè)計(jì)
- 課程設(shè)計(jì)-計(jì)算器
- 離合器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論