版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 計算機科學(xué)與技術(shù)系</b></p><p><b> 微機原理與接口技術(shù)</b></p><p><b> 課程設(shè)計報告</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è)計一個應(yīng)用接口芯片作為四個七段LED數(shù)碼管輸出口,編一個程序,使用四個LED數(shù)碼管循環(huán)快速閃爍數(shù)字(顯示0—100),15秒后停滯,此號碼即為隨機中獎號碼。</p><p>
3、根據(jù)課題的設(shè)計要求,作如下的分析:</p><p> 抽獎器需要顯示抽獎數(shù)字,初始值為000,可以控制抽獎開始,抽獎開始后要不停的顯示隨機數(shù)直到15秒后停滯。</p><p> 根據(jù)以上分析可知,我們需要解決以下幾個問題:</p><p> ?、匐S機數(shù)怎么樣產(chǎn)生?</p><p> ②怎么樣存儲產(chǎn)生的隨機數(shù)?</p>&l
4、t;p> ?、凼褂檬裁礃拥慕涌陔娐穪韺崿F(xiàn)?</p><p><b> ?、苋绾物@示隨機數(shù)?</b></p><p> 2.解決問題方法與思路</p><p> 根據(jù)以上的題義需求分析,現(xiàn)在對上述四個問題進行逐一解決。下面我們可用列表比較的方法來選擇器件,具體器件的名稱和特點如表1-1所示。由表1-1可以得到以下分析結(jié)果:</p&
5、gt;<p> 隨機數(shù)通過軟件的方法來實現(xiàn)。1秒設(shè)置問題用軟件實現(xiàn):因為成本低,而且是驗證型實驗,無需精確。接口電路采用8255芯片:因為在抽獎器設(shè)計時,距離很近,而且要求數(shù)據(jù)各位同時傳送,這些都符合8255可編程并行接口的特點。顯示問題選用LED:因為OLED效果佳,但價格高,LCD不穩(wěn)定,容易出現(xiàn)閃爍問題,驅(qū)動器選擇74LS244:因為本課程設(shè)計只需單向傳送,74LS245顯得浪費。 綜上所述,本課程設(shè)計需要一塊80
6、86CPU,一片8255A可編程并行接口芯片,七段LED顯示器,74LS244驅(qū)動器。</p><p> 表1-1 器件對比表</p><p><b> 1) 硬件部分</b></p><p> 8255A工作于方式0,將PC口作為輸入端,將PB口和PA口作為輸出端,PB口用來輸出位選碼,PA口用來輸出段選碼。顯示器初始狀態(tài)顯示為000。
7、</p><p><b> 2)軟件部分</b></p><p> 通過觀察和實際檢測可以知道程序的每條指令的硬件時間執(zhí)行時時非常快的,每秒8086可以執(zhí)行8萬次以上的操作。所以我們可以如下設(shè)置隨即函數(shù):開始抽獎時顯示000,隨機數(shù)產(chǎn)生函數(shù)中產(chǎn)生的數(shù)字從0開始,第一個數(shù)時0,第二個數(shù)便在第一個數(shù)基礎(chǔ)上加一,如循環(huán)往復(fù)執(zhí)行,到100時再從一開始重新進行加一運算。 這
8、樣我們可以保證在一秒的時間內(nèi)隨機數(shù)可以從0變化到100已滿足隨機抽獎器的需要。</p><p><b> 二、硬件設(shè)計</b></p><p><b> 1. 8255芯片</b></p><p> 1) 8255A在本設(shè)計中的作用</p><p> 從PC口輸入開關(guān)量,從PA口和PB口進行
9、輸出顯示。</p><p> 2) 8255A的功能分析</p><p> 下面主要介紹方式0的工作特點,8255A工作方式0又稱為基本輸入/輸出(同步傳送)方式,該方式下可將三個數(shù)據(jù)端口劃分為四個獨立的部分,A口和B口作為兩個8位端口,C口高四位和低四位可用作兩個4位端口。方式0使用在無條件傳送和查詢式傳送兩種場合。無條件傳送一般用于簡單的外部設(shè)備,例如:鍵盤、開關(guān)量的輸入,狀態(tài)指示
10、燈等等,此時不使用聯(lián)絡(luò)信號。而查詢傳送</p><p> 時,A口和B口作為數(shù)據(jù)的輸出,C口的若干位作為聯(lián)絡(luò)信號。其具體功能如表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è)計中的作用</p><p> LED發(fā)光二級管在本設(shè)計中作為終端輸出顯示器,顯示時間的分秒。</p><p> 2) LED功能分析</p><p> 1. 物理構(gòu)造:LED發(fā)光二級管,采用砷化鎵、鎵鋁砷、和磷化鎵等材料制成,其內(nèi)部結(jié)構(gòu)為一個PN結(jié),具有單向?qū)щ娦浴F涫疽鈭D如圖2-2所示,真值表如表2-4所示。</p><p>
14、; 圖2-1 LED發(fā)光管示意圖</p><p> 2. 工作原理:當(dāng)在發(fā)光二極管PN結(jié)上加正向電壓時,PN結(jié)勢壘降低,載流子的擴散運動大于漂移運動,致使P區(qū)的空穴注入到N區(qū),N區(qū)的電子注入到P區(qū),這樣相互注入的空穴與電子相遇后會產(chǎn)生復(fù)合,復(fù)合時產(chǎn)生的能量大部分以光的形式出現(xiàn)。</p><p> 3. 將七個發(fā)光管進行組合,排列成數(shù)字圖形8,再根據(jù)需要控制七個管的亮與滅,即可顯示出
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ū)動電路、交流驅(qū)動電路和脈沖驅(qū)動電路。</p><p> 由于8255A的最大驅(qū)動電流為4.0mA,而LE
16、D的工作電流一般為10-20mA,所以需要加一個驅(qū)動器74LS244。</p><p> 3. 驅(qū)動器74LS244</p><p> 1)芯片在本設(shè)計中的作用</p><p> 主要用于驅(qū)動LED顯示器,從而顯示出數(shù)字。</p><p> 2) 74LS244的功能分析</p><p> 74LS244的主
17、要功能就是實現(xiàn)驅(qū)動,8255A的驅(qū)動電流遠遠小于LED的驅(qū)動電流。</p><p> 3) 74LS244的技術(shù)參數(shù)分析</p><p> 74LS244的技術(shù)參數(shù)表如表2-5所示:</p><p> 表2-5 74LS244的技術(shù)參數(shù)表</p><p> 由于74LS244的驅(qū)動電流為24mA,滿足題義要求,可以使計時數(shù)字從LED
18、發(fā)光二極管上顯示出來。</p><p> 4. 選擇芯片4—邏輯開關(guān)</p><p> 1)開關(guān)在本次設(shè)計中的作用</p><p> 本設(shè)計中開關(guān)主要起到復(fù)位和控制的作用。</p><p><b> 2) 功能分析</b></p><p> 二進制邏輯開關(guān)主要是用來輸入信息的,當(dāng)開關(guān)撥
19、上時為1,撥下時為0;</p><p><b> 3)技術(shù)參數(shù)</b></p><p> 當(dāng)K接VCC=+5V時為1,接地時輸出為0。</p><p> 5. 硬件總邏輯圖及其說明</p><p> 圖2-2 硬件總邏輯圖</p><p> 說明:PC機的AD0~AD7經(jīng)數(shù)據(jù)總線與825
20、5A的D0~D7相連,地址線A1、A0與8255的A0、A1相連,即偶地址有效??刂瓶偩€RD、WR、RESET分別與8255相應(yīng)的控制信號線連接。片選信號CS0與8255的CS信號連接,則8255的端口地址為04A0~04A6。8255的PA口用于存放位選碼,使用的是高四位,分別連接到四個七段LED顯示器上。使用的是共陰極接;PB口用于存放段選碼,八位全部連接到八個二極管上;PC口用作信號輸入。</p><p>
21、<b> 三、控制程序設(shè)計</b></p><p> 1. 控制程序設(shè)計思路說明</p><p> 本課程設(shè)計用到了三片LED顯示芯片,分別顯示隨機數(shù)的百分位、十分位、個位。為節(jié)省硬件,所以采用動態(tài)掃描顯示方式,每次只使一位LED顯示器公共端的電平有效,因而每次只有一位LED顯示器發(fā)光。但由于人眼的視覺暫留的效應(yīng),只要間隔的時間足夠短,則依次從右向左顯示時就感覺
22、是3位LED是同時點亮一樣。用8255的PA口接LED顯示器的公共端作位選擇,用PB口接LED的各片的發(fā)光二極管作段選擇的控制,用PC口接二進制開關(guān)作初始值的控制輸入和復(fù)位。在本程序中用了一個延時子程序來完成這個功能的。在LED顯示器上顯示的數(shù)字是從0~9共十個字符,將其相應(yīng)的轉(zhuǎn)換代碼存入一個緩沖區(qū)中,用查表轉(zhuǎn)換的方式來控制編程調(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空間基地址(它就是實驗儀的基地址, 也為DMA & 32 BIT RAM板卡上的8237提供基地址) <
24、/p><p> Vendor_IDEQU 10EBH;廠商ID號</p><p> Device_IDEQU8376;設(shè)備ID號</p><p> .STACK100</p><p><b> .DATA</b></p><p> IO_Bit8_BaseAddress
25、DW?</p><p> msg0DB'BIOS不支持訪問PCI $'</p><p> msg1DB'找不到Star PCI9052板卡 $'</p><p> msg2DB'讀8位I/O空間基地址時出錯$' </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 ;中獎號碼</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)化為實地址</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 ;讀入八位開關(guān)量</p><p> and al,80h ;判斷最高位是否為1 </p><p> cmp al,80h ;為1時進入抽獎程序</p><p> jnz loop3
31、 ;不等于1時調(diào)回上部繼續(xù)檢查直到K8為1時才執(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 ;讀入八位開關(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)用隨機數(shù)函數(shù)產(chǎn)生隨機數(shù)</p><p> call display1 ;顯示隨機函數(shù)</p><p> mov dx,PC_ADD ;送PC口端口地址</p><p> in al,dx ;讀入八位開關(guān)量</p><p>
34、 and al,0d0h </p><p> cmp al,0d0h </p><p><b> jnz loop6</b></p><p> loop9: call display1 ;顯示隨機函數(shù)</p><p> mov dx,PC_ADD
35、 ;送PC口端口地址</p><p> in al,dx ;讀入八位開關(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 ;讀入八位開關(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 ;讀入八位開關(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 ;讀入八位開關(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 ;讀入八位開關(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 ;讀入八位開關(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 ;保護斷點</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ù),控制時間變化的快慢</p><p> loop1: mov si,offset shuju ;shuju數(shù)據(jù)緩沖區(qū)首地址送SI</p><p> mov
52、cx,3 ;控制對三位segment的分時顯示</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)用延時子程序</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不為零時循環(huán)(控制每秒顯示時間)</p><p> pop di ;恢復(fù)斷點</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 ;保護斷點</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 ;控制對三位segment的分時顯示</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)用延時子程序</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、 ;控制對三位segment的分時顯示</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)用延時子程序</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 ;控制對三位segment的分時顯示</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)用延時子程序</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ù)斷點</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 ;延時
78、子程序,實現(xiàn)延時的功能</p><p> push cx ;將cx 的內(nèi)容保存入棧</p><p> mov cx,6000h ;設(shè)置循環(huán)次數(shù)(控制延時時間)</p><p> loop7: nop ;空操作,用于延時</p><p> loop loop7
79、 ;循環(huán)延時</p><p> pop cx ;恢復(fù)斷點</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、 ;保護斷點</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ù)斷點</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 ;保護斷點</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ù)斷點</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> 四、上機調(diào)試過
105、程</b></p><p><b> 1. 硬件調(diào)試:</b></p><p> 因為本次課程設(shè)計采用的是STAR ES598PCI實驗儀,通過借用上位機的CPU來完成實驗,這樣就不需要我們再在單片機上另外插上一個CPU,而芯片74LS273都已經(jīng)集成在一塊電路板上,節(jié)省了連線,除此以外還需要8255A一片,它是作為可編程接口芯片實現(xiàn)了外設(shè)(LED數(shù)碼
106、管顯示器)與8086之間的數(shù)據(jù)傳輸,解決了兩者之間的速度不匹配的矛盾,具有數(shù)據(jù)緩沖功能。從而實現(xiàn)了8255A對LED的控制,讓它顯示出時間的字樣。最后,還需要十六位邏輯開關(guān)一個,來控制整個抽獎活動。</p><p> 在硬件接線連接時,應(yīng)將8255A的PA0~PA7分別與LED顯示器的LED0~LED7相連。PB7~PB0分別與LED顯示器的a~h相連,PC0~PC7分別與邏輯電平開關(guān)電路的K1~K8相連, A
107、1和A2分別與地址鎖存器的A1和A2相接,由于本次實驗采用的是STAR ES598PCI實驗儀,譯碼芯片都集成在了一塊電路板上,所以讀寫控制線都不要連接了。在連線完畢后,測試串口是否通訊成功。</p><p><b> 2.軟件調(diào)試:</b></p><p> 1.由于此次實驗的設(shè)備原因,在正式編程之前要加入一段設(shè)備的初始化程序,檢查設(shè)備,讀取設(shè)備的一些信息,然后
108、是自己設(shè)計代碼完成實驗要求,</p><p> 2.因為有太多的判斷,再根據(jù)判斷轉(zhuǎn)去執(zhí)行不同的操作,這就需要使用標(biāo)號,但同樣的,標(biāo)號如果使用太多就又會給程序產(chǎn)生邏輯上的混亂,這點也是需要很注意的。其他的為語法錯誤,所以修改起來較容易。</p><p><b> 3. 聯(lián)機調(diào)試:</b></p><p> 將軟、硬件結(jié)合起來,進行聯(lián)機調(diào)試
109、,在調(diào)試的過程中出現(xiàn)的問題,以及如何解決這些問題的,現(xiàn)總結(jié)如下:</p><p> 問題一:在編碼正確后,顯示在LED數(shù)碼管上的數(shù)字不停跳躍,無法讀出數(shù)據(jù)。</p><p> 解決方法:要解決這個問題,可以在每個延時子程序的后面加上</p><p> MOV AL,0FFH</p><p> MOV DX,PC_ADD</p&g
110、t;<p> OUT DX,AL ;禁止顯示</p><p> 因為在進入第二個數(shù)字的顯示時,如果不關(guān)一個位選碼(即禁止顯示),則數(shù)字要在兩個數(shù)碼管之間跳躍,使人看不清楚。因此,要在每個數(shù)字顯示后均要禁止顯示,防止串位,使之看見清楚。</p><p> 問題二:在實現(xiàn)一次抽三個中獎數(shù)時抽獎完畢后不能顯示三個中獎號。 <
111、;/p><p> 解決方法: 先申請一個空間用以存儲每次中獎的號碼,等到三次抽獎完畢后再從LED上輸出中獎號碼。</p><p> 問題三:每次抽獎完成后想進行下次抽獎必須關(guān)機重新運行。</p><p> 解決方法:我們可以設(shè)置一個開關(guān)變量用于復(fù)位操作。每次執(zhí)行玩抽獎后按復(fù)位開關(guān)將數(shù)據(jù)區(qū)的數(shù)據(jù)清除并返還到初始狀態(tài)。</p><p><
112、b> 4. 聯(lián)機調(diào)試</b></p><p> 將設(shè)計程序裝入下位機,進行聯(lián)機調(diào)試。將程序先全速運行挑撥開關(guān),觀察LED的顯示,再單步運行對照寄存器內(nèi)容修改程序,多次進行后得出正確結(jié)果。</p><p> 五、設(shè)計總結(jié)及問題討論</p><p> 1. 課程設(shè)計結(jié)果及分析</p><p><b> 1
113、) 設(shè)計結(jié)果</b></p><p> 當(dāng)程序開始全速運行時,LED顯示器上無顯示。</p><p> 置開關(guān)開K8為1時抽獎器開始工作,LED顯示器上顯示“000”。</p><p> 若K7為1則進入單次抽獎程序。在置K5為1開始抽獎,LED顯示器上閃爍顯示隨機號,置K4為1產(chǎn)生中獎號,并在LED顯示器上顯示。如需復(fù)位則先將所有開關(guān)置為0,再
114、將K1置為1.此時復(fù)位完成。如需重新開始則將K1置為0后置K8為1.</p><p> 若K6為1則進入一次抽三個中獎號的程序。在置K5為1開始抽獎,LED顯示器上閃爍顯示隨機號,第一次置K4為1產(chǎn)生第一個中獎號,并在LED顯示器上顯示。再將K4撥為0,此時LED顯示器上重新顯示隨機數(shù),再置K4為1產(chǎn)生第二個隨機數(shù)并在LED顯示器上顯示,再將K4撥為0,此時LED顯示器上重新顯示隨機數(shù),置K4為1產(chǎn)生第三個隨機
115、數(shù)并在LED顯示器上顯示。此時三次抽獎完畢。置K4為0這是LED顯示器上循環(huán)顯示三個中獎號。如需復(fù)位則先將所有開關(guān)置為0,再將K1置為1.此時復(fù)位完成。如需重新開始則將K1置為0后置K8為1.</p><p><b> 2) 結(jié)果分析</b></p><p> 將8255A的 A口(PA0-PA7)作為輸出用(送位選碼),B口(PB0-PB7)作為輸出用(送段選碼
116、),C口作為輸入用(輸入開關(guān)變量)。程序首先從8255A的C口讀取開關(guān)量,根據(jù)開關(guān)值判斷所需執(zhí)行的程序段,再執(zhí)行程序段并將得到的數(shù)據(jù)同過PA口的位選和PB口的段選在LED顯示器上顯示出來。</p><p><b> 2. 問題討論</b></p><p> 聯(lián)機調(diào)試中出現(xiàn)的問題解決方法如下:</p><p> 1)對照程序經(jīng)單步執(zhí)行后,發(fā)
117、現(xiàn)問題出現(xiàn)在未對時間數(shù)值進行LED段選碼的轉(zhuǎn)換。在添加XLAT等指令后,使得存人BX中的段選碼的起始偏移地址與AL中的時間數(shù)值相加得出對應(yīng)的段選碼地址,取出后送入LED數(shù)碼管中顯示。</p><p> 2)調(diào)整LED數(shù)碼管的閃爍延時,使其顯示正常;接著再對照手表調(diào)整秒進位延時,使LED數(shù)碼管的分、秒顯示與正常時鐘相同步。</p><p> 3. 收獲、體會和建議</p>
118、<p> 本次的課程設(shè)計,最大的收獲就是將理論知識和實踐結(jié)合起來,鍛煉了自己的動手能力,鍛煉自己分析問題、解決問題的能力。為了完成本任務(wù)要求完成的功能,需要用到哪些芯片,各個芯片之間該怎么連接等等,因此必須復(fù)習(xí)之前學(xué)過的相關(guān)知識,勤查資料,如芯片的功能、參數(shù),甚至成本等都是我們需要在設(shè)計前需要考慮的,這樣不但達到了更牢靠的掌握舊知識的目的,而且又拓寬了我們的知識面,學(xué)會了更多的新知識,也培養(yǎng)了自己獨立思考分析解決問題的能力。
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 隨機抽獎器課程設(shè)計
- 抽獎機課程設(shè)計報告
- java抽獎程序課程設(shè)計
- c_課程設(shè)計---模擬抽獎軟件設(shè)計
- c#課程設(shè)計--公司抽獎管理系統(tǒng)設(shè)計
- c-課程設(shè)計—模擬抽獎軟件設(shè)計
- c#課程設(shè)計—模擬抽獎軟件設(shè)計
- 《隨機信號處理》課程設(shè)計
- 09隨機過程課程設(shè)計論文
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--隨機漫步
- 時序比較器課程設(shè)計
- 課程設(shè)計--轉(zhuǎn)速器盤
- 離合器課程設(shè)計
- 穩(wěn)壓器課程設(shè)計
- 減速器課程設(shè)計
- 籃球計分器課程設(shè)計
- 傳感器課程設(shè)計
- 傳感器課程設(shè)計
- 課程設(shè)計-計算器
- 離合器課程設(shè)計
評論
0/150
提交評論