久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

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

時間:2019-05-14 13:09:27下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《北京理工大學微機原理實驗報告_8259A》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《北京理工大學微機原理實驗報告_8259A》。

第一篇:北京理工大學微機原理實驗報告_8259A

實驗一8259中斷控制器實驗

一、實驗內容

用單脈沖發生器的輸出脈沖為中斷源,每按一次產生一次中斷申請,點亮或熄滅發光二極管。二,實驗目的

(1)掌握8259的工作原理。

(2)掌握編寫中斷服務程序的方法。(3)掌握初始化中斷向量的方法。三,實驗步驟(1)連線

1.單脈沖發生器輸出P+與8259的IR0相連; 2.8259的片選CS8259與CS0相連; 3.8259的INT與8086的INT相連; 4.8259的INTA與8086的INTA相連; 5.CS273與CS1相連;

6.00與LED0相連,01與LED1相連,依次將CS273接口與LED相連;其它線均已連好如下圖:

DDBUSDD0VccDD1DD2DD3DD4DD5DD6DD7CS825913274LS32VccINTINTAVccIORDIOWRA***2161726D0D1D2D3D4D5D6D7A0CSRDWRSP/ENINTINTA8259IR0IR1IR2IR3IR4IR5IR6IR7***32425IR0IR1IR2IR3IR4IR5IR6IR7CAS0CAS1CAS2121314(2)編輯程序,編譯鏈接后,單步運行,調試程序。

(3)調試通過后,在中斷服務程序的NOP處設置斷點,運行程序,當接收到中斷請求后,程序停在中斷服務程序內的斷點處,觀察寄存器AX的值。四,實驗源程序如下

CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H

;寫ICW1,單片8259A,要寫0CW4 MOV AX,13H

OUT DX,AX MOV DX,4A2H;寫ICW2 MOV AX,80H

;IR0的中斷向量碼為80H OUT DX,AX MOV AX,01

OUT DX,AX;一般嵌套,非緩沖方式,非自動EOI MOV AX,0;寫OCW1 OUT DX,AX;允許中斷

;中斷向量存放在(0000H:0200H)開始的四個單元里 MOV AX,0

MOV DS,AX MOV SI,200H

;中斷類型號為80H MOV AX,OFFSET HINT;中斷服務程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI

;開中斷,設置IF=1 JMP $

;原地跳轉

HINT:

;中斷服務程序 XOR CX,0FFH;CX取反

MOV DX,4B0H;CS273接口的地址,與8個LED燈相連 MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX MOV DX,4A0H;OCW2的地址

MOV AX,20H;一般EOI命令,全嵌套方式 OUT DX,AX IRET;中斷返回

CODE ENDS END START 五,實驗思考題 1. 將P0連線連接到IR1—IR7任意一個;重新編寫程序。

將P0接到了IR1,在原程序的基礎上,把寫ICW2的控制字改為81H,再把中斷向量的入口地址改為0204H即可。程序如下:

CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H

;寫ICW1,單片8259A,要寫ocw4 MOV AX,13H

OUT DX,AX MOV DX,4A2H;寫ICW2 MOV AX,81H

;IR1的中斷向量碼為81H OUT DX,AX MOV AX,01

OUT DX,AX;一般嵌套,非緩沖方式,非自動EOI MOV AX,0;寫OCW1 OUT DX,AX;允許中斷

;中斷向量存放在(0000H:0204H)開始的四個單元里 MOV AX,0

MOV DS,AX MOV SI,204H

;中斷類型號為81H MOV AX,OFFSET HINT;中斷服務程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI

;開中斷,設置IF=1 JMP $

;原地跳轉

HINT:

;中斷服務程序

XOR CX,0FFH;CX取反

MOV DX,4B0H;CS273的地址

MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX

MOV DX,4A0H;OCW2的地址

MOV AX,20H;一般EOI命令,全嵌套方式 OUT DX,AX IRET;中斷返回 CODE ENDS END START 實驗現象:運行程序,觸發脈沖發生器產生中斷請求,相應二極管點亮。2. 設置OCW1,屏蔽某個中斷請求,運行程序觀察現象。

