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

📄 rs232.bak

📁 DOS下采用中断接收数据的串口通讯的例子,很难找到的好东西!
💻 BAK
字号:
// ************************* START OF RS232.H *************************
//
//
//
// This header file contains the definitions for the base class RS232.
//
#ifndef _RS232_DOT_H
#define _RS232_DOT_H

#include <conio.h>

#ifdef _MSC_VER
# pragma warning( disable : 4505 )
# pragma check_stack( off )
#endif

#ifdef __BORLANDC__
# pragma option -N-
#endif

enum RS232PortName { COM1 = 0, COM2,  COM3,  COM4,
                     COM5,     COM6,  COM7,  COM8 };

enum RS232Error {   RS232_SUCCESS                 = 0,

// Warning errors
                    RS232_WARNING                 = -100,
                    RS232_FUNCTION_NOT_SUPPORTED,
                    RS232_TIMEOUT,
                    RS232_ILLEGAL_BAUD_RATE,
                    RS232_ILLEGAL_PARITY_SETTING,
                    RS232_ILLEGAL_WORD_LENGTH,
                    RS232_ILLEGAL_STOP_BITS,
                    RS232_ILLEGAL_LINE_NUMBER,
                    RS232_NO_MODEM_RESPONSE,
                    RS232_NO_TERMINATOR,
                    RS232_DTR_NOT_SUPPORTED,
                    RS232_RTS_NOT_SUPPORTED,
                    RS232_RTS_CTS_NOT_SUPPORTED,
                    RS232_DTR_DSR_NOT_SUPPORTED,
                    RS232_XON_XOFF_NOT_SUPPORTED,
                    RS232_NEXT_FREE_WARNING,

// Fatal Errors
                    RS232_ERROR                   = -200,
                    RS232_IRQ_IN_USE,
                    RS232_PORT_NOT_FOUND,
                    RS232_PORT_IN_USE,
                    RS232_ILLEGAL_IRQ,
                    RS232_MEMORY_ALLOCATION_ERROR,
                    RS232_NEXT_FREE_ERROR };

//
// These constants are used as parameters to RS232 member functions.
//

const int UNCHANGED = -1;
const int FOREVER = -1;
const int DISABLE = 0;
const int CLEAR = 0;
const int ENABLE = 1;
const int SET = 1;
const int RESET = 1;
const int REMOTE_CONTROL = -1;

//
// The Settings class provides a convenient mechanism for saving or
// assigning the state of a port.
//

class Settings
{
    public :
        long BaudRate;
        char Parity;
        int WordLength;
        int StopBits;
        int Dtr;
        int Rts;
        int XonXoff;
        int RtsCts;
        int DtrDsr;
        void Adjust( long baud_rate,
                     int parity,
                     int word_length,
                     int stop_bits,
                     int dtr,
                     int rts,
                     int xon_xoff,
                     int rts_cts,
                     int dtr_dsr );
};

//
// Class RS232 is the abstract base class used for any serial port
// class.  RS232 cannot be instantiated.  Only fully defined classes
// derived from RS232 can actually be created and used.
//

class RS232
{
    protected :
	RS232()
	{
		ByteCount = 0;
		ElapsedTime = 0;
	}
        RS232PortName port_name;
        Settings saved_settings;
        Settings settings;
        RS232Error error_status;
        int debug_line_count;

// Mandatory protected functions

        virtual int read_buffer( char *buffer,
                                 unsigned int count ) = 0;
        virtual int write_buffer( char *buffer,
                                  unsigned int count = -1 ) = 0;
        virtual int read_byte( void ) = 0;
        virtual int write_byte( int c ) = 0;

    public :
        unsigned int ByteCount;
        long ElapsedTime;

//  Mandatory functions.  All derived classes must define these.

        virtual RS232Error Set( long baud_rate = UNCHANGED,
                                int parity = UNCHANGED,
                                int word_length = UNCHANGED,
                                int stop_bits = UNCHANGED ) = 0;
        virtual int TXSpaceFree( void ) = 0;
        virtual int RXSpaceUsed( void ) = 0;
        virtual int Cd( void ) = 0;
        virtual int Ri( void ) = 0;
        virtual int Cts( void ) = 0;
        virtual int Dsr( void ) = 0;
        virtual int ParityError( int clear = UNCHANGED ) = 0;
        virtual int BreakDetect( int clear = UNCHANGED ) = 0;
        virtual int FramingError( int clear = UNCHANGED ) = 0;
        virtual int HardwareOverrunError( int clear = UNCHANGED ) = 0;

// Optional Functions.  Derived class are not required to support these.

        virtual ~RS232( void ){ ; }
        virtual int Break( long milliseconds = 300 );
        virtual int SoftwareOverrunError( int clear = UNCHANGED );
        virtual int XonXoffHandshaking( int setting = UNCHANGED );
        virtual int RtsCtsHandshaking( int setting = UNCHANGED );
        virtual int DtrDsrHandshaking( int setting = UNCHANGED );
        virtual int Dtr( int setting = UNCHANGED );
        virtual int Rts( int setting = UNCHANGED );
        virtual int Peek( void *buffer, unsigned int count );
        virtual int RXSpaceFree( void );
        virtual int TXSpaceUsed( void );
        virtual int FlushRXBuffer( void );
        virtual int FlushTXBuffer( void );
        virtual char *ErrorName( int error );
        virtual int IdleFunction( void );
        virtual int FormatDebugOutput( char *buffer = 0,
                                       int line_number = -1 );

// Non virtual functions.  These work the same for all classes.

        int Read( void *buffer,
                  unsigned int count,
                  long milliseconds = 0 );
        int Read( void *buffer,
                  unsigned int count,
                  long milliseconds,
                  char *terminator );
        int Write( void *buffer,
                   unsigned int count = 0,
                   long milliseconds = 0,
                   char *terminator = 0 );
        int Read( long milliseconds = 0 );
        int Write( int c, long milliseconds = 0 );
        int Peek( void );
        int ReadSettings( Settings &copy ) { copy = settings;
                                             return RS232_SUCCESS; }
        RS232Error ErrorStatus( void ) { return error_status; }
        int DebugLineCount( void ) { return debug_line_count; }
};


// A Miscellaneous support function.  This may be implemented
// differently by different environments.

long ReadTime( void );

#endif  // #ifndef _RS232_DOT_H

// *************************** END OF RS232.H ***************************

⌨️ 快捷键说明

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