亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? gserial.cpp

?? GSerial是一個(gè)DOS下串口通信程序
?? CPP
字號(hào):

  /*------------------------------------------------------------------*
	  GSERIAL.CPP

	  For asynchronous serial port communications

      ATTENTION: Compile this program with Test Stack Overflow OFF.
				(TC++3: Options/Compiler/Entry
  *------------------------------------------------------------------*/

#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include "gserial.h"

#define VERSION 0x0101

#define FALSE				0
#define TRUE				1

#define NO_ERROR			0       /* No error               */
#define BUF_OVFL			1       /* Buffer overflowed      */

#define ESC					0x1B    /* ASCII Escape character */
#define ASCII				0x007F  /* Mask ASCII characters  */
//#define SBUFSIZ			0x4000  /* Serial buffer size     */
#define SBUFSIZ				0x08	/* Serial buffer size     */
#define IBUF_LEN			2048    // Incoming buffer
#define OBUF_LEN			1024    // Outgoing buffer


void           interrupt(*oldvects[2])(...);

/*  get status of the port  */
int read_status_com(int portn)
{
  return(inp(portn+5));
}

/*  send one valid char from the port  */
void send_char_com(int portn,int cc)
{
   while ((read_status_com(portn) & 0x40) == 0);
   outportb(portn,cc);
}

/*  send one string from the port  */
void send_string_com(int portn,int strlen,unsigned char *buf)
{
	int k;	k=0;
   do {
	   send_char_com(portn,*(buf + k));	k++;
	  } while ((k < strlen));
}



void interrupt com_int(...)
{
	int temp;
	disable();
	temp = (inportb(portbase+IIR)) & IIR_MASK;				// why interrupt was called
	switch(temp)
	{
		case 0x00:  // modem status changed
			inportb(portbase+MSR);   // read in useless char
			break;
		case 0x02:  // Request To Send char
			if (outhead != outtail)							// there's a char to send
			{
				outportb(portbase+TXR,outbuf[outhead++]);	// send the character
				if (outhead == OBUF_LEN)
					outhead=0;								// if at end of buffer, reset pointer
			}
			break;
		case 0x04:  // character ready to be read in
			inbuf[inhead++] = inportb(portbase+RXR);// read character into inbuffer
			if (inhead == IBUF_LEN) // if at end of buffer
				inhead=0;           // reset pointer
			break;
		case 0x06:  // line status has changed
			inportb(portbase+LSR);     // read in useless char
			break;
		default:
			break;

	}

	outportb(PIC8259_ICR, PIC8259_EOI);	// Signal end of hardware interrupt
	enable();							// reenable interrupts at the end of the handler

}



// Inserts the character to be outputted into the output buffer, checking
// for an open slot in the output buffer array.  If there is, insert
// the character, or if there isn't, wait until a slot opens up.
serial& serial::operator<<( char ch )
{
	if (ch)								// If this is a valid char
	{
		enable();						// turn on irqs to ensure data output
		//outportb(portbase + MCR,  MCR_INT | MCR_DTR | MCR_RTS);//modem control,
		outportb(portbase + IER,  IER_RX_INT);
		// check buffer, and if full, wait for an available opening

	//	fprintf(stdout,"\n %c is pressed!\n",ch);   //You can use this to verify which key is hit during your test
		while((outhead-1==outtail) ||(outtail==OBUF_LEN-1 && outhead==0));
		disable();						// make sure nothing happens while changing buffer
		outbuf[outtail++] = ch;			// insert character into buffer;
		if (outtail == OBUF_LEN)		// if at end of out buffer
			outtail = 0;				// reset pointer
		if((inportb(portbase+IER)&IER_TX_INT) == 0)
			outportb(portbase+IER,IER_TX_INT | IER_RX_INT);
		enable();                       // re-enable interrupts
	}

	return(*this);
}


serial &serial::operator<<( char *str )
// Outputs a string to the serial port
{
	while (*str)
	{
		(*this) << (*str);
		str++;
	}
	return(*this);
}


serial &serial::operator>>( char &ch )
// Returns either the character to be received from modem if there is one
// waiting in the buffer, or returns a 0 if there is no character waiting.
{
	if (inhead != intail)     // there is a character
	{
		disable();                          // disable irqs while getting char
		ch = inbuf[intail++];               // get character from buffer
		if (intail == IBUF_LEN)				// if at end of in buffer
			intail=0;						// reset pointer
		enable();                           // re-enable interrupt
		return(*this);                      // return the char
	}
	ch = -1;
	return(*this);                          // return nothing
}