將IR0重新接入LED0,設置OCW1為01H,屏蔽中斷IR0,則IR0的中斷無法得到響應。程序如下:

CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H

;ICW1的地址,寫初始化命令字ICW1 MOV AX,13H;上升沿觸發,單片8259,要寫ICW4 OUT DX,AX MOV DX,4A2H;ICW2的地址,寫中斷向量碼ICW2 MOV AX,80H

;IR0的中斷向量碼為80H OUT DX,AX MOV AX,01

;寫中斷結束控制字ICW4 OUT DX,AX;一般嵌套,非緩沖方式,非自動EOI MOV AX,01H

;寫中斷屏蔽字OCW1 OUT DX,AX;屏蔽IR0中斷

;中斷向量存放在(0000H:0200H)開始的四個單元里 MOV AX,0

MOV DS,AX MOV SI,200H

;中斷類型號為80H MOV AX,OFFSET HINT;中斷服務程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI

;開中斷,設置IF=1 JMP $

;原地跳轉

HINT:

;中斷服務程序

XOR CX,0FFH;CX取反

MOV DX,4B0H;CS273的地址

MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX

MOV DX,4A0H;OCW2的地址

MOV AX,20H;一般EOI命令,全嵌套方式 OUT DX,AX IRET

;中斷返回

CODE ENDS END START 實驗現象:

每按單脈沖發生器一次產生一次中斷申請,但連接的發光二極管一直不亮。3.設置OCW2,了解中斷結束方式與設置優先權。將IR0和IR1都連接到P+上,分別連接LED0和LED1到00和01。OCW2將 E0OCW2一般EOI命令,將IR0設置為最低中斷優先級。程序如下:

CODE

SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H

;ICW1的地址 MOV AX,13H

;上升沿觸發,單片8259,要寫ICW4 OUT DX,AX MOV DX,4A2H;ICW2的地址 MOV AX,80H;中斷向量碼為80H,低3位自動寫入 OUT DX,AX MOV AX,01

;寫ICW4 OUT DX,AX;一般嵌套,非緩沖方式,非自動EOI MOV AX,0

;寫OCW1 OUT DX,AX;允許所有中斷

;IR0的中斷向量存放在(0000H:0200H)開始的四個單元里 MOV

AX,0

MOV

DS,AX MOV

SI,200H MOV

AX,OFFSET HINT1 MOV

DS:[SI],AX ADD

SI,2 MOV

AX,CS MOV

DS:[SI],AX STI

;開中斷,設置IF=1;IR1的中斷向量存放在(0000H:0204H)開始的四個單元里 MOV

AX,0

MOV

DS,AX MOV

SI,204H MOV

AX,OFFSET HINT2 MOV

DS:[SI],AX ADD SI,2 MOV

AX,CS MOV

DS:[SI],AX JMP $

;原地跳轉

HINT1:;中斷服務程序1 XOR CX,0F0H;CX高4位取反 MOV DX,4B0H;CS273的地址

MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX MOV DX,4A0H;OCW2的地址

MOV AX,E0H;一般EOI命令,IR0優先級最低 OUT DX,AX IRET

;中斷返回

HINT2:

;中斷服務程序2 XOR CX,00FH;CX低4位取反 MOV DX,4B0H;CS273的地址

MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX MOV DX,4A0H;OCW2的地址

MOV AX,E0H;一般EOI命令,IR0優先級最低 OUT DX,AX IRET

;中斷返回 CODE ENDS END START 實驗現象:CS273的00與LED0相連,01與LED1相連,02與LED2相連,依次下去,直至07與LED7相連。每按單脈沖發生器一次產生一次中斷申請,由于IR0的優先級比IR1低,故先響應IR1,后響應IR0,觀察到低4位的LED燈先點亮或熄滅,高4位的LED燈后點亮或熄滅。六,實驗心得

