计算机接口技术
实验报告
东北大学秦皇岛分校
实验一:可编程计数器/定时器(8253)
1、计数器
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
按图16虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
三、编程提示
8253控制寄存器地址 283H
计数器0地址 280H
计数器1地址 281H
CLK0连接时钟 1MHZ
四、实验原理图
五、源程序代码
ioport equ 0d400h-0280h
io8253a equ ioport+283h
io8253b equ ioport+280h
code segment
assume cs:code
start: mov al,14h ;设置8253通道0为工作方式2,二进制计数
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
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
六、实验运行结果
2、定时器
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
按图17连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)
三、编程提示
8253控制寄存器地址 283H
计数器0地址 280H
计数器1地址 281H
CLK0连接时钟 1MHZ
四、实验原理图
五、实验运行结果
实验二:七段数码管
1、静态显示
一、实验目的
掌握数码管显示数字的原理
二、实验内容
静态显示:按图22连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
三、编程提示
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
四、实验原理图
五、源程序代码
ata segment
ioport equ 0d400h-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
六、实验运行结果
2、动态显示
一、实验目的
掌握数码管显示数字的原理
二、实验内容
动态显示:按图23连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。编程在两个数码管上显示“56”
三、编程提示
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
四、实验原理图
五、实验运行结果
实验三:模/数转换器
1、电压转十六进制数据
一、实验目的
了解模/数转换的基本原理,掌握ADC0809的使用方法。
二、实验内容
1、实验电路原理图如图38。通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。
启动IN0开始转换: Out 0298 0
读取转换结果: In 0298
2、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。
三、实验提示
1、ADC0809的IN0口地址为298H,IN1口地址为299H。
2、IN0单极性输入电压与转换后数字的关系为:
N=Ui/(Uref/256)
其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。
3、一次A/D转换的程序可以为
MOV DX,口地址
OUT DX,AL ;启动转换
;延时
IN AL,DX ;读取转换结果放在AL中
四、实验原理图
五、源程序代码
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
六、实验运行结果
2、波形显示
一、实验目的
了解模/数转换的基本原理,掌握ADC0809的使用方法。
二、实验内容
将JP3的1、2短接,使IN2处于双极性工作方式,并给IN1输入一个低频交流信号(幅度为±5V),编程采集这个信号数据并在屏幕上显示波形。
三、实验提示
1、ADC0809的IN0口地址为298H,IN1口地址为299H。
2、IN0单极性输入电压与转换后数字的关系为:
N=Ui/(Uref/256)
其中Ui为输入电压,UREF为参考电压,这里的参考电压为PC机的+5V电源。
3、一次A/D转换的程序可以为
MOV DX,口地址
OUT DX,AL ;启动转换
;延时
IN AL,DX ;读取转换结果放在AL中
四、实验原理图
五、实验运行结果
实验四:交通灯控制实验
一、实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二、实验内容
如图-29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。
三.编程提示: 十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
四、实验原理图
五、源程序代码
data segment
ioport equ 0d400h-0280h
io8255a equ ioport+28ah
io8255b equ ioport+28bh
portc1 db 24h,44h,04h,44h,04h,44h,04h ;六个灯可能
db 81h,82h,80h,82h,80h,82h,80h ;的状态数据
db 0ffh ;结束标志
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,io8255b
mov al,90h
out dx,al ;设置8255为C口输出
mov dx,io8255a
re_on: mov bx,0
on: mov al,portc1[bx]
cmp al,0ffh
jz re_on
out dx,al ;点亮相应的灯
inc bx
mov cx,20 ;参数赋初值
test al,21h ;是否有绿灯亮
jz de1 ;没有,短延时
mov cx,2000 ;有,长延时
de1: mov di,9000 ;di赋初值5000
de0: dec di ;减1计数
jnz de0 ;di不为0
loop de1
push dx
mov ah,06h
mov dl,0ffh
int 21h
pop dx
jz on ;没有,转到on
exit: mov ah,4ch ;返回
int 21h
code ends
end start
六、实验运行结果(包括修改程序后的实验运行结果)
第二篇:接口技术实验一实验报告
接口技术实验(一)
程序控制方式输入输出接口电路的工作 班级:电子班 学号:0839062 姓名:李 睿
一、 实验任务
1.无条件输入输出的实现。以8个拨动开关为输入外设,在现有实验箱的条件下构建一个基本输入端口,并编程控制将8个拨动开关的状态用一根地址线读入CPU内,然后通过一个基本输出端口在发光二极管上显示相应的数码,如:8个拨动开关的状态为‘1 1 1 1 0 0 0 0’,则在八段数码管上显示‘亮、亮、亮、亮、亮、灭、灭、灭、灭 ’。输入、输出端口的口地址从实验箱上的I/O地址译码输出中自行选定。
2.查询方式输入输出的实现。以拨动开关为输入外设,以发光二极管做为输出外设,在现有实验箱的条件下构建一个查询方式输入输出接口电路。具体做法:以第一个拨动开关高电平状态为‘输入准备好’的状态信号,将第一个拨动开关拨到高电平后,表示可以读取所有8个拨动开关的状态;将拨动开关的状态读入后再送到发光二极管上进行显示。如:8个拨动开关的状态为‘1 1 1 0 0 0 1 1’,则在八段数码管上显示‘亮、亮、亮、灭、灭、灭、灭、亮、亮’。
二、 实验时间
20xx年4月14日19点—22点
三、 实验原理分析
1. 无条件输入输出的实现:CPU通过端口0x4c00读取开关的状态,再通过端口0x4c00控制LED灯。
2. 查询方式输入输出的实现:通过端口0x4c08查询开关最高位的状态。当开关最高位为高电平时,CPU通过端口0x4c00读取开关的状态来控制LED灯;当开关最高位为低电平时,LED灯不受开关的影响。
四、 实验内容
☆ 软件部分
1. 无条件输入输出的实现:
Data Segment
Data ends
Code segment
Assume cs:code,ds:data Start:
Mov dx,4c00h
In al,dx
Not al
Mov dx,4c08h
Out dx,al
mov ah,0bh
int 21h
cmp al,0ffh
jnz start
mov ax,4c00h
int 21h
code ends
end start
2.查询方式输入输出的实现: Data Segment
Data ends
Code segment
Assume cs:code,ds:data Start:
Mov ax,data Mov ds,ax
One:
Mov dx,4c00h
In al,dx
Test al,01h
Jz one
Mov dx,4c00h
In al,dx
Mov dx,4c08h
Out dx,al
mov ah,0bh
int 21h
cmp al,0ffh
jnz start
mov ax,4c00h
int 21h
code ends
end start
五、 实验结果分析
1. 无条件输入输出的实现:在DOS环境下运行程序,可以通过拨动开关,调节状态,LED发生相应的变化。如:当开关状态为“01”时,第一个LED灯亮。按任意键退出程序。
2. 查询方式输入输出的实现:在DOS环境下运行程序,首先查询开关最高位的状态。当开关最高位为高电平时,CPU通过读取开关状态控制LED灯的亮与暗;当开关最高位为低电平时,LED不受开关状态影响,继续保持原来状态。
六、 实验总结与体会
其实本来是抱着试试的心态来学习这门课的,不知道这门课是不是能够去学,不过现在既然选了也就只能努力的去学习。经过这么一次的实验,我认为我的汇编真的需要继续好好复习一下了,以前的东西得捡回来了,因为试验的程序需要。据说可以用C语言做也,但是没有尝试过呢,回去自己可以试试。再则觉得老师上课说的还是很重要的啊,上课不好好听课这实验就是不好去做啊,以后上课得好好听课了,虽然这个不是很能太懂,自己还是需要好好的去研究摸索啊!