⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intlight.cpp

📁 计算机微机原理与接口实验
💻 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 + -