實驗讓我對8259A的內部寄存器的功能有了更深的認識,掌握了8259A的初始化步驟及其工作方式的選擇,以及中斷服務程序的編寫。使用實驗箱和編譯軟件,使我們在編程和動手操作方面都有了很大的提高,軟硬件的結合,使我們更加透徹的理解了所學知識。

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

微機原理及應用實驗報告

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

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

實驗題目:8253可編程定時器計數器

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

連接電路圖

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

程序清單:

;*************************;;* 8253方式0計數器實驗 *;;*************************;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

;送計數初值為0FH

MOV

AL,0FH

OUT

DX,AL

LLL: IN

AL,DX

;讀計數初值

CALL

DISP

;調顯示子程序

PUSH

DX

MOV

AH,06H

MOV

DL,0FFH

INT

21H

POP

DX

JZ

LLL

;跳轉到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 運行結果:

每輸入一個單脈沖,屏幕上的數值減1,從15減到0后(撥動16次后),檢測到OUT0輸出由低電平變為高電平。小結(體會與收獲):

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

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

微機實驗報告書(Ⅱ)

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

實驗題目:1.8253可編程定時器計數器

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

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

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

實驗步驟: 實驗一:

連接電路圖

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

連接電路圖

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

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

連接電路圖

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

實驗二:

實驗三:

程序清單: 實驗一:

;*******************;* 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

;寫入循環計數初值1000

MOV

DX,IO8253B

OUT

DX,AL

;先寫入低字節

MOV

AL,AH

OUT

DX,AL

;后寫入高字節

MOV

DX,IO8253A

MOV

AL,76H

;設工作方式

OUT

DX,AL

MOV

AX,1000

;寫入循環計數初值1000

MOV

DX,IO8253C

OUT

DX,AL

;先寫低字節

MOV

AL,AH

OUT

DX,AL

;后寫高字節

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;若無,則繼續 C 輸入,A 輸出

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

INT 21H CODE ENDS END START 實驗三:

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

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為數碼表的起始地址

XLAT

;求出相應的段碼

MOV

DX,IO8255A

;從 8255 的A口輸出

OUT

DX,AL

JMP

SSS

;轉 SSS EXIT:

MOV

AH,4CH

;返回

INT

21H CODE

ENDS

END

START;

運行結果: 實驗一:

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

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

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

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

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

微機實驗報告書(Ⅲ)

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

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

2.掌握控制步進電機轉動的編程方法

實驗步驟:

連接電路圖

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

2)編程:當K0~K6中某一開關為“1”(向上撥)時步進電機啟動。K7向上撥電機正轉,向下撥電機反轉。程序框圖:

程序清單:

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

步進電機

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

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

;輸入開關狀態

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 運行結果:

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

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

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

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

實驗報告

COURSE PAPER 8255控制開關狀態顯示

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

一、實驗目的;

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

二、實驗要求;

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

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

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

三、實驗說明;

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

四、實驗步驟;(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端口作為輸入口,連接四位開關;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)實驗結果

五、實驗心得;

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

第四篇:數碼轉換 實驗報告 微機原理

實驗九

數碼轉換

一、實驗目的

1、掌握計算機常用數據編碼之間的相互轉換方法。

2、進一步熟悉DEBUG軟件的使用方法。

二、實驗內容

1.ACSII碼轉換為非壓縮型BCD碼

編寫并調試正確的匯編語言源程序,使之實現:設從鍵盤輸入一串十進制數,存入DATA1單元中,按回車停止鍵盤輸入。將其轉換成非壓縮型(非組合型)BCD碼后,再存入DATA2開始的單元中。若輸入的不是十進制數,則相應單元中存放FFH。調試程序,用D命令檢查執行結果。

2.BCD碼轉換為二進制碼

編寫并調試正確的匯編語言源程序,使之將一個16位存儲單元中存放的4位BCD碼DATA1,轉換成二進制數存入DATA2字單元中。調試程序,用D命令檢查執行結果。3.十六進制數轉換為ASCII碼