/* Install our functions to handle communications */
void setvects(void)
{
    oldvects[0] = getvect(0x0B);
	oldvects[1] = getvect(0x0C);
    setvect(0x0B, com_int);
	setvect(0x0C, com_int);
}

/* Uninstall our vectors before exiting the program */
void resvects(void)
{
    setvect(0x0B, oldvects[0]);
    setvect(0x0C, oldvects[1]);
}



/* Tell modem that we're ready to go */
void serial::comm_on(void)
{
    int temp, pnum;


	disable();
	temp = inportb(portbase + MCR) | 0x0f;//MCR_INT;
	outportb(portbase + MCR, temp);
	temp = (inportb(portbase + IER)) | IER_RX_INT;//|IER_TX_INT;
	outportb(portbase + IER, temp);
	pnum = (portbase == COM1BASE ? COM1 : COM2);
	temp = inportb(PIC8259_IMR) & (pnum == COM1 ? IRQ4 : IRQ3);
	outportb(PIC8259_IMR, temp);

 //	temp = inportb(portbase + MCR) | MCR_DTR | MCR_RTS;
 //	outportb(portbase + MCR, temp);
	enable();
}

/* Go off-line */
void serial::comm_off(void)
{
     int  temp;

    disable();
	temp = inportb(PIC8259_IMR) | ~IRQ3 | ~IRQ4;
    outportb(PIC8259_IMR, temp);
    outportb(portbase + IER, 0);
	outportb(portbase + MCR, 0);
	enable();
}

void serial::init_serial(void)
{
    endbuf = startbuf = 0;
	setvects();
	comm_on();
}

serial::~serial()
{
    comm_off();
    resvects();
}

/* Set the port number to use */
int serial::SetPort(int Port)
{
    int  Offset, far *RS232_Addr;

    switch (Port)
	{ /* Sort out the base address */
      case COM1 : 
		  Offset = 0x0000;
          break;
      case COM2 : 
		  Offset = 0x0002;
		  break;
      default   :
		  printf("\ncannot find the serial port.\n");
		  return (-1);
    }

	RS232_Addr = (int far *)MK_FP(0x0040, Offset);  /* Find out where the port is. */
	if (*RS232_Addr == NULL)
	{
		printf("\ncannot find the serial port.\n");
		return (-1);                     /* If NULL then port not used. */
	}
    portbase = *RS232_Addr;              /* Otherwise set portbase      */

	return (0);
}

/* This routine sets the speed; will accept funny baud rates. */
/* Setting the speed requires that the DLAB be set on.        */
int serial::SetSpeed(int Speed)
{
	char	c;
    int		divisor;

    if (Speed == 0)            /* Avoid divide by zero */
        return (-1);
	else
        divisor = (int) (115200L/Speed);

    if (portbase == 0)
        return (-1);

    disable();
	c = inportb(portbase + LCR);
    outportb(portbase + LCR, (c | 0x80)); /* Set DLAB */
    outportb(portbase + DLL, (divisor & 0x00FF));
    outportb(portbase + DLH, ((divisor >> 8) & 0x00FF));
    outportb(portbase + LCR, c);          /* Reset DLAB */
	enable();

	return (0);
}

/* Set other communications parameters */
int serial::SetOthers(int Parity, int Bits, int StopBit)
{
	int  setting;

	if (portbase == 0)
		return (-1);
	if (Bits < 5 || Bits > 8)
		return (-1);
    if (StopBit != 1 && StopBit != 2)			
		return (-1);
    if (Parity != LCR_NO_PARITY && Parity != LCR_ODD_PARITY && Parity != LCR_EVEN_PARITY)
		return (-1);

    setting  = Bits-5;
    setting |= ((StopBit == 1) ? 0x00 : 0x04);
	setting |= Parity;

	disable();
	outportb(portbase + LCR, setting);
    enable();

    return (0);
}

/* Set up the port */
serial::serial(int Port, int Speed, int Parity, int Bits, int StopBit)
{
	flag = 0;
	if (SetPort(Port))
	  flag = -1;
	if (SetSpeed(Speed))
	  flag = -1;
	if (SetOthers(Parity, Bits, StopBit))
	  flag = -1;

	if (!flag)
	   init_serial();
}

/*  Control-Break interrupt handler */
int c_break(void)
{
	int temp;
	disable();
	temp = inportb(PIC8259_IMR) | ~IRQ3 | ~IRQ4;
	outportb(PIC8259_IMR, temp);
	outportb(portbase + IER, 0);
	outportb(portbase + MCR, 0);
	enable();
	fprintf(stderr, "\nStill online.\n");
	return(0);
}

main()
{
	/* Communications parameters */
	int        port     = COM1;
	int        speed    = 9600;
	int        parity   = LCR_NO_PARITY;
	int        bits     = 8;
	int        stopbits = 1;
	int        done  = FALSE;
	char       c;
	int temp,i=0,j=0;

	serial comport(port, speed, parity, bits, stopbits);

	ctrlbrk(c_break);
	//for(i=0;i<OBUF_LEN;i++)
	//{
	//	outbuf[i] = 'a'+i;
	//}
	//static   char  outbuf[OBUF_LEN];		// out buffer

	fprintf(stdout, "TURBO C TERMINAL\n"
			"...You're now in terminal mode, "
			"press [ESC] to quit...\n\n");

	/*
	   The main loop aMSR_CTS as a dumb terminal. We repeatedly
	   check the keyboard buffer, and communications buffer.
	*/
	do {
		if (kbhit())
		{
			c=getch();
			/* Look for an Escape key */
			switch (c)
			{
				case ESC:
					done = TRUE;  /* Exit program */
					break;

			//You may want to handle other keys here
			}
			if (!done)   comport<<c;
			//send_char_com(portbase,c); //This is another send function,I add this function because some people (esp. older) don't like c++(they use c)
		}
		delay(50);
		comport >> c;
		if (c != -1)     //'-1' is the END signal of a string
		{
			//fputc(c & ASCII, stdout);
			fprintf(stdout,"%c",c);
		}

	} while (!done && !SError);

	/* Check for errors */
	switch (SError)
	{
		case NO_ERROR: fprintf(stderr, "\nbye.\n");
					  return (0);

		case BUF_OVFL: fprintf(stderr, "\nBuffer Overflow.\n");
					  return (99);

		default:      fprintf(stderr, "\nUnknown Error, SError = %d\n",
							  SError);
					  return (99);
	}
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
337p日本欧洲亚洲大胆色噜噜| 青青草国产精品亚洲专区无| 在线播放/欧美激情| 国产精品一品二品| 久久丁香综合五月国产三级网站| 亚洲影视资源网| 国产精品高清亚洲| 国产精品色眯眯| 国产日韩欧美亚洲| 国产精品久久毛片| 久久久久久久精| 制服丝袜中文字幕亚洲| 欧美日韩午夜精品| 欧美丰满美乳xxx高潮www| 欧美一区午夜精品| 色欧美日韩亚洲| 色88888久久久久久影院野外| 99久久综合国产精品| 欧美日韩专区在线| 99精品国产91久久久久久| 3d动漫精品啪啪一区二区竹菊| 久久久久久综合| 亚洲高清视频的网址| 国产九色sp调教91| 欧美日本在线播放| 久久丝袜美腿综合| 日韩美女视频一区| 天堂成人国产精品一区| 蜜桃久久久久久久| 97久久超碰国产精品电影| 欧美日韩精品一区二区三区| 久久久亚洲国产美女国产盗摄 | 亚洲三级视频在线观看| 亚洲第一狼人社区| 国产麻豆成人精品| 欧美性猛交xxxx黑人交| 国产婷婷一区二区| 肉肉av福利一精品导航| 欧美一区二区私人影院日本| 国产精品剧情在线亚洲| 韩国视频一区二区| 欧美日韩免费观看一区二区三区 | 成人午夜伦理影院| 日韩色在线观看| 午夜欧美一区二区三区在线播放| 国产成人欧美日韩在线电影| 6080午夜不卡| 亚洲午夜影视影院在线观看| 国产一区二区导航在线播放| 精品视频全国免费看| 国产午夜精品理论片a级大结局| 日韩一区精品字幕| 在线视频一区二区三| 国产精品传媒视频| 成人性色生活片| 亚洲国产电影在线观看| 激情成人综合网| 久久亚区不卡日本| 精品中文字幕一区二区| 亚洲精品在线网站| 久久97超碰色| 国产欧美日韩视频在线观看| 国产一区二区电影| 国产精品午夜电影| 99riav一区二区三区| 日韩毛片视频在线看| 色94色欧美sute亚洲线路一ni| 中文字幕精品一区二区精品绿巨人| 成人手机在线视频| 亚洲狼人国产精品| 欧美乱妇一区二区三区不卡视频| 亚洲一区二区欧美日韩| 911精品产国品一二三产区| 美女视频一区二区| 国产精品久久久久久妇女6080| 99久久国产综合精品麻豆| 亚洲欧美国产毛片在线| 欧美老人xxxx18| 国产成人av一区二区三区在线| 亚洲天堂av老司机| 亚洲色图在线看| 欧美xxxxxxxxx| 91麻豆成人久久精品二区三区| 午夜视频在线观看一区| 久久网这里都是精品| 在线亚洲精品福利网址导航| 美女视频黄 久久| 亚洲免费色视频| 欧美精品一区二区三区蜜桃| 在线亚洲一区观看| 国产一区二区女| 天天色天天操综合| 一区二区久久久久| 欧美不卡123| 视频一区免费在线观看| 色婷婷久久99综合精品jk白丝| 亚洲一级电影视频| 亚洲九九爱视频| 午夜精品福利在线| 日本麻豆一区二区三区视频| 亚洲午夜影视影院在线观看| 国产精品家庭影院| 国产精品视频yy9299一区| 久久久久久一级片| 久久久久久久久久久99999| 精品日韩一区二区| 日韩精品一区二区三区视频播放| 91久久香蕉国产日韩欧美9色| 国产成人免费av在线| 激情久久五月天| 寂寞少妇一区二区三区| 日韩中文字幕区一区有砖一区 | 欧美视频完全免费看| 不卡的看片网站| 成人一区二区三区在线观看| 成人黄色在线看| 99re这里都是精品| 在线观看91视频| 欧美日韩在线不卡| 91精品国产色综合久久不卡电影| 欧美日韩中文字幕精品| 91国在线观看| 日韩一级完整毛片| 欧美成人在线直播| 国产亚洲精品资源在线26u| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲色图欧美激情| 午夜精品福利在线| 久久精品国产999大香线蕉| 国产传媒久久文化传媒| 欧美日韩国产综合视频在线观看| 日韩一级欧美一级| 成人欧美一区二区三区视频网页 | 香蕉乱码成人久久天堂爱免费| 美女久久久精品| 91在线一区二区三区| 91成人免费网站| 日韩精品中文字幕在线不卡尤物| 久久网这里都是精品| 亚洲久本草在线中文字幕| 另类人妖一区二区av| 成人app软件下载大全免费| 在线不卡的av| 国产精品福利影院| 蜜臀精品久久久久久蜜臀| jizzjizzjizz欧美| 久久亚区不卡日本| 青青草国产精品97视觉盛宴| www.成人网.com| 国产亚洲欧美日韩在线一区| 亚洲3atv精品一区二区三区| 国产福利一区在线| 在线不卡一区二区| 亚洲曰韩产成在线| 99精品国产视频| 国产精品嫩草影院com| 精品午夜久久福利影院| 欧美一区二区三区男人的天堂| 亚洲最色的网站| 91丝袜高跟美女视频| 久久精品水蜜桃av综合天堂| 久久99国产精品麻豆| 制服丝袜日韩国产| 天天爽夜夜爽夜夜爽精品视频 | 欧美亚洲国产怡红院影院| 国产精品卡一卡二| 不卡电影一区二区三区| 国产精品乱人伦一区二区| 国产成人免费9x9x人网站视频| 精品久久久久久久久久久院品网| 午夜精品久久久久久久99樱桃| 欧洲国内综合视频| 午夜精品久久久久| 欧美精品一区二区三区很污很色的 | 亚洲女人的天堂| 欧美最猛黑人xxxxx猛交| 夜夜嗨av一区二区三区四季av| 色94色欧美sute亚洲线路二| 午夜av一区二区| 日韩欧美在线不卡| 国产乱码精品一品二品| 国产精品三级电影| 日本丰满少妇一区二区三区| 亚洲成人精品一区二区| 久久久一区二区三区| 91久久香蕉国产日韩欧美9色| 琪琪一区二区三区| 国产精品久久久久影视| 欧美日韩在线一区二区| 国产原创一区二区三区| 亚洲黄色小视频| 精品国精品国产| 欧美午夜理伦三级在线观看| 寂寞少妇一区二区三区| 亚洲三级久久久| 久久久久久久久蜜桃| 欧洲激情一区二区| 国产98色在线|日韩| 日本视频一区二区三区| 亚洲在线免费播放|