📄 intlight.cpp
字号:
//*------------------------------------------------------*/
//* IntLight.cpp(中断方式点亮彩灯实验) */
//* 中断方式点亮彩灯实验 Source File */
//* Copyright (c) 2005 by HUST */
//*------------------------------------------------------*/
#include<dos.h>
#include<conio.h>
#include<stdio.h>
#ifdef __cplusplus //if in C++ mode
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
//连接J5,J6;跳JP8 SW接PC2,PC4接irq10或irq2
int i=-1;
unsigned char led_code[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void interrupt light_led(__CPPARGS)
{
disable();
if(i==7)
i=0;
else
i++;
outportb(0x300,led_code[i]);
//printf("in interrupt!!!\n"); //测试语句,若要看是否进入到中断程序,可以将此注释开关打开
outportb(0xa0,0x62);//向从片8259发EOI命令
outportb(0x20,0x20);//向主片8259发EOI命令
enable();
}
void main()
{
void interrupt (*oldhandler)(__CPPARGS);
int status;
oldhandler=getvect(0x72);//获取原中断向量
setvect(0x72,light_led);//设置新中断向量
status=inportb(0xa1);
outportb(0xa1,status&0xfb);//打开IRQ10(OCW1)
status=inportb(0x21);
outportb(0x21,status&0xfb);//打开IRQ2(OCW1)
outportb(0x303,0x81);
outportb(0x300,0xff);
printf("Please press the sw to triger the interrupt,and any key to ESC");
while(!kbhit())
{
if (!(inportb(0x302)&0x04)) // 当有键按下
{
delay(15); //延时10毫秒
if(inportb(0x302)&0x04) //看按键是否松开,若松开,则发中断信号,保证按一次只发一次中断
{
outportb(0x303,0x09);
delay(10);
outportb(0x303,0x08);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -