Information Technology Reference
In-Depth Information
int get_character(void);
int get_buffer(void);
void set_vectors(void);
void reset_vectors(void);
void enable_interrupts(void);
void disable_interrupts(void);
void interrupt(*oldvect)();
char buffer[RSBUFSIZE];
unsigned int startbuf=0,endbuf = 0;
int main(void)
{
int ch, done = FALSE;
setup_serial();
set_vectors(); /* set new interrupt vectors and store old ones
*/
enable_interrupts();
printf("Terminal emulator, press [ESC] to quit\n");
do
{
if (kbhit())
{
ch=getche();
if (ch==ESC) break;
send_character(ch);
}
/* empty RS232 buffer */
do
{
if ((ch=get_buffer()) != -1) putch(ch);
} while (ch!=-1);
} while (!done);
disable_interrupts();
reset_vectors();
return(0);
}
void interrupt rs_interrupt(void)
{
disable();
if ((inportb(IIR) & RX_MASK) == RX_ID)
{
buffer[endbuf] = inportb(RXR);
endbuf++;
if (endbuf == RSBUFSIZE) endbuf=0;
}
/* Set end of interrupt flag */
outportb(ICR, EOI);
enable();
}
void setup_serial(void)
{
int RS232_setting;
RS232_setting=BAUD1200 | STOPBIT1 | NOPARITY | DATABITS7;
bioscom(0,RS232_setting,COM1);
}
void send_character(int ch)
{
Search WWH ::




Custom Search