當前位置:首頁 » 編程軟體 » io編程題

io編程題

發布時間: 2023-06-08 11:07:49

Ⅰ 微型計算機原理與介面技術的編程題都有哪些

一、8253
.MODEL TINY

PCIBAR3 EQU 1CH ;8位I/O空間基地址(它就是實驗儀的基地址,也為DMA & 32 BIT RAM板卡上的8237提供基地址)
Vendor_ID EQU 10EBH ;廠商ID號
Device_ID EQU 8376 ;設備ID號

.STACK 100

.DATA
COM_ADDR DW 00B3H
T0_ADDR DW 00B0H
T1_ADDR DW 00B1H
IO_Bit8_BaseAddress DW
msg0 DB 'BIOS不支持訪問PCI
msg1 DB '找不到Star PCI9052板卡
msg2 DB '讀8位I/O空間基地址時出錯

.CODE
START: MOV AX,@DATA
MOV DS,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根據PCI提供的基地址,將偏移地址轉化為實地址
mov dx,COM_ADD
mov al,35h;?
out dx,al ;計數器T0設置在模式2狀態,BCD碼計數
mov dx,T0_ADDR
mov al,00h
out dx,al
mov al,10h
out dx,al ;CLK0/1000
mov dx,COM_ADDR
mov al,77h
out dx,al ;計數器T1為模式3狀態,輸出方波,BCD碼計數
mov dx,T1_ADDR
mov al,00h
out dx,al
mov al,10h
out dx,al ;CLK1/1000
START1: CALL IfExit ;OUT1輸出頻率為1S的方波
JZ START1
JMP Exit

IfExit PROC NEAR
PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
POP DX
POP AX
RET
IfExit ENDP

InitPCI PROC NEAR
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,0B1H
MOV AL,01H
INT 1AH
CMP AH,0
JZ InitPCI2
LEA DX,msg0
InitPCI1: MOV AH,09H
INT 21H
JMP Exit
InitPCI2: MOV AH,0B1H
MOV AL,02H
MOV CX,Device_ID
MOV DX,Vendor_ID
MOV SI,0
INT 1AH
JNC InitPCI3 ;是否存在Star PCI9052板卡
LEA DX,msg1
JMP InitPCI1
InitPCI3: MOV DI,PCIBAR3
MOV AH,0B1H
MOV AL,09H
INT 1AH ;讀取該卡PCI9052基地址
JNC InitPCI4
LEA DX,msg2
JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
RET
InitPCI ENDP

ModifyAddress PROC NEAR
ADD COM_ADDR,CX
ADD T0_ADDR,CX
ADD T1_ADDR,CX
RET
ModifyAddress ENDP

Exit: MOV AH,4CH
INT 21H

END START

二、8259
.MODEL TINY

PCIBAR1 EQU 14H ;PCI9052 I/O基地址(用於訪問局部配置寄存器)
PCIBAR3 EQU 1CH ;8位I/O空間基地址(它就是實驗儀的基地址,也為DMA & 32 BIT RAM板卡上的8237提供基地址)
PCIIPR EQU 3CH ;IRQ號
INTCSR EQU 4CH ;PCI9052 INTCSR地址
mask_int_9052 EQU 24H

Vendor_ID EQU 10EBH ;廠商ID號
Device_ID EQU 8376 ;設備ID號

.STACK 100
.DATA
IO8259_0 DW 00F0H
IO8259_1 DW 00F1H
RD_IO8259 DW 0000H
IO_Bit8_BaseAddress DW ?
PCI_IO_BaseAddress0 DW ?
PCI_IRQ_NUMBER DB ?
INT_MASK DB ?
INT_Vector DB ?
INT_CS DW ? ;保護原中斷入口地址
INT_IP DW ?
msg0 DB 'BIOS不支持訪問PCI
msg1 DB '找不到Star PCI9052板卡
msg2 DB '讀PCI9052 I/O基地址時出錯$'
msg3 DB '讀8位I/O空間基地址時出錯$'
msg4 DB '讀IRQ號出錯$'
msg5 DB '8259中斷 00H 次$'

BUFFER DB
Counter DB ?
ReDisplayFlag DB 0

.CODE
START: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根據PCI提供的基地址,將偏移地址轉化為實地址
CALL ModifyVector ;修改中斷向量、允許中斷
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,09H
LEA DX,msg5
INT 21H

CALL Init8259
MOV Counter,0 ;中斷次數
MOV ReDisplayFlag,1 ;需要顯示
STI ;開中斷
START1: CALL IfExit
CMP ReDisplayFlag,0
JZ START1
CALL LedDisplay
MOV ReDisplayFlag,0
JMP START1

Init8259 PROC NEAR
MOV DX,IO8259_0
mov al,13H
out dx,al

MOV DX,IO8259_1
mov al,08H
out dx,al

MOV AL,09H
OUT DX,AL
mov al,0feH ;屏蔽寄存器
OUT DX,AL
RET
Init8259 ENDP

ToChar PROC NEAR ;轉化為可顯示的16進制數
ADD AL,'0'
CMP AL,'9'
JBE ToChar1
ADD AL,07H
ToChar1: RET
ToChar ENDP

LedDisplay PROC NEAR
MOV AL,Counter
MOV AH,AL
AND AL,0FH
CALL ToChar
MOV Buffer + 1,AL
AND AH,0F0H
ROR AH,4
MOV AL,AH
CALL ToChar
MOV Buffer,AL
MOV AH,02H
MOV DL,10
MOV DH,0
INT 10H ;定位游標
MOV AH,09H
LEA DX,Buffer
INT 21H
RET
LedDisplay ENDP

INT_0: PUSH DX
PUSH AX
CALL ClearInt
JC INT_0_0
MOV DX,RD_IO8259
IN AL,DX
IN AL,DX ;判斷由哪個中斷源引起的中斷
MOV AL,Counter
ADD AL,1
DAA
MOV Counter,AL
MOV ReDisplayFlag,1
INT_0_0: MOV DX,IO8259_0
MOV AL,20H
OUT DX,AL
POP AX
POP DX
IRET

IfExit PROC NEAR
PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
POP DX
POP AX
JZ IfExit1
JMP Exit
IfExit1: RET
IfExit ENDP

InitPCI PROC NEAR
MOV AH,00H
MOV AL,03H
INT 10H ;清屏
MOV AH,0B1H
MOV AL,01H
INT 1AH
CMP AH,0
JZ InitPCI2
LEA DX,msg0
InitPCI1: MOV AH,09H
INT 21H
JMP Exit
InitPCI2: MOV AH,0B1H
MOV AL,02H
MOV CX,Device_ID
MOV DX,Vendor_ID
MOV SI,0
INT 1AH
JNC InitPCI3 ;是否存在Star PCI9052板卡
LEA DX,msg1
JMP InitPCI1
InitPCI3: MOV DI,PCIBAR1
MOV AH,0B1H
MOV AL,09H
INT 1AH ;讀取該卡PCI9052基地址
JNC InitPCI4
LEA DX,msg2
JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV PCI_IO_BaseAddress0,CX
MOV DI,PCIBAR3
MOV AH,0B1H
MOV AL,09H
INT 1AH ;讀取該卡擴展的8位IO基地址
JNC InitPCI5
LEA DX,msg3
JMP InitPCI1
InitPCI5: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
MOV DI,PCIIPR
MOV AH,0B1H
MOV AL,09H
INT 1AH ;讀取IRQ號
JNC InitPCI6
LEA DX,msg4
JMP InitPCI1
InitPCI6: MOV PCI_IRQ_NUMBER,CL
RET
InitPCI ENDP

ModifyAddress PROC NEAR
MOV AX,IO_Bit8_BaseAddress
ADD IO8259_0,AX
ADD IO8259_1,AX
ADD RD_IO8259,AX
RET
ModifyAddress ENDP

