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

📄 netcom.h

📁 串行通信C语言代码,用于DOS下编程,比较完整
💻 H
字号:
/*****************************************************************************
 *                                 netcom.h                                  *
 *****************************************************************************
 * DESCRIPTION: This file contains a set of routines for doing low-level     *
 *              serial communications on the IBM PC.                         *
 *                                                                           *
 *****************************************************************************/

#include        <stdio.h>
#include        <conio.h>
#include        <dos.h>

/*****************************************************************************
 *                             8250 Definitions                              *
 *****************************************************************************/

/*      Offsets to various 8250 registers.  Taken from IBM Technical         */
/*      Reference Manual, p. 1-225                                           */

#define TXBUFF  0                       /* Transmit buffer register */
#define RXBUFF  0                       /* Receive buffer register */
#define DLLSB   0                       /* Divisor latch LS byte */
#define DLMSB   1                       /* Divisor latch MS byte */
#define IER     1                       /* Interrupt enable register */
#define IIR     2                       /* Interrupt ID register */
#define LCR     3                       /* Line control register */
#define MCR     4                       /* Modem control register */
#define LSR     5                       /* Line status register */
#define MSR     6                       /* Modem status register */

/*      Modem control register bits                                          */

#define DTR     0x01                    /* Data terminal ready */
#define RTS     0x02                    /* Request to send */
#define OUT1    0x04                    /* Output #1 */
#define OUT2    0x08                    /* Output #2 */
#define LPBK    0x10                    /* Loopback mode bit */

/*      Modem status register bits                                           */

#define DCTS    0x01                    /* Delta clear to send */
#define DDSR    0x02                    /* Delta data set ready */
#define TERI    0x04                    /* Trailing edge ring indicator */
#define DRLSD   0x08                    /* Delta Rx line signal detect */
#define CTS     0x10                    /* Clear to send */
#define DSR     0x20                    /* Data set ready */
#define RI      0x40                    /* Ring indicator */
#define RLSD    0x80                    /* Receive line signal detect */

/*      Line control register bits                                           */

#define DATA5   0x00                    /* 5 Data bits */
#define DATA6   0x01                    /* 6 Data bits */
#define DATA7   0x02                    /* 7 Data bits */
#define DATA8   0x03                    /* 8 Data bits */

#define STOP1   0x00                    /* 1 Stop bit */
#define STOP2   0x04                    /* 2 Stop bits */

#define NOPAR   0x00                    /* No parity */
#define ODDPAR  0x08                    /* Odd parity */
#define EVNPAR  0x18                    /* Even parity */
#define STKPAR  0x28                    /* Stick parity */
#define ZROPAR  0x38                    /* Zero parity */

/*      Line status register bits                                            */

#define RDR     0x01                    /* Receive data ready */
#define ERRS    0x1E                    /* All the error bits */
#define TXR     0x20                    /* Transmitter ready */

/*      Interrupt enable register bits                                       */

#define DR      0x01                    /* Data ready */
#define THRE    0x02                    /* Tx buffer empty */

#define RLS     0x04                    /* Receive line status */

/*****************************************************************************
 *                             Names for Numbers                             *
 *****************************************************************************/

#define MAX_PORT        4

#define TRUE            1
#define FALSE           0

/*****************************************************************************
 *                                Global Data                                *
 *****************************************************************************/
/*  Ash communication values                      */

#define  SOH                    0x01             /* consult file header */
#define  EOH                    0x02            /* consult file end    */
#define  CONSULT_INTER_ON       0x03            /* consult interrupt the ash to act */
#define  CONSULT_INTER_OFF      0x04
#define  CONSULT_RECEIVE_START  0x05            /* consult file begin to transfer */
#define  CONSULT_RECEIVE_END    0x06            /* consult file is ready */
#define  CONSULT_TRANSFER_START 0x07
#define  CONSULT_TRANSFER_END   0x08
#define  CONSULT_READ_START     0x09
#define  CONSULT_READ_END       0x0a
#define  WAIT_ON                0x0b
#define  WAIT_OFF               0x0c

#define  SPEED   9600

#define  ASH_MIN       0x00
#define  ASH_HOUR      0x01
#define  ASH_INTER     0x02
#define  ASH_MONTH     0X03
#define  ASH_DATA      0x04
#define  ASH_SPY_ON    0X05

#define  ASH_PARA      0X06
#define  ASH_SPY_OFF   0X07

#define  ASH_ON            1
#define  ASH_OFF           2

#define  ASH1              1
#define  ASH2              2

/*  UART i/o addresses.  Values depend upon which COMM port is selected  */

int     uart1_data;              /* Data register */
int     uart1_ier;               /* Interrupt enable register */
int     uart1_iir;               /* Interrupt identification register */
int     uart1_lcr;               /* Line control register */
int     uart1_mcr;               /* Modem control register */
int     uart1_lsr;               /* Line status register */
int     uart1_msr;               /* Modem status register */

