接口实验报告

 

计算机接口技术

实验报告

                                                                                                                                               

东北大学秦皇岛分校

实验一:可编程计数器/定时器(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语言做也,但是没有尝试过呢,回去自己可以试试。再则觉得老师上课说的还是很重要的啊,上课不好好听课这实验就是不好去做啊,以后上课得好好听课了,虽然这个不是很能太懂,自己还是需要好好的去研究摸索啊!

相关推荐