ModifyVector PROC NEAR
PUSH ES
MOV AL,PCI_IRQ_NUMBER
CMP AL,08H
JAE ModifyVector1
ADD AL,08H ;IRQ0..7 -> 中斷向量8..F
JMP ModifyVector2
ModifyVector1: ADD AL,70H-08H ;IRQ8..F -> 中斷向量70H..77H
ModifyVector2: MOV INT_Vector,AL
MOV AH,35H
INT 21H
MOV INT_IP,BX ;保護原中斷處理常式地址
MOV AX,ES
MOV INT_CS,AX

MOV AL,INT_Vector
LEA DX,INT_0
PUSH DS
PUSH CS
POP DS
MOV AH,25H
INT 21H ;設置新中斷向量
POP DS
MOV BL,PCI_IRQ_NUMBER
MOV DX,21H
CMP AL,08H
JB ModifyVector3
MOV DX,0A1H
ModifyVector3: IN AL,DX
MOV INT_MASK,AL
AND BL,07H
MOV CL,BL
MOV BL,1
SHL BL,CL
NOT BL
AND AL,BL
OUT DX,AL ;允許中斷

POP ES
STI
RET
ModifyVector ENDP

ClearInt PROC NEAR ;清楚PCI9052、系統中斷控制器的中斷標志
MOV DX,PCI_IO_BaseAddress0
ADD DX,INTCSR
; IN AL,DX
; AND AL,mask_int_9052
; JZ ClearInt3 ;不是8259引取的中斷
INC DX
IN AL,DX
OR AL,0CH
OUT DX,AL ;清除PCI9052的中斷標志位

MOV AL,PCI_IRQ_NUMBER
CMP AL,08H
JAE ClearInt1
AND AL,7
OR AL,60H
MOV DX,20H
OUT DX,AL
JMP ClearInt2
ClearInt1: AND AL,7
OR AL,60H
MOV DX,0A0H
OUT DX,AL
MOV DX,20H
MOV AL,62H
OUT DX,AL
ClearInt2: CLC
RET
;ClearInt3: STC
; RET
ClearInt ENDP

Exit: CLI
MOV BL,PCI_IRQ_NUMBER
MOV DX,21H
CMP AL,08H
JB Exit1
MOV DX,0A1H
Exit1: MOV AL,INT_MASK
OUT DX,AL ;屏蔽中斷

PUSH DS
MOV AL,INT_Vector
MOV DX,INT_IP ;保護原中斷處理常式地址
MOV AX,INT_CS
MOV AH,25H
INT 21H ;設置新中斷向量
POP DS
STI
MOV AH,4CH
INT 21H
END START
三、8251
.MODEL TINY
;使用8253的計數器0,外接2Mhz,經26分頻後,送給8251,產生4800bps
PCIBAR3 EQU 1CH ;8位I/O空間基地址(它就是實驗儀的基地址,也為DMA & 32 BIT RAM板卡上的8237提供基地址)
Vendor_ID EQU 10EBH ;廠商ID號
Device_ID EQU 8376 ;設備ID號

.STACK 100
.DATA
CTL_ADDR DW 00F1H ;控制字或狀態字
DATA_ADDR DW 00F0H ;讀寫數據
W_8253_T0 DW 00B0H ;計數器0地址
W_8253_C DW 00B3H ;控制字

IO_Bit8_BaseAddress DW
msg0 DB 'BIOS不支持訪問PCI
msg1 DB '找不到Star PCI9052板卡
msg2 DB '讀8位I/O空間基地址時出錯$'

Receive_Buffer DB 10 DUP(0) ;接受緩沖器
Send_Buffer EQU Receive_Buffer ;發送緩沖器

.CODE
START: MOV AX,@DATA
MOV DS,AX
MOV ES,AX
NOP
CALL InitPCI
CALL ModifyAddress ;根據PCI提供的基地址,將偏移地址轉化為實地址
CALL INIT_8253
CALL INIT_8251
START1: MOV CX,10
CALL Receive_Group
MOV CX,10
CALL Send_Group
CALL IfExit ;OUT1輸出頻率為1S的方波
JZ START1
JMP Exit
; JMP START1

