微机原理实验报告
目錄
實驗一 匯編語言編程實驗
一、 實驗目的
二、 實驗所用儀器
三、 實驗內容及基本原理
四、 實驗數據記錄
五、 實驗結果分析及回答問題(或測試環境及測試結果)
實驗二 數碼轉換實驗
一、 實驗目的
二、 實驗所用儀器
三、 實驗內容及基本原理
四、 實驗數據記錄
五、 實驗結果分析及回答問題
實驗三 基本 IO 口擴展實驗
一、 實驗目的
二、 實驗所用儀器
三、 實驗內容及基本原理
四、 實驗數據記錄
五、 實驗結果分析及回答問題
實驗四 可編程并行接口實驗
一、 實驗目的
二、 實驗所用儀器
三、實驗內容及基本原理
四、 實驗原理圖
五、實驗結果分析及回答問題
實驗一 匯編語言編程實驗
一、 實驗目的
1. 掌握匯編語言的編程方法
2. 掌握 DOS 功能調用的使用方法
3. 掌握匯編語言程序的調試運行過程
二、 實驗所用儀器
Masm for windows 集成環境
三、 實驗內容及基本原理
1. 將指定數據區的字符串數據以 ASCII 碼形式顯示在屏幕上,并通過 DOS 功能調用完 成必要提示信息的顯示。
2. 在屏幕上顯示自己的學號姓名信息。
3. 循環從鍵盤讀入字符并回顯在屏幕上,然后顯示出對應字符的 ASCII 碼,直到輸 入”Q”或“q”時結束。
字節碼轉 ASCII 碼流程圖
?
?
四、 實驗數據記錄
?學號姓名題目源碼:
字符轉 ASCII 源碼:
五、 實驗結果分析及回答問題(或測試環境及測試結果)
學號與姓名的輸入輸出測試結果:
字符轉 ASCII 測試結果:
?
實驗二 數碼轉換實驗
一、 實驗目的
1. 掌握不同進制數及編碼相互轉換的程序設計方法。
2. 掌握運算類指令編程及調試方法。
3. 掌握循環程序的設計方法。
二、 實驗所用儀器
Masm for windows 集成環境 QTHPCI 軟件
三、 實驗內容及基本原理
實驗內容:
1. 重復從鍵盤輸入不超過 5 位的十進制數,按回車鍵結束輸入;
2. 將該十進制數轉換成二進制數;結果以 2 進制數的形式顯示在屏幕上;
3. 如果輸入非數字字符,則報告出錯信息,重新輸入;
4. 直到輸入“Q”或‘q’時程序運行結束。
5. 鍵盤輸入一字符串,以空格結束,統計其中數字字符的個數,在屏幕顯示
實驗原理:
?
四、 實驗數據記錄
| ? |
| 十進制(不超過五位數)轉二進制源碼 ? |
字符串中數字的個數
五、 實驗結果分析及回答問題
十進制數轉二進制測試結果:
?
字符串中數字個數測試結果:
?
實驗三 基本 IO 口擴展實驗
一、 實驗目的
1. 了解 TTL 芯片擴展簡單 I/O 口的方法。
2. 掌握數據輸入輸出程序編制的方法。
二、 實驗所用儀器
QTHPCI 軟件,74LS244 緩沖驅動器,74LS273 觸發器
三、 實驗內容及基本原理
實驗內容:
本實驗要求用 74LS244 作為輸入口,讀取開關狀態,并將此狀態通過 74LS273 連到發光 二極管顯示。具體實驗內容如下:
??? 1.開關 Yi 為低電平時對應的發光二極管亮,Yi 為高電平時對應的發光二極管滅。
??? 2.當開關 Yi 全為高電平時,發光二極管 Qi 從左至右輪流點亮。
??? 3.當開關 Yi 全為低電平時,發光二極管 Qi 從右至左輪流點亮。
??? 4.自主設計控制及顯示模式,完成編程調試,演示實驗結果。
實驗原理:
74LS244 是一種三態輸出的 8 總線緩沖驅動器,無鎖存功能,當 G 為低電平,Ai 信號傳 送到 Yi,當為高電平時,Yi 處于禁止高阻狀態;
74LS273 是一種帶清除功能的 8D 觸發器, 1D~8D 為數據輸入端,1Q~8Q 為數據輸出 端,正脈沖觸發,低電平清除,常用作 8 位地址鎖存器。
?
?
?
?
四、 實驗數據記錄
1. 按照實驗連線圖連接:
244 的 CS 接到 ISA 總線接口模塊的 0000H,Y7—Y0——開關 K1—K8
273 的 CS 接到 ISA 總線接口模塊的 0020H,Q7—Q0——發光二極管 L1—L8 該模塊的 WR、RD 分別連到 ISA 總線接口模塊的 IOWR、IORD。 該模塊的數據(AD0~AD7)連到 ISA 總線接口模塊的數據(LD0~LD7)。 2.編寫實驗程序,編譯鏈接,運行程序
3. 撥動開關,觀察發光二極管的變化。
五、 實驗結果分析及回答問題
?1.開關 Yi 為低電平時對應的發光二極管亮,Yi 為高電平時對應的發光二極管滅。
?2.當開關 Yi 全為高電平時,發光二極管 Qi 從左至右輪流點亮。
?3.當開關 Yi 全為低電平時,發光二極管 Qi 從右至左輪流點亮。
?
實驗四 可編程并行接口實驗
一、 實驗目的
?1. 了解可編程并行接口 8255 的內部結構,
?2. 掌握工作方式、初始化編程及應用。
二、 實驗所用儀器
QTHPCI 軟件,8255 可編程并行接口電路
三、實驗內容及基本原理
實驗內容:
1.流水燈實驗:利用 8255 的 A 口、B 口循環點亮發光二極管。
2.交通燈實驗:利用 8255 的 A 口模擬交通信號燈。
3.I/O 輸入輸出實驗:利用 8255 的 A 口讀取開關狀態,8255 的 B 口把狀態送發光二極 管顯示。
4.在完成(1)基礎上,增加通過讀取開關控制流水燈的循環方向和循環方式。
5.在完成(2)基礎上,增加通過讀取開關控制交通紅綠燈的亮滅時間。
實驗原理:
8255 是一個通用可編程并行接口電路。它具有 A、B、C 三個 8 位并行口。其中 C 口也可 用作 A、B 口的聯絡信號及中斷申請信號。通過編程,它可以被設置為基本輸入輸出、 選通輸入輸出以及雙向傳送方式。對于 C 口還具有按位置 0、1 的功能。
8255 控制字
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 1 ? (特征位) | A 組方式 ? 00=方式 0 01=方式 1 ? 1X=方式 2 | A 口 0=輸出 1=輸入 | C 口高 4 位 0=輸出 1=輸入 | B 組方式 0=方式 0 1=方式 1 | B 口 0=輸出 1=輸入 | C 口低 4 位 0=輸出 1=輸入 | |
| 0 ? (特征位) | ? 不用 | 位選擇 ? 000=C 口 0 位……111=C 口 7 位 | 0=復位 ? 1=置位 | ||||
四、 實驗原理圖
流水燈???????????????????????????????? 交通燈
?
?
五、實驗結果分析及回答問題
I/O 輸入輸出實驗
;交通燈源碼 MY_STACK SEGMENT PARA 'STACK' DB 100 DUP(?) MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA' IO_9054base_address DB 4 DUP(0) ;PCI 卡 9054 芯片 I/O 基地址暫存空間 IO_base_address DB 4 DUP(0) ;PCI 卡 I/O 基地址暫存空間 pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'P8255_A DW 0000H P8255_B DW 0001H P8255_C DW 0002H P8255_MODE DW 0003H DELAY_SET EQU 5fffH DELAY_SET1 EQU 18ffHMES2 DB ' PCI CONFIG READ ERROR! $' MY_DATA ENDs MY_CODE SEGMENT PARA 'CODE'MY_PROC PROC FAR ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACKSTART: .386 ;386 模式編譯 MOV AX,MY_DATA MOV DS,AX MOV ES,AXMOV AX,MY_STACK MOV SS,AX CALL FINDPCI ;自動查找 PCI 卡資源及 IO 口基址; MOV MOV CX,word ptr IO_base_address CX,0E800H ;直接加入(E800:本機 PCI 卡 IO 口基址)ADD P8255_A,CX ;PCI 卡 IO 基址+偏移ADD P8255_B,CXADD P8255_C,CXADD P8255_MODE,CXMOV MOV DX,P8255_MODE AL,80H ;3 個口全部為輸出OUT DX,ALMOV DX,P8255_ACALL ST0 ;全為紅燈 TRAFFIC1: CALL CALL ST1 ST5 ;南北為綠燈,東西為紅燈CALL ST2 ;南北紅燈閃爍,東西為紅燈CALL ST3 CALL ST6 ;南北為紅燈,東西為綠燈CALL ST4 ;南北為紅燈,東西黃燈閃爍CALL BREAKJMP TRAFFIC1 MY_PROC ENDp ST0 PROC NEARMOV AL,1BHOUT DX,ALCALL DELAYRET ST0 ENDp ST1 PROC NEARMOV DX,P8255_AMOV AL,0EDHOUT DX,ALCALL DELAYCALL DELAYCALL DELAYRET ST1 ENDp ST5 PROC NEARMOV DX,P8255_AMOV AL,0EBHOUT DX,ALCALL DELAYRET ST5 ENDp ST2 PROC NEARMOV CX,5H ST20: MOV AL,0EBHOUT DX,ALCALL DELAY1MOV AL,0EFHOUT DX,AlCALL DELAY1LOOP ST20RET ST2 ENDp ST3 PROC NEARMOV AL,0DEHOUT DX,ALCALL DELAYCALL DELAYCALL DELAYRET ST3 ENDp ST6 PROC NEARMOV DX,P8255_AMOV AL,0BEHOUT DX,ALCALL DELAYRET ST6 ENDp ST4 PROC NEARMOV CX,5H ST40: MOV AL,0BEHOUT DX,ALCALL DELAY1MOV AL,0FEHOUT DX,ALCALL DELAY1LOOP ST40RET ST4 ENDp ; ;***************************************************************************** ; /* 延時子程序 */ ;***************************************************************************** ; DELAY PROC NEAR ;延時程序 PUSHF PUSH DX PUSH CX MOV DX,DELAY_SET D1: MOV CX,-1 D2: DEC CX JNZ D2 DEC DX JNZ D1 POP CX POP DX POPF RET DELAY ENDp DELAY1 PROC NEAR ;延時程序 PUSHF PUSH DX PUSH CX MOV DX,DELAY_SET1 D3: MOV CX,-1 D4: DEC CX JNZ D4 DEC DX JNZ D3 POP CX POP DX POPF RET DELAY1 ENDp ; ;***************************************************************************** ; /* 按任意鍵退出子程序 */ ;***************************************************************************** ; BREAK PROC NEAR ;按任意鍵退出 PUSHF PUSH AX PUSH DX MOV AH,06H MOV DL,0FFH INT 21H JE RETURN MOV AX,4C00H INT 21H RETURN: POP DX POP AX POPF RET BREAK ENDP ; ;***************************************************************************** ; /* 找卡子程序 */;***************************************************************************** ; ;FUNCTION CODE IO_port_addre EQU 0CF8H ;32 位配置地址端口 IO_port_data EQU 0CFCH ;32 位配置數據端口 IO_PLX_ID EQU 200810B5H ;PCI 卡設備及廠商 ID BADR0 = 10H ;基地址寄存器 0 BADR1 = 14H ;基地址寄存器 1 BADR2 = 18H ;基地址寄存器 2 BADR3 = 1CH ;基地址寄存器 3 FINDPCI PROC NEAR ;查找 PCI 卡資源并顯示 PUSHAD PUSHFD MOV EBX,080000000H FINDPCI_next: ADD EBX,100H CMP EBX,081000000H JNZ findpci_continue MOV DX,offset pcicardnotfind ;顯示未找到 PCI 卡提示信息 MOV AH,09H INT 21H MOV AH,4CH INT 21H ;退出 findpci_continue: MOV MOV DX,IO_port_addre EAX,EBX OUT DX,EAX ;寫地址口 MOV DX,IO_port_data IN EAX,DX ;讀數據口 CMP EAX,IO_PLX_ID JNZ findpci_next ;檢查是否發現 PCI 卡 MOV DX,IO_port_addre MOV EAX,EBX ADD OUT EAX,BADR1 DX,EAX ;寫地址口 MOV DX,IO_port_data IN EAX,DX ;讀數據口 MOV dword ptr IO_9054base_address,EAX AND EAX,1 JZ findPCI_next ;檢查是否為 i/o 基址信息 MOV EAX,dword ptr IO_9054base_address AND EAX,0fffffffeh MOV dword ptr IO_9054base_address,EAX ;去除 i/o 指示位并保存 MOV DX,IO_port_addre MOV EAX,EBX ADD EAX,BADR2 OUT DX,EAX ;寫地址口 MOV IN DX,IO_port_data EAX,DX ;讀數據口 MOV dword ptr IO_base_address,EAX AND JZ EAX,1 findPCI_next ;檢查是否為 i/o 基址信息 MOV EAX,dword ptr IO_base_address AND MOV EAX,0fffffffeh dword ptr IO_base_address,EAX ;去除 i/o 指示位并保存MOV DX,offset good ;顯示開始執行程序信息MOV AH,09HINT 21HPOPfd POPad RET findPCI ENDP MY_CODE ENDS END START ;I/O 實驗源碼 DATA SEGMENT DELAY_SET EQU 0FFFH L_TO_R DB ? R_TO_L DB ?DATA ENDsCODE SEGMENT ASSUME DS : DATA, CS : CODE START: MOV AX, DATA MOV DS, AX MOV L_TO_R, 07FH MOV R_TO_L, 0FEH MOV DX, 0ec03h MOV AL, 89h OUT DX, AL X: MOV DX, 0ec02h IN AL, DX CMP AL, 0h JE FLOW_1 CMP AL, 00fh JE FLOW_2 MOV DX, 0ec00h OUT DX, AL CALL DELAY JMP STARTFLOW_1: MOV AL, L_TO_R MOV AH, R_TO_L ROR AL, 1 MOV L_TO_R, AL ROL AH, 1 MOV R_TO_L, AH JMP SHOW_1FLOW_2: MOV AL, R_TO_L MOV AH, L_TO_R ROR AL, 1 MOV L_TO_R, AL ROL AH, 1 MOV R_TO_L, AH JMP SHOW_2SHOW_1: MOV DX, 0ec00h OUT DX, AL MOV AL, AH MOV DX, 0ec01h OUT DX, AL CALL DELAY JMP XSHOW_2: MOV DX, 0ec01h OUT DX, AL MOV AL, AH MOV DX, 0ec00h OUT DX, AL CALL DELAY JMP XDELAY PROC NEARPUSHF PUSH DXPUSH CXMOV DX,DELAY_SET D1: MOV CX,-1 D2: DEC CXJNZ D2DEC DXJNZ D1POP CXPOP DXPOPF RET DELAY ENDpCODE ENDs END START;流水燈源碼 MY_STACK SEGMENT PARA 'STACK' DB 100 DUP(?) MY_STACK ENDSMY_DATA SEGMENT PARA 'DATA' IO_9054base_address DB 4 DUP(0) ;PCI 卡 9054 芯片 I/O 基地址暫存空間 IO_base_address DB 4 DUP(0) ;PCI 卡 I/O 基地址暫存空間 pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$' GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$' LA DB ? LB DB ? P8255_A DW 0000H P8255_B DW 0001H P8255_C DW 0002H P8255_MODE DW 0003H DELAY_SET EQU 11FFH MES2 DB ' PCI CONFIG READ ERROR! $' MY_DATA ENDs MY_CODE SEGMENT PARA 'CODE' MY_PROC PROC FAR ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACKSTART: .386 ;386 模式編譯 MOV AX,MY_DATA MOV DS,AX MOV ES,AX MOV AX,MY_STACK MOV SS,AX CALL FINDPCI ;自動查找 PCI 卡資源及 IO 口基址MOV ADD CX,word ptr IO_base_address P8255_A,CX ;PCI 卡 IO 基址+偏移ADD P8255_B,CXADD P8255_C,CXADD P8255_MODE,CXMOV DX,P8255_MODE ;8255 初始化,三個口全為輸出MOV AL,80HOUT DX,ALMOV DX,P8255_A ;PA 口賦初值MOV AL,7FHOUT DX,ALMOV LA,ALMOV DX,P8255_B ;PB 口賦初值MOV AL,0FEHOUT DX,ALMOV LB,ALCALL DELAY A1: MOV AL,LA ;PA 口數據右移一位ROL AL,1MOV LA,ALMOV DX,P8255_AOUT DX,ALMOV AL,LBROR AL,1MOV LB,ALMOV DX,P8255_B ;PB 口數據右移一位OUT DX,ALCALL DELAY ;延時CALL BREAK ;按任意鍵退出JMP A1 MY_PROC ENDp DELAY PROC NEAR ;延時程序PUSHF PUSH DXD1: PUSH MOV MOV CX DX,DELAY_SET CX,-1 D2:DELAY DEC JNZ DEC JNZ POP POP POPF RET ENDp CX D2 DX D1 CX DX BREAKRETURN: PROC MOV MOV INT JE MOV INT RET NEAR AH,06H DL,0FFH 21H RETURN AX,4C00H 21H BREAK ENDP ;***************************************************************************** ; /* 找卡子程序 */ ;***************************************************************************** IO_port_addre EQU 0CF8H ;32 位配置地址端口 IO_port_data EQU 0CFCH ;32 位配置數據端口 IO_PLX_ID EQU 200810B5H ;PCI 卡設備及廠商 ID BADR0 = 10H ;基地址寄存器 0 BADR1 = 14H ;基地址寄存器 1 BADR2 = 18H ;基地址寄存器 2 BADR3 = 1CH ;基地址寄存器 3 FINDPCI PROC NEAR ;查找 PCI 卡資源并顯示 PUSHAD PUSHFD MOV EBX,080000000H FINDPCI_next: ADD EBX,100H CMP EBX,081000000H JNZ findpci_continue MOV DX,offset pcicardnotfind ;顯示未找到 PCI 卡提示信息 MOV AH,09H INT 21H MOV AH,4CH INT 21H ;退出 findpci_continue: MOV MOV DX,IO_port_addre EAX,EBX OUT DX,EAX ;寫地址口 MOV DX,IO_port_data IN EAX,DX ;讀數據口 CMP JNZ EAX,IO_PLX_ID findpci_next ;檢查是否發現 PCI 卡 MOV DX,IO_port_addre MOV EAX,EBX ADD EAX,BADR1 OUT DX,EAX ;寫地址口 MOV DX,IO_port_data IN EAX,DX ;讀數據口 MOV dword ptr IO_9054base_address,EAX AND EAX,1 JZ findPCI_next ;檢查是否為 i/o 基址信息 MOV EAX,dword ptr IO_9054base_address AND EAX,0fffffffeh MOV dword ptr IO_9054base_address,EAX ;去除 i/o 指示位并保存 MOV DX,IO_port_addre MOV EAX,EBX ADD OUT EAX,BADR2 DX,EAX ;寫地址口 MOV DX,IO_port_data IN EAX,DX ;讀數據口MOV AND dword ptr IO_base_address,EAX EAX,1 JZ findPCI_next ;檢查是否為 i/o 基址信息 MOV EAX,dword ptr IO_base_address AND EAX,0fffffffeh MOV dword ptr IO_base_address,EAX ;去除 i/o 指示位并保存 MOV DX,offset good ;顯示開始執行程序信息 MOV AH,09H INT 21H POPfd POPad RET findPCI ENDP MY_CODE ENDS END START?
總結
- 上一篇: python word排版_利用Pyth
- 下一篇: BlackBerry 10 Blac