編寫并調試正確的匯編語言源程序,使之將內存DATA1字單元中存放的4位十六進制數,轉換為ASCⅡ碼后分別存入DATA2為起始地址的4個單元中,低位數存在低地址的字節中,并在屏幕上顯示出來。

三、實驗預習

1.復習材料中有關計算機數據編碼部分的內容。2.按要求編寫程序。

四、實驗步驟

1.編輯源文件,經匯編連接產生EXE文件。2.用DEBUG調試、檢查、修改程序。

五、實驗內容

1.ACSII碼轉換為非壓縮型BCD碼 STACK SEGMENT PARA STACK 'STACK'

DB 256 DUP(?)

;為堆棧段留出256個字節單位

STACK ENDS DATA SEGMENT PARA 'DATA';定義數據段

DATA1 DB 32

;緩沖區最大長度

DB ? DB 32 DUP(?)DATA2 DB 32 DUP(?)DATA ENDS CODE SEGMENT

;定義代碼段 ASSUME SS:STACK ASSUME CS:CODE ASSUME DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,DATA1

;規定:DX存放輸入字符串的緩沖區首地址 MOV AH,0AH INT 21H

;字符串輸入 AL=鍵入的ASCII碼 LEA SI,DATA1 LEA DI,DATA2 INC SI MOV CL,[SI] INC SI LP1: MOV AL,[SI] SUB AL,30H CMP AL,0 JL LP2 CMP AL,9 JG LP2 MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL JMP LP1 LP2: MOV AL,0FFH MOV BL,AL MOV [DI],BL INC DI INC SI DEC CL CL=CL-1 JNZ LP1 LP3: MOV AH,4CH INT 21H CODE ENDS END START

;DI存放DATA2首地址

;取輸入字符串長度

;指向第一個輸入字符

;輸入的字符存為ASCII碼,將其轉換成十進制數

;若AL<0(AL-0<0),跳轉到LP2

;若AL>9(AL-9>0),跳轉到LP2

;將AL->BL

;將結果存到DATA2開始的單元中

;若輸入的不是十進制數,在相應的單元存放FFH

;以字母開頭的十六進制數前面需加'0'

;將AL->BL

;CL=0,執行LP3中的語句

2.BCD碼轉換為二進制碼

DATA

SEGMENT

DATA1 DW 2497H

DATA2 DW ?

DATA

ENDS

CODE

SEGMENT

ASSUME SS:STACK,CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX

XOR BX,BX

;累加單元清0(BX=0)

MOV SI,0AH

;設置乘數10

MOV CL,4

;指4位BCD碼

MOV CH,3

;循環次數=3 MOV AX,DATA1

;取十進制數

LP:

ROL AX,CL

;取數字

MOV DI,AX

;保存當前AX值

AND AX,0FH

;屏蔽高位

ADD AX,BX

;累加

MUL SI

MOV BX,AX

MOV AX,DI

DEC CH

;循環次數減1

JNZ LP

;以上完成循環三次

ROL AX,CL

;取個位數字

AND AX,0FH

;屏蔽高位

ADD AX,BX

;進行累加,直接將最后的累加結果放到AX中

MOV DATA2,AX

MOV AH,4CH

INT 21H

CODE

ENDS

END START

3.十六進制數轉換為ACSII碼 STACK

SEGMENT

DB 256 DUP(?)

STACK

ENDS

DATA

SEGMENT

DATA1 DB 24H,06DH

DATA2 DB 4 DUP(?)

;存放ASCII碼

JUMP DB 4 DUP(?)

;4位十六進制數分別存放在DATA3的4個字節中

DATA ENDS

CODE

SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE

START:

MOV AX,DATA

MOV DS,AX

LEA SI,DATA1

LEA DI,JUMP

MOV CL,2

;循環2次,取兩次兩位十六進制數

LP0:

MOV AL,[SI]

;取2位十六進制數

AND AL,0F0H

;低四位為零

ROR AL,4

;右移4位

相當于除以16

MOV [DI],AL

;高位數存放在高地址字節中

INC DI

MOV AL,[SI]

