查询式输入输出实验
一、实验目的
- 掌握I/O数据传送的基本原理;
- 熟悉查询式数据输入输出的基本原理和接口电路设计方法。
- 掌握查询式数据传送的程序设计方法。
二、实验内容
1.查询式数据输出实验
利用查询方式,将buffer单元开始的10个字节数,逐个输出到43AH 端口,并保证外设正确接收。设状态端口为43BH,D0位为0时表示数据输出缓冲区为空。
2.查询式数据输入实验
利用查询方式,从端口43AH获取来自外设的数据,并以十六进制方式显示,其状态端口43BH的D1为数据缓冲区状态标志,D1=1表示输入缓冲区满。
三、实验保障
PC 微机、汇编程序调试工具软件
春软微机原理虚拟实验系统之“查询输出装置”和“查询输入装置”单元电路
四﹑实验原理
查询式输出的接口电路如图4-10-1。在输出设备空闲时,cpu执行输出指令,将数据送入锁存器,同时将触发器置1,通知输出设备接收数据。当输出设备取得数据后,便发出ACK信号,使"BUSY"信号为0,作为程序状态查询信号,允许再次输出数据。
图4-10-1 查询式输出接口电路
查询式输入的接口电路如图4-10-2。输入设备发送数据的同时发出STB选通信号,置ready信号表示输入缓冲区满,程序查询到该信号后,即可将数据读入,读入数据的同时清除ready信号,输入设备即可再准备下一个数据输入。
图4-10-2 查询式输入接口电路
五、实验步骤
1.查询式数据输出实验步骤
(1)运行“春软微机原理虚拟实验系统”,打开“查询输出装置”单元电路。如图4-10-3。
图4-10-3 查询式输出装置接口电路
(2)编写查询式输出汇编语言程序。
(3)编辑汇编语言程序,然后进行汇编、链接。
(4)打开电源开关,运行程序,观察输出设备接收的数据是否正确。
2.查询式数据输入实验步骤
(1)打开“查询输入装置”单元电路。如图4-10-4。
图4-10-4 查询式输入装置接口电路
(2)编写查询式输入汇编语言程序。
(3)编辑汇编语言程序,然后进行汇编、链接。
(4)打开电源开关,运行程序,观察屏幕上显示的数据是否与输入设备发送的数据相同。
六、参考例程
(1)例程框图如图4-10-5。
图4-10-5 查询式输出例程框图
(2)查询式数据输出例程
data segment
buffer db 1,2,3,4,5,6,7,8,9,10
data ends
code segment
assume cs:code,ds:data
go: mov ax,data
mov ds,ax
lea si,buffer
mov cx,10
l1: mov dx,43bH
in al,dx ; 读状态端口
test al,00000001b
jnz l1
mov al,[si]
mov dx,43ah
out dx,al ; 数据输出
inc si
loop l1
mov ah,4ch
int 21h
code ends
end go
(3)查询式数据输入例程
data segment
buffer db ?,?,"
"
;
显
示
缓
冲
区
p
o
r
t
d
a
t
a
e
q
u
43
a
H
p
o
r
t
s
t
a
t
u
s
e
q
u
43
b
H
s
d
b
"
P
r
e
s
s
a
n
y
k
e
y
t
o
e
x
i
t
.
.
.
"
,
0
d
h
,
0
a
h
,
"
" ;显示缓冲区 port_data equ 43aH port_status equ 43bH s db " Press any key to exit...",0dh,0ah,"
";显示缓冲区portdataequ43aHportstatusequ43bHsdb"Pressanykeytoexit...",0dh,0ah,""
data ends
code segment
assume cs:code,ds:data
go: mov ax,data
mov ds,ax
mov dx,offset s ;显示提示
mov ah,9
int 21h
mov cx,10
L1: mov ah,0bh
int 21h ;检测有无按键
cmp al,0FFh
jz Exit
MOV DX,port_status
IN AL,DX ; 读状态端口
TEST AL,00000010B
JZ L1
MOV DX,port_data
IN AL,DX ; 读取数据
mov si,offset buffer
mov ah,al
and al,0fh ; 低4位
cmp al,10
jnc L2 ; 不小于10
add al,48 ; A~F转ASCII码
jmp L3
L2: add al,55 ; 0~9转ASCII码
L3: mov [si+1],al
mov al,ah
mov cl,4
shr al,cl
and al,0fh ; 高4位
cmp al,10 ; 小于10
jnc L4
add al,48
jmp L5
L4: add al,55
L5: mov [si],al
mov dx,offset buffer ;显示数据
mov ah,9
int 21h
jmp L1
exit: mov ah,4ch
int 21h
code ends
end go