#define IRQ4_int 0xC /* IRQ4 interrupt vector number */
#define IRQ4_enab 0xEF /* IRQ4 interrupt cont roller enable mask */
#define INT_controller 0x20 /* 8259 Interrupt controller address */
#define End_of_interrupt 0x20 /* Non-specific end of interrupt command */
void interrupt int_char_i n(void);
void send_ctlc(void);
#define INT_BUF_size 9000
char int_buf[INT_BUF_si ze], *int_buf_in = int_buf, *in t_buf_out = int_buf;
unsigned int int_buf_count = 0;
unsigned char int_buf_ovfl = 0;
int main(int argc, char *argv[])
{
void interrupt (*oldvect)() ;
char command[80], c;
int i;
oldvect = getvect(IRQ4_int); /* Save old interrupt vector */
setvect(IRQ4_int,int_char_in); /* Set up new interrupt handler */
bioscom(0,BAUD9600 | EVEN_7,0); /* Initialize settings for COM1 */
outportb(MCR,0x9); /* Enable IRQ buffer, DTR = 1 */
outportb(IER,0x1); /* Enable UART data receive interrupt */
/* Enable IRQ4 in 8259 interrup t controller register */
outportb(INT_controller+ 1,inportb(INT_controller+1) & IRQ4_enab);
do {
if(int_buf_ovfl) {
printf("\nBuffer Overflow!!!\n\n");
int_buf_in = int_buf_out = int_buf;
int_buf_count = int_buf_ovfl = 0;
}
RS-232 Operation Using Turbo C (continued)
Continued on next page >
Chapter 6 Application Programs
RS-232 Operation Using Turbo C
194