;取2位十六進制數

AND AL,0FH

;高四位為零

MOV [DI],AL

;低位數存放在低地址字節中

INC SI

INC DI

DEC CL

JNZ LP0

LEA SI,JUMP

LEA DI,DATA2

MOV CL,4

LP1:

MOV AL,[SI]

CMP AL,9

JG LP3

ADD AL,30H

JMP LP3

LP2:

ADD AL,37H

LP3:

MOV [DI],AL

INC DI

INC SI

DEC CL

JNZ LP1

MOV AH,09H

INT 21H

MOV DX,OFFSET DATA2

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE

ENDS

END START

;SI=JUMP的首地址偏移量

;DI=DATA2的首地址偏移量

;因為是四位十六進制數,所以設置為循環4次

;取JUMP中的十六進制數

;若AL>9(AL-9>0),跳轉到LP3

;0~9H+30H=ASCII

;A~FH+30H=ASCII

;將ASCII碼依次存入DATA2中

六、實驗習題與思考

1.編程實現:從鍵盤上輸入兩位十六進制數,轉換成十進制數后顯示在屏幕上。STACK SEGMENT

DB

256 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DB

5,?,2 DUP(?)

DATA2 DB

DUP(?)

DATA3 DB

DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME

SS:STACK,DS:DATA,CS:CODE

START:MOV

AX,DATA

MOV

DS,AX

LEA

DX,DATA1

MOV

AH,0AH

INT

21H

;輸入字符串

LEA

SI,DATA1+2

LEA

DI,DATA2

MOV

CL,2

;將ASC碼轉換為十六進制數

LP1: MOV

AL,[SI]

SUB

AL,30H

CMP

AL,9

JA

LP2

MOV

[DI],AL

INC

DI

INC

SI

DEC

CL

JZ

LP3

JNZ

LP1

LP2: SUB

AL,7

MOV

[DI],AL

INC

DI

INC

SI

DEC

CL

JNZ

LP1

;將十六進制數轉換成十進制數,并保存

LP3: LEA

DI,DATA2

MOV

AL,[DI]

MOV

BL,[DI+1]

MOV

CL,4

SHL

AL,CL

ADD

AL,BL

MOV

[DI],AL

LEA

SI,DATA3

XOR

AH,AH

MOV

CL,100

DIV

CL

;AH=AX%100,AL=AX/100

MOV

[SI],AL

;保存百位數

MOV

AL,AH

XOR

AH,AH

MOV

CL,10

DIV

CL

MOV

[SI+1],AL

;保存十位數

MOV

[SI+2],AH

;保存個位數

;屏幕顯示十進制數

LP4: MOV

DL,[SI]

;取百位數送顯

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

DL,[SI+1]

;取十位數送顯

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

DL,[SI+2]

;取個位數送顯

OR

DL,30H

MOV

AH,02H

INT

21H

MOV

AH,4CH

INT

21H

CODE ENDS

END

START

2.十進制數轉換為七段碼。

為了在七段顯示器上顯示十進制數,需要把十進制數轉換為七段代碼。轉換可采用查表法。設需要轉換的十進制數已存放在起始地址為DATA1區域中,七段代碼轉換表存放在起始地址為TABLE表中,轉換結果存放到起始地址為DATA2區域。若待轉換的數不是十進制數,則相應結果單元內容為00H。

STACK SEGMENT

DB

256 DUP(?)

STACK ENDS

DATA SEGMENT

DATA1 DB

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,'A','B','C','$'

TABLE DB

00H,40H,01H,79H,02H,24H,03H,30H,04H,19H,05H,12H,06H,02H, 07H,78H,08H,00H,09H,18H,0AH,08H,0BH,03H,0CH,46H,0DH,21H,0EH,06H,0FH,0EH

;實際數據定義必須在同一行

DATA2 DB

DUP(0)

COUNT EQU

DATA ENDS CODE SEGMENT

ASSUME SS:STACK,DS:DATA,CS:CODE

START: MOV

AX,DATA

MOV

DS,AX