INIT_8253 PROC NEAR
MOV DX,W_8253_C
MOV AL,37H ;定時器0,方式3
OUT DX,AL
MOV DX,W_8253_T0
MOV AL,26H ;BCD碼26(2000000/26)=16*4800
OUT DX,AL
MOV AL,0
OUT DX,AL
RET
INIT_8253 ENDP

INIT_8251 PROC NEAR
CALL RESET_8251
mov dx,CTL_ADDR
mov al,7eh ;波特率系數為16,8個數據位
out dxx,al ;一個停止位,偶校驗
CALL DLTIME ;延時
mov al,15h ;允許接收和發送發送數據,清錯誤標志
out dx,al
CALL DLTIME
RET
INIT_8251 ENDP

Reset_8251 PROC NEAR
MOV DX,CTL_ADDR
MOV AL,0
OUT DX,AL ;向控制口寫入"0"
CALL DLTIME ;延時,等待寫操作完成
OUT DX,AL ;向控制口寫入"0"
CALL DLTIME ;延時
OUT DX,AL ;向控制口寫入"0"
CALL DLTIME ;延時
MOV AL,40H ;向控制口寫入復位字40H
OUT DX,AL
CALL DLTIME
RET
Reset_8251 ENDP

;接受一組數據,CX--接受數目
Receive_Group PROC NEAR
LEA DI,Receive_Buffer
Receive_Group1: CALL Receive_Byte
STOSB
LOOP Receive_Group1
RET
Receive_Group ENDP

;接受一個位元組
Receive_Byte PROC NEAR
MOV DX,CTL_ADDR
Receive_Byte1: in al,dx ;讀入狀態
test al,2
jz Receive_Byte1 ;
mov dx, DATA_ADDR ;有
in al,dx
RET
Receive_Byte ENDP

;發送一組數據,CX--發送數目
Send_Group PROC NEAR
LEA SI,Send_Buffer
Send_Group1: lodsb
call Sendbyte
loop Send_Group1
RET
Send_Group ENDP

;發送一個位元組
Sendbyte PROC NEAR
PUSH AX
MOV DX,CTL_ADDR ;讀入狀態
Sendbyte1: in al,dx
test al,1
jz Sendbyte1 ;允許數據發送嗎?
pop ax ;發送
mov dx,DATA_
MOV CX,Device_ID
MOV DX,Vendor_ID
MOV SI,0
INT 1AH
JNC InitPCI3 ;是否存在Star PCI9052板卡
LEA DX,msg1
JMP InitPCI1
InitPCI3: MOV DI,PCIBAR3
MOV AH,0B1H
MOV AL,09H
INT 1AH ;讀取該卡PCI9052基地址
JNC InitPCI4
LEA DX,msg2
JMP InitPCI1
InitPCI4: AND CX,0FFFCH
MOV IO_Bit8_BaseAddress,CX
RET
InitPCI ENDP

ModifyAddress PROC NEAR
ADD COM_ADD,CX
ADD PA_ADD,CX
ADD PB_ADD,CX
ADD PC_ADD,CX
RET
ModifyAddress ENDP

Exit: MOV AH,4CH
INT 21H

END START

熱點內容
安卓光遇怎麼開三檔畫質華為 發布:2025-02-12 01:55:51 瀏覽:193
微信哪裡能找到登陸游戲的密碼 發布:2025-02-12 01:54:22 瀏覽:591
php獲取伺服器ip地址 發布:2025-02-12 01:54:12 瀏覽:578
對象存儲和nas哪個好 發布:2025-02-12 01:50:34 瀏覽:445
phpmulticurl 發布:2025-02-12 01:41:58 瀏覽:70
資料庫的集群 發布:2025-02-12 01:36:55 瀏覽:633
c語言實驗買糖果 發布:2025-02-12 01:36:54 瀏覽:263
安卓怎麼轉微信到iphone 發布:2025-02-12 01:36:22 瀏覽:385
大眾朗逸哪個配置好點 發布:2025-02-12 01:25:41 瀏覽:68
引用jar怎麼發布到伺服器 發布:2025-02-12 01:07:44 瀏覽:334