接口实验报告

 

计算机接口技术

实验报告

                                                                                                                                               

东北大学秦皇岛分校

实验一   可编程定时器/计数器(8253

1.计数器(倒计数)

一、实验目的

    掌握8253的基本工作原理和编程方法。

二、实验内容

    按图16虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。

三、编程提示

                                                                   8253控制寄存器地址           283H

                                                                      计数器0地址          280H

                                                                      计数器1地址           281H

                                                                      CLK0连接时钟       1MHZ

四、实验原理图+连线

五、源程序代码

;*************************;

;*  8253方式0计数器实验  *;

;*************************;

io8253a                                                         equ 283h-0280h

io8253b                                                         equ 280h-0280h

io_plx_device_id                                         equ 05406h  ;TPC卡设备ID

io_plx_vendor_id                                        equ 010b5h  ;TPC卡厂商ID

IO_PLX_SUB_ID                                       EQU 0905410B5H   ;TPC卡子设备及厂商ID

data segment

io_base_address                                         db 4 DUP(0)      ;TPC卡I/O基地址暂存空间

pcicardnotfind                                            db 0dh,0ah,'TPC pci card not find or address/interrupt error !!!',0dh,0ah,'$'

iobaseaddress                                             db 0dh,0ah,'TPC pci card I/O Base Address : ','$'

enter_return                                                db 0dh,0ah,'$'

data ends

stacks segment

 db 100 dup(?)

stacks ends

code segment

                                                                      assume  cs:code,ds:data,SS:STACKS,es:data

.386

start:

                                                                      mov ax,data

                                                                      mov ds,ax

                                                                      mov es,ax

                                                                      mov ax,stacks

                                                                      mov ss,ax

                                                                      call findtpc         ;查找TPC卡资源并显示

                                                                       mov al,14h       ;设置8253通道0为工作方式2,二进制计数

                                                                       mov  dx,word ptr io_base_address

                                                                       add  dx,io8253a

                                                                       out dx,al

                                                                       mov  dx,word ptr io_base_address

                                                                       add  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

findtpc proc near                                        ;查找TPC卡资源并显示

                                                                      pushad

                                                                      pushfd

                                                                      MOV     AX,0B101H

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;检查PCI BIOS是否存在

                                                                      MOV     AX,0B102H

                                                                      MOV     CX,io_plx_device_id

                                                                      MOV     DX,io_plx_vendor_id

                                                                      MOV     SI,0

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;检查TPC卡是否安装,设备号、厂商号

                                                                      MOV     AX,0B10AH

                                                                      MOV     DI,02CH

                                                                      INT       1AH

                                                                      JC   findtpc_notfind

                                                                      CMP     ECX,IO_PLX_SUB_ID

                                                                      JNZ       findtpc_notfind        ;检查TPC卡是否安装,子设备号、厂商号

                                                                      MOV     AX,0B10AH

                                                                      MOV     DI,18H

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;读TPC卡I/O基址信息

                                                                      mov       dword ptr io_base_address,ecx

                                                                      and ecx,1

                                                                      jz    findtpc_notfind        ;检查是否为i/o基址信息

                                                                      mov       ecx,dword ptr io_base_address

                                                                      and ecx,0fffffffeh

                                                                      mov       dword ptr io_base_address,ecx   ;去除i/o指示位并保存

                                                                      mov       dx,offset iobaseaddress         ;显示i/o提示信息

                                                                      mov       ah,09h

                                                                      int   21h

                                                                      mov       ax,word ptr io_base_address

                                                                      call dispword                   ;显示i/o基地址

                                                                      mov       dx,offset enter_return            ;加回车符,换行符

                                                                      mov       ah,09h

                                                                      int   21h

                                                                      popfd

                                                                      popad

                                                                      ret

findtpc_notfind:

                                                                      mov dx,offset pcicardnotfind              ;显示未找到tpc卡提示信息

                                                                      mov ah,09h

                                                                      int 21h

                                                                      mov ax,4c00h

                                                                      int 21h          ;退出

findtpc endp

dispword proc near                                     ;显示子程序

                                                                      push dx

                                                                      push cx

                                                                      push bx

                                                                      mov cx,4

                                                                      mov bx,16

dispword_loop1:

                                                                      push ax

                                                                      push cx

                                                                      sub bx,4

                                                                      mov cx,bx

                                                                      shr ax,cl

                                                                      and al,0fh    ;首先取低四位

                                                                      mov dl,al

                                                                      cmp dl,9      ;判断是否<=9

                                                                      jle dispword_num           ;若是则为'0'-'9',ASCII码加30H

                                                                      add dl,7 ;否则为'A'-'F',ASCII码加37H

dispword_num:

                                                                      add dl,30h

                                                                      mov ah,02h  ;显示

                                                                      int 21h

                                                                      pop cx

                                                                      pop ax

                                                                      loop dispword_loop1

                                                                      pop bx

                                                                      pop cx

                                                                      pop dx

                                                                      ret          ;子程序返回

dispword endp

code ends

end start

六、实验结果

2.可编程定时器

一、实验目的

    掌握8253的基本工作原理和编程方法。

二、实验内容

    按图17连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ

三、编程提示

    1、                                                        8253控制寄存器地址    283H

                                                                      计数器0地址          280H

                                                                      计数器1地址           281H

                                                                      CLK0连接时钟       1MHZ

四、实验原理图+连线

五、源程序代码

;*******************

;*    8253分频     *

;*******************

io8253a                                                         equ 280h-0280h

io8253b                                                         equ 281h-0280h

io8253c                                                         equ 283h-0280h

io_plx_device_id                                         equ 05406h  ;TPC卡设备ID

io_plx_vendor_id                                        equ 010b5h  ;TPC卡厂商ID

IO_PLX_SUB_ID                                       EQU 0905410B5H   ;TPC卡子设备及厂商ID

data segment

io_base_address                                         db 4 DUP(0)      ;TPC卡I/O基地址暂存空间

pcicardnotfind                                            db 0dh,0ah,'TPC pci card not find or address/interrupt error !!!',0dh,0ah,'$'

iobaseaddress                                             db 0dh,0ah,'TPC pci card I/O Base Address : ','$'

enter_return                                                db 0dh,0ah,'$'

data ends

stacks segment

 db 100 dup(?)

stacks ends

code segment

                                                                      assume   cs:code,ds:data,SS:STACKS,es:data

.386

start:

                                                                      mov ax,data

                                                                      mov ds,ax

                                                                      mov es,ax

                                                                      mov ax,stacks

                                                                      mov ss,ax

                                                                      call findtpc         ;查找TPC卡资源并显示

                                                                      mov  dx,word ptr io_base_address

                                                                      add  dx,io8253c     ;向8253写控制字

                                                                      mov al,36h       ;使0通道为工作方式3

                                                                      out dx,al

                                                                      mov ax,1000      ;写入循环计数初值1000

                                                                      mov  dx,word ptr io_base_address

                                                                      add  dx,io8253a

                                                                      out dx,al        ;先写入低字节

                                                                      mov al,ah

                                                                      out dx,al        ;后写入高字节

                                                                      mov  dx,word ptr io_base_address

                                                                      add  dx,io8253c

                                                                      mov al,76h       ;设8253通道1工作方式2

                                                                      out dx,al

                                                                      mov ax,1000      ;写入循环计数初值1000

                                                                      mov  dx,word ptr io_base_address

                                                                      add  dx,io8253b

                                                                      out dx,al        ;先写低字节

                                                                      mov al,ah

                                                                      out dx,al        ;后写高字节

                                                                      mov ah,4ch       ;程序退出

                                                                      int 21h

findtpc proc near                                        ;查找TPC卡资源并显示

                                                                      pushad

                                                                      pushfd

                                                                      MOV     AX,0B101H

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;检查PCI BIOS是否存在

                                                                      MOV     AX,0B102H

                                                                      MOV     CX,io_plx_device_id

                                                                      MOV     DX,io_plx_vendor_id

                                                                      MOV     SI,0

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;检查TPC卡是否安装,设备号、厂商号

                                                                      MOV     AX,0B10AH

                                                                      MOV     DI,02CH

                                                                      INT       1AH

                                                                      JC   findtpc_notfind

                                                                      CMP     ECX,IO_PLX_SUB_ID

                                                                      JNZ       findtpc_notfind        ;检查TPC卡是否安装,子设备号、厂商号

                                                                      MOV     AX,0B10AH

                                                                      MOV     DI,18H

                                                                      INT       1AH

                                                                      JC   findtpc_notfind        ;读TPC卡I/O基址信息

                                                                      mov       dword ptr io_base_address,ecx

                                                                      and ecx,1

                                                                      jz    findtpc_notfind        ;检查是否为i/o基址信息

                                                                      mov       ecx,dword ptr io_base_address

                                                                      and ecx,0fffffffeh

                                                                      mov       dword ptr io_base_address,ecx   ;去除i/o指示位并保存

                                                                      mov       dx,offset iobaseaddress         ;显示i/o提示信息

                                                                      mov       ah,09h

                                                                      int   21h

                                                                      mov       ax,word ptr io_base_address

                                                                      call dispword                   ;显示i/o基地址

                                                                      mov       dx,offset enter_return            ;加回车符,换行符

                                                                      mov       ah,09h

                                                                      int   21h

                                                                      popfd

                                                                      popad

                                                                      ret

findtpc_notfind:

                                                                      mov dx,offset pcicardnotfind              ;显示未找到tpc卡提示信息

                                                                      mov ah,09h

                                                                      int 21h

                                                                      mov ax,4c00h

                                                                      int 21h          ;退出

findtpc endp

dispword proc near                                     ;显示子程序

                                                                      push dx

                                                                      push cx

                                                                      push bx

                                                                      mov cx,4

                                                                      mov bx,16

dispword_loop1:

                                                                      push ax

                                                                      push cx

                                                                      sub bx,4

                                                                      mov cx,bx

                                                                      shr ax,cl

                                                                      and al,0fh    ;首先取低四位

                                                                      mov dl,al

                                                                      cmp dl,9      ;判断是否<=9

                                                                      jle dispword_num           ;若是则为'0'-'9',ASCII码加30H

                                                                      add dl,7 ;否则为'A'-'F',ASCII码加37H

dispword_num:

                                                                      add dl,30h

                                                                      mov ah,02h  ;显示

                                                                      int 21h

                                                                      pop cx

                                                                      pop ax

                                                                      loop dispword_loop1

                                                                      pop bx

                                                                      pop cx

                                                                      pop dx

                                                                      ret          ;子程序返回

dispword endp

code ends

end start

六、实验结果

实验二  交通灯控制实验

一.实验目的

    通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。

二.实验内容

如图-29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。

三.编程提示: 十字路口交通灯的变化规律要求:

(1南北路口的绿灯、东西路口的红灯同时亮30秒左右。

(2南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。

(3南北路口的红灯、东西路口的绿灯同时亮30秒左右。

(4南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。

(5转(1)重复。

四、实验原理图+连线

五、源程序代码

;***********************************;

;*    十字路口红绿灯模拟演示程序   *;

;* 端口各灯的设置:                 *;

;*   1红 1黄 1绿 0 0 2红 2黄 2绿   *;

;***********************************;

 io8255a    equ 28ah-0280h

 io8255b    equ 28bh-0280h

 io_port_addre      equ 0cf8h   ;32位配置地址端口

 io_port_data       equ 0cfch   ;32位配置数据端口

 io_plx_id      equ 0540610b5h  ;TPC卡设备及厂商ID

data segment

 portc1  db  24h,44h,04h,44h,04h,44h,04h   ;六个灯可能

    db  81h,82h,80h,82h,80h,82h,80h   ;的状态数据

    db  0ffh                          ;结束标志

 io_9054base_address     db 4 DUP(0) ;TPC卡9054芯片I/O基地址暂存空间

 io_base_address         db 4 DUP(0) ;TPC卡I/O基地址暂存空间

 memory_base_address     db 4 DUP(0) ;TPC卡MEMORY基地址暂存空间

 interrupt_line          db 2 DUP(0)  ;TPC卡中断号暂存空间

 pcicardnotfind     db 0dh,0ah,'TPC pci card not find or address/interrupt error !!!',0dh,0ah,'$'

 io9054baseaddress       db 0dh,0ah,'TPC pci card 9054 Chip I/O Base Address : ','$'

 iobaseaddress      db 0dh,0ah,'TPC pci card I/O Base Address : ','$'

 memorybaseaddress  db 0dh,0ah,'TPC pci card Memory Base Address : ','$'

 intnumber      db 0dh,0ah,'TPC pci card Interrupt Line : ','$'

 enter_return       db 0dh,0ah,'$'

data ends

stacks segment

 db 100 dup(?)

stacks ends

code  segment

      assume  cs:code,ds:data,SS:STACKS,es:data

.386    ;386模式编译

start:

    mov   ax,data

    mov   ds,ax

    mov es,ax

    mov ax,stacks

    mov ss,ax

    call findtpc1       ;查找TPC卡资源并显示

    mov  dx,word ptr io_base_address

    add  dx,io8255b

    mov   al,90h

    out   dx,al           ;设置8255为C口输出

    mov  dx,word ptr io_base_address

    add  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,00f00h           ;参数赋初值

    test  al,21h          ;是否有绿灯亮

    jz    de1             ;没有,短延时

    mov   cx,0ffffh       ;有,长延时

de1:    mov   di,0ffffh         ;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          ;返回DOS

    int   21h

findtpc1 proc near      ;查找TPC卡资源并显示

    pushad

    pushfd

    mov ebx,080000000h

findtpc1_next:

    add ebx,100h

    cmp ebx,081000000h

    jnz findtpc1_continue

    mov dx,offset pcicardnotfind    ;显示未找到tpc卡提示信息

    mov ah,09h

    int 21h

    mov ah,4ch

    int 21h         ;退出

findtpc1_continue:

    mov dx,io_port_addre

    mov eax,ebx

    out dx,eax      ;写地址口

    mov dx,io_port_data

    in  eax,dx      ;读数据口

    cmp eax,io_plx_id

    jnz findtpc1_next   ;检查是否发现tpc卡

    mov dx,io_port_addre

    mov eax,ebx

        add eax,14h

    out dx,eax      ;写地址口

    mov dx,io_port_data

    in  eax,dx      ;读数据口

    mov dword ptr io_9054base_address,eax

    and eax,1

    jz findtpc1_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,18h

    out dx,eax      ;写地址口

    mov dx,io_port_data

    in  eax,dx      ;读数据口

    mov dword ptr io_base_address,eax

    and eax,1

    jz findtpc1_next    ;检查是否为i/o基址信息

    mov eax,dword ptr io_base_address

    and eax,0fffffffeh

    mov dword ptr io_base_address,eax   ;去除i/o指示位并保存

    mov dx,io_port_addre

    mov eax,ebx

    add eax,1ch

    out dx,eax      ;写地址口

    mov dx,io_port_data

    in  eax,dx      ;读数据口

    mov dword ptr memory_base_address,eax

    and eax,1h

    jnz findtpc1_next   ;检查是否为memory基址信息

    mov eax,dword ptr memory_base_address

    and eax,0fffffff0h

    mov dword ptr memory_base_address,eax   ;去除memory指示位并保存

    mov dx,io_port_addre

    mov eax,ebx

    add eax,3ch

    out dx,eax      ;写地址口

    mov dx,io_port_data

    in  eax,dx      ;读数据口

    and eax,0ffh

    mov word ptr interrupt_line,ax      ;去除interrupt其它指示位并保存

        mov dx,offset io9054baseaddress      ;显示i/o提示信息

    mov ah,09h

    int 21h

        mov ax,word ptr io_9054base_address

    call findtpc1_disp      ;显示i/o基地址

    mov dx,offset iobaseaddress ;显示i/o提示信息

    mov ah,09h

    int 21h

    mov ax,word ptr io_base_address

    call findtpc1_disp      ;显示i/o基地址

    mov dx,offset memorybaseaddress ;显示memory提示信息

    mov ah,09h

    int 21h

    mov ax,word ptr memory_base_address+2

    call findtpc1_disp      ;显示memory基地址高16位

    mov ax,word ptr memory_base_address

    shr ax,16

    call findtpc1_disp      ;显示memory基地址低16位

    mov dx,offset intnumber ;显示interrupt提示信息

    mov ah,09h

    int 21h

    mov ax,word ptr interrupt_line

    call findtpc1_disp      ;显示interrupt号

    mov dx,offset enter_return  ;加回车符,换行符

    mov ah,09h

    int 21h

    popfd

    popad

    ret

findtpc1 endp

findtpc1_disp proc near     ;显示子程序

    push dx

    push cx

    push bx

    mov cx,4

    mov bx,16

findtpc1_disp_loop1:

    push ax

    push cx

    sub bx,4

    mov cx,bx

    shr ax,cl

    and al,0fh  ;首先取低四位

    mov dl,al

    cmp dl,9    ;判断是否<=9

    jle findtpc1_disp_num       ;若是则为'0'-'9',ASCII码加30H

    add dl,7    ;否则为'A'-'F',ASCII码加37H

findtpc1_disp_num:

    add dl,30h

    mov ah,02h  ;显示

    int 21h

    pop cx

    pop ax

    loop findtpc1_disp_loop1

    pop bx

    pop cx

    pop dx

    ret     ;子程序返回

findtpc1_disp endp

code ends

end start

六、实验结果

mov   cx,20           ;参数赋初值

    test  al,21h          ;是否有绿灯亮

    jz    de1             ;没有,短延时

    mov   cx,2000         ;有,长延时

de1:    mov   di,9000         ;di赋初值5000

改成

mov   cx,00f00h           ;参数赋初值

    test  al,21h          ;是否有绿灯亮

    jz    de1             ;没有,短延时

    mov   cx,0ffffh       ;有,长延时

de1:    mov   di,0ffffh         ;di赋初值5000

 

第二篇:接口与实现 实验报告

XXXXXXXX

实 验 报 告

XXXXXXXXXX

系 部 计算机系 班 级

姓 名 XXXX班 课 程 Java语言程序设计 XXXX 学 号 2XXXXX 日 期 XXXXXXXXXXX

项 目 接口与实现 ——评价成绩

1.相关知识点

接口体中只有常量的声明(没有变量)和抽象方法的声明。而且接口体中所有的常量的访问权限一定都是public(允许省略public、final修饰符),所有的抽象方法的访问权限一定都是public(允许省略public、final修饰符)。

接口由类去实现以便绑定接口中的方法。一个类可以实现多个接口,类通过使用关键字implements声明自己实现一个或多个接口。如果一个非抽象类实现了某个接口,那么这个类必须重写该接口的所有方法。

2.实验目的

本实验的目的是让学生掌握类怎样实现接口。

3.实验要求

体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均分,而学校考察一个班级的某科目的考试情况时,是计算全班同学的平均成绩。Gymnastics类和School类都实现了ComputerAverage接口,但实现的方式不同。

4.程序源代码

interface ComputerAverage

接口与实现实验报告

{

public duble average(double x[]);

}

class Gymnastics implements ComputerAverage {

public double average(double x[]); {

int count=x.length;

double aver=0,temp=0;

for(int i=0;i<count;i++){

for(int j=0;j<count;j++){ if(x[j]<x[i])

{

temp=x[j];

x[j]=x[i];

x[i]=temp;

}

}

}

for(int i=0;i<count-1;i++)

{

aver=aver+x[i];

}

if(count>2)

aver=aver/(count-2);

else

aver=0;

return aver;

}

}

class School implements ComputerAverage

{

public double average(double x[]);

{

int count=x.length;

double aver=0;

for(int i=0;i<count;i++){

aver=aver/count;

return aver;

}

}

}

public class Estimastor

{

public static void main(String args[])

{

double a[]={9.89,9.88,9.99,9.12,9.69,9.76,8.97};

double b[]={89,56,78,90,100,77,56,45,36,79,98};

ComputerAverage computer;

computer=new Gymnastics();

double result= computer.average(a);

System.out.printf(“%n”);

System.out.printf(“体操选手最后得分:%5.3f﹨n”,result); computer=new school();

result=computer.average(b);

System.out.printf(“班级考试平均分数:%-5.2f”,result);

}

}

5.运行效果示例

程序运行效果:

接口与实现实验报告

6.实验小结

(1)可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法。

(2)接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方法。

相关推荐