第一篇:微機(jī)原理實(shí)驗(yàn)報(bào)告封面
重 重 慶 交 通 大 學(xué) 學(xué)
學(xué) 學(xué) 生 實(shí) 驗(yàn) 報(bào) 告
實(shí)驗(yàn)課程名稱
開課實(shí)驗(yàn)室
學(xué)院
年級(jí)
專業(yè)班
學(xué) 學(xué) 生 姓 名
學(xué)
號(hào)
開 開 課 時(shí) 間
至
學(xué)年第 學(xué)期
總 總 成 績
教師簽名
批改日期
第二篇:北京科技大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告
微機(jī)原理及應(yīng)用實(shí)驗(yàn)報(bào)告
學(xué)院: 班級(jí): 學(xué)號(hào): 姓名:
微機(jī)實(shí)驗(yàn)報(bào)告書(Ⅰ)學(xué)號(hào):姓名:班級(jí): 同組名單:實(shí)驗(yàn)日期:
實(shí)驗(yàn)題目:8253可編程定時(shí)器計(jì)數(shù)器
實(shí)驗(yàn)?zāi)繕?biāo):掌握8253的基本工作原理和編程方法 實(shí)驗(yàn)步驟:
連接電路圖
如圖虛線連接電路,將計(jì)數(shù)器0設(shè)置為方式0,計(jì)數(shù)器初值為N(N<=0FH),用手動(dòng)逐個(gè)輸入單脈沖,編程使計(jì)數(shù)值在屏幕上顯示,并同時(shí)用邏輯筆觀察OUT0電平變化(當(dāng)輸入N+1個(gè)脈沖后OUT0變高電平)。程序框圖:
程序清單:
;*************************;;* 8253方式0計(jì)數(shù)器實(shí)驗(yàn) *;;*************************;IOPORT
EQU
0C800H-0280H
IO8253A EQU
IOPORT+283H
IO8253B EQU
IOPORT+280H
CODE SEGMENT
ASSUME
CS:CODE
START: MOV
AL,00010000B
;設(shè)置8253工作方式
MOV
DX,IO8253A
OUT
DX,AL
MOV
DX,IO8253B
;送計(jì)數(shù)初值為0FH
MOV
AL,0FH
OUT
DX,AL
LLL: IN
AL,DX
;讀計(jì)數(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 運(yùn)行結(jié)果:
每輸入一個(gè)單脈沖,屏幕上的數(shù)值減1,從15減到0后(撥動(dòng)16次后),檢測到OUT0輸出由低電平變?yōu)楦唠娖?。小結(jié)(體會(huì)與收獲):
通過預(yù)習(xí)和實(shí)驗(yàn),學(xué)會(huì)了 8253 芯片和微機(jī)接口原理和方法,掌握 8253 定時(shí)器/計(jì)數(shù)器的基本工作原理、工作方式和編程原理,熟悉了匯編代碼的編寫。實(shí)驗(yàn)中,連接電路,利用代碼控制實(shí)驗(yàn)電路,深對(duì)了課本理論的理解。
由于是第一次實(shí)驗(yàn),進(jìn)程比較緩慢,所以僅進(jìn)行了8253可編程定時(shí)器/計(jì)數(shù)器的一個(gè)實(shí)驗(yàn),下次實(shí)驗(yàn)會(huì)熟練一些。
微機(jī)實(shí)驗(yàn)報(bào)告書(Ⅱ)
學(xué)號(hào):姓名:班級(jí): 同組名單:實(shí)驗(yàn)日期:
實(shí)驗(yàn)題目:1.8253可編程定時(shí)器計(jì)數(shù)器
2.8255可編程并行接口(方式0)3.七段數(shù)碼管
實(shí)驗(yàn)?zāi)繕?biāo):1.掌握8253的基本工作原理和編程方法
2.掌握8255方式0的工作原理及使用方法 3.掌握數(shù)碼管顯示數(shù)字的原理
實(shí)驗(yàn)步驟: 實(shí)驗(yàn)一:
連接電路圖
按上圖連接電路,將計(jì)數(shù)器0、計(jì)數(shù)器1分別設(shè)置為方式3,計(jì)數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)。實(shí)驗(yàn)二:
連接電路圖
1)實(shí)驗(yàn)電路如圖,8255C口接邏輯電平開關(guān)K0~K7,A口接LED顯示電路L0~L7。
2)編程從8255C口輸入數(shù)據(jù),再從A口輸出。實(shí)驗(yàn)三:
連接電路圖
靜態(tài)顯示:按圖連接好電路,將8255的A口PA0~PA6分別與七段數(shù)碼管的段碼驅(qū)動(dòng)輸入端a~g相連,位碼驅(qū)動(dòng)輸入端S1接+5V(選中), S0、dp接地(關(guān)閉)。編程從鍵盤輸入一位十進(jìn)制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。程序框圖: 實(shí)驗(yàn)一:
實(shí)驗(yàn)二:
實(shí)驗(yàn)三:
程序清單: 實(shí)驗(yàn)一:
;*******************;* 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)計(jì)數(shù)初值1000
MOV
DX,IO8253B
OUT
DX,AL
;先寫入低字節(jié)
MOV
AL,AH
OUT
DX,AL
;后寫入高字節(jié)
MOV
DX,IO8253A
MOV
AL,76H
;設(shè)工作方式
OUT
DX,AL
MOV
AX,1000
;寫入循環(huán)計(jì)數(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
實(shí)驗(yàn)二:
;*************************;;* 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;對(duì) 8255 進(jìn)行設(shè)定,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í)驗(yàn)三:
;************************************;;*鍵盤輸入數(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
;求出相應(yīng)的段碼
MOV
DX,IO8255A
;從 8255 的A口輸出
OUT
DX,AL
JMP
SSS
;轉(zhuǎn) SSS EXIT:
MOV
AH,4CH
;返回
INT
21H CODE
ENDS
END
START;
運(yùn)行結(jié)果: 實(shí)驗(yàn)一:
8253通道0和通道1均工作在方式3,計(jì)數(shù)初值均為1000。通道0的時(shí)鐘輸入為1MHz標(biāo)準(zhǔn)脈沖,產(chǎn)生1000Hz的方波;通道1以通道0輸出的1000Hz方波脈沖為輸入,產(chǎn)生1Hz的方波。用邏輯筆發(fā)現(xiàn),OUT1 輸出電平呈規(guī)律性高低變化(顯示燈閃爍),時(shí)間間隔為 1s,說明輸出頻率為 1Hz,實(shí)現(xiàn)計(jì)時(shí)器功能。實(shí)驗(yàn)二:
當(dāng)邏輯開關(guān)K0~K7中的一個(gè)或幾個(gè)打開時(shí),對(duì)應(yīng)的LED燈就會(huì)亮起來,即利用8255A實(shí)現(xiàn)了基本的輸入輸出控制。實(shí)驗(yàn)三:
靜態(tài)顯示:當(dāng)從鍵盤輸入0~9任一數(shù)字時(shí),七段數(shù)碼管上便 會(huì)顯示相應(yīng)的數(shù)字,按下其他按鍵則退出程序。小結(jié)(體會(huì)和收獲):
通過本次實(shí)驗(yàn),進(jìn)一步了解了8253可編程定時(shí)器/計(jì)數(shù)器;鞏固了可編程并行接口8255的基本知識(shí)點(diǎn),了解了該芯片的應(yīng)用。通過編程實(shí)現(xiàn),熟悉了8255方式控制字,了解了方式0和基本工作原理。通過這三次實(shí)驗(yàn)的學(xué)習(xí),對(duì)于可編程接口芯片有了更深的認(rèn)識(shí),掌握了基本的微機(jī)接口方法。
在實(shí)驗(yàn)過程中要細(xì)心,當(dāng)編譯、鏈接或者運(yùn)行的時(shí)候遇到錯(cuò)誤的時(shí)候,要仔細(xì)檢查程序的輸入是否正確,很容易輸錯(cuò)字母數(shù)字。
微機(jī)實(shí)驗(yàn)報(bào)告書(Ⅲ)
學(xué)號(hào):姓名:班級(jí): 同組名單:實(shí)驗(yàn)日期: 實(shí)驗(yàn)題目:步進(jìn)電機(jī)控制實(shí)驗(yàn)
實(shí)驗(yàn)?zāi)繕?biāo):1.了解步進(jìn)電機(jī)控制的基本原理
2.掌握控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的編程方法
實(shí)驗(yàn)步驟:
連接電路圖
1)按圖14連接線路,利用8255輸出脈沖序列,開關(guān)K0~K6控制步進(jìn)電機(jī)轉(zhuǎn)速,K7控制步進(jìn)電機(jī)轉(zhuǎn)向。8255 CS接288H~28FH。PA0~PA3接BA~BD;PC0~PC7接K0~K7。
2)編程:當(dāng)K0~K6中某一開關(guān)為“1”(向上撥)時(shí)步進(jìn)電機(jī)啟動(dòng)。K7向上撥電機(jī)正轉(zhuǎn),向下?lián)茈姍C(jī)反轉(zhuǎn)。程序框圖:
程序清單:
;*******************************;;*
步進(jìn)電機(jī)
*;;*******************************;
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 運(yùn)行結(jié)果:
當(dāng)K0~K6中任意一開關(guān)向上撥時(shí)步進(jìn)電機(jī)啟動(dòng),且K1速度最快,K6速度最慢;當(dāng)K7向上撥電機(jī)正轉(zhuǎn),向下?lián)茈姍C(jī)反轉(zhuǎn)。當(dāng)鍵盤中有任意鍵輸入的時(shí)候則程序終止。小結(jié)(收獲與體會(huì)):
實(shí)驗(yàn)和理論是相互檢驗(yàn),相互補(bǔ)充和相互促進(jìn)的,在實(shí)際動(dòng)手動(dòng)腦運(yùn)用理論知識(shí)的時(shí)候,能更深入地領(lǐng)會(huì)概念,熟練運(yùn)用,在此基礎(chǔ)上方能進(jìn)行創(chuàng)新和自由發(fā)揮。通過本次實(shí)驗(yàn),我了解了步進(jìn)電機(jī)控制的基本原理,掌握了控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的編程方法。更加深入地了解了微機(jī)原理這門課程。
第三篇:微機(jī)原理實(shí)驗(yàn)報(bào)告
學(xué)號(hào): 學(xué)生姓名: 打印日期: 評(píng)分: 評(píng)語:
實(shí)驗(yàn)報(bào)告
COURSE PAPER 8255控制開關(guān)狀態(tài)顯示
學(xué)院 :機(jī)電工程與自動(dòng)化學(xué)院
一、實(shí)驗(yàn)?zāi)康模?/p>
(本課程設(shè)計(jì)是在完成《微機(jī)原理與接口技術(shù)使用教程》知識(shí)后進(jìn)行的一次綜合性訓(xùn)練。通過本課程設(shè)計(jì),既可以鞏固對(duì)所學(xué)知識(shí)的理解和掌握,又可以培養(yǎng)解決實(shí)際問題的本領(lǐng),也能夠提高運(yùn)用文字圖表表達(dá)設(shè)計(jì)思想和對(duì)Proteus與Emu8086應(yīng)用的能力。
二、實(shí)驗(yàn)要求;
(1)功能要求:設(shè)定8255的PA口為開關(guān)量輸入,PB口為開關(guān)量輸出,要求能隨時(shí)將PA口的開關(guān)狀態(tài)通過PB口的數(shù)碼管顯示出來,如開關(guān)為0000,則數(shù)碼管顯示為0;若開關(guān)為1111,則數(shù)碼管顯示為F。
(2)具體參數(shù):將8255A的端口A設(shè)置為方式0并作為輸入口,讀取開關(guān)量,PB口設(shè)置為方式0作為輸出口。并設(shè)定A、B、C口和控制口的地址為60H、62H、64H、66H。LED為共陰極連接方式。
(3)用Proteus畫出實(shí)現(xiàn)上述功能的8086和8255及LED相關(guān)連接的硬件電路,編寫相關(guān)程序,結(jié)合emu8086,完成仿真調(diào)試,給出硬件電路圖、程序代碼和仿真結(jié)果圖。
三、實(shí)驗(yàn)說明;
? 利用前期實(shí)驗(yàn)建立組態(tài)控制 ? 組態(tài)軟件的操作界面和主要功能; ? 混料罐工程或交通燈工程工程組態(tài)
四、實(shí)驗(yàn)步驟;(1)硬件設(shè)計(jì)
8255A的四個(gè)端口地址為60H、62H、64H、66H。其二進(jìn)制碼分別為0110 0000H、0110 0010H、0110 0100H、0110 0110H。則可以判斷,8255A的A0與A1端口應(yīng)該與8086的A1和A2端口對(duì)應(yīng)。8086的A7、A4、A3、A0為0,A6、A5為1時(shí),8255A接受指令。為完成上述操作,可以使用138譯碼器。8255A的A端口作為輸入口,連接四位開關(guān);B端口作為輸出口,連接一個(gè)共陰極的LED顯示管。
(2)硬件電路圖
(3)匯編語言設(shè)計(jì) 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)實(shí)驗(yàn)結(jié)果
五、實(shí)驗(yàn)心得;
通過對(duì)proteus及emu8086軟件的應(yīng)用,可以使我將從課堂與書本上學(xué)習(xí)到的知識(shí),以模擬的方式,制作成成品。在本次課外項(xiàng)目中,我對(duì)于8255A的工作方式以及8086如何控制其他元器件輸入輸出數(shù)據(jù)有了清晰的認(rèn)識(shí)。通過使用模擬軟件,我有了更多的方式去深入了解課本上的知識(shí)。
第四篇:北京交通大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告(yuan)
微機(jī)原理
實(shí) 驗(yàn) 報(bào) 告
隋偉 08212013 自動(dòng)化0801
目 錄
一、I/O地址譯碼與交通燈控制實(shí)驗(yàn)……………………………………3
二、可編程定時(shí)器/計(jì)數(shù)器(8253)……………………………………6
三、中斷實(shí)驗(yàn)(純DOS)………………………………………………11
四、模/數(shù)轉(zhuǎn)換器…………………………………………………………18
五、串行通訊 ……………………………………………………………16
六、課程綜合實(shí)驗(yàn)(搶答器)……………………………………………28
七、自主設(shè)計(jì)實(shí)驗(yàn)——LED顯示………………………………………32
八、參考文獻(xiàn)……………………………………………………………35
一、I/O地址譯碼與交通燈控制實(shí)驗(yàn)
一.實(shí)驗(yàn)?zāi)康?/p>
通過并行接口8255實(shí)現(xiàn)十字路口交通燈的模擬控制,進(jìn)一步掌握對(duì)并行口的使用。
二.實(shí)驗(yàn)內(nèi)容
如圖5-3,L7、L6、L5作為南北路口的交通燈與PC7、PC6、PC5相連,L2、L1、L0作為東西路口的交通燈與PC2、PC1、PC0相連。編程使六個(gè)燈按交通燈變化規(guī)律燃滅。
十字路口交通燈的變化規(guī)律要求:
(1)南北路口的綠燈、東西路口的紅燈同時(shí)亮3秒左右。(2)南北路口的黃燈閃爍若干次,同時(shí)東西路口的紅燈繼續(xù)亮。(3)南北路口的紅燈、東西路口的綠燈同時(shí)亮3秒左右。(4)南北路口的紅燈繼續(xù)亮、同時(shí)東西路口的黃燈亮閃爍若干次。(5)轉(zhuǎn)(1)重復(fù)。
8255動(dòng)態(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;長延時(shí),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;延時(shí)
CALL DELAY DEC BL;閃爍幾次 JNZ L0
CALL DELAY CALL DELAY CALL DELAY;長延時(shí),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;延時(shí)
CALL DELAY JNZ L1;閃爍幾次
CALL DELAY
;------------------------------
;-----------延時(shí)函數(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;六號(hào)功能判斷若無字符輸入ZF=1繼續(xù)循環(huán)
CODE ENDS END START
四.實(shí)驗(yàn)遇到的問題和解決方法
問題:綠燈滅后黃燈沒有出現(xiàn)閃爍的效果,一直保持常亮
解決方法:修改程序,通過利用異或和循環(huán)指令使綠燈滅、紅燈亮后,黃燈口的狀態(tài)從0到1循環(huán)變換,并通過調(diào)用延遲子程序,從而實(shí)現(xiàn)人眼可辨的黃燈閃的效果。
二、可編程定時(shí)時(shí)鐘/計(jì)數(shù)器(8253)
一、實(shí)驗(yàn)?zāi)康?/p>
掌握8253的基本工作原理和編程方法。
二、實(shí)驗(yàn)內(nèi)容
1. 按圖5-1虛線連接電路,將計(jì)數(shù)器0設(shè)置為方式0,計(jì)數(shù)器初值為N(N≤0FH),用手動(dòng)逐個(gè)輸入單脈沖,編程使計(jì)數(shù)值在屏幕上顯示,并同時(shí)用邏輯筆觀察OUT0電平變化(當(dāng)輸入N+1個(gè)脈沖后OUT0變高電平)。
圖 5-1
2. 按圖5-2連接電圖,將計(jì)數(shù)器0、計(jì)數(shù)器1分別設(shè)置為方式3,計(jì)數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)。
圖5-2 三.實(shí)驗(yàn)原理
8253具有3個(gè)獨(dú)立的計(jì)數(shù)通道,采用減1計(jì)數(shù)方式。在門控信號(hào)有效時(shí),每輸入1個(gè)計(jì)數(shù)脈沖,通道作1次計(jì)數(shù)操作。當(dāng)計(jì)數(shù)脈沖是已知周期的時(shí)鐘信號(hào)時(shí),計(jì)數(shù)就成為定時(shí)。作計(jì)數(shù)器時(shí),要求計(jì)數(shù)的次數(shù)可直接作為計(jì)數(shù)器的初值預(yù)置到減“1”計(jì)數(shù)器中。
8253中各通道可有6種可供選擇的工作方式,以完成定時(shí)、計(jì)數(shù)或脈沖發(fā)生器等多種功能。本實(shí)驗(yàn)用到的是方式0—計(jì)數(shù)結(jié)束中斷。在寫入計(jì)數(shù)值N之后的第一個(gè)CLK的下降沿將N裝入計(jì)數(shù)執(zhí)行單元,待下一個(gè)CLK的下降沿到來且門控信號(hào)GATE為高電平時(shí),通道開始啟動(dòng)計(jì)數(shù)。在計(jì)數(shù)過程中,OUT一直保持低電平,直到計(jì)數(shù)達(dá)“0”時(shí),OUT輸出由低電平變?yōu)楦唠娖剑⑶冶3指唠娖健?253動(dòng)態(tài)分配地址: 控制寄存器: 0C403H
計(jì)數(shù)器0地址: 0C400H 計(jì)數(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;計(jì)數(shù)器初值,不大于0FH DB 0AH,0DH,'$';換行
DATA ENDS MOV DX,0C403H MOV AL,10H OUT DX,AL MOV DX,0C400H MOV AL,N;控制寄存器地址
;計(jì)數(shù)器0,低字節(jié),方式0,二進(jìn)制計(jì)數(shù);寫入控制字
OUT DX,AL;寫入計(jì)數(shù)初值 MOV CL,N;計(jì)數(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值
;讀取當(dāng)前數(shù)值
CMP DL,09H;是0~9嗎? JLE ASCI ADD DL,07H;是A~F MOV AH,02H;單字符輸出計(jì)數(shù)器當(dāng)前值 INT 21H MOV DX,OFFSET CHL MOV AH,09H INT 21H
;輸出字符串換行 ASCI: ADD DL,30H
CMP CL,0 JNL L0;CL不小于0時(shí),繼續(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;寫計(jì)數(shù)器0控制字 OUT DX,AL MOV AX,1000;寫計(jì)數(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;寫計(jì)數(shù)器1控制字 MOV AX,1000;寫計(jì)數(shù)器0初值 MOV DX,0C401H OUT DX,AL MOV AL,AH;先寫低字節(jié)后寫高字節(jié) OUT DX,AL CODE ENDS END START
五.實(shí)驗(yàn)遇到的問題和解決方案 問題:計(jì)數(shù)初值沒有顯示出來
解決方法:進(jìn)行TD調(diào)試,發(fā)現(xiàn)邏輯上出現(xiàn)了問題。修改程序,通過利用CMP AL,CL
JNZ L0來實(shí)現(xiàn)將所有的計(jì)數(shù)值都顯示出來。
三、中斷實(shí)驗(yàn)(純DOS)
一、實(shí)驗(yàn)?zāi)康?/p>
1、掌握PC機(jī)中斷處理系統(tǒng)的基本原理。
2、學(xué)會(huì)編寫中斷服務(wù)程序。
二、實(shí)驗(yàn)原理與內(nèi)容
1、實(shí)驗(yàn)原理
PC機(jī)用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理。中斷控制器用于接收外部的中斷請(qǐng)求信號(hào),經(jīng)過優(yōu)先級(jí)判別等處理后向CPU發(fā)出可屏蔽中斷請(qǐng)求。IBMPC、PC/XT機(jī)內(nèi)有一片8259中斷控制器對(duì)外可以提供8個(gè)中斷源: 中斷源 中斷類型號(hào) 中斷功能
IRQ0 08H 時(shí)鐘
IRQ1 09H 鍵盤
IRQ2 0AH 保留
IRQ3 OBH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盤
IRQ6 0EH 軟盤
IRQ7 0FH 并行打印機(jī)
8個(gè)中斷源的中斷請(qǐng)求信號(hào)線IRQ0~I(xiàn)RQ7在主機(jī)的62線ISA總線插座中可以引出,系統(tǒng)已設(shè)定中斷請(qǐng)求信號(hào)為“邊沿觸發(fā)”,普通結(jié)束方式。對(duì)于PC/AT及286以上微機(jī)內(nèi)又?jǐn)U展了一片8259中斷控制,IRQ2用于兩片8259之間級(jí)連,對(duì)外可以提供16個(gè)中斷源:
中斷源 中斷類型號(hào) 中斷功能
IRQ8 070H 實(shí)時(shí)時(shí)鐘
IRQ9 071H 用戶中斷
IRQ10 072H 保留
IRQ11 O73H 保留
IRQ12 074H 保留
IRQ13 075H 協(xié)處理器
IRQ14 076H 硬盤
IRQ15 077H 保留
PCI總線中的中斷線只有四根,INTA#、INTB#、INTC#、INTD#,它們需要通過P&P的設(shè)置來和某一根中斷相連接才能進(jìn)行中斷申請(qǐng)。
2、實(shí)驗(yàn)內(nèi)容
實(shí)驗(yàn)電路如圖31,直接用手動(dòng)產(chǎn)單脈沖作為中斷請(qǐng)求信號(hào)(只需連接一根導(dǎo)線)。要求每按一次開關(guān)產(chǎn)生一次中斷,在屏幕上顯示一次“TPC pci card Interrupt”,中斷10次后程序退出。
三、編程提示
1.由于9054的驅(qū)動(dòng)程序影響直寫9054芯片的控制寄存器,中斷實(shí)驗(yàn)需要在純DOS的環(huán)境中才能正常運(yùn)行。這里指的純DOS環(huán)境是指微機(jī)啟動(dòng)時(shí)按F8鍵進(jìn)入的DOS環(huán)境。WINDOWS重啟進(jìn)入MSDOS方式由于系統(tǒng)資源被重新規(guī)劃過,所以也不能正常實(shí)驗(yàn)。
2.由于TPC卡使用PCI總線,所以分配的中斷號(hào)每臺(tái)微機(jī)可能都不同,編程時(shí)需要了解當(dāng)前的微機(jī)使用那個(gè)中斷號(hào)并進(jìn)行設(shè)置,獲取方法請(qǐng)參看匯編程序使用方法的介紹。(也可使用自動(dòng)獲取資源分配的程序取得中斷號(hào))
3.在純DOS環(huán)境下,有些微機(jī)的BIOS設(shè)置中有將資源保留給ISA總線使用的選項(xiàng),致使在純DOS環(huán)境(WINDOWS環(huán)境下不會(huì)出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就
無法做實(shí)驗(yàn),這時(shí)需要將此選項(xiàng)修改為使用即插即用。
4.在純DOS環(huán)境下,有些微機(jī)的BIOS設(shè)置中有使用即插即用操作系統(tǒng)的選項(xiàng),如果在使用即插即用操作系統(tǒng)狀態(tài)下,BIOS將不會(huì)給TPC卡分配系統(tǒng)資源,致使在純DOS環(huán)境(WINDOWS環(huán)境下不會(huì)出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就無法做實(shí)驗(yàn),這時(shí)需要將此選項(xiàng)修改為不使用即插即用操作系統(tǒng)。
5.由于TPC卡使用9054芯片連接微機(jī),所以在編程使用微機(jī)中斷前需要使能9054的中斷功能,代碼如下:
mov dx,ioport_cent+68h;設(shè)置 tpc 卡中9054芯片io口,使能中斷
in ax,dx or ax,0900h out dx,ax
其中IOPORT_CENT是9054芯片寄存器組的I/O起始地址,每臺(tái)微機(jī)可能都不同,編程時(shí)需要了解當(dāng)前的微機(jī)使用哪段并進(jìn)行設(shè)置,獲取方法請(qǐng)參看本書結(jié)尾部分的介紹。(也可使用自動(dòng)獲取資源分配的程序取得),+68H的偏移是關(guān)于中斷使能的寄存器地址,設(shè)置含義如下:
程序退出前還要關(guān)閉9054的中斷,代碼如下:
mov dx,ioport_cent+68h;設(shè)置 tpc 卡中9054芯片io口,關(guān)閉中斷
in ax,dx
and ax,0f7ffh out dx,ax
6.PC機(jī)中斷控制器8259 的地址為20H、21H,編程時(shí)要根據(jù)中斷類型號(hào)設(shè)置中斷矢量,8259中斷屏蔽寄存器IMR對(duì)應(yīng)位要清零(允許中斷),中斷服務(wù)結(jié)束返回前要使用中斷結(jié)束命令:
MOV AL,20H OUT 20H,AL
中斷結(jié)束返回DOS時(shí)應(yīng)將IMR對(duì)應(yīng)位置1,以關(guān)閉中斷。
四、參考流程圖
五、參考程序 程序名:INT.ASM;386以上微機(jī)適用
;純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時(shí)從低至高相應(yīng)位為零,中斷8-15時(shí)第2位為零
irq_mask_9_15 equ 011111101b;中斷0-7時(shí)全一,中斷8-15時(shí)從低至高相應(yīng)位為零
ioport_cent equ 0d800h;tpc 卡中9054芯片的io地址
csreg dw ?
ipreg dw ?;舊中斷向量保存空間
irq_times dw 00h;中斷計(jì)數(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;設(shè)置 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;設(shè)置新中斷向量 56
mov ds,ax
mov dx,offset int_proc mov al,int_vect mov ah,25h int 21h
in al, 21h;設(shè)置中斷掩碼
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;恢復(fù)中斷掩碼
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;恢復(fù)原中斷向量
mov ax,csreg mov ds,ax mov ah,25h mov al,int_vect int 21h
mov dx,ioport_cent+68h;設(shè)置 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í)驗(yàn)?zāi)康?/p>
了解模/數(shù)轉(zhuǎn)換的基本原理,掌握ADC0809的使用方法。
二、實(shí)驗(yàn)內(nèi)容
1、實(shí)驗(yàn)電路原理圖如圖38。通過實(shí)驗(yàn)臺(tái)左下角電位器RW1輸出0~5V直流電壓送入ADC0809通道0(IN0),利用debug的輸出命令啟動(dòng)A/D轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果,驗(yàn)證輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系。
啟動(dòng)IN0開始轉(zhuǎn)換: Out 0298 0 讀取轉(zhuǎn)換結(jié)果: In 0298
2、編程采集IN0輸入的電壓,在屏幕上顯示出轉(zhuǎn)換后的數(shù)據(jù)(用16進(jìn)制數(shù))。
3、將JP3的1、2短接,使IN2處于雙極性工作方式,并給IN1輸入一個(gè)低頻交流信號(hào)(幅度為±5V),編程采集這個(gè)信號(hào)數(shù)據(jù)并在屏幕上顯示波形。
三、實(shí)驗(yàn)提示
1、ADC0809的IN0口地址為298H,IN1口地址為299H。
2、IN0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為:
其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為PC機(jī)的+5V電源。
3、一次A/D轉(zhuǎn)換的程序可以為
MOV DX,口地址
OUT DX,AL ;啟動(dòng)轉(zhuǎn)換
;延時(shí)
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;啟動(dòng)A/D轉(zhuǎn)換器
out dx,al
mov cx,0ffh;延時(shí)
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
五、串行通訊
一、實(shí)驗(yàn)?zāi)康?/p>
1、進(jìn)一步了解串行通信的基本原理。
2、掌握串行接口芯片8250的工作原理和編程方法。
3、熟悉PC機(jī)串行口的基本連接方法
二、實(shí)驗(yàn)內(nèi)容
1、PC機(jī)RS-232串口自發(fā)自收。
按照PC機(jī)串口自發(fā)自收的連接方法連線。編寫PC機(jī)自發(fā)自收串行通信程序,要求:從鍵盤輸入一個(gè)字符,將字符通過串口發(fā)送出去,再由此串口將字符接收回來并在屏幕上顯示,實(shí)現(xiàn)自發(fā)自收。
2、兩臺(tái)PC機(jī)間RS-232串口通信。
按照PC機(jī)RS-232串口直接互連的方法連接兩臺(tái)PC機(jī)。編寫PC機(jī)直接互連串行通信程序;要求:由甲機(jī)鍵盤鍵入字符經(jīng)串口發(fā)送給乙機(jī),再由乙機(jī)通過串口接收字符并顯示在屏幕上。當(dāng)鍵入感嘆號(hào)“!”,結(jié)束收發(fā)過程。三.實(shí)驗(yàn)原理
1)本實(shí)驗(yàn)為異步通信:以字符為單位進(jìn)行傳送,每傳送一個(gè)字符,以起始位作為開始標(biāo)志,以停止位作為結(jié)束標(biāo)志。
異步串行通信的工作過程是:傳送開始后,接收設(shè)備不斷地檢測傳輸線是否有起始位到來,當(dāng)接收到一系列的“1”(空閑或停止位)之后,檢測到第一個(gè)“0”,說明起始位出現(xiàn),就開始接收所規(guī)定的數(shù)據(jù)位、奇偶校驗(yàn)位及停止位。經(jīng)過接收器處理,將停止位去掉,把數(shù)據(jù)位拼裝成一字節(jié)數(shù)據(jù),并且經(jīng)奇偶校驗(yàn)無錯(cuò)誤,才算是正確地接收到了一個(gè)字符。當(dāng)一個(gè)字符接收完畢,接收設(shè)備又繼續(xù)測試傳輸線,監(jiān)視“0”電平的到來(下一個(gè)字符的開始),直到全部數(shù)據(jù)接收完畢。
幀 Dn?D0 D1 數(shù)據(jù)位 起 空閑位 始 位 奇 偶 校驗(yàn)位 停 止 位 空閑位
2)8250各部分功能說明
8250片內(nèi)有10個(gè)寄存器,其中有幾個(gè)是共用地址的,其識(shí)別由線路控制寄存器(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停止,無校驗(yàn) 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;判斷是否有錯(cuò) JNZ ERROR TEST AL,01H;判斷是否收到 JNZ RECEIVE TEST AL,20H;判斷發(fā)送端是否空 JZ WAIT1 MOV DL,0FFH;六號(hào)功能調(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,'?';對(duì)于錯(cuò)誤顯示'?" MOV AH,02H INT 21H JMP WAIT1 2.雙機(jī)通信(1)發(fā)送端: CODE SEGMENT ASSUME CS:CODE START: MOV AL,80H;8250初始化,設(shè)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位停止,奇校驗(yàn) 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)寄存器 出錯(cuò)否 接收數(shù)據(jù)就緒否 發(fā)送 發(fā)送寄存器空否,不空,返回等待 讀鍵盤 是'!'? 是,返回操作系統(tǒng)
不是,則發(fā)送 返回等待 出錯(cuò)則清除線路狀態(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)寄存器 出錯(cuò)否 接收數(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;出錯(cuò)則清除線路狀態(tài)寄存器 IN AL,DX MOV DL,'?';顯示'?' MOV AH,02H INT 21H JMP WAIT1 CODE ENDS END START
MOV AH,4CH;返回操作系統(tǒng)
五.實(shí)驗(yàn)遇到的問題和解決方法
問題:當(dāng)按下一個(gè)字符時(shí),屏幕上會(huì)顯示兩個(gè)字符。其中一個(gè)不正確。解決方法:顯示字符時(shí),用6號(hào)功能代替2號(hào)功能。這樣問題就得到了解決。
六、課程綜合實(shí)驗(yàn)(搶答器)
一、實(shí)驗(yàn)?zāi)康?/p>
1、了解微機(jī)化競賽搶答器的基本原理。
2、進(jìn)一步學(xué)習(xí)使用并行接口。
二、實(shí)驗(yàn)內(nèi)容
圖5-4為競賽搶答器(模擬)的原理圖,邏輯開關(guān)K0~K7代表競賽搶答按鈕0~7號(hào),當(dāng)某個(gè)邏輯電平開關(guān)置“1”時(shí),相當(dāng)某組搶答按鈕按下。在七段數(shù)碼管 上將其組號(hào)(0~7)顯示出來,并使喇叭響一下。從鍵盤上按空格鍵開始下一輪搶答,按其它鍵程序退出。
圖 5-4
8255動(dòng)態(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;對(duì)8255進(jìn)行初始化 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;求出組號(hào)
MOV BX,OFFSET LIST;七段顯示代碼表的首址送BX AND AX,00FFH;屏蔽AX高字節(jié),組號(hào) 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;當(dāng)為空格時(shí)跳到CLOSE JZ CLOSE MOV AH,4CH INT 21H CLOSE: MOV AL,0 MOV DX,0C408H OUT DX,AL JMP L0
CODE ENDS END START 四.實(shí)驗(yàn)遇到的問題和解決方法
1.問題:讀取C口狀態(tài)后不知如何將其轉(zhuǎn)換為相應(yīng)的組號(hào)
解決方法:對(duì)AL進(jìn)行邏輯右移,通過判斷CF是否為1,來計(jì)算相應(yīng)的組號(hào)(具體方法見程序)
2.問題:數(shù)碼管始終顯示‘7’
解決方法:調(diào)用響鈴程序的位置出現(xiàn)錯(cuò)誤。通過先進(jìn)行組號(hào)顯示,再調(diào)用響鈴程序,問題得到了解決。
七、自主設(shè)計(jì)實(shí)驗(yàn)——LED顯示
一、實(shí)驗(yàn)內(nèi)容
1.按圖連接好電路,將8255的A口PA0~PA6分別與七段數(shù)碼管的段碼驅(qū)動(dòng)輸入端a~g相連,位碼驅(qū)動(dòng)輸入端S1接+5V(選中),S0、dp接地(關(guān)閉)。編程從鍵盤輸入一位十進(jìn)制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。
2.七段數(shù)碼管的字型代碼表如下表:
二、程序流程圖
三、實(shí)驗(yàn)源程序 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
;求出相應(yīng)的段碼
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é)
通過自主設(shè)計(jì)實(shí)驗(yàn),提升了運(yùn)用已經(jīng)學(xué)過的理論知識(shí)與實(shí)踐的聯(lián)系的能力,復(fù)習(xí)鞏固了芯片的使用方法。
八、參考文獻(xiàn)
1.戴勝華,張凡,盛珣華.微機(jī)原理與接口技術(shù)[M].北京:北京交通大學(xué)出版社, 2008.2.Barry B.Brey.intel系列微處理器結(jié)構(gòu)、編程和接口技術(shù)大全[M].北京:機(jī)械工程出版社,1998.35
第五篇:北京理工大學(xué)微機(jī)原理實(shí)驗(yàn)報(bào)告_8259A
實(shí)驗(yàn)一8259中斷控制器實(shí)驗(yàn)
一、實(shí)驗(yàn)內(nèi)容
用單脈沖發(fā)生器的輸出脈沖為中斷源,每按一次產(chǎn)生一次中斷申請(qǐng),點(diǎn)亮或熄滅發(fā)光二極管。二,實(shí)驗(yàn)?zāi)康?/p>
(1)掌握8259的工作原理。
(2)掌握編寫中斷服務(wù)程序的方法。(3)掌握初始化中斷向量的方法。三,實(shí)驗(yàn)步驟(1)連線
1.單脈沖發(fā)生器輸出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)編輯程序,編譯鏈接后,單步運(yùn)行,調(diào)試程序。
(3)調(diào)試通過后,在中斷服務(wù)程序的NOP處設(shè)置斷點(diǎn),運(yùn)行程序,當(dāng)接收到中斷請(qǐng)求后,程序停在中斷服務(wù)程序內(nèi)的斷點(diǎn)處,觀察寄存器AX的值。四,實(shí)驗(yàn)源程序如下
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;一般嵌套,非緩沖方式,非自動(dòng)EOI MOV AX,0;寫OCW1 OUT DX,AX;允許中斷
;中斷向量存放在(0000H:0200H)開始的四個(gè)單元里 MOV AX,0
MOV DS,AX MOV SI,200H
;中斷類型號(hào)為80H MOV AX,OFFSET HINT;中斷服務(wù)程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;開中斷,設(shè)置IF=1 JMP $
;原地跳轉(zhuǎn)
HINT:
;中斷服務(wù)程序 XOR CX,0FFH;CX取反
MOV DX,4B0H;CS273接口的地址,與8個(gè)LED燈相連 MOV AX,CX;輸出高低電平控制LED燈的亮滅 OUT DX,AX MOV DX,4A0H;OCW2的地址
MOV AX,20H;一般EOI命令,全嵌套方式 OUT DX,AX IRET;中斷返回
CODE ENDS END START 五,實(shí)驗(yàn)思考題 1. 將P0連線連接到IR1—IR7任意一個(gè);重新編寫程序。
將P0接到了IR1,在原程序的基礎(chǔ)上,把寫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;一般嵌套,非緩沖方式,非自動(dòng)EOI MOV AX,0;寫OCW1 OUT DX,AX;允許中斷
;中斷向量存放在(0000H:0204H)開始的四個(gè)單元里 MOV AX,0
MOV DS,AX MOV SI,204H
;中斷類型號(hào)為81H MOV AX,OFFSET HINT;中斷服務(wù)程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;開中斷,設(shè)置IF=1 JMP $
;原地跳轉(zhuǎn)
HINT:
;中斷服務(wù)程序
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 實(shí)驗(yàn)現(xiàn)象:運(yùn)行程序,觸發(fā)脈沖發(fā)生器產(chǎn)生中斷請(qǐng)求,相應(yīng)二極管點(diǎn)亮。2. 設(shè)置OCW1,屏蔽某個(gè)中斷請(qǐng)求,運(yùn)行程序觀察現(xiàn)象。
將IR0重新接入LED0,設(shè)置OCW1為01H,屏蔽中斷IR0,則IR0的中斷無法得到響應(yīng)。程序如下:
CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;ICW1的地址,寫初始化命令字ICW1 MOV AX,13H;上升沿觸發(fā),單片8259,要寫ICW4 OUT DX,AX MOV DX,4A2H;ICW2的地址,寫中斷向量碼ICW2 MOV AX,80H
;IR0的中斷向量碼為80H OUT DX,AX MOV AX,01
;寫中斷結(jié)束控制字ICW4 OUT DX,AX;一般嵌套,非緩沖方式,非自動(dòng)EOI MOV AX,01H
;寫中斷屏蔽字OCW1 OUT DX,AX;屏蔽IR0中斷
;中斷向量存放在(0000H:0200H)開始的四個(gè)單元里 MOV AX,0
MOV DS,AX MOV SI,200H
;中斷類型號(hào)為80H MOV AX,OFFSET HINT;中斷服務(wù)程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;開中斷,設(shè)置IF=1 JMP $
;原地跳轉(zhuǎn)
HINT:
;中斷服務(wù)程序
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 實(shí)驗(yàn)現(xiàn)象:
每按單脈沖發(fā)生器一次產(chǎn)生一次中斷申請(qǐng),但連接的發(fā)光二極管一直不亮。3.設(shè)置OCW2,了解中斷結(jié)束方式與設(shè)置優(yōu)先權(quán)。將IR0和IR1都連接到P+上,分別連接LED0和LED1到00和01。OCW2將 E0OCW2一般EOI命令,將IR0設(shè)置為最低中斷優(yōu)先級(jí)。程序如下:
CODE
SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;ICW1的地址 MOV AX,13H
;上升沿觸發(fā),單片8259,要寫ICW4 OUT DX,AX MOV DX,4A2H;ICW2的地址 MOV AX,80H;中斷向量碼為80H,低3位自動(dòng)寫入 OUT DX,AX MOV AX,01
;寫ICW4 OUT DX,AX;一般嵌套,非緩沖方式,非自動(dòng)EOI MOV AX,0
;寫OCW1 OUT DX,AX;允許所有中斷
;IR0的中斷向量存放在(0000H:0200H)開始的四個(gè)單元里 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
;開中斷,設(shè)置IF=1;IR1的中斷向量存放在(0000H:0204H)開始的四個(gè)單元里 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 $
;原地跳轉(zhuǎn)
HINT1:;中斷服務(wù)程序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優(yōu)先級(jí)最低 OUT DX,AX IRET
;中斷返回
HINT2:
;中斷服務(wù)程序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優(yōu)先級(jí)最低 OUT DX,AX IRET
;中斷返回 CODE ENDS END START 實(shí)驗(yàn)現(xiàn)象:CS273的00與LED0相連,01與LED1相連,02與LED2相連,依次下去,直至07與LED7相連。每按單脈沖發(fā)生器一次產(chǎn)生一次中斷申請(qǐng),由于IR0的優(yōu)先級(jí)比IR1低,故先響應(yīng)IR1,后響應(yīng)IR0,觀察到低4位的LED燈先點(diǎn)亮或熄滅,高4位的LED燈后點(diǎn)亮或熄滅。六,實(shí)驗(yàn)心得
實(shí)驗(yàn)讓我對(duì)8259A的內(nèi)部寄存器的功能有了更深的認(rèn)識(shí),掌握了8259A的初始化步驟及其工作方式的選擇,以及中斷服務(wù)程序的編寫。使用實(shí)驗(yàn)箱和編譯軟件,使我們?cè)诰幊毯蛣?dòng)手操作方面都有了很大的提高,軟硬件的結(jié)合,使我們更加透徹的理解了所學(xué)知識(shí)。