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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 編輯1.c

?? 僅供技術參考
?? C
?? 第 1 頁 / 共 2 頁
字號:
 INTERRUPT DRIVEN SERIAL COMMUNICATIONS 

 Technical Information Database

TI106C.txt   INTERRUPT DRIVEN SERIAL COMMUNICATIONS            
Category   :General
Platform    :All
Product    :Turbo C  1.0 & 1

Description:
  /*-------------------------------------------------------------*
                              SERIAL.C
     The following code shows how to take advantage of some of
     the Turbo C extensions to the C language to do asynchronous
     communications without having to write supporting assembly-
     language routines.
     This program bypasses the less-than-adequate PC BIOS com-
     munications routines and installs a serial interrupt handler.
     Direct access to PC hardware allows the program to run at
     faster baud rates and eliminates the need for the main
     program to continuously poll the serial port for data; thus,
     implementing background communications.  Data that enters
     the serial port is stored in a circular buffer.
     * Compile this program with Test Stack Overflow OFF.
   *-------------------------------------------------------------*/
  #include "serial.h"
  #include 
  #include 
  #include 
  #include 
  #define VERSION 0x0101
  #define FALSE           0
  #define TRUE            (!FALSE)
  #define NOERROR         0       /* No error               */
  #define BUFOVFL         1       /* Buffer overflowed      */
  #define ESC             0x1B    /* ASCII Escape character */
  #define ASCII           0x007F  /* Mask ASCII characters  */
  #define SBUFSIZ         0x4000  /* Serial buffer size     */
  int            SError          = NOERROR;
  int            portbase        = 0;
  void           interrupt(*oldvects[2])();
  static   char  ccbuf[SBUFSIZ];
  unsigned int   startbuf        = 0;
  unsigned int   endbuf          = 0;
  /* Handle communications interrupts and put them in ccbuf */
  void   interrupt com_int(void)
  {
      disable();
      if ((inportb(portbase + IIR) & RX_MASK) == RX_ID)
      {
          if (((endbuf + 1) & SBUFSIZ - 1) == startbuf)
              SError = BUFOVFL;
         ccbuf[endbuf++] = inportb(portbase + RXR);
          endbuf &= SBUFSIZ - 1;
      }
      /* Signal end of hardware interrupt */
      outportb(ICR, EOI);
      enable();
  }
  /* Output a character to the serial port */
  int    SerialOut(char x)
  {
      long int   timeout = 0x0000FFFFL;
      outportb(portbase + MCR,  MC_INT | DTR | RTS);
      /* Wait for Clear To Send from modem */
      while ((inportb(portbase + MSR) & CTS) == 0)
          if (!(--timeout))
              return (-1);
      timeout = 0x0000FFFFL;
      /* Wait for transmitter to clear */
      while ((inportb(portbase + LSR) & XMTRDY) == 0)
          if (!(--timeout))
              return (-1);
      disable();
      outportb(portbase + TXR, x);
      enable();
      return (0);
  }
  /* Output a string to the serial port */
  void   SerialString(char *string)
  {
      while (*string)
         SerialOut(*string++);
  }
  /* This routine returns the current value in the buffer */
  int    getccb(void)
  {
      int                res;
      if (endbuf == startbuf)
          return (-1);
      res = (int) ccbuf[startbuf++];
      startbuf %= SBUFSIZ;
      return (res);
  }
  /* 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]);
  }
  /* Turn on communications interrupts */
  void   i_enable(int pnum)
  {
      int                c;
      disable();
      c = inportb(portbase + MCR) | MC_INT;
      outportb(portbase + MCR, c);
      outportb(portbase + IER, RX_INT);
      c = inportb(IMR) & (pnum == COM1 ? IRQ4 : IRQ3);
      outportb(IMR, c);
      enable();
  }
  /* Turn off communications interrupts */
  void   i_disable(void)
  {
      int                c;
      disable();
      c = inportb(IMR) | ~IRQ3 | ~IRQ4;
      outportb(IMR, c);
      outportb(portbase + IER, 0);
      c = inportb(portbase + MCR) & ~MC_INT;
      outportb(portbase + MCR, c);
      enable();
  }
  /* Tell modem that we're ready to go */
  void   comm_on(void)
  {
      int                c, pnum;
      pnum = (portbase == COM1BASE ? COM1 : COM2);
      i_enable(pnum);
      c = inportb(portbase + MCR) | DTR | RTS;
      outportb(portbase + MCR, c);
  }
  /* Go off-line */
  void   comm_off(void)
  {
      i_disable();
      outportb(portbase + MCR, 0);
  }
  void   initserial(void)
  {
      endbuf = startbuf = 0;
      setvects();
      comm_on();
  }
  void   closeserial(void)
  {
      comm_off();
      resvects();
  }
  /* Set the port number to use */
  int    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   : return (-1);
      }
      RS232_Addr = MK_FP(0x0040, Offset);  /* Find out where the
                                              port is.  */
      if (*RS232_Addr == NULL) 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    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    SetOthers(int Parity, int Bits, int StopBit)
  {
      int                setting;
      if (portbase == 0)                                  r e t urn
  (-1);
      if (Bits < 5 || Bits > 8)                           r e t urn
  (-1);
      if (StopBit != 1 && StopBit != 2)           return (-1);
      if (Parity != NO_PARITY && Parity != ODD_PARITY && Parity !=
          EVEN_PARITY)                         return (-1);
      setting  = Bits-5;
      setting |= ((StopBit == 1) ? 0x00 : 0x04);
      setting |= Parity;
      disable();
      outportb(portbase + LCR, setting);
      enable();
      return (0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合婷婷国产精品久久| 91亚洲精华国产精华精华液| 亚洲一区二区高清| 亚洲天堂中文字幕| 亚洲黄色小视频| 亚洲精品视频在线看| 樱花草国产18久久久久| 亚洲激情欧美激情| 亚洲一区二区三区中文字幕| 亚洲一级二级三级在线免费观看| 悠悠色在线精品| 亚洲福利视频三区| 美女一区二区三区在线观看| 国产一区在线不卡| 播五月开心婷婷综合| 欧美亚洲丝袜传媒另类| 欧美精品18+| 久久亚洲精精品中文字幕早川悠里 | 国产精品欧美一级免费| 综合久久久久久久| 亚洲6080在线| 久久国产精品第一页| 成人午夜激情视频| 91福利精品视频| 精品久久久久一区二区国产| 亚洲国产成人午夜在线一区| 亚洲精品视频自拍| 激情综合色播五月| 91色porny在线视频| 欧美高清视频一二三区 | 欧美一区二区三区小说| 精品福利一区二区三区| 国产精品九色蝌蚪自拍| 日日夜夜一区二区| 成人一区在线观看| 337p亚洲精品色噜噜狠狠| 久久精品一区蜜桃臀影院| 日韩毛片高清在线播放| 久久av资源站| 欧美在线综合视频| 国产亚洲制服色| 午夜精品久久久久久久久| 国产成人av电影| 欧美另类z0zxhd电影| 国产精品久久毛片av大全日韩| 五月天亚洲婷婷| 91麻豆.com| 久久久www免费人成精品| 亚洲chinese男男1069| 成人v精品蜜桃久久一区| 日韩亚洲欧美中文三级| 亚洲综合久久av| 成人永久看片免费视频天堂| 精品久久久久99| 亚洲国产精品精华液网站| 波多野结衣在线aⅴ中文字幕不卡| 91精品国产91热久久久做人人| 亚洲男人天堂一区| 成人a级免费电影| 久久久久久久免费视频了| 日韩成人免费在线| 欧美性一二三区| 亚洲摸摸操操av| 99精品视频在线免费观看| 日本一区二区成人| 成人免费毛片app| 中文字幕av一区二区三区| 国产美女在线观看一区| 精品国产91亚洲一区二区三区婷婷 | 国产精品久久久久三级| 大白屁股一区二区视频| 国产色产综合色产在线视频| 国产麻豆成人精品| 久久精品欧美日韩精品| 国产一区二区成人久久免费影院| 日韩欧美久久久| 琪琪一区二区三区| 日韩美女视频一区二区在线观看| 日本不卡高清视频| 欧美成人一区二区| 国产美女在线观看一区| 2欧美一区二区三区在线观看视频| 久久99精品久久久久久动态图 | 国产一区欧美一区| 久久午夜电影网| 国产不卡在线视频| 亚洲女同一区二区| 制服丝袜亚洲精品中文字幕| 精品一区精品二区高清| 久久精品亚洲一区二区三区浴池 | 亚洲一区欧美一区| 欧美日韩国产bt| 免费在线一区观看| 国产亚洲精品7777| 色av一区二区| 日韩电影在线看| 国产日韩精品视频一区| 91亚洲精品一区二区乱码| 亚洲国产视频直播| 欧美不卡一区二区三区四区| 国产成人综合亚洲91猫咪| 亚洲三级在线观看| 91精品免费在线观看| 国产成a人亚洲精| 亚洲第一综合色| 国产亚洲欧美在线| 在线免费观看日韩欧美| 久久97超碰色| 亚洲精品欧美专区| 欧美电视剧免费全集观看| 波多野结衣一区二区三区| 性做久久久久久久免费看| xnxx国产精品| 欧美视频一区二区三区在线观看| 美国毛片一区二区三区| 自拍偷拍欧美精品| 欧美大片在线观看一区| 在线精品视频一区二区| 国产美女主播视频一区| 亚洲sss视频在线视频| 国产精品久久三区| 久久综合中文字幕| 欧美日本国产一区| 99国产精品久久久久久久久久| 免费人成在线不卡| 亚洲国产aⅴ天堂久久| 国产精品美女一区二区三区| 日韩一区二区三| 欧美网站一区二区| 91网站黄www| 国产成人精品aa毛片| 日韩成人dvd| 午夜精品久久久久久久99水蜜桃| 国产精品传媒在线| 国产区在线观看成人精品 | 成人午夜在线播放| 国内精品国产三级国产a久久| 亚洲超碰精品一区二区| 一区二区三区不卡在线观看| 国产欧美日韩在线看| 久久影视一区二区| 日韩免费性生活视频播放| 欧美精品在欧美一区二区少妇| 日本道色综合久久| 色综合久久综合网97色综合 | 裸体一区二区三区| 日韩综合小视频| 日韩精品福利网| 七七婷婷婷婷精品国产| 琪琪久久久久日韩精品| 亚洲第一成年网| 婷婷丁香激情综合| 婷婷久久综合九色综合绿巨人| 五月婷婷综合网| 秋霞午夜av一区二区三区| 日本欧美肥老太交大片| 麻豆精品视频在线| 麻豆精品一二三| 国产一区不卡视频| 成人免费视频视频在线观看免费| 成人久久视频在线观看| av不卡在线观看| 色婷婷综合久久| 欧美日韩久久不卡| 欧美一区二区免费观在线| 欧美不卡激情三级在线观看| 久久久久久久综合色一本| 国产精品久久久久永久免费观看| 中文字幕日韩精品一区| 亚洲综合免费观看高清完整版 | 精品国产一区二区三区四区四| 久久亚洲精精品中文字幕早川悠里 | 国产精品欧美久久久久一区二区| 国产精品短视频| 亚洲一区国产视频| 久久精品噜噜噜成人av农村| 久久99久久99小草精品免视看| 岛国一区二区在线观看| 欧美视频一区二区三区| 欧美成人激情免费网| 国产精品久久午夜夜伦鲁鲁| 亚洲大片免费看| 国产激情偷乱视频一区二区三区| 成人av影视在线观看| 欧美日韩一区二区在线观看| 亚洲精品一线二线三线无人区| 亚洲女同ⅹxx女同tv| 久久国产精品色| 一本大道久久精品懂色aⅴ| 日韩欧美国产精品| 亚洲精品视频在线观看网站| 九九热在线视频观看这里只有精品| 成人h动漫精品一区二| 91精品国产色综合久久ai换脸| 国产亚洲精品免费| 日韩中文字幕1| 91农村精品一区二区在线| 日韩精品最新网址| 亚洲成a人片在线不卡一二三区 | 色综合亚洲欧洲|