LEA

SI,DATA1

LEA

BX,DATA2

LEA

DI,TABLE

XOR

AH,AH

LP1: MOV

AL,[SI]

;外循環DATA1指向下一個

INC

SI

MOV

CX,16

;內循環TABLE 16次

LP2: CMP

[DI],AL

JE

LP3

ADD

DI,COUNT

;內循環TABLE指向下一組

DEC

CX

JNZ

LP2

MOV

BYTE PTR[BX],00H 若不是十進制數,則結果保存為00H

INC

BX

CMP

AL,'$'

;設置結束標志

JNZ

LP1

JZ

LP4

LP3: MOV

AL,[DI+1]

MOV

[BX],AL

;轉換結果保存在DATA2中

INC

BX

LEA

DI,TABLE

CMP

CL,0

JNZ

LP1

LP4: MOV

AH,4CH

INT

21H

CODE ENDS

END START

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

微機原理

實 驗 報 告

隋偉 08212013 自動化0801

目 錄

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

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

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

四、模/數轉換器…………………………………………………………18

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

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

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

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

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

一.實驗目的

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

二.實驗內容

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

十字路口交通燈的變化規律要求:

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

8255動態分配地址: 控制寄存器: 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

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

;-----------延時函數------------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繼續循環

CODE ENDS END START

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

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

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

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

一、實驗目的

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

二、實驗內容

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

圖 5-1

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

圖5-2 三.實驗原理

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

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

計數器0地址: 0C400H 計數器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;計數器初值,不大于0FH DB 0AH,0DH,'$';換行

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

;計數器0,低字節,方式0,二進制計數;寫入控制字

OUT DX,AL;寫入計數初值 MOV CL,N;計數器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,則繼續到L0循環;更改CL值

;讀取當前數值

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

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

CMP CL,0 JNL L0;CL不小于0時,繼續循環

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

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;寫計數器0控制字 OUT DX,AL MOV AX,1000;寫計數器0初值 MOV DX,0C400H OUT DX,AL;先寫低字節后寫高字節 MOV AL,AH OUT DX,AL;----------------MOV AL,76H MOV DX,0C403H OUT DX,AL;寫計數器1控制字 MOV AX,1000;寫計數器0初值 MOV DX,0C401H OUT DX,AL MOV AL,AH;先寫低字節后寫高字節 OUT DX,AL CODE ENDS END START

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

解決方法:進行TD調試,發現邏輯上出現了問題。修改程序,通過利用CMP AL,CL

JNZ L0來實現將所有的計數值都顯示出來。

三、中斷實驗(純DOS)

一、實驗目的

1、掌握PC機中斷處理系統的基本原理。

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

二、實驗原理與內容

1、實驗原理

PC機用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理。中斷控制器用于接收外部的中斷請求信號,經過優先級判別等處理后向CPU發出可屏蔽中斷請求。IBMPC、PC/XT機內有一片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總線插座中可以引出,系統已設定中斷請求信號為“邊沿觸發”,普通結束方式。對于PC/AT及286以上微機內又擴展了一片8259中斷控制,IRQ2用于兩片8259之間級連,對外可以提供16個中斷源:

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

IRQ8 070H 實時時鐘

IRQ9 071H 用戶中斷

IRQ10 072H 保留

IRQ11 O73H 保留

IRQ12 074H 保留

IRQ13 075H 協處理器

IRQ14 076H 硬盤

IRQ15 077H 保留

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

2、實驗內容

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

三、編程提示

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

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

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

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

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

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起始地址,每臺微機可能都不同,編程時需要了解當前的微機使用哪段并進行設置,獲取方法請參看本書結尾部分的介紹。(也可使用自動獲取資源分配的程序取得),+68H的偏移是關于中斷使能的寄存器地址,設置含義如下:

程序退出前還要關閉9054的中斷,代碼如下:

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

in ax,dx

and ax,0f7ffh out dx,ax

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

MOV AL,20H OUT 20H,AL

中斷結束返回DOS時應將IMR對應位置1,以關閉中斷。

四、參考流程圖

五、參考程序 程序名: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;中斷計數

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口,關閉中斷

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

四、模/數轉換器

一、實驗目的

了解模/數轉換的基本原理,掌握ADC0809的使用方法。

二、實驗內容

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

啟動IN0開始轉換: Out 0298 0 讀取轉換結果: In 0298

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

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

三、實驗提示

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

2、IN0單極性輸入電壓與轉換后數字的關系為:

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

3、一次A/D轉換的程序可以為

MOV DX,口地址

OUT DX,AL ;啟動轉換

;延時

IN AL,DX ;讀取轉換結果放在AL中

四、參考流程圖

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

start:mov dx,io0809a;啟動A/D轉換器

out dx,al

mov cx,0ffh;延時

delay:loop delay

in al,dx;從A/D轉換器輸入數據

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

shr al,cl;將AL右移四位

call disp;調顯示子程序顯示其高四位

mov al,bl and al,0fh

call disp;調顯示子程序顯示其低四位

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;若沒有轉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機串行口的基本連接方法

二、實驗內容

1、PC機RS-232串口自發自收。

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

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

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

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

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

幀 Dn?D0 D1 數據位 起 空閑位 始 位 奇 偶 校驗位 停 止 位 空閑位

2)8250各部分功能說明

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

四.程序清單 1.自發自收

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;八位數據,1停止,無校驗 MOV DX,3FBH;線路控制REG OUT DX,AL MOV AL,0;屏蔽全部中斷 MOV DX,3F9H

OUT DX,AL WAIT1: MOV DX,3FDH;讀線路狀態寄存器

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;判斷發送端是否空 JZ WAIT1 MOV DL,0FFH;六號功能調用讀入待發送數據 MOV AH,06H INT 21H JZ WAIT1 MOV DX,3F8H;寫發送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;讀數據接收寄存器

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

IN AL,DX MOV DL,'?';對于錯誤顯示'?" MOV AH,02H INT 21H JMP WAIT1 2.雙機通信(1)發送端: 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;寫入除數低字節 MOV AL,AH INC DX OUT DX,AL;寫入除數高字節 MOV AL,0AH;7位數據,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

寫中斷允許寄存器,屏蔽所有中斷讀線路狀態寄存器 出錯否 接收數據就緒否 發送 發送寄存器空否,不空,返回等待 讀鍵盤 是'!'? 是,返回操作系統

不是,則發送 返回等待 出錯則清除線路狀態寄存器 顯示'?' 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

寫除數 寫入除數低字節 寫入除數高字節 寫入線路控制寄存器 寫入Modem控制寄存器 寫中斷允許寄存器,屏蔽所有中斷讀線路狀態寄存器 出錯否 接收數據就緒否 轉接收 發送寄存器空否,不空,返回等待 均返回等待 讀接收數據 27

AND AL,01111111B;保留位數據 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;出錯則清除線路狀態寄存器 IN AL,DX MOV DL,'?';顯示'?' MOV AH,02H INT 21H JMP WAIT1 CODE ENDS END START

MOV AH,4CH;返回操作系統

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

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

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

一、實驗目的

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

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

二、實驗內容

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

圖 5-4

8255動態分配地址: 控制寄存器: 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口狀態 CMP AL,0;如果為0則循環 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高字節,組號 ADD BX,AX;形成顯示字符的地址 MOV AL,[BX];取出字符送AL MOV DX,0C408H OUT DX,AL;送到A口輸出顯示

MOV DL,7 MOV AH,2 INT 21H;響鈴功能調用

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口狀態后不知如何將其轉換為相應的組號

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

2.問題:數碼管始終顯示‘7’

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

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

一、實驗內容

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

2.七段數碼管的字型代碼表如下表:

二、程序流程圖

三、實驗源程序 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為數碼表的起始地址

xlat

;求出相應的段碼

mov dx,io8255a

;從8255的A口輸出

out dx,al jmp sss;轉SSS exit: mov ah,4ch

;返回DOS int 21h code ends end start

