欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      模擬電梯的設計與實現(xiàn)實驗報告(微機原理)

      時間:2019-05-14 11:27:06下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《模擬電梯的設計與實現(xiàn)實驗報告(微機原理)》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《模擬電梯的設計與實現(xiàn)實驗報告(微機原理)》。

      第一篇:模擬電梯的設計與實現(xiàn)實驗報告(微機原理)

      2011年9月

      目 錄

      一 理論部分..............................................................................................................................................2

      1課題要求與內(nèi)容................................................................................................................2 2 系統(tǒng)方案設計...................................................................................................................3 3 系統(tǒng)硬件設計...................................................................................................................3 4 系統(tǒng)軟件設計...................................................................................................................5 二

      實踐部分............................................................................................................................................5 系統(tǒng)硬件原理簡介...........................................................................................................6 2 系統(tǒng)硬件調(diào)試中出現(xiàn)的問題及解決措施.......................................................................6 3 系統(tǒng)軟件...........................................................................................................................6 3.1 軟件設計........................................................................................................................6 3.2軟件調(diào)試中出現(xiàn)的問題及解決措施......................................................................................6 三

      附錄...................................................................................................................................................10

      一、理論部分

      理論設計課題名稱:模擬電梯的設計與實現(xiàn)

      1課題要求與內(nèi)容

      1.1設計基本要求

      用鍵盤、按鈕、發(fā)光二極管和 LED顯示單元來模擬電梯工作過程。樓層設為 8層,用鍵盤鍵入希望停的樓層,8 個 發(fā)光二極管顯示希望停的樓層,LED指示電梯當前所在樓層,按鈕用來啟、停電梯。電梯正常運行時以每 2 秒1層的速度上升或下降。并在到達相關(guān)樓層時發(fā)錯聲音提示。1.2提高要求

      設計幾個按鈕,模擬更多的電梯運行功能,如: 直達按鈕。若按此按鈕,電梯按直達方式運行,即對運行期間新鍵入的停靠樓層(即使是同方向未到樓層)亦不停,直達終點樓層; 急停按鈕。電梯運行中,若按此按鈕,則電梯立即停在下一到達的樓層。

      2.實驗內(nèi)容

      電梯工作按以下方式運行:

      2.1假設當前電梯停在某層(LED顯示相應樓層,8個發(fā)光二極管全滅)。鍵入數(shù)字鍵,如鍵入的數(shù)字與當前電梯??繉酉嗤瑒t什么也不做,若不同則相應樓層的發(fā)光二極管亮;電梯自動判別上升或下降(在運行過程中用八段碼來顯示樓層變化)一直到達希望停的樓層(八段碼顯示該樓層,相應 LED 滅)。

      2.2假設當前電梯正在上升或下降運行(此時八段碼顯示樓層變化,LED 指示希望抵達的樓層),若鍵入新的希望??康臉菍訑?shù)字(相應的 LED 亮),則對同方向(上升或下降)未到的樓層能停靠,對其它情況則先停靠原先希望停的樓層,然后繼續(xù)運行)。

      如下幾例:

      1)設電梯當前在 2層,向上運行,LED指示希望在4層停,此時若鍵入3,則電梯將在3樓停,然后繼續(xù)運行至4層停;

      2)同上情況,若鍵入的不是 3而是5,則電梯將先停在4層,然后運行至5層停;

      同上情況,若鍵入的不是 3(或5),而是1,則電梯先停在4層,然后運行至1

      層停。系統(tǒng)方案設計

      本設計主要是利用微機應用實驗平臺來模擬電梯的運行,用到了平臺上的一個非編碼鍵盤、LED顯示器、八段數(shù)碼管等模塊。

      有8個樓層,需要用8個按鍵模擬電梯中的請求按鈕,用5個按鍵模擬8個樓層每層向上請求的按鈕,再用8個模擬8個樓層每層向下請求的按鈕。非編碼鍵盤有16個鍵,可以用1-8號鍵模擬電梯內(nèi)的按鈕,用8-0號鍵模擬每層向上請求的按紐,A-H模擬每層向下請求的按紐。

      當電梯靜止狀態(tài)時,無論外部哪一層有請求,電梯都由靜止狀態(tài)轉(zhuǎn)入向上或向下運行的狀態(tài),直到到達請求的樓層;當電梯處于向上運行的狀態(tài)時,此時高于該樓層向上的請求和內(nèi)部請求級別最高,其次是所有樓層向下的請求,再次是低于該樓層向上的請求;當電梯處于向下運行的狀態(tài)時則情況相反。

      由于中斷級別在隨著電梯所處樓層的不同而變化,而且中斷源比較多。所以用每一個中斷源直接和中斷控制器相連,需要用到多個8259A級聯(lián),很不方便。為解決這個問題,首先定義三個單字節(jié)變量REQ_U、REQ_D和REQ_IN分別存儲電梯每一層向上、向下和內(nèi)部的請求,每一個變量用低8位,每一位代表一層。例如,REQ_U為 00000110B,這代表在2層和3層有向上的請求。8253定時器每隔20ms產(chǎn)生一次中斷,中斷程序便去執(zhí)行掃描鍵盤,當掃描到有電梯內(nèi)部或者外部按鍵時,將請求存儲到變量中。每到一個狀態(tài)時再檢查請求變量REQ_U、REQ_D和REQ_IN的值,根據(jù)電梯的運行方向和變量中的請求,來決定電梯下一步的運行。

      設電梯的當前樓層為floor(floor=1~8),運行方向為dir(dir=0,向上;dir=1,向下),在電梯運行的工程中,用數(shù)碼管輸出floor值顯示當前的樓層。LED輸出REQ_IN的值顯示電梯內(nèi)已經(jīng)請求的樓層。系統(tǒng)硬件的設計

      由于采用了PC機資源和微機實驗平臺,不需要其他的硬件電路。利用了微機平臺上的8254定時/計數(shù)器、8255并行接口單元、LED單元、非編碼鍵盤、數(shù)碼管顯示單元等等。系統(tǒng)結(jié)構(gòu)框圖,如圖1所示。

      圖1 系統(tǒng)結(jié)構(gòu)框圖

      主要的模塊如下:

      1.可編程定時/計數(shù)器8254 定時/計數(shù)器8254主要是用于定時20ms,觸發(fā)中斷進行鍵盤掃描。電路連線是CLOCK0接Q6,分頻后頻率為46875Hz,OUT0接中斷IRQ2,每20ms中斷一次,GATE0接5v。計數(shù)器的初值應該是3A9H。2.8255并行接口單元 8255主要是用于鍵盤的掃描和發(fā)光二極管的數(shù)據(jù)輸出。所以用8255A口的低8位接8個發(fā)光二極管,B口低4位接非編碼鍵盤的列線,高4位接鍵盤的行線。

      3.LED顯示系統(tǒng)

      雖然只用了1格LED顯示器,但為了數(shù)字更新更方便,主程序更加簡單,故此系統(tǒng)選用動態(tài)顯示方式。由于系統(tǒng)的軟件部分的運行時的核心程序是一直循環(huán)的,因此顯示程序也是在循環(huán)過程中一直被調(diào)用,從而實時地被顯示出來。4.非編碼鍵盤

      本系統(tǒng)采用的是行反轉(zhuǎn)法來掃描鍵盤的,調(diào)用鍵盤掃描的程序TESTKEY后,程序中的變量KEY的值就是按下的鍵的值,如果KEY為0FFH則表示無鍵盤輸入,為0~15 則按照上往下從左往右的順序分別代表每一個按鍵按下的信息。不過此掃描程序沒有考慮到多個按鍵同時按下的情況。又因為模擬電梯的按

      鍵一般不會有兩個按鍵同時按下的情況,所以,多個按鍵的情況可以不予考慮。系統(tǒng)軟件設計

      本設計的軟件設計的思路:通過軟件編程使8254輸出定時信號申請中斷,在中斷服務程序中掃描鍵盤,如果有按鍵,修改相應的變量位,并輸出內(nèi)部請求變量REQ_IN到發(fā)光二極管顯示當前的內(nèi)部請求樓層。在主程序中,查詢變量的值,根據(jù)電梯調(diào)度算法運行電梯。1.主要設計模塊 程序主要包括以下主要模塊:鍵盤掃描程序、LED顯示程序、電梯調(diào)度算法。

      1)鍵盤掃描程序:采用的是行反轉(zhuǎn)法來掃描鍵盤的,相應的程序設計請參考實驗指導書上實驗3中的相關(guān)介紹。

      2)LED顯示程序:本設計只用到了一個LED,只要將floor轉(zhuǎn)換為相應的段碼。先輸出位碼,再輸出段碼,循環(huán)輸出就可以動態(tài)顯示。為了循環(huán)的顯示,將LED顯示程序放在中斷服務程序中。

      3)電梯調(diào)度算法:在設計時將電梯一次從下到上視為一次運行(注意不一定從底層到頂層),同理,電梯一次從上到下也視為一次運行(注意不一定從頂層到底層)。

      當電梯向上運行時:

      a)位于當前層以下的向上請求都被忽略留到下次向上運行時處理。b)位于當前層以上的向上請求都被記錄留到此次運行處理。

      c)無論哪層的向下請求都被忽略留到下次向下運行時處理。

      當電梯向下運行時:

      a)位于當前層以上的向下請求都被忽略留到下次向下運行時處理。

      b)位于當前層以下的向下請求都被記錄留到此次運行處理。

      c)無論哪層的向上請求都被忽略留到下次向上運行時處理。

      實踐部分 系統(tǒng)硬件原理簡介

      8255可編程外圍接口芯片

      8255有3個8為并行I/O口,8255有三通道3種工作方式的可編程并行接口芯片,其可以作為單片機與多種外圍接口設備連接時的中間接口電路。8255作為主機與外圍設備的芯片連接,必須提供與主機相連的3個總線接口:數(shù)據(jù)線、地址線、控制線接口。同時必須具有與外設連接的接口ABC口。其必須具有邏輯可控部分,8255內(nèi)部的結(jié)構(gòu)分為3個部分:與CPU連接部分、與外設連接部分、可口部分。

      (1)8254定時/計數(shù)器的性能:有3個獨立的16位計數(shù)器;(2)每個計數(shù)器可二進制或十六進制計數(shù);(3)每個可編程計數(shù)器有6種不同的工作方式

      (4)8254允許的最高的頻率是10MHz,計數(shù)脈沖可以是有規(guī)律的時鐘信號,也可是隨機信號。系統(tǒng)硬件調(diào)試中出現(xiàn)的問題及解決措施

      線路連接錯誤,無法實現(xiàn)預期功能,解決措施:仔細檢查電路,查找錯誤并改正。在接線的時候8254的GATE0沒有接5V電源,導致相關(guān)芯片無法工作,經(jīng)細心排查,將錯誤找錯并改正。

      有一次調(diào)試時試驗箱的電源沒開就運行軟件關(guān)聯(lián)進行調(diào)試,結(jié)果認為是某個芯片壞了,后來才發(fā)現(xiàn)時低級錯誤。解決措施:重啟電腦,打開試驗箱電源,重新運行。

      另一次,8255的A口語8個發(fā)光二極管連接時端口的連接順序不小心連反了,結(jié)果實現(xiàn)不了預期功能,經(jīng)同學幫助排查才最終找到錯誤并將其改正過來。3 系統(tǒng)軟件

      西安唐都TD-CMA 計算機組成原理與系統(tǒng)結(jié)構(gòu)教學實驗系統(tǒng)

      3.1 軟件設計

      程序流程圖

      1)主程序框圖如圖2

      1)主程序框圖如圖2

      開始系統(tǒng)初始化查詢電梯請求變量電梯運行

      圖2 主程序框圖

      2)中斷服務程序框圖如圖3

      中斷保護現(xiàn)場LED輸出顯示floor鍵盤掃描有鍵按下?是修改請求變量否點亮相應的發(fā)光二極管恢復現(xiàn)場中斷返回

      圖3 中斷服務程序框圖

      3)電梯算法流程圖如圖4 其中,dir代表電梯的運行方向,0代表電梯向上運行,1代表向下運動。設REQ_U(n)代表第n層向上的請求,同樣,REQ_D(n)代表第n層向下的請求,REQ_IN(n)代表第n層內(nèi)部的請求。求next的方法為:電梯向上時,next為內(nèi)部請求的最小值和向上請求的大于floor的最小值之間的小者。電梯向下時,next為內(nèi)部請求的最大值和向下請求中小于floor的最大值之間的大者。沒有滿足要求的時返回0。

      查詢請求變量N有請求?YYdir=0?Ndir=1Y求next求nextdir=0next=0?Nfloor++Ynext=0?Nfloor--延時延時求nextNN求nextfloor=next?Y清除請求變量相應位并延時floor=next?Y清除請求變量相應位并延時

      圖4 電梯算法流程圖 3.2軟件調(diào)試中出現(xiàn)的問題及解決措施

      程序編寫的時候,指令寫錯,導致軟件調(diào)試出現(xiàn)問題,解決措施:認真閱讀程序,把錯誤找出并改正。

      實驗儀器的電源沒打開就開始運行程序,結(jié)果造成死機,解決措施:重新正確運行。

      相關(guān)參數(shù)設計錯誤導致流水燈與聲音無法同時滿足實驗要求。解決措施:經(jīng)過老師指出,發(fā)現(xiàn)是相關(guān)的指令與參數(shù)錯誤所致,經(jīng)同學幫助,將其改正。

      附錄:參考程序清單

      INTR_IVADD

      EQU

      01C8H

      ;INTR對應的中斷矢量地址

      INTR_OCW1

      EQU

      0A1H

      ;INTR對應PC機內(nèi)部8259的OCW1地址

      INTR_OCW2

      EQU

      0A0H

      ;INTR對應PC機內(nèi)部8259的OCW2地址

      INTR_IM

      EQU

      0FBH

      ;INTR對應的中斷屏蔽字

      IOY1

      EQU

      3040H

      ;片選IOY0對應的端口始地址 MY8254_COUNT0 EQU

      IOY1+00H*4

      ;8254計數(shù)器0端口地址 MY8254_COUNT1 EQU

      IOY1+01H*4

      ;8254計數(shù)器1端口地址 MY8254_COUNT2 EQU

      IOY1+02H*4

      ;8254計數(shù)器2端口地址 MY8254_MODE

      EQU

      IOY1+03H*4

      ;8254控制寄存器端口地址

      IOY2

      EQU

      3080H

      ;片選IOY0對應的端口始地址

      IOY0

      EQU

      3000H

      ;片選IOY0對應的端口始地址

      MY8255_A

      EQU

      IOY0+00H*4

      ;8255的A口地址 MY8255_B

      EQU

      IOY0+01H*4

      ;8255的B口地址 MY8255_C

      EQU

      IOY0+02H*4

      ;8255的C口地址

      MY8255_MODE EQU

      IOY0+03H*4

      ;8255的控制寄存器地址

      STACK1 SEGMENT STACK

      DW 256 DUP(?)STACK1 ENDS

      DATA

      SEGMENT;DTABLE DB

      3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DTABLE DB

      06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

      NOW_FLOOR

      DB 01H-01H

      ;定義數(shù)據(jù)變量 DIR

      DB 1 TARGET_FLOOR DB 01H-01H

      ;02H為初始層,出事情況當前層和目標層一樣

      F_FLOOR

      DB 1

      ;按鍵有效,空閑

      CS_BAK

      DW ?

      ;保存INTR原中斷處理程序入口段地址的變量

      IP_BAK

      DW ?

      ;保存INTR原中斷處理程序入口偏移

      地址的變量

      IM_BAK

      DB ?

      ;保存INTR原中斷屏蔽字的變量 STR1

      DB 'COUNT: $'

      ;顯示的字符串

      FREQ_LIST DW 371,495,495,495,624,556,495,556,624

      ;頻率表

      DW 495,495,624,742,833,833,833,742,624

      DW 624,495,556,495,556,624,495,416,416,371

      DW 495,833,742,624,624,495,556,495,556,833

      DW 742,624,624,742,833,990,742,624,624,495

      DW 556,495,556,624,495,416,416,371,495,0 TIME_LIST DB

      4, 6, 2, 4, 4, 6, 2, 4, 4

      ;時間表

      DB

      6, 2, 4, 4, 12, 1, 3, 6, 2

      DB

      4, 4, 6, 2, 4, 4, 6, 2, 4, 4

      DB

      12, 4, 6, 2, 4, 4, 6, 2, 4, 4

      DB

      6, 2, 4, 4, 12, 4, 6, 2, 4, 4

      DB

      6, 2, 4, 4, 6, 2, 4, 4, 12

      DATA

      ENDS

      ;鍵值表,0~F對應的7段數(shù)碼管的段位值

      CODE

      SEGMENT

      ASSUME CS:CODE,DS:DATA

      START: MOV AX,DATA

      MOV DS,AX

      ;初始化中斷處理

      CLI

      MOV AX,0000H

      ;替換INTR的中斷矢量

      MOV ES,AX

      MOV DI,INTR_IVADD

      MOV AX,ES:[DI]

      MOV IP_BAK,AX

      ;保存INTR原中斷處理程序入口偏移地址

      MOV AX,OFFSET MYISR

      MOV ES:[DI],AX

      ;設置當前中斷處理程序入口偏移地址

      ADD DI,2

      MOV AX,ES:[DI]

      MOV CS_BAK,AX

      ;保存INTR原中斷處理程序入口段地址

      MOV AX,SEG MYISR

      MOV ES:[DI],AX

      ;設置當前中斷處理程序入口段地址

      MOV DX,INTR_OCW1

      ;設置中斷屏蔽寄存器,打開INTR的屏蔽位

      IN AL,DX

      MOV IM_BAK,AL

      ;保存INTR原中斷屏蔽字

      AND AL,INTR_IM

      OUT DX,AL

      STI

      ;初始化8254

      MOV DX,MY8254_MODE

      MOV AL,0B6H

      OUT DX,AL

      MOV DX,MY8254_COUNT2

      MOV AL,00H

      OUT DX,AL

      MOV AL,48H

      OUT DX,AL

      MOV DX,MY8254_MODE

      MOV AL,76H

      OUT DX,AL

      MOV DX,MY8254_COUNT1

      MOV AL,0C8H

      OUT DX,AL

      MOV AL,00H

      OUT DX,AL

      ;初始化8255

      MOV DX,MY8255_MODE

      MOV AL,81H

      位輸入

      OUT DX,AL

      MOV DX,IOY2

      默認為全滅

      MOV AL,0

      OUT DX,AL

      ;初始化8254工作方式

      ;計數(shù)器2,方式3

      ;裝入計數(shù)初值

      ;18432分頻

      ;初始化8254工作方式

      ;計數(shù)器1,方式3

      ;裝入計數(shù)初值

      ;100分頻

      ;初始化8255工作方式

      ;方式0,A口、B口輸出,C口低

      4;用IO-32輸出控制8個LED,剛開始11

      MOV DX,MY8255_MODE

      MOV AL,00001110B

      ;PC7=0

      OUT DX,AL

      MOV AL,NOW_FLOOR

      MOV BX,OFFSET DTABLE

      AND AX,00FFH

      ADD BX,AX

      MOV AL,[BX]

      ;將鍵值作為偏移和鍵值基地址相加得到相應的鍵值

      MOV DX,MY8255_B

      OUT DX,AL

      BEGIN:

      CALL CCSCAN

      ;掃描按鍵

      JNZ PLAY

      ;有鍵按下則跳置GETKEY1

      MOV AH,1

      ;判斷PC鍵盤是否有按鍵按下

      INT 16H

      JZ

      BEGIN

      ;無按鍵則跳回繼續(xù)循環(huán),有則退出

      ;退出程序前的一個“太子換貍貓” QUIT: CLI

      MOV AX,0000H

      ;恢復INTR原中斷矢量

      MOV ES,AX

      MOV DI,INTR_IVADD

      MOV AX,IP_BAK

      ;恢復INTR原中斷處理程序入口偏移地址

      MOV ES:[DI],AX

      ADD DI,2

      MOV AX,CS_BAK

      ;恢復INTR原中斷處理程序入口段地址

      MOV ES:[DI],AX

      MOV DX,INTR_OCW1

      ;恢復INTR原中斷屏蔽寄存器的屏蔽字

      MOV AL,IM_BAK

      OUT DX,AL

      STI

      MOV AX,4C00H

      ;返回到DOS

      INT 21H

      GETKEY1:

      CALL DALLY

      CALL DALLY

      CALL CCSCAN

      ;再次掃描按鍵

      JNZ GETKEY2

      ;有鍵按下則跳置GETKEY2

      JMP BEGIN

      ;否則跳回開始繼續(xù)循環(huán)

      PLAY:

      MOV DX,MY8254_MODE

      MOV AL,36H

      OUT DX,AL

      MOV SI,OFFSET FREQ_LIST

      MOV DI,OFFSET TIME_LIST

      MOV DX,0FH

      1.0416667M = 0FE502H

      MOV AX,0E502H

      DIV WORD PTR [SI]

      輸出頻率

      MOV DX,MY8254_COUNT0

      OUT DX,AL

      MOV AL,AH

      OUT DX,AL

      MOV DL,[DI]

      CALL DALLY

      ADD SI,2

      INC DI

      ;判斷是否到曲末?

      JE GETKEY1 GETKEY2: CALL DALLY1

      MOV DX,MY8254_MODE

      0

      MOV AL,10H

      OUT DX,AL

      MOV CH,0FEH

      MOV CL,00H

      COLUM: MOV AL,CH

      ;初始化8254工作方式

      ;定時器0、方式3

      ;裝入頻率表起始地址

      ;裝入時間表起始地址

      ;輸入時鐘為1.0416667MHz,;取出頻率值計算計數(shù)初值,0F4240H /

      ;裝入計數(shù)初值

      ;取出演奏相對時間,調(diào)用延時子程序

      ;退出時設置8254為方式2,OUT0置

      ;設置當前檢測的是第幾列

      ;選取一列,將X1~X4中一個置0 13

      MOV DX,MY8255_A

      OUT DX,AL

      MOV DX,MY8255_C

      ;讀Y1~Y4,用于判斷是哪一行按鍵閉合

      IN

      AL,DX

      L1:

      TEST AL,01H

      ;是否為第1行

      JNZ L2

      ;不是則繼續(xù)判斷

      MOV AL,00H

      ;設置第1行第1列的對應的鍵值

      JMP KCODE

      L2:

      TEST AL,02H

      JNZ L3

      MOV AL,04H

      JMP KCODE

      L3:

      TEST AL,04H

      JNZ L4

      MOV AL,08H

      JMP KCODE

      L4:

      TEST AL,08H

      JNZ NEXT

      MOV AL,0CH

      KCODE: ADD AL,CL

      按鍵值

      CMP F_FLOOR,1

      JNZ KON2

      CALL PUTBUF

      KON2:

      PUSH AX KON:

      CALL CCSCAN

      JNZ KON

      POP AX

      NEXT: INC CL

      MOV AL,CH

      TEST AL,08H

      JZ

      KERR

      ROL AL,1

      ;是否為第2行

      ;不是則繼續(xù)判斷

      ;設置第2行第1列的對應的鍵值

      ;是否為第3行

      ;不是則繼續(xù)判斷

      ;設置第3行第1列的對應的鍵值

      ;是否為第4行

      ;不是則繼續(xù)判斷

      ;設置第4行第1列的對應的鍵值

      ;將第1列的值加上當前列數(shù),確定

      ;保存按鍵值

      ;掃描按鍵,判斷按鍵是否彈起

      ;未彈起則繼續(xù)循環(huán)等待彈起

      ;當前檢測的列數(shù)遞增

      ;檢測是否掃描到第4列

      ;是則跳回到開始處

      ;沒檢測到第4列則準備檢測下一列

      MOV CH,AL

      JMP COLUM KERR: JMP BEGIN

      MYISR PROC NEAR

      ;中斷處理程序MYISR

      PUSH AX

      MOV AL,DIR

      CMP AL,0

      JZ

      DOWN

      CMP AL,2

      JZ

      UP

      JMP OVER

      DOWN:

      MOV AL,NOW_FLOOR

      DEC AL

      MOV NOW_FLOOR,AL

      MOV BX,OFFSET DTABLE

      AND AX,00FFH

      ADD BX,AX

      MOV AL,[BX]

      MOV DX,MY8255_B

      OUT DX,AL

      JMP BIJIAO UP:

      MOV AL,NOW_FLOOR

      INC AL

      MOV NOW_FLOOR,AL

      MOV BX,OFFSET DTABLE

      AND AX,00FFH

      ADD BX,AX

      MOV AL,[BX]

      MOV DX,MY8255_B

      OUT DX,AL

      BIJIAO:

      MOV AL,NOW_FLOOR

      MOV AH,TARGET_FLOOR

      CMP AH,AL

      JZ

      GUANBI

      JMP OVER GUANBI:

      MOV DX,MY8255_MODE

      MOV AL,00001110B

      ;PC7=0

      OUT DX,AL

      MOV DIR,1H

      MOV AL,0

      MOV DX,IOY2

      示目標樓層

      OUT DX,AL

      MOV F_FLOOR,1

      MOV DX,MY8254_MODE

      MOV AL,36H

      OUT DX,AL

      MOV SI,OFFSET FREQ_LIST

      MOV DI,OFFSET TIME_LIST

      MOV DX,0FH

      1.0416667M = 0FE502H

      MOV AX,0E502H

      DIV WORD PTR [SI]

      0F4240H / 輸出頻率

      MOV DX,MY8254_COUNT0

      OUT DX,AL

      MOV AL,AH

      OUT DX,AL

      MOV DL,[DI]

      CALL DALLY

      ADD SI,2

      INC DI

      CALL DALLY1

      MOV DX,MY8254_MODE 置0

      MOV AL,10H

      OUT DX,AL

      OVER: MOV DX,INTR_OCW2

      MOV AL,20H

      ;用IO-32輸出控制8個LED,顯

      ;置1,恢復按鍵有效

      ;初始化8254工作方式

      ;定時器0、方式3

      ;裝入頻率表起始地址

      ;裝入時間表起始地址

      ;輸入時鐘為1.0416667MHz,;取出頻率值計算計數(shù)初值,;裝入計數(shù)初值

      ;取出演奏相對時間,調(diào)用延時子程

      ;退出時設置8254為方式2,OUT0

      ;向PC機內(nèi)部8259發(fā)送中斷結(jié)束命16

      OUT DX,AL

      MOV AL,20H

      OUT 20H,AL

      POP AX

      IRET

      MYISR ENDP

      CCSCAN PROC NEAR

      MOV AL,00H

      MOV DX,MY8255_A

      OUT DX,AL

      MOV DX,MY8255_C

      IN

      AL,DX

      NOT AL

      AND AL,0FH

      RET CCSCAN ENDP

      PUTBUF PROC NEAR

      MOV F_FLOOR,0

      MOV TARGET_FLOOR,AL

      MOV AH,NOW_FLOOR

      CMP AH,AL

      JNZ PANDUAN

      JMP ENDD

      PANDUAN:

      CMP AL,AH

      JB XIAOYU

      MOV DIR,2

      JMP CHULI XIAOYU:

      MOV DIR,0

      CHULI:;顯示目標樓層的燈

      MOV CL,AL

      ;掃描是否有按鍵閉合子程序

      ;將4列全選通,X1~X4置0

      ;讀Y1~Y4

      ;取出Y1~Y4的反值

      ;保存鍵值子程序,AL即為目標樓

      ;置0,按鍵失效

      ;0-7對應1-8層,和當前樓層比較,;不同層就處理,同層不處理

      MOV AL,01H

      SHL AL,CL

      MOV DX,IOY2

      ;用IO-32輸出控制8個LED,顯示目標樓層

      OUT DX,AL

      MOV DX,MY8255_MODE

      MOV AL,00001111B

      ;PC7=1,啟動定期是2s定時

      OUT DX,AL

      ENDD:

      PUTBUF ENDP

      DALLY PROC NEAR

      PUSH CX

      MOV CX,00FFH D1:

      MOV AX,00FFH D2:

      DEC AX

      JNZ D2

      LOOP D1

      POP CX

      RET DALLY ENDP

      DALLY1 PROC

      D00:

      MOV CX,200H D10:

      MOV AX,0FFFFH D20:

      DEC AX

      JNZ D20

      LOOP D10

      DEC DL

      JNZ D00

      RET DALLY1 ENDP

      CODE ENDS

      END START

      ;軟件延時子程序

      ;延時子程序

      第二篇:北京科技大學微機原理實驗報告

      微機原理及應用實驗報告

      學院: 班級: 學號: 姓名:

      微機實驗報告書(Ⅰ)學號:姓名:班級: 同組名單:實驗日期:

      實驗題目:8253可編程定時器計數(shù)器

      實驗目標:掌握8253的基本工作原理和編程方法 實驗步驟:

      連接電路圖

      如圖虛線連接電路,將計數(shù)器0設置為方式0,計數(shù)器初值為N(N<=0FH),用手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀察OUT0電平變化(當輸入N+1個脈沖后OUT0變高電平)。程序框圖:

      程序清單:

      ;*************************;;* 8253方式0計數(shù)器實驗 *;;*************************;IOPORT

      EQU

      0C800H-0280H

      IO8253A EQU

      IOPORT+283H

      IO8253B EQU

      IOPORT+280H

      CODE SEGMENT

      ASSUME

      CS:CODE

      START: MOV

      AL,00010000B

      ;設置8253工作方式

      MOV

      DX,IO8253A

      OUT

      DX,AL

      MOV

      DX,IO8253B

      ;送計數(shù)初值為0FH

      MOV

      AL,0FH

      OUT

      DX,AL

      LLL: IN

      AL,DX

      ;讀計數(shù)初值

      CALL

      DISP

      ;調(diào)顯示子程序

      PUSH

      DX

      MOV

      AH,06H

      MOV

      DL,0FFH

      INT

      21H

      POP

      DX

      JZ

      LLL

      ;跳轉(zhuǎn)到LLL

      MOV

      AH,4CH

      ;退出

      INT

      21H

      DISP PROC

      NEAR

      ;顯示子程序

      PUSH

      DX

      AND

      AL,0FH

      ;首先取低四位

      MOV

      DL,AL

      CMP

      DL,9

      ;判斷是否<=9

      JLE

      NUM

      ;若是則為'0'-'9',ASCII碼加30H

      ADD

      DL,7

      ;否則為'A'-'F',ASCII碼加37H

      NUM: ADD

      DL,30H

      MOV

      AH,02H

      ;顯示

      INT

      21H

      MOV

      DL,0DH

      ;加回車符

      INT

      21H

      MOV

      DL,0AH

      ;加換行符

      INT

      21H

      POP

      DX

      RET

      ;子程序返回

      DISP ENDP

      CODE ENDS

      END

      START 運行結(jié)果:

      每輸入一個單脈沖,屏幕上的數(shù)值減1,從15減到0后(撥動16次后),檢測到OUT0輸出由低電平變?yōu)楦唠娖健P〗Y(jié)(體會與收獲):

      通過預習和實驗,學會了 8253 芯片和微機接口原理和方法,掌握 8253 定時器/計數(shù)器的基本工作原理、工作方式和編程原理,熟悉了匯編代碼的編寫。實驗中,連接電路,利用代碼控制實驗電路,深對了課本理論的理解。

      由于是第一次實驗,進程比較緩慢,所以僅進行了8253可編程定時器/計數(shù)器的一個實驗,下次實驗會熟練一些。

      微機實驗報告書(Ⅱ)

      學號:姓名:班級: 同組名單:實驗日期:

      實驗題目:1.8253可編程定時器計數(shù)器

      2.8255可編程并行接口(方式0)3.七段數(shù)碼管

      實驗目標:1.掌握8253的基本工作原理和編程方法

      2.掌握8255方式0的工作原理及使用方法 3.掌握數(shù)碼管顯示數(shù)字的原理

      實驗步驟: 實驗一:

      連接電路圖

      按上圖連接電路,將計數(shù)器0、計數(shù)器1分別設置為方式3,計數(shù)初值設為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)。實驗二:

      連接電路圖

      1)實驗電路如圖,8255C口接邏輯電平開關(guān)K0~K7,A口接LED顯示電路L0~L7。

      2)編程從8255C口輸入數(shù)據(jù),再從A口輸出。實驗三:

      連接電路圖

      靜態(tài)顯示:按圖連接好電路,將8255的A口PA0~PA6分別與七段數(shù)碼管的段碼驅(qū)動輸入端a~g相連,位碼驅(qū)動輸入端S1接+5V(選中), S0、dp接地(關(guān)閉)。編程從鍵盤輸入一位十進制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。程序框圖: 實驗一:

      實驗二:

      實驗三:

      程序清單: 實驗一:

      ;*******************;* 8253分頻 *;******************* IOPORT EQU

      0C800H-0280H

      IO8253A EQU

      IOPORT+283H

      IO8253B EQU

      IOPORT+280H

      IO8253C EQU

      IOPORT+281H

      CODE SEGMENT

      ASSUME

      CS:CODE

      START: MOV

      DX,IO8253A;向8253寫控制字

      MOV

      AL,36H

      ;工作方式

      OUT

      DX,AL

      MOV

      AX,1000

      ;寫入循環(huán)計數(shù)初值1000

      MOV

      DX,IO8253B

      OUT

      DX,AL

      ;先寫入低字節(jié)

      MOV

      AL,AH

      OUT

      DX,AL

      ;后寫入高字節(jié)

      MOV

      DX,IO8253A

      MOV

      AL,76H

      ;設工作方式

      OUT

      DX,AL

      MOV

      AX,1000

      ;寫入循環(huán)計數(shù)初值1000

      MOV

      DX,IO8253C

      OUT

      DX,AL

      ;先寫低字節(jié)

      MOV

      AL,AH

      OUT

      DX,AL

      ;后寫高字節(jié)

      MOV

      AH,4CH

      ;程序退出

      INT

      21H

      CODE ENDS

      END

      START

      實驗二:

      ;*************************;;* 8255A的基本輸入輸出 *;;*************************;IOPORT EQU 0C800H‐280H IO8255A EQU IOPORT+288H IO8255B EQU IOPORT+ 28BH IO8255C EQU IOPORT+28AH CODE SEGMENT ASSUME CS:CODE START: MOV DX,IO8255B;對 8255 進行設定,A 輸出,C 輸入

      MOV AL,10001001B

      OUT DX,AL INPUT: MOV DX,IO8255C;從 C 輸入

      IN AL,DX

      MOV DX,IO8255A;從 A 輸出

      OUT DX,AL

      MOV DL,0FFH;判斷是否有按鍵

      MOV AH,06H

      INT 21H

      JZ INPUT;若無,則繼續(xù) C 輸入,A 輸出

      MOV AH,4CH;否則,返回 DOS

      INT 21H CODE ENDS END START 實驗三:

      ;************************************;;*鍵盤輸入數(shù)據(jù)(0-9)控制LED數(shù)碼管顯示*;;************************************;

      DATA

      SEGMENT

      IOPORT

      EQU

      0C800H-280H IO8255A

      EQU

      IOPORT+288H IO8255B

      EQU

      IOPORT+28BH IO8255C

      EQU

      IOPORT+28AH

      LED

      DB

      3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

      MESG1

      DB

      0DH,0AH,'Input a num(0--9),other key is exit:',0DH,0AH,'$' DATA

      ENDS CODE SEGMENT

      ASSUME CS:CODE,DS:DATA START:

      MOV

      AX,DATA

      MOV

      DS,AX

      MOV

      DX,IO8255B

      ;使 8255 的A口為輸出方式

      MOV

      AX,10000000B

      OUT

      DX,AL

      SSS:

      MOV

      DX,OFFSET MESG1

      ;顯示提示信息

      MOV

      AH,09H

      INT

      21H

      MOV

      AH,01

      ;從鍵盤接收字符

      INT

      21H

      CMP

      AL,30H

      ;是否小于 0

      JL

      EXIT

      ;若是則退出

      CMP

      AL,39H

      ;是否大于9

      JG

      EXIT

      ;若是則退出

      SUB

      AL,30H

      ;將所得字符的 ASCII 碼減 30H

      MOV

      BX,OFFSET LED

      ;BX為數(shù)碼表的起始地址

      XLAT

      ;求出相應的段碼

      MOV

      DX,IO8255A

      ;從 8255 的A口輸出

      OUT

      DX,AL

      JMP

      SSS

      ;轉(zhuǎn) SSS EXIT:

      MOV

      AH,4CH

      ;返回

      INT

      21H CODE

      ENDS

      END

      START;

      運行結(jié)果: 實驗一:

      8253通道0和通道1均工作在方式3,計數(shù)初值均為1000。通道0的時鐘輸入為1MHz標準脈沖,產(chǎn)生1000Hz的方波;通道1以通道0輸出的1000Hz方波脈沖為輸入,產(chǎn)生1Hz的方波。用邏輯筆發(fā)現(xiàn),OUT1 輸出電平呈規(guī)律性高低變化(顯示燈閃爍),時間間隔為 1s,說明輸出頻率為 1Hz,實現(xiàn)計時器功能。實驗二:

      當邏輯開關(guān)K0~K7中的一個或幾個打開時,對應的LED燈就會亮起來,即利用8255A實現(xiàn)了基本的輸入輸出控制。實驗三:

      靜態(tài)顯示:當從鍵盤輸入0~9任一數(shù)字時,七段數(shù)碼管上便 會顯示相應的數(shù)字,按下其他按鍵則退出程序。小結(jié)(體會和收獲):

      通過本次實驗,進一步了解了8253可編程定時器/計數(shù)器;鞏固了可編程并行接口8255的基本知識點,了解了該芯片的應用。通過編程實現(xiàn),熟悉了8255方式控制字,了解了方式0和基本工作原理。通過這三次實驗的學習,對于可編程接口芯片有了更深的認識,掌握了基本的微機接口方法。

      在實驗過程中要細心,當編譯、鏈接或者運行的時候遇到錯誤的時候,要仔細檢查程序的輸入是否正確,很容易輸錯字母數(shù)字。

      微機實驗報告書(Ⅲ)

      學號:姓名:班級: 同組名單:實驗日期: 實驗題目:步進電機控制實驗

      實驗目標:1.了解步進電機控制的基本原理

      2.掌握控制步進電機轉(zhuǎn)動的編程方法

      實驗步驟:

      連接電路圖

      1)按圖14連接線路,利用8255輸出脈沖序列,開關(guān)K0~K6控制步進電機轉(zhuǎn)速,K7控制步進電機轉(zhuǎn)向。8255 CS接288H~28FH。PA0~PA3接BA~BD;PC0~PC7接K0~K7。

      2)編程:當K0~K6中某一開關(guān)為“1”(向上撥)時步進電機啟動。K7向上撥電機正轉(zhuǎn),向下?lián)茈姍C反轉(zhuǎn)。程序框圖:

      程序清單:

      ;*******************************;;*

      步進電機

      *;;*******************************;

      DATA

      SEGMENT

      IOPORT

      EQU

      0E400H-280H

      IO8255A

      EQU

      IOPORT+288H

      ;8255A 輸出端口

      IO8255B

      EQU

      IOPORT+ 28BH

      ;8255B 控制端口

      IO8255C

      EQU

      IOPORT+ 28AH

      ;8255C 輸入端口

      BUF

      DB

      0

      MES

      DB

      'K0-K6 ARE SPEED CONTROL',0AH,0DH

      DB

      'K6 IS THE LOWEST SPEED ',0AH,0DH

      DB

      'K0 IS THE HIGHEST SPEED',0AH,0DH

      DB

      'K7 IS THE DIRECTION CONTROL',0AH,0DH,'$'

      DATA

      ENDS

      CODE SEGMENT

      ASSUME

      CS:CODE,DS:DATA

      START:

      MOV

      AX,CS

      MOV

      DS,AX

      MOV

      AX,DATA

      MOV

      DS,AX

      MOV

      DX,OFFSET MES

      MOV

      AH,09

      INT

      21H

      MOV

      DX,IO8255B

      MOV

      AL, 10001001B

      OUT

      DX,AL

      ;8255 C輸入, A 輸出

      MOV

      BUF,33H

      OUT1:

      MOV

      AL,BUF

      MOV

      DX,IO8255A

      OUT

      DX,AL

      PUSH

      DX

      MOV

      AH,06H

      MOV

      DL,0FFH

      INT

      21H

      POP

      DX

      JE

      IN1

      MOV

      AH,4CH

      INT

      21H

      IN1:

      MOV

      DX,IO8255C

      IN

      AL,DX

      ;輸入開關(guān)狀態(tài)

      TEST

      AL,01H

      JNZ

      K0

      TEST

      AL,02H

      JNZ

      K1

      TEST

      AL,04H

      JNZ

      K2

      TEST

      AL,08H

      JNZ

      K3

      TEST

      AL,10H

      JNZ

      K4

      TEST

      AL,20H

      JNZ

      TEST

      JNZ

      STOP:

      MOV

      MOV

      JMP

      K0:

      MOV

      SAM:

      TEST

      JZ

      JMP

      K1:

      MOV

      JMP

      SAM

      K2:

      MOV

      JMP

      K3:

      MOV

      JMP

      K4:

      MOV

      JMP

      K5:

      MOV

      JMP

      K6:

      MOV

      JMP

      SAM

      ZX0:

      CALL

      MOV

      ROR

      MOV

      JMP

      NX0:

      CALL

      MOV

      ROL

      MOV

      JMP

      DELAY

      PROC

      DELAY1:

      MOV

      DELAY2:

      LOOP

      K5

      AL,40H K6

      DX,IO8255C AL,0FFH

      OUT1

      BL,40H

      AL,80H ZX0 NX0

      BL,50H

      BL,70H

      SAM

      BL,80H SAM

      BL,0A0H SAM

      BL,0C0H SAM

      BL,0FFH

      DELAY

      AL,BUF

      AL,1

      BUF,AL OUT1

      DELAY

      AL,BUF

      AL,1

      BUF,AL OUT1

      NEAR

      CX,0FFFFH

      DELAY2

      DEC

      BL

      JNZ

      DELAY1

      RET

      DELAY

      ENDP

      CODE

      ENDS

      END

      START 運行結(jié)果:

      當K0~K6中任意一開關(guān)向上撥時步進電機啟動,且K1速度最快,K6速度最慢;當K7向上撥電機正轉(zhuǎn),向下?lián)茈姍C反轉(zhuǎn)。當鍵盤中有任意鍵輸入的時候則程序終止。小結(jié)(收獲與體會):

      實驗和理論是相互檢驗,相互補充和相互促進的,在實際動手動腦運用理論知識的時候,能更深入地領(lǐng)會概念,熟練運用,在此基礎上方能進行創(chuàng)新和自由發(fā)揮。通過本次實驗,我了解了步進電機控制的基本原理,掌握了控制步進電機轉(zhuǎn)動的編程方法。更加深入地了解了微機原理這門課程。

      第三篇:微機原理實驗報告

      學號: 學生姓名: 打印日期: 評分: 評語:

      實驗報告

      COURSE PAPER 8255控制開關(guān)狀態(tài)顯示

      學院 :機電工程與自動化學院

      一、實驗目的;

      (本課程設計是在完成《微機原理與接口技術(shù)使用教程》知識后進行的一次綜合性訓練。通過本課程設計,既可以鞏固對所學知識的理解和掌握,又可以培養(yǎng)解決實際問題的本領(lǐng),也能夠提高運用文字圖表表達設計思想和對Proteus與Emu8086應用的能力。

      二、實驗要求;

      (1)功能要求:設定8255的PA口為開關(guān)量輸入,PB口為開關(guān)量輸出,要求能隨時將PA口的開關(guān)狀態(tài)通過PB口的數(shù)碼管顯示出來,如開關(guān)為0000,則數(shù)碼管顯示為0;若開關(guān)為1111,則數(shù)碼管顯示為F。

      (2)具體參數(shù):將8255A的端口A設置為方式0并作為輸入口,讀取開關(guān)量,PB口設置為方式0作為輸出口。并設定A、B、C口和控制口的地址為60H、62H、64H、66H。LED為共陰極連接方式。

      (3)用Proteus畫出實現(xiàn)上述功能的8086和8255及LED相關(guān)連接的硬件電路,編寫相關(guān)程序,結(jié)合emu8086,完成仿真調(diào)試,給出硬件電路圖、程序代碼和仿真結(jié)果圖。

      三、實驗說明;

      ? 利用前期實驗建立組態(tài)控制 ? 組態(tài)軟件的操作界面和主要功能; ? 混料罐工程或交通燈工程工程組態(tài)

      四、實驗步驟;(1)硬件設計

      8255A的四個端口地址為60H、62H、64H、66H。其二進制碼分別為0110 0000H、0110 0010H、0110 0100H、0110 0110H。則可以判斷,8255A的A0與A1端口應該與8086的A1和A2端口對應。8086的A7、A4、A3、A0為0,A6、A5為1時,8255A接受指令。為完成上述操作,可以使用138譯碼器。8255A的A端口作為輸入口,連接四位開關(guān);B端口作為輸出口,連接一個共陰極的LED顯示管。

      (2)硬件電路圖

      (3)匯編語言設計 assume cs:code code segment start: MOV DX,066H MOV AL,90H OUT DX,AL

      AA: MOV BX, OFFSET TABL MOV DX,060H IN AL,DX AND AL,0FH XLAT MOV DX,062H OUT DX,AL JMP AA

      TABL: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H

      code ends end start(4)實驗結(jié)果

      五、實驗心得;

      通過對proteus及emu8086軟件的應用,可以使我將從課堂與書本上學習到的知識,以模擬的方式,制作成成品。在本次課外項目中,我對于8255A的工作方式以及8086如何控制其他元器件輸入輸出數(shù)據(jù)有了清晰的認識。通過使用模擬軟件,我有了更多的方式去深入了解課本上的知識。

      第四篇:北京交通大學微機原理實驗報告(yuan)

      微機原理

      實 驗 報 告

      隋偉 08212013 自動化0801

      目 錄

      一、I/O地址譯碼與交通燈控制實驗……………………………………3

      二、可編程定時器/計數(shù)器(8253)……………………………………6

      三、中斷實驗(純DOS)………………………………………………11

      四、模/數(shù)轉(zhuǎn)換器…………………………………………………………18

      五、串行通訊 ……………………………………………………………16

      六、課程綜合實驗(搶答器)……………………………………………28

      七、自主設計實驗——LED顯示………………………………………32

      八、參考文獻……………………………………………………………35

      一、I/O地址譯碼與交通燈控制實驗

      一.實驗目的

      通過并行接口8255實現(xiàn)十字路口交通燈的模擬控制,進一步掌握對并行口的使用。

      二.實驗內(nèi)容

      如圖5-3,L7、L6、L5作為南北路口的交通燈與PC7、PC6、PC5相連,L2、L1、L0作為東西路口的交通燈與PC2、PC1、PC0相連。編程使六個燈按交通燈變化規(guī)律燃滅。

      十字路口交通燈的變化規(guī)律要求:

      (1)南北路口的綠燈、東西路口的紅燈同時亮3秒左右。(2)南北路口的黃燈閃爍若干次,同時東西路口的紅燈繼續(xù)亮。(3)南北路口的紅燈、東西路口的綠燈同時亮3秒左右。(4)南北路口的紅燈繼續(xù)亮、同時東西路口的黃燈亮閃爍若干次。(5)轉(zhuǎn)(1)重復。

      8255動態(tài)分配地址: 控制寄存器: 0C40BH

      A口地址: 0C408H C口地址: 0C40AH

      三.程序流程圖和程序清單

      DATA SEGMENT X DB ? DATA ENDS

      STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

      CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA

      MOV DS,AX MOV DX,0EC0BH

      ;寫控制字;---------------INIT----------------

      MOV AL,80H OUT DX,AL

      L3: MOV DX,0EC0AH

      CALL DELAY CALL DELAY;長延時,3s左右 MOV AL,24H OUT DX,AL;南北綠燈,東西紅燈亮

      CALL DELAY CALL DELAY CALL DELAY CALL DELAY CALL DELAY

      MOV BL,8 MOV AL,04H L0: XOR AL,40H;南北黃燈閃,東西紅燈亮

      MOV AL,81H OUT DX,AL;南北紅燈亮,東西綠燈亮 CALL DELAY OUT DX,AL CALL DELAY;延時

      CALL DELAY DEC BL;閃爍幾次 JNZ L0

      CALL DELAY CALL DELAY CALL DELAY;長延時,3s左右

      CALL DELAY CALL DELAY CALL DELAY CALL DELAY

      MOV BL,9 MOV AL,80H L1: XOR AL,02H;南北紅燈亮,東西黃燈閃

      OUT DX,AL CALL DELAY DEC BL;延時

      CALL DELAY JNZ L1;閃爍幾次

      CALL DELAY

      ;------------------------------

      ;-----------延時函數(shù)------------DELAY : PUSH CX PUSH DX MOV CX,1FFFH LOP1: MOV DX,0FFFFH LOP2: DEC DX

      LOOP LOP1 POP DX POP CX RET JNZ LOP2 MOV AH,4CH INT 21H MOV DL,0FFH MOV AH,06H INT 21H JZ L3;六號功能判斷若無字符輸入ZF=1繼續(xù)循環(huán)

      CODE ENDS END START

      四.實驗遇到的問題和解決方法

      問題:綠燈滅后黃燈沒有出現(xiàn)閃爍的效果,一直保持常亮

      解決方法:修改程序,通過利用異或和循環(huán)指令使綠燈滅、紅燈亮后,黃燈口的狀態(tài)從0到1循環(huán)變換,并通過調(diào)用延遲子程序,從而實現(xiàn)人眼可辨的黃燈閃的效果。

      二、可編程定時時鐘/計數(shù)器(8253)

      一、實驗目的

      掌握8253的基本工作原理和編程方法。

      二、實驗內(nèi)容

      1. 按圖5-1虛線連接電路,將計數(shù)器0設置為方式0,計數(shù)器初值為N(N≤0FH),用手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀察OUT0電平變化(當輸入N+1個脈沖后OUT0變高電平)。

      圖 5-1

      2. 按圖5-2連接電圖,將計數(shù)器0、計數(shù)器1分別設置為方式3,計數(shù)初值設為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)。

      圖5-2 三.實驗原理

      8253具有3個獨立的計數(shù)通道,采用減1計數(shù)方式。在門控信號有效時,每輸入1個計數(shù)脈沖,通道作1次計數(shù)操作。當計數(shù)脈沖是已知周期的時鐘信號時,計數(shù)就成為定時。作計數(shù)器時,要求計數(shù)的次數(shù)可直接作為計數(shù)器的初值預置到減“1”計數(shù)器中。

      8253中各通道可有6種可供選擇的工作方式,以完成定時、計數(shù)或脈沖發(fā)生器等多種功能。本實驗用到的是方式0—計數(shù)結(jié)束中斷。在寫入計數(shù)值N之后的第一個CLK的下降沿將N裝入計數(shù)執(zhí)行單元,待下一個CLK的下降沿到來且門控信號GATE為高電平時,通道開始啟動計數(shù)。在計數(shù)過程中,OUT一直保持低電平,直到計數(shù)達“0”時,OUT輸出由低電平變?yōu)楦唠娖?,并且保持高電平?253動態(tài)分配地址: 控制寄存器: 0C403H

      計數(shù)器0地址: 0C400H 計數(shù)器1地址: 0C401H

      四.程序流程圖和程序清單 1)DATA SEGMENT N EQU 0BH CHL

      STACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDS

      CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;--------------INIT----------------

      L0:;MOV AL,0;計數(shù)器初值,不大于0FH DB 0AH,0DH,'$';換行

      DATA ENDS MOV DX,0C403H MOV AL,10H OUT DX,AL MOV DX,0C400H MOV AL,N;控制寄存器地址

      ;計數(shù)器0,低字節(jié),方式0,二進制計數(shù);寫入控制字

      OUT DX,AL;寫入計數(shù)初值 MOV CL,N;計數(shù)器0鎖存

      ;MOV DX,IO8253;OUT DX,AL MOV DX,0C400H IN AL,DX CMP AL,CL JNE L0 DEC CL MOV DL,AL;若AL不等于CL,則繼續(xù)到L0循環(huán);更改CL值

      ;讀取當前數(shù)值

      CMP DL,09H;是0~9嗎? JLE ASCI ADD DL,07H;是A~F MOV AH,02H;單字符輸出計數(shù)器當前值 INT 21H MOV DX,OFFSET CHL MOV AH,09H INT 21H

      ;輸出字符串換行 ASCI: ADD DL,30H

      CMP CL,0 JNL L0;CL不小于0時,繼續(xù)循環(huán)

      ;------------------------------

      MOV AH,4CH INT 21H END START CODE ENDS

      2)

      DATA SEGMENT X DB ? DATA ENDS

      STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

      CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV AL,36H MOV DX,0C403H;寫計數(shù)器0控制字 OUT DX,AL MOV AX,1000;寫計數(shù)器0初值 MOV DX,0C400H OUT DX,AL;先寫低字節(jié)后寫高字節(jié) MOV AL,AH OUT DX,AL;----------------MOV AL,76H MOV DX,0C403H OUT DX,AL;寫計數(shù)器1控制字 MOV AX,1000;寫計數(shù)器0初值 MOV DX,0C401H OUT DX,AL MOV AL,AH;先寫低字節(jié)后寫高字節(jié) OUT DX,AL CODE ENDS END START

      五.實驗遇到的問題和解決方案 問題:計數(shù)初值沒有顯示出來

      解決方法:進行TD調(diào)試,發(fā)現(xiàn)邏輯上出現(xiàn)了問題。修改程序,通過利用CMP AL,CL

      JNZ L0來實現(xiàn)將所有的計數(shù)值都顯示出來。

      三、中斷實驗(純DOS)

      一、實驗目的

      1、掌握PC機中斷處理系統(tǒng)的基本原理。

      2、學會編寫中斷服務程序。

      二、實驗原理與內(nèi)容

      1、實驗原理

      PC機用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理。中斷控制器用于接收外部的中斷請求信號,經(jīng)過優(yōu)先級判別等處理后向CPU發(fā)出可屏蔽中斷請求。IBMPC、PC/XT機內(nèi)有一片8259中斷控制器對外可以提供8個中斷源: 中斷源 中斷類型號 中斷功能

      IRQ0 08H 時鐘

      IRQ1 09H 鍵盤

      IRQ2 0AH 保留

      IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盤

      IRQ6 0EH 軟盤

      IRQ7 0FH 并行打印機

      8個中斷源的中斷請求信號線IRQ0~IRQ7在主機的62線ISA總線插座中可以引出,系統(tǒng)已設定中斷請求信號為“邊沿觸發(fā)”,普通結(jié)束方式。對于PC/AT及286以上微機內(nèi)又擴展了一片8259中斷控制,IRQ2用于兩片8259之間級連,對外可以提供16個中斷源:

      中斷源 中斷類型號 中斷功能

      IRQ8 070H 實時時鐘

      IRQ9 071H 用戶中斷

      IRQ10 072H 保留

      IRQ11 O73H 保留

      IRQ12 074H 保留

      IRQ13 075H 協(xié)處理器

      IRQ14 076H 硬盤

      IRQ15 077H 保留

      PCI總線中的中斷線只有四根,INTA#、INTB#、INTC#、INTD#,它們需要通過P&P的設置來和某一根中斷相連接才能進行中斷申請。

      2、實驗內(nèi)容

      實驗電路如圖31,直接用手動產(chǎn)單脈沖作為中斷請求信號(只需連接一根導線)。要求每按一次開關(guān)產(chǎn)生一次中斷,在屏幕上顯示一次“TPC pci card Interrupt”,中斷10次后程序退出。

      三、編程提示

      1.由于9054的驅(qū)動程序影響直寫9054芯片的控制寄存器,中斷實驗需要在純DOS的環(huán)境中才能正常運行。這里指的純DOS環(huán)境是指微機啟動時按F8鍵進入的DOS環(huán)境。WINDOWS重啟進入MSDOS方式由于系統(tǒng)資源被重新規(guī)劃過,所以也不能正常實驗。

      2.由于TPC卡使用PCI總線,所以分配的中斷號每臺微機可能都不同,編程時需要了解當前的微機使用那個中斷號并進行設置,獲取方法請參看匯編程序使用方法的介紹。(也可使用自動獲取資源分配的程序取得中斷號)

      3.在純DOS環(huán)境下,有些微機的BIOS設置中有將資源保留給ISA總線使用的選項,致使在純DOS環(huán)境(WINDOWS環(huán)境下不會出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就

      無法做實驗,這時需要將此選項修改為使用即插即用。

      4.在純DOS環(huán)境下,有些微機的BIOS設置中有使用即插即用操作系統(tǒng)的選項,如果在使用即插即用操作系統(tǒng)狀態(tài)下,BIOS將不會給TPC卡分配系統(tǒng)資源,致使在純DOS環(huán)境(WINDOWS環(huán)境下不會出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就無法做實驗,這時需要將此選項修改為不使用即插即用操作系統(tǒng)。

      5.由于TPC卡使用9054芯片連接微機,所以在編程使用微機中斷前需要使能9054的中斷功能,代碼如下:

      mov dx,ioport_cent+68h;設置 tpc 卡中9054芯片io口,使能中斷

      in ax,dx or ax,0900h out dx,ax

      其中IOPORT_CENT是9054芯片寄存器組的I/O起始地址,每臺微機可能都不同,編程時需要了解當前的微機使用哪段并進行設置,獲取方法請參看本書結(jié)尾部分的介紹。(也可使用自動獲取資源分配的程序取得),+68H的偏移是關(guān)于中斷使能的寄存器地址,設置含義如下:

      程序退出前還要關(guān)閉9054的中斷,代碼如下:

      mov dx,ioport_cent+68h;設置 tpc 卡中9054芯片io口,關(guān)閉中斷

      in ax,dx

      and ax,0f7ffh out dx,ax

      6.PC機中斷控制器8259 的地址為20H、21H,編程時要根據(jù)中斷類型號設置中斷矢量,8259中斷屏蔽寄存器IMR對應位要清零(允許中斷),中斷服務結(jié)束返回前要使用中斷結(jié)束命令:

      MOV AL,20H OUT 20H,AL

      中斷結(jié)束返回DOS時應將IMR對應位置1,以關(guān)閉中斷。

      四、參考流程圖

      五、參考程序 程序名:INT.ASM;386以上微機適用

      ;純dos下才能使用

      ;tasm4.1或以上編譯

      data segment

      int_vect EQU 071H;中斷0-7的向量為:08h-0fh,中斷8-15的向量為:70h-77h 55

      irq_mask_2_7 equ 011111011b;中斷掩碼,中斷0-7時從低至高相應位為零,中斷8-15時第2位為零

      irq_mask_9_15 equ 011111101b;中斷0-7時全一,中斷8-15時從低至高相應位為零

      ioport_cent equ 0d800h;tpc 卡中9054芯片的io地址

      csreg dw ?

      ipreg dw ?;舊中斷向量保存空間

      irq_times dw 00h;中斷計數(shù)

      msg1 db 0dh,0ah,'TPC pci card Interrupt',0dh,0ah,'$' msg2 db 0dh,0ah,'Press any key to exit!',0dh,0ah,'$'

      msg3 db 0dh,0ah,'Press DMC to interrupt 10 times and exit!',0dh,0ah,'$' data ends

      stacks segment db 100 dup(?)stacks ends code segment

      assume cs:code,ds:data,ss:stacks,es:data start:

      ;Enable Local Interrupt Input.386 cli

      mov ax,data mov ds,ax mov es,ax mov ax,stacks mov ss,ax

      mov dx,ioport_cent+68h;設置 tpc 卡中9054芯片io口,使能中斷

      in ax,dx or ax,0900h out dx,ax

      mov al,int_vect;保存原中斷向量

      mov ah,35h int 21h mov ax,es mov csreg,ax mov ipreg,bx

      mov ax,cs;設置新中斷向量 56

      mov ds,ax

      mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h

      in al, 21h;設置中斷掩碼

      and al, irq_mask_2_7 out 21h, al in al, 0a1h

      and al, irq_mask_9_15 out 0a1h, al mov ax,data mov ds,ax

      mov dx,offset msg2 mov ah,09h int 21h

      mov dx,offset msg3 mov ah,09h int 21h

      mov irq_times,0ah sti loop1:

      cmp irq_times,0;等待中斷并判斷中斷10次后退出

      jz exit mov ah,1 int 16h

      jnz exit;按任意鍵退出

      jmp loop1 exit: cli

      mov bl, irq_mask_2_7;恢復中斷掩碼

      not bl in al, 21h or al, bl out 21h, al

      mov bl, irq_mask_9_15 not bl in al, 0a1h 57

      or al, bl out 0a1h, al

      mov dx,ipreg;恢復原中斷向量

      mov ax,csreg mov ds,ax mov ah,25h mov al,int_vect int 21h

      mov dx,ioport_cent+68h;設置 tpc 卡中9054芯片io口,關(guān)閉中斷

      in ax,dx

      and ax,0f7ffh out dx,ax mov ax,4c00h int 21h

      int_proc proc far;中斷處理程序

      cli

      push ax push dx push ds

      dec irq_times

      mov ax,data;Interrupt to do mov ds,ax

      mov dx,offset msg1 mov ah,09h int 21h

      mov al,20h;Send EOI out 0a0h,al out 20h,al pop ds pop dx pop ax sti iret

      int_proc endp code ends

      四、模/數(shù)轉(zhuǎn)換器

      一、實驗目的

      了解模/數(shù)轉(zhuǎn)換的基本原理,掌握ADC0809的使用方法。

      二、實驗內(nèi)容

      1、實驗電路原理圖如圖38。通過實驗臺左下角電位器RW1輸出0~5V直流電壓送入ADC0809通道0(IN0),利用debug的輸出命令啟動A/D轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果,驗證輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系。

      啟動IN0開始轉(zhuǎn)換: Out 0298 0 讀取轉(zhuǎn)換結(jié)果: In 0298

      2、編程采集IN0輸入的電壓,在屏幕上顯示出轉(zhuǎn)換后的數(shù)據(jù)(用16進制數(shù))。

      3、將JP3的1、2短接,使IN2處于雙極性工作方式,并給IN1輸入一個低頻交流信號(幅度為±5V),編程采集這個信號數(shù)據(jù)并在屏幕上顯示波形。

      三、實驗提示

      1、ADC0809的IN0口地址為298H,IN1口地址為299H。

      2、IN0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為:

      其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為PC機的+5V電源。

      3、一次A/D轉(zhuǎn)換的程序可以為

      MOV DX,口地址

      OUT DX,AL ;啟動轉(zhuǎn)換

      ;延時

      IN AL,DX ;讀取轉(zhuǎn)換結(jié)果放在AL中

      四、參考流程圖

      五、參考程序1:AD_1.ASM ioport equ 0d400h-0280h io0809a equ ioport+298h code segment assume cs:code

      start:mov dx,io0809a;啟動A/D轉(zhuǎn)換器

      out dx,al

      mov cx,0ffh;延時

      delay:loop delay

      in al,dx;從A/D轉(zhuǎn)換器輸入數(shù)據(jù)

      mov bl,al;將AL保存到BL mov cl,4

      shr al,cl;將AL右移四位

      call disp;調(diào)顯示子程序顯示其高四位

      mov al,bl and al,0fh

      call disp;調(diào)顯示子程序顯示其低四位

      mov ah,02

      mov dl,20h;加回車符

      int 21h mov dl,20h int 21h

      push dx

      mov ah,06h;判斷是否有鍵按下

      mov dl,0ffh int 21h pop dx

      je start;若沒有轉(zhuǎn)START mov ah,4ch;退出

      int 21h

      disp proc near;顯示子程序

      mov dl,al

      cmp dl,9;比較DL是否>9

      jle ddd;若不大于則為'0'-'9',加30h為其ASCII碼

      add dl,7;否則為'A'-'F',再加7 ddd: add dl,30h;顯示

      mov ah,02 int 21h ret

      disp endp code ends end start

      五、串行通訊

      一、實驗目的

      1、進一步了解串行通信的基本原理。

      2、掌握串行接口芯片8250的工作原理和編程方法。

      3、熟悉PC機串行口的基本連接方法

      二、實驗內(nèi)容

      1、PC機RS-232串口自發(fā)自收。

      按照PC機串口自發(fā)自收的連接方法連線。編寫PC機自發(fā)自收串行通信程序,要求:從鍵盤輸入一個字符,將字符通過串口發(fā)送出去,再由此串口將字符接收回來并在屏幕上顯示,實現(xiàn)自發(fā)自收。

      2、兩臺PC機間RS-232串口通信。

      按照PC機RS-232串口直接互連的方法連接兩臺PC機。編寫PC機直接互連串行通信程序;要求:由甲機鍵盤鍵入字符經(jīng)串口發(fā)送給乙機,再由乙機通過串口接收字符并顯示在屏幕上。當鍵入感嘆號“!”,結(jié)束收發(fā)過程。三.實驗原理

      1)本實驗為異步通信:以字符為單位進行傳送,每傳送一個字符,以起始位作為開始標志,以停止位作為結(jié)束標志。

      異步串行通信的工作過程是:傳送開始后,接收設備不斷地檢測傳輸線是否有起始位到來,當接收到一系列的“1”(空閑或停止位)之后,檢測到第一個“0”,說明起始位出現(xiàn),就開始接收所規(guī)定的數(shù)據(jù)位、奇偶校驗位及停止位。經(jīng)過接收器處理,將停止位去掉,把數(shù)據(jù)位拼裝成一字節(jié)數(shù)據(jù),并且經(jīng)奇偶校驗無錯誤,才算是正確地接收到了一個字符。當一個字符接收完畢,接收設備又繼續(xù)測試傳輸線,監(jiān)視“0”電平的到來(下一個字符的開始),直到全部數(shù)據(jù)接收完畢。

      幀 Dn?D0 D1 數(shù)據(jù)位 起 空閑位 始 位 奇 偶 校驗位 停 止 位 空閑位

      2)8250各部分功能說明

      8250片內(nèi)有10個寄存器,其中有幾個是共用地址的,其識別由線路控制寄存器(LCR)的最高位DLAB來決定。各寄存器的地址和格式如下所示:.3)數(shù)據(jù)發(fā)送和接收:

      四.程序清單 1.自發(fā)自收

      DATA SEGMENT CHL

      STACK1 SEGMENT STACK DW 100 DUP(0)STACK1 ENDS

      CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;--------------INIT----------------DB 0AH,0DH,'$';換行字符串

      DATA ENDS

      MOV DX,3FBH;MOV AL,80H;DLAB=1

      OUT DX,AL MOV AX,0CH;N=12 BAUD=9600bps MOV DX,3F8H;低位

      MOV AL,AH INC DX OUT DX,AL OUT DX,AL MOV AL,03H;八位數(shù)據(jù),1停止,無校驗 MOV DX,3FBH;線路控制REG OUT DX,AL MOV AL,0;屏蔽全部中斷 MOV DX,3F9H

      OUT DX,AL WAIT1: MOV DX,3FDH;讀線路狀態(tài)寄存器

      CHAR: PUSH AX

      MOV DL,AL MOV AH,02H INT 21H MOV DX,OFFSET CHL;輸出字符串換行 MOV AH,09H IN AL,DX TEST AL,1EH;判斷是否有錯 JNZ ERROR TEST AL,01H;判斷是否收到 JNZ RECEIVE TEST AL,20H;判斷發(fā)送端是否空 JZ WAIT1 MOV DL,0FFH;六號功能調(diào)用讀入待發(fā)送數(shù)據(jù) MOV AH,06H INT 21H JZ WAIT1 MOV DX,3F8H;寫發(fā)送REG OUT DX,AL JMP WAIT1;返回 WAIT1;顯示接收

      INT 21H POP AX JMP WAIT1 ERROR: MOV DX,3FDH

      RECEIVE:MOV DX,3F8H

      IN AL,DX JNE CHAR;讀數(shù)據(jù)接收寄存器

      CMP AL,'!';判斷是否結(jié)束;------------------------------MOV AH,4CH INT 21H CODE ENDS END START

      IN AL,DX MOV DL,'?';對于錯誤顯示'?" MOV AH,02H INT 21H JMP WAIT1 2.雙機通信(1)發(fā)送端: CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H;8250初始化,設DLAB=1 MOV DX,3FBH OUT DX,AL

      MOV AX,30H MOV DX,3F8H OUT DX,AL;寫入除數(shù)低字節(jié) MOV AL,AH INC DX OUT DX,AL;寫入除數(shù)高字節(jié) MOV AL,0AH;7位數(shù)據(jù),1位停止,奇校驗 MOV DX,3FBH OUT DX,AL;寫入線路控制寄存器

      MOV AL,03H MOV DX,3FCH OUT DX,AL;寫入Modem控制寄存器

      MOV AL,0 MOV DX,3F9H OUT DX,AL;

      WAIT1: MOV DX,3FDH;IN AL,DX TEST AL,1EH;JNZ ERROR

      ;TEST AL,01H;;JNZ SEND;

      TEST AL,20H;JZ WAIT1

      SEND: MOV AH,1 INT 21H;CMP AL,21H;JZ EXIT

      MOV DX,3F8H;OUT DX,AL JMP WAIT1;

      ERROR: MOV DX,3FDH;IN AL,DX MOV DL,'?';MOV AH,02H INT 21H JMP WAIT1

      EXIT: MOV AH,4CH INT 21H CODE ENDS END START

      寫中斷允許寄存器,屏蔽所有中斷讀線路狀態(tài)寄存器 出錯否 接收數(shù)據(jù)就緒否 發(fā)送 發(fā)送寄存器空否,不空,返回等待 讀鍵盤 是'!'? 是,返回操作系統(tǒng)

      不是,則發(fā)送 返回等待 出錯則清除線路狀態(tài)寄存器 顯示'?' 26

      ;

      (2)接收端:

      CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H;8250初始化 MOV DX,3FBH OUT DX,AL

      MOV AX,30H;MOV DX,3F8H OUT DX,AL;MOV AL,AH INC DX MOV DX,3F9H OUT DX,AL;

      MOV AL,0AH MOV DX,3FBH OUT DX,AL;

      MOV AL,03H MOV DX,3FCH OUT DX,AL;

      MOV AL,0 MOV DX,3F9H OUT DX,AL;

      WAIT1: MOV DX,3FDH;IN AL,DX TEST AL,1EH;JNZ ERROR

      TEST AL,01H;JNZ RECEIVE;

      ;TEST AL,20H;;JZ WAIT1 JMP WAIT1;

      RECEIVE: MOV DX,3F8H;IN AL,DX

      寫除數(shù) 寫入除數(shù)低字節(jié) 寫入除數(shù)高字節(jié) 寫入線路控制寄存器 寫入Modem控制寄存器 寫中斷允許寄存器,屏蔽所有中斷讀線路狀態(tài)寄存器 出錯否 接收數(shù)據(jù)就緒否 轉(zhuǎn)接收 發(fā)送寄存器空否,不空,返回等待 均返回等待 讀接收數(shù)據(jù) 27

      AND AL,01111111B;保留位數(shù)據(jù) CMP AL,21H;是'!'? JNZ CHAR INT 21H CHAR: PUSH AX MOV DL,AL MOV AH,2;顯示接受字符 INT 21H POP AX JMP WAIT1;返回等待

      ERROR: MOV DX,3FDH;出錯則清除線路狀態(tài)寄存器 IN AL,DX MOV DL,'?';顯示'?' MOV AH,02H INT 21H JMP WAIT1 CODE ENDS END START

      MOV AH,4CH;返回操作系統(tǒng)

      五.實驗遇到的問題和解決方法

      問題:當按下一個字符時,屏幕上會顯示兩個字符。其中一個不正確。解決方法:顯示字符時,用6號功能代替2號功能。這樣問題就得到了解決。

      六、課程綜合實驗(搶答器)

      一、實驗目的

      1、了解微機化競賽搶答器的基本原理。

      2、進一步學習使用并行接口。

      二、實驗內(nèi)容

      圖5-4為競賽搶答器(模擬)的原理圖,邏輯開關(guān)K0~K7代表競賽搶答按鈕0~7號,當某個邏輯電平開關(guān)置“1”時,相當某組搶答按鈕按下。在七段數(shù)碼管 上將其組號(0~7)顯示出來,并使喇叭響一下。從鍵盤上按空格鍵開始下一輪搶答,按其它鍵程序退出。

      圖 5-4

      8255動態(tài)分配地址: 控制寄存器: 0C40BH

      A口地址: 0C408H C口地址: 0C40AH

      三.程序流程圖和程序清單

      DATA SEGMENT LIST DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DATA ENDS

      STACK1 SEGMENT STACK DW 100H DUP(0)STACK1 ENDS

      CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX;-------------------MOV DX,0C40BH MOV AL,89H OUT DX,AL;對8255進行初始化 L0: MOV DX,0C40AH IN AL,DX;讀C口狀態(tài) CMP AL,0;如果為0則循環(huán) JZ L0

      MOV BL,0 L1: INC BL SHR AL,1;將AL邏輯右移 JNC L1 DEC BL MOV AL,BL;求出組號

      MOV BX,OFFSET LIST;七段顯示代碼表的首址送BX AND AX,00FFH;屏蔽AX高字節(jié),組號 ADD BX,AX;形成顯示字符的地址 MOV AL,[BX];取出字符送AL MOV DX,0C408H OUT DX,AL;送到A口輸出顯示

      MOV DL,7 MOV AH,2 INT 21H;響鈴功能調(diào)用

      MOV AH,01H INT 21H CMP AL,20H;當為空格時跳到CLOSE JZ CLOSE MOV AH,4CH INT 21H CLOSE: MOV AL,0 MOV DX,0C408H OUT DX,AL JMP L0

      CODE ENDS END START 四.實驗遇到的問題和解決方法

      1.問題:讀取C口狀態(tài)后不知如何將其轉(zhuǎn)換為相應的組號

      解決方法:對AL進行邏輯右移,通過判斷CF是否為1,來計算相應的組號(具體方法見程序)

      2.問題:數(shù)碼管始終顯示‘7’

      解決方法:調(diào)用響鈴程序的位置出現(xiàn)錯誤。通過先進行組號顯示,再調(diào)用響鈴程序,問題得到了解決。

      七、自主設計實驗——LED顯示

      一、實驗內(nèi)容

      1.按圖連接好電路,將8255的A口PA0~PA6分別與七段數(shù)碼管的段碼驅(qū)動輸入端a~g相連,位碼驅(qū)動輸入端S1接+5V(選中),S0、dp接地(關(guān)閉)。編程從鍵盤輸入一位十進制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。

      2.七段數(shù)碼管的字型代碼表如下表:

      二、程序流程圖

      三、實驗源程序 data segment ioport equ 0c400h-0280h io8255a equ ioport+288h io8255b equ ioport+28bh led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh mesg1 db 0dh,0ah,'Input a num(0--9h):',0dh,0ah,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,io8255b

      ;使8255的A口為輸出方式

      mov ax,80h out dx,al sss: mov dx,offset mesg1;顯示提示信息

      mov ah,09h int 21h mov ah,01

      ;從鍵盤接收字符

      int 21h cmp al,'0'

      ;是否小于0 jl exit

      ;若是則退出

      cmp al,'9'

      ;是否大于9 jg exit

      ;若是則退出

      sub al,30h

      ;將所得字符的ASCII碼減30H mov bx,offset led;bx為數(shù)碼表的起始地址

      xlat

      ;求出相應的段碼

      mov dx,io8255a

      ;從8255的A口輸出

      out dx,al jmp sss;轉(zhuǎn)SSS exit: mov ah,4ch

      ;返回DOS int 21h code ends end start

      四、總結(jié)

      通過自主設計實驗,提升了運用已經(jīng)學過的理論知識與實踐的聯(lián)系的能力,復習鞏固了芯片的使用方法。

      八、參考文獻

      1.戴勝華,張凡,盛珣華.微機原理與接口技術(shù)[M].北京:北京交通大學出版社, 2008.2.Barry B.Brey.intel系列微處理器結(jié)構(gòu)、編程和接口技術(shù)大全[M].北京:機械工程出版社,1998.35

      第五篇:微機原理與接口技術(shù) 實驗報告一

      微機原理與接口技術(shù)

      實驗報告一

      姓名

      匡越

      學號

      1715211016

      時間

      地點

      實驗題目

      一、實驗目的1.熟悉Keil軟件使用

      2.熟悉MCS-51指令

      3.學習簡單程序的調(diào)試方法

      二、實驗說明

      通過實驗了解單片機內(nèi)部存儲器的結(jié)構(gòu)和分配及讀寫存儲器的方法,熟悉MCS-51指令同時,學習單片機程序編程、調(diào)試方法。

      三、實驗內(nèi)容及步驟

      1.啟動PC機,打開Keil軟件,軟件設置為模擬調(diào)試狀態(tài)。在所建的項目文件中輸入源程序1,進行編譯,如有錯誤按提示找到該行并糾錯,重新編譯直到通過。

      2.編譯無誤后,打開CPU窗口,選擇單步或跟蹤執(zhí)行方式運行程序,觀察CPU窗口各寄存器的變化并將觀察到的結(jié)果記錄到預習報告。

      3.新建另一個項目輸入源文件2,打開CPU窗口,選擇單步或跟蹤執(zhí)行方式運行程序,觀察存儲塊數(shù)據(jù)變化情況記錄到預習報告。點擊復位按鈕,改變存儲塊數(shù)據(jù),點擊全速執(zhí)行快捷按鈕,點擊暫停按鈕,觀察存儲塊數(shù)據(jù)變化情況,記錄到預習報告。點擊復位按鈕,改變存儲塊數(shù)據(jù),分別LOOP、LOOP1設置斷點,點擊全速執(zhí)行快捷按鈕,在斷點處觀察寄存器及存儲塊數(shù)據(jù)變化情況。

      WAVE軟件使用方法參考其幫助文件。

      四、實驗程序流程框圖、實驗程序

      1、源程序1

      ORG

      0000H

      AJMP

      MAIN

      ORG

      0030H

      MAIN:

      MOV

      R0,#30H;

      (R0)=

      (00H)=

      MOV

      A,#40H;

      (A)=

      MOV

      R6,A;

      (A)=,(R6)=

      MOV

      A,@R0;

      (R0)=

      (A)=

      MOV

      40H,A;

      (A)=

      (40H)=

      MOV

      30H,40H;

      (30H)=

      (40H)=

      MOV

      R1,#40H;

      (R1)=

      MOV

      @R1,#0AAH;(R1)=

      (40H)=

      MOV

      SP,#60H;

      (SP)=

      PUSH

      ACC;

      (SP)=

      (61H)=

      PUSH

      30H;

      (SP)=

      (62H)=

      MOV

      A,#0FFH;

      (SP)=

      (A)=

      MOV

      30H,#30H;

      (SP)=

      (30H)=

      POP

      ACC;

      (SP)=

      (A)=

      POP

      30H;

      (SP)=

      (30H)=

      ADD

      A,30H;

      (30H)=

      (A)=

      Cy=

      SUBB

      A,#10;

      (A)=

      Cy=

      MOV

      R4,#00100100B;

      (R4)=

      H

      MOV

      A,#39H;

      (A)

      =

      ADD

      A,R4;

      (A)

      =

      (R4=)

      DA

      A;

      (A)

      =

      Cy=

      MOV

      28H,#55H;(28H)

      =

      Cy=

      MOV

      C,40H;

      (PSW)

      =

      Cy=

      MOV

      26H,#00H;(26H)

      =

      Cy=

      MOV

      30H,C;

      (30H)

      =

      (26H.1)

      =

      SJMP

      $

      j點擊project,選擇下拉式菜單中的New

      project;

      k選擇所要的單片機,這里我們選擇常用的Ateml

      公司的AT89C51;

      l新建一個File,輸入源程序;

      m將新建文件保存為text.asm的格式;

      n鼠標在屏幕左邊的Source

      Group1

      文件夾圖標上右擊彈出菜單,在這里可以做在項目中增加減少文件等操作。選“Add

      File

      to

      Group

      ‘Source

      Group

      1’”彈出文件窗口,選擇剛剛保存的文件;

      o對程序進行編譯運行;

      使程序一得:

      ORG

      0000H

      AJMP

      MAIN

      ORG

      0030H

      MAIN:

      MOV

      R0,#30H

      ;

      (R0)=

      0x30

      (00H)=

      0x0000

      MOV

      A,#40H

      ;

      (A)=

      0x40

      MOV

      R6,A

      ;

      (A)=

      0x40,(R6)=

      0x40

      MOV

      A,@R0

      ;

      (R0)=

      0x30

      (A)=

      0x16

      MOV

      40H,A

      ;

      (A)=0x16

      (40H)=

      0x0040

      MOV

      30H,40H

      ;

      (30H)=

      0x0030

      (40H)=

      0x0040

      MOV

      R1,#40H

      ;

      (R1)=

      0x40

      MOV

      @R1,#0AAH;(R1)=

      0x40

      (40H)=

      0x0040

      MOV

      SP,#60H;

      (SP)=

      0x60

      PUSH

      ACC;

      (SP)=

      0x61

      (61H)=

      0x0061

      PUSH

      30H;

      (SP)=

      0x62

      (62H)=

      0x0062

      MOV

      A,#0FFH;

      (SP)=

      0x62

      (A)=

      0xff

      MOV

      30H,#30H;

      (SP)=

      0x62

      (30H)=

      0x0030

      POP

      ACC;

      (SP)=

      0x61

      (A)=

      0x16

      POP

      30H;

      (SP)=

      0x60

      (30H)=

      0x0030

      ADD

      A,30H;

      (30H)=

      0x0030

      (A)=

      0x2a

      Cy=

      0

      SUBB

      A,#10;

      (A)=

      0x20

      Cy=

      0

      MOV

      R4,#00100100B;

      (R4)=

      0x24

      H

      MOV

      A,#39H;

      (A)

      =

      0x39

      ADD

      A,R4;

      (A)

      =

      0x5d

      (R4=)

      0x24

      DA

      A;

      (A)

      =

      0x63

      Cy=

      0

      MOV

      28H,#55H;(28H)

      =

      0x0028

      Cy=

      0

      MOV

      C,40H;

      (PSW)

      =

      0x80

      Cy=

      MOV

      26H,#00H;(26H)

      =

      0x0026

      Cy=

      MOV

      30H,C;

      (30H)

      =

      0x0030

      (26H.1)

      =

      0

      SJMP

      $

      2、源程序2

      設(30H)=4,(31H)=1,(32H)=3,(33H)=5,(34H)=2,(35H)=6

      ORG

      0000H

      AJMP

      MAIN

      ORG

      0030H

      MAIN:

      MOV

      R0,#30H;30H→R0

      MOV

      R2,#6;6→R2

      SORT:

      MOV

      A,R0;30H→A

      MOV

      R1,A;30H→R1

      MOV

      A,R2;6→A

      MOV

      R5,A;6→R5

      CLR

      F0;

      狀態(tài)標志位清零

      DEC

      R5;寄存器R5減一

      MOV

      A,@R1;R1→A

      LOOP:

      MOV

      R3,A;A→R3

      INC

      R1

      ;寄存器R1增1

      CLR

      C

      ;進位標志位清零

      MOV

      A,@R1;31H→A

      SUBB

      A,R3;累加器內(nèi)容減去寄存器內(nèi)容

      JNC

      LOOP1;僅為標志位為1,則進行LOOP1

      ;以下代碼完成數(shù)據(jù)交換

      SETB

      F0;狀態(tài)標志位置1

      MOV

      A,@R1;31H→A

      XCH

      A,R3;將A于與R3的數(shù)據(jù)交換

      MOV

      @R1,A;將4賦值給寄存器R1(31H)

      DEC

      R1;寄存器減一

      MOV

      A,R3;1→A

      MOV

      @R1,A;將1賦值給寄存器R1(30H)

      INC

      R1;寄存器R1增一

      LOOP1:

      MOV

      A,@R1;4→A

      DJNZ

      R5,LOOP;寄存器R5減一,不為零則回到LOOP

      JB

      F0,SORT;狀態(tài)標志位為零,則回到SORT

      SJMP

      $

      下載模擬電梯的設計與實現(xiàn)實驗報告(微機原理)word格式文檔
      下載模擬電梯的設計與實現(xiàn)實驗報告(微機原理).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        北京理工大學微機原理實驗報告_8259A

        實驗一8259中斷控制器實驗 一、 實驗內(nèi)容 用單脈沖發(fā)生器的輸出脈沖為中斷源,每按一次產(chǎn)生一次中斷申請,點亮或熄滅發(fā)光二極管。 二,實驗目的 (1)掌握8259的工作原理。 (2)掌握編寫......

        北京郵電大學微機原理與接口技術(shù)硬件實驗報告

        信息與通信工程學院 微機原理與接口技術(shù)硬件實驗報告 班 姓 學 序 級:名:號:號: 日 期: 2015-10-30——2015-12-26 1 目錄 實驗一 I/O地址譯碼 ....................................

        數(shù)碼轉(zhuǎn)換 實驗報告 微機原理[最終定稿]

        實驗九 數(shù)碼轉(zhuǎn)換 一、實驗目的 1、掌握計算機常用數(shù)據(jù)編碼之間的相互轉(zhuǎn)換方法。 2、進一步熟悉DEBUG軟件的使用方法。 二、實驗內(nèi)容 1. ACSII碼轉(zhuǎn)換為非壓縮型BCD碼編寫并......

        微機原理課程設計-電子琴設計

        簡單的電子琴設計 前言 本實驗是利用微機原理試驗箱、8255芯片、8254芯片、鍵盤、揚聲器等硬件設備,設計簡易電子琴。 首先利用了編程程序,編輯了8255芯片控制字, 對其進行初......

        微機原理_多路搶答器設計論文

        課程設計(論文) 課程名稱: 微機原理與接口技術(shù)題目:多路搶答器設計 院 (系): 理學院 專業(yè)班級:電子信息科學與技術(shù)1301 姓名:彭博 學號:131004033 指導教師:張愛萍2016 年 1 月 8 日......

        微機原理與接口技術(shù)試題答案

        微機原理與接口技術(shù)試題答案 一、填空題(20*1) 1、微機系統(tǒng)由(硬件系統(tǒng))和(軟件系統(tǒng))兩部分組成。 2、8086有( 20 )位地址線,存儲器容量為( 1M)B。 3、8086CPU 內(nèi)部組成結(jié)構(gòu)從功能上講,......

        微機原理考試習題與答案

        微機原理及接口技術(shù)習題及練習冊 微機原理課程組 2009年12月 中北大學微機原理及接口技術(shù)習題及練習冊---目錄 目錄 第1章 計算機基礎知識 ....................................

        《微機原理與應用》總結(jié)復習.

        第一章概述 一、個人計算機的構(gòu)成(各組成部分及器件作用、性能指標等 二、計算機基礎知識概念(數(shù)制和編碼、指令和程序、… 三、微型計算機的結(jié)構(gòu)(內(nèi)部和外部結(jié)構(gòu)、工作原理......