计算机接口实验1,计算机接口技术实验一.doc

这是一个关于PC机的定时与中断接口技术实验报告,内容涉及8253定时器/计数器和8255并行I/O接口的编程操作。实验要求学生使用TURBOC++设计程序,实现输入定时时间后,每秒显示当前秒数并伴随蜂鸣器提示,当达到设定时间则显示'TimeUp!'并结束程序。
摘要由CSDN通过智能技术生成

计算机接口技术实验一.doc

数学与计算机学院

《计算机接口技术 实验报告

专业:网络工程

班级:1202

学号:1205110121

姓名:吴天亮

郭峰林

实验1定时与中断接口程序设计

一实验目的

丫解定时器/计数器8253、并行I/O接LI 8255A在PC机中的电路连接方法;

学川吏用TURBO C++对8253、8255进行编程操作;

熟悉拦截PC机中断向;W;的TC++编程方法。

二实验内容

1.8253、8255在PC/XT机中的电路连接介绍

2OH~21H

A9...A2CZJ)

腿湖

CPU

D7...D0

INT I0R 丽

AO

8088 a1

IOM

A9...A2

40H ?43H

1.

?

?

CS

INTA

INT

IR0

IR1

8253

D7...D0

OUTO

RD

GATE0

A0

OUT1

A1

GATE1

CS

OVT2

GATE2

A

8259A

至8259 IRQO,中断类型=8

+5V

至DM刷新请求 +5V

A9 …

60H?

19MHz」

8255

PBO

CS

PB1

CLK0 丄 2

PC机启动P,系统设置的初始状态为:

芯片

有关工作方式

初值

运行情况

8253

通道0#:方式3 (方波发生器)

计数初值:0000H

OUT输出55ms方波至8259的1RQ0

通道 2#: ? (IKHz)

计数初位:?(1190)

? (1 KHz 方波)

8255

PBO、PB1:方式0 (简单输出)

控制蜂鸣器发声。0:不发声,1:发声

8259

IRQ0:允许中断

中断类型号:8

CPU响应8号中断

表中,8253的通道2#的工作方忒和计数初值未知,要求自己设置。

2.程序要求

利用TURBO C++开发环境设计程序,实现如卜功能:

(1)程序启动时,要求输入定时时间,以秒为单位。

(2)按秒计时,每秒到达时,在屝幕上显示:当前为第几秒,同时蜂鸣器发出短促叫声;

(3)当定时吋间到,则显示“Time Up!”,结朿程序。

三实验环境

硬件环境:PC机一台;

软件环境:操作系统不限,TURBO C++3.0c

US实验步骤

US

实验步骤

1.建立源文件

启动 TURBO C++3.0,建立 Timer.CPP。保存到 DA XXX (学号)\Timer.CPP;

2 .设置TC工作目录

选菜单Optkms/Directories,第1、2栏保持不变,第3、4栏填写您的文件存放R录, 注意目录名不能超过8个英文字符,且所设目录要事先逑立好。如此,TC生成的可执行文 件等将会存放到此工作目录下。

样例如下:

五核心代码

#include

#include

include

#ifdef _cplusplus

#define _CPPARGS ...

#else

#define _CPPARGS

#endif

int nTick=O,sec=O,flag=O;

unsigned char sys_PB,my_PB;

void interrupt far (*sys_int_08)(_CPPARGS); void interrupt far my_int_08(_CPPARGS)

{

++nTick;

if(nTick ==1) outportb(0x61 ,my_PB); else if(nTick ==3) outportb(0x61,0x01);

else if(nTick>18)

flag=l;

nTick=O;

sec++;

}

sysJnt_08();

}

//===========二=======

void main()

{ unsigned int Time_up;

printf(’’Please input Up Time(5—30):

scanf(n%d’’,&Time_up);

printf(*’\nn);

if(Time_up<5 || Time_up〉30)

{ printf(’’Input Error! ’’);

exit(l);

sys_PB=inportb(0x61); my_PB=sys_PB |0x03;

outportb(0x43,0xb6); outportb(0x42,0xa6);

outportb(0x42,0x04);

sys_int_O8=getvect(OxO8);

setvect(OxO8,my_int_O8);

while(l)

{ if(flag=l)

{ flag=O;

printf(n%d ”,sec); if(sec==Time_up) break;

}

}

printf(’’Timer Up!\n\n’’); outportb(0x61,sys_PB); setvect(O

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值