编程实验
Windows中断实验
一)实验目的
了解Windows下中断处理过程
比较中断和查询两种数据交换方法的效率差别
二)实验内容
1. 用查询和中断方式分别实现控制指示灯,然后在任务栏比较中断和查询方式下CPU利用率的差别。 1)用查询方式将8255的A口设为输出,接指示灯L0~L7,C口设为输入并将PC0接正脉冲输入,CS接到实验台的138译码的8组I/O地址中的任意一组上,通过程序不断地查询PC0的输入值,当为高电平的时候让指示灯显示一秒钟的0x55(软件延时),否则让指示灯显示0xAA。 2)用中断方式 将8255的A口设为输出,接指示灯L0~L7,CS接到实验台的138译码的8组I/O地址中的任意一组上,IRQ直接接到实验台上的单脉冲,要求直接用手动产生的单脉冲作为中断请求信号,每按一次单脉冲产生一次中断让指示灯显示一秒钟的0x55,否则让指示灯显示0xAA。
2. 利用实验二的第二个实验产生一个周期为1秒的中断,编程在中断处理程序中打印中断的次数到计算机屏幕上。
三)参考程序
下面只给出中断方式实现控制指示灯的程序,作为中断程序的一个例子,其他实验请同学们自己编写相关程序。
/************************/
/* 中断实验(中断方式) */
/************************/
#include
#include
#include "ApiEx.h"
#pragma comment(lib," ApiEx.lib")
int i;
void MyISR()
{
PortWriteByte(0x288,0x55);
Sleep(1*1000);
printf("%d\n",i++);
}
void main()
{
printf("--------------------EXP3_INT2---------------------\n");
printf("Press any key to begin!\n\n");
getch();
if(!Startup()) /*打开设备*/
{
printf("ERROR: Open Device Error!\n");
return;
}
printf("Please Press DMC! Press any key to exit!\n");
PortWriteByte(0x28b,0xa0);
RegisterLocalISR(MyISR); /*注册中断程序*/
EnableIntr(); /*开中断*/
while(!kbhit())
{
PortWriteByte(0x288,0xaa);
Sleep(100);
}
DisableIntr(); /*关中断*/
Cleanup(); /*关闭设备*/
}
全部0条评论
快来发表一下你的评论吧 !