阅读:2101回复:0
清各位帮忙看看这个并口中断程序!
下面是我写的一个并口中断程序,觉得没有什么问题,但就是不能产生中断。
我是用并口的/ack口作为中断(好像也只能用它)输入的。但是不知道有没有比较简便的产生中断信号的方法。 希望各位大侠帮忙解决。 #include <bios.h> #include <dos.h> #define DATA 0x378 /*并口基地址*/ #define STATUS DATA+1 #define CONTROL DATA+2 #define TRUE 1 #define FALSE 0 void open_isr(void); /*安装中断*/ void clos_isr(void); /*卸载中断*/ void int_proc(void); void interrupt far intserv(void); /*中断处理子程序*/ int intlev=0x0f; void interrupt far (*oldfunc)(); /*用于存放旧的中断入口地址*/ int int_ocr=FALSE; int main(void) { open_isr(); outportb(CONTROL,inportb(CONTROL)|0x10); while(1) /*死循环等待中断*/ { if(int_ocr) {int_ocr=FALSE; printf("IRQ Occured!"); break; } } clos_isr(); return(0); } void interrupt far intserv(void) { disable(); int_proc(); int_ocr=TRUE; enable(); } void open_isr(void) { unsigned char int_mask; disable(); oldfunc=getvect(intlev); setvect(intlev,intserv); int_mask=inportb(0x21); outportb(0x21,int_mask&~0x80); enable(); } void clos_isr(void) { int int_mask; disable(); setvect(intlev,oldfunc); int_mask=inportb(0x21)|0x80; outportb(0x21,int_mask); enable(); } void int_proc(void) { outportb(0x20,0x20); } |
|
最新喜欢:wingma... |