|
Не могу понять почему не работает следующий код. По идее после передачи первого символа должно быть прерывание, которое установит i в еденичку, тем самым разрешив передачу следующего символа, след. IRQ и так далее. Но не работает. Компилятор Borland++ C 3.1. //#pragma check_stack(on) #define IRQ3 0xb } isr=inportb(0x21); if(i==1) if(kbhit())
E-mail:
info@telesys.ru
P.S. Под Win2k почему-то работает.
#include
#include
#include
#include
#include
#include "port.h"
//#pragma check_pointer(on)
//void interrupt far get_out(); /* interrupt prototype */
void interrupt far (*oldvect)();
#define IRQ4 0xc
int i=1,BASE;
long d;
//char isr,a[10],b[10];
long timeout;
void interrupt far get_out()
{
_asm cli;
i=1;
outportb(0x20,0x20);
outportb(0xa0,0x20);
_asm sti;
int main(void)
{
clrscr();
_asm cli;
outportb(0x3f9,0);
oldvect=_dos_getvect(IRQ4);
_dos_setvect(IRQ4,get_out);
BASE=COM1;
outportb(CONTROL,DIVISOR);
outportb(LOW_DIV,B_300);
outportb(HIGH_DIV,B_300>>8);
outportb(CONTROL,BIT_8+STOP_1+NO_PARITY);
outportb(0x3f9,0x02);
outportb(0x21,0);
_asm sti;
for(;;)
{
{
i=0;
printf("IRQ3 set... \n");
BASE=COM1;
timeout=clock();
do
{
if((clock()-timeout)==3) printf("Timeout... \n");
}
while((inportb( STATUS)&TRH_EMPTY)==0);
outportb(OUT_REG,0x35);
}
{
_asm cli;
setvect(IRQ4,oldvect);
outportb(0x21,isr);
_asm sti;
exit(0);
}
}
}
Ответы