计算机接口技术
实验报告
东北大学秦皇岛分校
实验一 可编程定时器/计数器(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)接口产生的多态就是指不同类在实现同一个接口时可能具有不同的实现方法。
一实验目的1掌握8255A编程原理2掌握键盘的输入和数码管的显示3提高理论与实践相结合的能力强化所学内容二实验要求用8255A实现…
上海大学计算机学院计算机接口技术实验4专业计算机科学与技术班级周一13节姓名学号计算机工程与科学学院报告日期20xx年10月29日…
实验一:显示程序实验(20##年4月22日)1、实验目的及实验内容实验目的:1.掌握在PC机上以十六进制数形式显示数据的方法2.掌…
现代微机原理与接口技术接口部分实验报告学号09008112姓名马京亚成绩学号东南大学计算机科学与工程学院二一年十二月微机原理与接口…
武汉轻工大学现代微机原理与接口技术报告学号姓名班级成绩20xx年5月15日110511313王雪瑞网工一班实验1定时与中断接口程序…
一实验目的及要求目的通过本次综合实验使学生综合运用计算机接口与通信技术汇编语言以及电子技术等课程的内容为以后从事计算机检测与控制工…
微机原理与接口技术实验报告微机原理与接口技术系别专业班级姓名学号指导教师学年第学期微机原理与接口原理实验报告微机原理与接口技术实验…
《微机原理与接口技术》课程设计报告交通灯控制系统班级:学号:姓名:指导教师:成绩:20##年7月1日目录1、课程设计的目的和要求3…
实验一8255A应用数码管动态显示一实验目的1掌握8255A的工作方式编程原理和微机接口方法2了解LED数码管动态显示的工作原理及…