char    com1_installed;          /* Flag: Communications routines installed */
int     intnum1;                 /* Interrupt vector number for chosen port */
char    i8259bit1;               /* 8259 bit mask */
char    old1_i8259_mask;         /* Copy as it was when we were called */
char    old1_ier;                /* Modem register contents saved for */
char    old1_mcr;                /*  restoring when we're done */

int     uart2_data;              /* Data register */
int     uart2_ier;               /* Interrupt enable register */
int     uart2_iir;               /* Interrupt identification register */
int     uart2_lcr;               /* Line control register */
int     uart2_mcr;               /* Modem control register */
int     uart2_lsr;               /* Line status register */
int     uart2_msr;               /* Modem status register */

char    com2_installed;          /* Flag: Communications routines installed */
int     intnum2;                 /* Interrupt vector number for chosen port */
char    i8259bit2;               /* 8259 bit mask */
char    old2_i8259_mask;         /* Copy as it was when we were called */
char    old2_ier;                /* Modem register contents saved for */
char    old2_mcr;                /*  restoring when we're done */

void (_cdecl _interrupt *old1_vector)(); /* Place to save COM1 vector */
void (_cdecl _interrupt *old2_vector)(); /* Place to save COM2 vector */

/*  Transmit queue.  Characters to be transmitted are held here until the  */
/*  UART is ready to transmit them.  */

#define TX_QUENE_SIZE   128     /* Transmit quene size.  Change to suit */

char    tx1_quene[TX_QUENE_SIZE];
int     tx1_in;                  /* Index of where to store next character */
int     tx1_out;                 /* Index of where to retrieve next character */
int     tx1_chars;               /* Count of characters in queue */

char    tx2_quene[TX_QUENE_SIZE];
int     tx2_in;                  /* Index of where to store next character */
int     tx2_out;                 /* Index of where to retrieve next character */
int     tx2_chars;               /* Count of characters in queue */

/*  Receive queue.  Received characters are held here until retrieved by  */
/*  com_rx()  */

#define RX_QUENE_SIZE   8192    /* Receive quene size.  Change to suit */

char    rx1_quene[RX_QUENE_SIZE];
int     rx1_in;                  /* Index of where to store next character */
int     rx1_out;                 /* Index of where to retrieve next character */
int     rx1_chars;               /* Count of characters in queue */

char    rx2_quene[RX_QUENE_SIZE];
int     rx2_in;                  /* Index of where to store next character */
int     rx2_out;                 /* Index of where to retrieve next character */
int     rx2_chars;               /* Count of characters in queue */

#define RX_INTER_QUENE_SIZE   256    /* Receive online ash data quene size */

char    rx1_inter_quene[RX_INTER_QUENE_SIZE];
int     rx1_inter_in;                  /* Index of where to store next character */
int     rx1_inter_out;                 /* Index of where to retrieve next character */
int     rx1_inter_chars;               /* Count of characters in quene */


char    rx2_inter_quene[RX_INTER_QUENE_SIZE];
int     rx2_inter_in;                  /* Index of where to store next character */
int     rx2_inter_out;                 /* Index of where to retrieve next character */
int     rx2_inter_chars;               /* Count of characters in quene */

char  consult1_transfer_state;
char  consult1_receive_state;
char  consult1_inter_state;
char  consult1_read_state;
char  wait1_state;
char  consult_10min_state;

char  consult2_transfer_state;
char  consult2_receive_state;
char  consult2_inter_state;
char  consult2_read_state;
char  wait2_state;

int consult_number;
int receive_char;
unsigned int ash_data_number;
char *data_number;


int  ash_state;
int ash1_state;
int ash2_state;
int spy_number;
int ash_consult_state;

/*****************************************************************************
 * DESCRIPTION: ANSI C function prototypes and other definitions for the     *
 *              routines in ibmcom.c                                         *
 *                                                                           *
 *****************************************************************************/

int             com1_carrier(void);
int             com2_carrier(void);
void            com1_deinstall(void);
void            com2_deinstall(void);
void            com1_flush_rx(void);
void            com1_flush_tx(void);
void            com1_flush_rx_inter(void);
void            com2_flush_rx(void);
void            com2_flush_tx(void);
void            com2_flush_rx_inter(void);
int             com1_install();
int             com2_install();
void (_cdecl _interrupt _far com1_interrupt_driver)();
void (_cdecl _interrupt _far com2_interrupt_driver)();
void            com_lower_dtr(void);
void            com_raise_dtr(void);
char            com_rx();
int             com_rx_empty(void);
void            com_set_parity(enum par_code parity, int stop_bits);
void            com_set_speed(unsigned speed);
void            com_tx(char c);
int             com_tx_empty(void);
int             com_tx_ready(void);
int             com_rx_empty(void);
int             com_rx_inter_empty(void);
void            rs_init(void);
void            rs_exit(void);
enum par_code   { COM_NONE, COM_EVEN, COM_ODD, COM_ZERO, COM_ONE };

⌨️ 快捷键说明

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