![ADLINK Technology ACL-7122 Скачать руководство пользователя страница 33](http://html1.mh-extra.com/html/adlink-technology/acl-7122/acl-7122_user-manual_2852685033.webp)
24
•
Digital I/O Programming
#define IRQ2 0x0a
#define EOI 0x20
#define BASE_ADDR 0x2c0
#define PA 0x00
#define PB 0x01
#define PC 0x02
#define CW 0x03
void interrupt isr_7122()
{
printf("\7"); // beep
outportb( 0x20, EOI); // EOI of 8259
}
main()
{
int mask, keyin;
void interrupt (*old_irq2_isr)();
old_irq2_isr = getvect( IRQ2);
setvect( IRQ2, isr_7122);
mask = inportb( 0x21);
outportb( BAS CW, 0x80); // set PA, PB and PC
// as output mode
clrscr(); // clear screen
printf( " press <ESC> to QUIT \n");
do
{
keyin = 0;
printf(" press any key to genetate an interrupt
except <ESC>\n");
keyin = bioskey(0);
outportb( 0x21, 0xbf & mask); // IRQ2 nonmasked
outportb( BAS PC, 0x00);
delay( 100);
outportb( BAS PC, 0x08);
} while( (keyin & 0xff) != 27); // QUIT when ESC pressed
setvect( IRQ2, old_irq2_isr); // restore old isr
outportb( 0x21, mask); // restore 8259 mask}