⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 编辑1.c

📁 仅供技术参考
💻 C
📖 第 1 页 / 共 2 页
字号:
  }
  /* Set up the port */
  int    SetSerial(int Port, int Speed, int Parity, int Bits, int
                   StopBit)
  {
      if (SetPort(Port))                    return (-1);
      if (SetSpeed(Speed))                  return (-1);
      if (SetOthers(Parity, Bits, StopBit)) return (-1);
      return (0);
  }
  /* Control-Break interrupt handler */
  int    c_break(void)
  {
      i_disable();
      fprintf(stderr, "\nStill online.\n");
      return(0);
  }
  main()
  {
      /* Communications parameters */
      int        port     = COM2;
      int        speed    = 1200;
      int        parity   = NO_PARITY;
      int        bits     = 8;
      int        stopbits = 1;
      int        c, done  = FALSE;
      if (SetSerial(port, speed, parity, bits, stopbits) != 0)
      {
          fprintf(stderr, "Serial Port setup error.\n");
          return (99);
      }
      initserial();
      ctrlbrk(c_break);
      fprintf(stdout, "TURBO C TERMINAL\n...You're now in terminal
              mode, press [ESC] to quit...\n\n");
      /* The main loop acts as a dumb terminal. We repeatedly check
         the keyboard buffer, and communications buffer. */
      do {
          if (kbhit())
          {
              /* Look for an Escape key */
              switch (c=getch())
              {
                  case ESC: done = TRUE;  /* Exit program */
                            break;
                  /* You may want to handle other keys here... */
              }
              SerialOut(c);
          }
          if ((c=getccb()) != -1)
              fputc(c & ASCII, stdout);
      } while (!done && !SError);
      /* Check for errors */
      switch (SError)
      {
          case NOERROR: fprintf(stderr, "\nbye.\n");
                        closeserial();
                        return (0);
          case BUFOVFL: fprintf(stderr, "\nBuffer Overflow.\n");
                        closeserial();
                        return (99);
          default:      fprintf(stderr, "\nUnknown Error, SError =
                                %d\n", SError);
                        closeserial();
                        return (99);
      }
  }
  /*-------------------------------------------------------------*
                              SERIAL.H
                  Some definitions used by SERIAL.C
   *-------------------------------------------------------------*/
  #define COM1            1
  #define COM2            2
  #define COM1BASE        0x3F8   /* Base port address for COM1 */
  #define COM2BASE        0x2F8   /* Base port address for COM2 */
  /*
      The 8250 UART has 10 registers accessible through 7 port
      addresses.  Here are their addresses relative to COM1BASE and
      COM2BASE.  Note that the baud rate registers, (DLL) and (DLH)
      are active only when the Divisor-Latch Access-Bit (DLAB) is
      on.  The (DLAB) is bit 7 of the (LCR).
          o TXR Output data to the serial port.
          o RXR Input data from the serial port.
          o LCR Initialize the serial port.
          o IER Controls interrupt generation.
          o IIR Identifies interrupts.
          o MCR Send contorl signals to the modem.
          o LSR Monitor the status of the serial port.
          o MSR Receive status of the modem.
          o DLL Low byte of baud rate divisor.
          o DHH High byte of baud rate divisor.
  */
  #define TXR             0       /* Transmit register (WRITE) */
  #define RXR             0       /* Receive register  (READ)  */
  #define IER             1       /* Interrupt Enable          */
  #define IIR             2       /* Interrupt ID              */
  #define LCR             3       /* Line control              */
  #define MCR             4       /* Modem control             */
  #define LSR             5       /* Line Status               */
  #define MSR             6       /* Modem Status              */
  #define DLL             0       /* Divisor Latch Low         */
  #define DLH             1       /* Divisor latch High        */
  /*-------------------------------------------------------------*
    Bit values held in the Line Control Register (LCR).
          bit             meaning
          ---             -------
          0-1             00=5 bits,  01=6  bits,  10=7  bits, 11=8
  bits.
          2               Stop bits.
          3               0=parity off, 1=parity on.
          4               0=parity odd, 1=parity even.
          5               Sticky parity.
          6               Set break.
          7               Toggle port addresses.
   *-------------------------------------------------------------*/
  #define NO_PARITY       0x00
  #define EVEN_PARITY     0x18
  #define ODD_PARITY      0x08
  /*-------------------------------------------------------------*
    Bit values held in the Line Status Register (LSR).
          bit             meaning
          ---             -------
          0               Data ready.
          1               Overrun    error    -    Data    register
  overwritten.
          2               Parity error - bad transmission.
          3               Framing error - No stop bit was found.
          4               Break  detect  -   End   to  transmission
  requested.
          5               Transmitter holding register is empty.
          6               Transmitter shift register is empty.
          7         Time out - off line.
   *-------------------------------------------------------------*/
  #define RCVRDY          0x01
  #define OVRERR          0x02
  #define PRTYERR         0x04
  #define FRMERR          0x08
  #define BRKERR          0x10
  #define XMTRDY          0x20
  #define XMTRSR          0x40
  #define TIMEOUT     0x80
  /*-------------------------------------------------------------*
    Bit values held in the Modem Output Control Register (MCR).
          bit             meaning
          ---             -------
          0               Data  Terminal Ready.  Computer ready  to
  go.
          1               Request To Send.   Computer wants to send
  data.
          2               Auxillary output #1.
          3               Auxillary output  #2.    (Note:  This bit
  must be
                          set  to allow the communications card  to
  send
                          interrupts to the system.)
          4               UART ouput looped back as input.
          5-7             Not used.
   *-------------------------------------------------------------*/
  #define DTR             0x01
  #define RTS             0x02
  #define MC_INT              0x08
  /*-------------------------------------------------------------*
    Bit values held in the Modem Input Status Register (MSR).
          bit             meaning
          ---             -------
          0               Delta Clear To Send.
          1               Delta Data Set Ready.
          2               Delta Ring Indicator.
          3               Delta Data Carrier Detect.
          4               Clear To Send.
          5               Data Set Ready.
          6               Ring Indicator.
          7               Data Carrier Detect.
   *-------------------------------------------------------------*/
  #define CTS             0x10
  #define DSR             0x20
  /*-------------------------------------------------------------*
    Bit values held in the Interrupt Enable Register (IER).
          bit             meaning
          ---             -------
          0               Interrupt when data received.
          1               Interrupt when  transmitter  holding reg.
  empty.
          2               Interrupt when data reception error.
          3               Interrupt  when  change in  modem  status
  register.
          4-7             Not used.
   *-------------------------------------------------------------*/
  #define RX_INT          0x01
  /*-------------------------------------------------------------*
    Bit values held in the Interrupt Identification Register (IIR).
          bit             meaning
          ---             -------
          0               Interrupt pending.
          1-2       Interrupt ID code.
                          00=Change in modem status register,
                          01=Transmitter holding register empty,
                          10=Data received,
                          11=reception error, or break encountered.
          3-7             Not used.
   *-------------------------------------------------------------*/
  #define RX_ID           0x04
  #define RX_MASK         0x07
  /* These are the port addresses of the 8259 Programmable
     Interrupt Controller (PIC). */
  #define IMR             0x21   /* Interrupt Mask Register port */
  #define ICR             0x20   /* Interrupt Control Port       */
  /* An end of interrupt needs to be sent to the Control Port of
     the 8259 when a hardware interrupt ends. */
  #define EOI             0x20   /* End Of Interrupt */
  /* The (IMR) tells the (PIC) to service an interrupt only if it
     is not masked (FALSE). */
  #define IRQ3            0xF7  /* COM2 */
  #define IRQ4            0xEF  /* COM1 */
 /*****************************   eof
       *******************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -