计算机接口技术实验一.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