四、總結

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

八、參考文獻

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

下載北京理工大學微機原理實驗報告_8259Aword格式文檔
下載北京理工大學微機原理實驗報告_8259A.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


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

相關范文推薦

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

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

    微機實驗報告

    自動化 學院 物聯網 專業 1 班 學號姓名 協作者 教師評定 實驗一 操作訓練及數碼轉換實驗 一、實驗目的 1)掌握80x86微機原理及接口技術教學實驗系統的操作,熟悉Wmd86聯級集成......

    微機實驗報告

    微機實驗報告 曾東明 實驗一 輸出字符‘A’ 一、實驗目的 1.通過這個簡單的例子熟悉在微機上建立、匯編、鏈接和運行8086/8088匯編語言程序的過程。 2.掌握字符的顯示方法。 3......

    微機原理實驗報告封面[樣例5]

    重 重 慶 交 通 大 學 學 學 學 生 實 驗 報 告 實驗課程名稱 開課實驗室 學院年級 專業班 學 學 生 姓 名學號 開 開 課 時 間 至 學年第 學期總 總 成 績教師簽名批改日......

    微機原理與接口技術 實驗報告一

    評閱微機原理與接口技術實驗報告一姓名匡越學號1715211016時間地點實驗題目一、實驗目的1.熟悉Keil軟件使用2.熟悉MCS-51指令3.學習簡單程序的調試方法二、實驗說明通過實驗......

    微機實驗報告要求

    實驗報告的撰寫要求 一、封面(統一要求) 二、報告內容: ① 題目 ② 程序框圖 ③ 硬件原理圖(在做硬件實驗時需此步驟) ④ 源程序(左邊為實驗前預習的源程序,右邊為實驗后調試正確......

    微機組裝實驗報告

    微機組裝實驗報告 一、實驗內容 1、了解計算機的硬件系統 2、在規定的時間內完成一臺計算機的完全拆卸并且完全還原的組裝拆卸訓練 二、實驗目的 1、熟悉計算機的基本配置及......

    太原理工大學微機原理與接口技術課程設計

    微機原理課程設計 學校: 學院: 設計題目: 專業班級: 姓名: 學號:太原理工大學 信息工程學院 國際象棋棋盤繪制程序一.課程設計的題目:國際象棋棋盤繪制程序 二.程序功能簡述 本程......

主站蜘蛛池模板: 野外亲子乱子伦视频丶| 欧美、另类亚洲日本一区二区| 看成年全黄大色黄大片| 非洲黑人性xxxx精品| 亚欧成a人无码精品va片| 亚洲国产2021精品无码| 女人另类牲交zozozo| 欧美成人精品三级一二三在线观看| 国产二区交换配乱婬| 久久国产精品久久喷水| 极品粉嫩嫩模大尺度无码视频| 97国产露脸精品国产麻豆| 成人区精品一区二区不卡av免费| 亚洲欧洲国产码专区在线观看| 国产精品久久久久久婷婷| 国产成年女人特黄特色毛片免| 亚无码乱人伦一区二区| 久热在线中文字幕色999舞| 久久精品无码一区二区三区不卡| 中文字幕亚洲制服在线看| 人人妻人人爽人人添夜夜欢视频| 无码专区一ⅴa亚洲v专区在线| 亚洲欧美成人一区二区在线| 国产成年无码v片在线| 亚洲亚洲人成综合网络| 四虎影视国产精品久久| 自偷自拍亚洲综合精品| 久久国产免费观看精品3| 97影院理论片手机在线观看| 亚洲欧美精品综合一区| 久久人午夜亚洲精品无码区| 国产一本一道久久香蕉| 中文无码一区二区三区在线观看| 亚洲精品一区| 久久久无码精品亚洲a片0000| 又色又爽又黄18禁美女裸身无遮挡| 人人爽久久涩噜噜噜丁香| 欧美成人精品第一区| 伊人久久大香线蕉av一区| 国产精品久久久久久久久久免费| 亚洲成a人片在线观看无码下载|