接口实验报告
班级: 0313班
姓名: 吴传文
学号: 012003016704
实验一:并行接口实验
实验内容:
利用8255接口控制显示灯逐位循环点亮。
实验要求:
当C口的PC7=1状态时,用开关(SW4按下)控制,显示灯从高位到低位逐位循环点亮(右循坏);
当C口的PC0=1状态时,用开关(SW1按下)控制,显示灯从低位到高位逐位循坏点亮(左循坏)。
硬件接线要求:
PA0~PA7分别接显示灯L0~L7 。
按钮开关SW1接C口的PC0,按钮开关SW4接C口的PC7。
U102(74LS245)芯片的OE#接地。
JP8短接,扁平线J5需连接,扁平线J3不需连接。
并口8255的应用说明:
命令口地址为303H;命令口用作确定A,B,C各端口的工作方式。
A口地址为300H。A口作输出口(接指示灯L0~L7)。
C口地址为302H,C口的状态受开关SWi控制。
实验源程序:
stack segment stack
db 1000 dup(0)
stack ends
code segment
assume cs:code,ss:stack
start: mov dx,303h ;置8255为A口方式0输出
mov al,89h ;控制字10001001B
out dx,al
mov bl,1 ;置循坏初值
next: mov al,bl
mov dx,300h
out dx,al ;把BL的值写入A口
mov dx,302h
in al,dx ;读C口状态的值
and al,80h
jz left ;判断是否是开关SW1按下(左循坏 )
and al,01h
jz right ;判断是否是开关SW4按下(右循坏)
jnz nextt
right: ror bl,1
mov al,bl
mov dx,300h
out dx,al
mov dx,302h
in al,dx
and al,80h
jz left
jmp nextt1
left: rol bl,1
mov al,bl
mov dx,300h
out dx,al
mov dx,302h
in al,dx
and al,01h
jz right
jmp nextt2
nextt: mov ah,06h ;判键盘按下退出
mov dl,0ffh
int 21h
jnz ppp
call delay
jmp next
nextt1: mov ah,06h
mov dl,0ffh
int 21h
jnz ppp
call delay
jmp right
nextt2: mov ah,06h
mov dl,0ffh
int 21h
jnz ppp
call delay ;调延时子程序
jmp left
ppp: mov ah,4ch
int 21h
delay proc near ;延时子程序
mov ax,1000
lll: mov cx,0 ;减1为最大数
ll: loop ll
dec ax
jne lll
ret
delay endp
code ends
end start
实验二:串行通讯接口
实验目的:
掌握串行接口芯片8251的工作原理及串行通讯的收/发编程方法
实验内容:
1:甲乙两台微机之间,按RS-232C标准协议,进行零MODEM方式,全双工串行通信。所谓全双工是双方通过各自的键盘按键发送,同时接收对方发来的字符。发送与接收的字符均在屏幕上显示。通信数格式为起止式:1位停止位,7位数据位,无校验,波特率因子为16。波特率为1200bps。按ESC键,退出。
2、电路的8251控制口地址为309H,8251数据口地址为308H。8255按位/置位和工作方式命令字端口地址为303H 。8253计数器用于产生8251的发送和接收的时钟。8253控制口地址为307H,计数器的计数初值=时钟频率/(波特率×波特率因子),8253的2号计数器端口地址为306H,实验中,时钟频率约为1MHZ,波特率选1200,波特率因子选16,则计数器初值约等于52。即TC=(1×106)/(1200位/秒×16次/位)≈52
3.采用查询方式串行通讯。设置8253工作方式字为b6H
1 0 1 1 0 1 1 0
D7 D6 D5 D4 D3 D2 D1 D0
计数器选择 读写字节数 工作方式 码 制
D0=0,选择二进制码;D3 D2 D1=011,为3方式,表示自动装入计数初值,输出连续方 波(作为收/发时钟脉冲);D5 D4=11,表示仅从端口地址读/写一个字;D7 D6=10,为选 择 2号计数器。
实验要求:
采用两台MFID平台板上的串行接口电路进行硬件连接,分别编写甲乙两机各自的发送与接收程序,并进行调试,直至程序正常运行。
实验原理:
1.RS-232标准串行通信接口电路原理如图2.1.21所示。接口电路以8251为核心,8253提供发/收时钟,8255控制8253的Gate门。另外,还有MAX232作电平转换,MAX491作RS-232与RS-485的转换、JP31作中断申请开关等。因此,该接口电路可实现两种接口标准和查询/中断两种方式的串行通信。
2.RS-232C标准串行通信接口电路设计原理和方法的详细阐述,参考”微机接口技术及应用”教材第9.6节(P233~240)
实验资源配置:
1.电源: 机内供电,将平台板JP-1跳接块置于1-2位置。
2.I/O端口地址: 8251的两个端口地址为:数据口=308H,命令/状态口=309H,DIP4地址开关全部为“ON”。
3.电缆线:采用两端带DB-9型插头的3芯屏蔽电缆。
4.软件资源:MF2KI集成开发环境与工具。
实验程序样例:
data51 equ 308h ;8251A数据口
ctr151 equ 309h ;8251A命令/状态口
timer2 equ 306h ;8253的2号计数器端口
timctl equ 307h ;8253命令口
clk00 equ 12h ;8251输入时钟频率(十六进制表示)
clk01 equ 34deh
factor equ 16 ;波特率因子16
data segment
bps00 dw (?)
mes1 db 'now enter the serial communication',0ah,0dh
db 'end with esc',0ah,0dh,'$'
input_message db ' baud_rate is 1200:'
db 0dh,0ah,'$'
data ends
code segment
assume cs:code, ds:data
int51 proc near ;8251A初始化子程
mov dx,ctr151 ;8251A命令口
xor ax,ax ;空操作
call charout ;送数子程
ll: loop ll
mov al,40h ;内部复位
call charout
mov al,4ah ;8251A方式命令
call charout
mov al,27h ;8251A工作命令
call charout
ret
int51 endp
charout proc near
out dx,al ;送数子程
push cx
mov cx,100 ;延时
gg: loop gg
pop cx
ret ;返回
charout endp
set_bps proc near ;8253-5计数初值计算与装入子程
mov dx,clk00 ;取8253-5输入时钟频率clk作被除数
mov ax,clk01
mov bx,bps00 ;取所选波特率作第一个除数
div bx ;除法运算,商数送ax
mov dx,0 ;余数清零
mov bx,factor ;取波特率因子作第二个除数
div bx ;除法运算,得计数初值(商数)送ax
mov bx,ax ;保存计数初值至bx
mov dx,timctl ;8253-5命令口
mov al,0b6h ;8253-5初始化命令
out dx,al
mov dx,timer2 ;8253-5计数器2的端口
mov ax,bx ;取计数初值
mov ax,34h
out dx,al ;装计数初值低字节
mov al,ah ;装计数初值高字节
out dx,al
ret ;返回
set_bps endp
main proc far ;通信主程序
mov ax,data
mov ds,ax
mov ah,9
mov dx,seg input_message
mov ds,dx
mov dx,offset input_message
int 21h
mov bps00,1200 ;存入bps00
call set_bps ;调用8253-5的set_bps子程序,
;计算初初值
call int51 ;调用8251A子程序,初始化8251A
lea dx,mes1
mov ah,09
int 21h
mov dx,303h ;初始化8255A
mov al,80h
out dx,al
mov al,0dh ;置PC6=1,打开8253-5的GATE2,开始输出方波
out dx,al
checkkey:mov ah,0bh ;按键发送
int 21h
cmp al,0 ;有键按下?
Je receiv ;若无键按下,则转接收
mov ah,01 ;若有键按下,则从KB读入,并在CRT上显示
int 21h
mov bl,al ;保存键值,以备发送
cmp al,1bh ;是ESC?
je over ;是,则退出,并返回DOS
mov dx,ctr151 ;不是,则发送数据
transm: in al,dx
test al,01 ;发送准备好?TXRDY=1?
jz transm ;未准备好,则等待
mov dx,data51 ;已准备好,则将键入的字符发送出去
mov al,bl
out dx,al
jmp checkkey ;发送1个字符后,再转按键发送
receiv: mov dx,ctr151 ;接收数据
in al,dx
test al,02 ;接收数据准备好?RXRDY=1?
jz checkkey ;未准备好,即无数据接收,则转按键发送
mov dx,data51 ;已准备好,即有数据传送过来,则接收1个字符
in al,dx
mov dl,al ;显示接收的字符
mov ah,02h
int 21h
mov ah,0bh
int 21h
cmp al,00h
je checkkey
mov ah,08h
int 21h
cmp al,1bh ;是ESC?
je over ;是,则退出,返回DOS
jmp checkkey ;不是,则接收1个字符后,再转按键发送
over: mov al,0ch ;置PC6=0,关闭8253-5的GATE2,停止输出方波
mov dx,303h
out dx,al
mov ax,4c00h ;程序退出
int 21h
main endp
code ends
end main
实验心得与体会:
我认为接口实验同所有硬件实验一样有着的一个“通病”,就是理论的东西再好再对,还是要动手试一试,只有动手证明通过了,才是真的成功的!我做的两个实验都遇到这种问题了。第一个并口实验,自己改过的程序是对的,但就是不能通过,灯亮的时候不是逐个亮的,最后直接用老师给的程序试了一试,还是不行。这时才恍然大悟,赶紧换了台机器,于是就好,可惜已经11点多了。
第二个实验,程序在自己单台机器上能够通过没问题,但是两台机器一连就出问题了,接受到的都是乱码,检查得仔仔细细了,还是不行。于是便以为是连接两台机器的导线出了问题,于是换导线,但还是不行。这回可就傻了,实在不知是什么原因,好多同学也是这样,就这样干想了半天。最后还是老师有经验,指出了把频率换0.5M试试,于是就好了。
总而言之,通过本次实验,让我对课本上的一些知识加深了了解,有机会体会一下一些理论上的东西是怎样实现的。另一方面我认为这个实验是我们下学期接口课设的基础。
第二篇:接口与实现 实验报告
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)接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方法。