1.VisualC++/TurboC串口通信编程实践(第2版)目录
2.VC++ MSComm控件GetInput()方法的串口串口问题
3.c è·å串å£å· c èªå¨è·å串å£å·
4.Visual C++/Turbo C串口通信编程实践目录
VisualC++/TurboC串口通信编程实践(第2版)目录
第1章轻松体验串口通信编程与调试 1.1初识串口 1.1.1从外观上了解串口 1.1.2串口通信的发展前景 1.2自己制作简单的串口线 1.2.1三线制串口接线的规定 1.2.2焊接制作自己的串口连接线 1.3调试串口通信程序时的几种技巧 1.3.1查看计算机串口资源 1.3.2常规调试两个物理串口之间的通信 1.3.3特殊调试单个物理串口之间的通信 1.3.4虚拟串口为计算机添加取之不尽的串口资源 1.4使用串口调试助手来体验串口通信 1.5体验Windows环境下Visual C++串口通信编程 1.6体验DOS环境下Turbo C串口通信编程 第2章多线程串口编程工具CSerialPort类 2.1CSerialPort类的功能及成员函数介绍 2.2应用CSerialPort类编制基于对话框的应用程序 2.3应用CSerialPort类编制基于单文档的应用程序 2.4对CSerialPort类的改进 2.4.1改进一:ASCII文本和二进制数据发送方式兼容 2.4.2改进二:也许能解决内存泄漏 2.4.3改进三:彻底关闭串口释放串口资源 2.5在Visual C++.NET中应用CSerialPort类 第3章控件MSComm串口编程 3.1MSComm控件详细介绍 3.1.1VC6.0中应用MSComm控件编程步骤 3.1.2MSComm控件串行通信处理方式 3.1.3MSComm控件的属性说明 3.1.4MSComm控件错误信息 3.2使用MSComm控件的几个疑难问题 3.2.1使用、VARIANT和SAFEARRAY数据类型从串口读写数据 3.2.2MSComm控件能离开对话框独立存在吗 3.2.3如何发送接收ASCII值为0和大于的调试调试字符 3.2.4在同一程序中用MSComm控件控制多个串口的具体操作方法 3.2.5解决使用控件编程时程序占用的内存会不断增大的问题 3.2.6在MSComm控件串口编程时遇到的其他问题 3.3在基于单文档(SDI)程序中应用MSComm控件 3.4应用MSComm控件控制多个串口实例 3.5串口与MODEM拨号应用简例 3.5.1创建工程 3.5.2代码分析 3.5.3应用 第4章Windows API串口编程 第5章串口调试助手V2.2详细编程 第6章DOS环境下的Turbo C串口编程及通用实例GSerial类 第7章数据处理方法与串口通信用户层协议的编制 第8章单片机串口通信 第9章串口与网络结合的解决方案及编程 第章计算机串口与其他通信协议设备的联接 第章串口通信基本概念及标准 第章不占用串口的串口数据捕捉 附录A Turbo C说明 附录B ASCII码表扩展资料
《VisualC++/TurboC串口通信编程实践(第2版)》是一本由电子工业出版社于-9-1出版的一本电子书籍,作者是助手助手龚建伟,熊光明。源码源代查看源码 在线从编程实践角度详细介绍了PC计算机Windows环境下、串口串口DOS环境下以及单片机的调试调试串口通信的基本方法,并根据当前串口与网络结合的助手助手发展趋势,给出了串口与TCP/IP网络、源码源代远程监控相结合的串口串口解决方案与详细程序实例。VC++ MSComm控件GetInput()方法的调试调试问题
我调了三天!!助手助手hook connect源码结果发现是源码源代硬件的问题!!串口串口!调试调试USB转串口模块的助手助手原因,换一个就好了!如何编译源码!!!虚拟串口不稳定,原来是ijetty 源码下载用的一个笔记本通过CP模块发出,另一笔记本用PL模块接收,自己写的VS串口接收程序,只能发送,但每次收过来数据都在VS输出框提示错误,但是php rbac 源码用别人的串口调试助手就可以正常接收,一直以为是自己程序的错误。经过大量排查,图书馆找的书也是这么写的程序,确定不是程序问题,换了电脑也不行,尝试调换USB转串口模块就行了!也就是自己用VS写的串口接收程序只能用CP模块接收。
c è·å串å£å· c èªå¨è·å串å£å·
ç¨Cæä¹åè·å串å£çå 容
ç驱å¨ç¨åºçæ¥å£å
ä¸è¬æ¯æ¯open(âå£åâ)
ç¨C/C++åä¸ä¸ªå°ç¨åºè¯»å串å£æ¥æ¶å°çæ°æ®ä½ 太幸è¿äºï¼å好ææä¸ä¸ªï¼ä½ å¨vc++6.0ä¸æµè¯ä¸ä¸ã
/* serrecv.c */
/* Receives and saves a file over a serial port */
/* Last modified: Septemeber , */
/* [goman] */
#include
#include
#include
/* Function to print out usage information */
void usage(void);
/* Function to set up the serial port settings with the specified baud rate,
no parity, and one stop bit */
void set_up_serial_port(HANDLE h, long baud);
/* Function to receive and save file from serial port */
void get_file_from_serial_port(HANDLE h, char *file_name, unsigned long file_length);
int main(int argc, char **argv)
{
HANDLE serial_port; /* Handle to the serial port */
long baud_rate = ; /* Baud rate */
char port_name[] = "COM1:"; /* Name of serial port */
unsigned long file_size; /* Size of file to receive in bytes */
unsigned long bytes_received; /* Bytes received from serial port */
unsigned long file_name_size; /* Size of file name in bytes */
char file_name[]; /* Name of file to receive */
/* Check mand line */
if (argc == 3)
{
/* Read in baud rate */
if (argv[1][1] != 'b' || sscanf(argv[2], "%ld", &baud_rate) != 1)
{
usage;
exit(0);
}
}
else if (argc != 1)
{
usage;
exit(0);
}
/* Open up a handle to the serial port */
serial_port = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
/* Make sure port was opened */
if (serial_port == INVALID_HANDLE_VALUE)
{
fprintf(stderr, "Error opening port\n");
CloseHandle(serial_port);
exit(0);
}
/* Set up the serial port */
set_up_serial_port(serial_port, baud_rate);
/* Receive file name size from serial port */
ReadFile(serial_port, (void *)&file_name_size, sizeof(unsigned long), &bytes_received, NULL);
if (bytes_received != sizeof(unsigned long))
{
fprintf(stderr, "Error getting file name size.\n");
CloseHandle(serial_port);
exit(0);
}
/* Receive file name from serial port */
ReadFile(serial_port, (void *)file_name, file_name_size, &bytes_received, NULL);
if (bytes_received != file_name_size)
{
fprintf(stderr, "Error retrieving file name.\n");
CloseHandle(serial_port);
exit(0);
}
/* Append NULL terminator to end of string */
file_name[bytes_received] = '\0';
/* Receive file size from serial port */
ReadFile(serial_port, (void *)&file_size, sizeof(unsigned long), &bytes_received, NULL);
if (bytes_received != sizeof(unsigned long))
{
fprintf(stderr, "Error getting file size.\n");
CloseHandle(serial_port);
exit(0);
}
/* Get the file from the serial port */
get_file_from_serial_port(serial_port, file_name, file_size);
/* Print out success information */
printf("\n%lu bytes successfully received and saved as %s\n", file_size, file_name);
/* Close handle */
CloseHandle(serial_port);
return 0;
}
void usage(void)
{
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\tserrecv [-b baud rate]\n");
fprintf(stderr, "\tDefault baud rate is \n");
fprintf(stderr, "tSupported baud rates: , , , , , \n");
return;
}
void set_up_serial_port(HANDLE h, long baud)
{
DCB properties; /* Properties of serial port */
/* Get the properties */
GetmState(h, &properties);
/* Set the baud rate */
switch(baud)
{
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
case :
properties.BaudRate = CBR_;
break;
default:
fprintf(stderr, "Invalid baud rate: %ld\n", baud);
usage;
exit(0);
break;
}
/* Set the other properties */
properties.Parity = NOPARITY;
properties.ByteSize = 8;
properties.StopBits = ONESTOPBIT;
SetmState(h, &properties);
return;
}
void get_file_from_serial_port(HANDLE h, char *file_name, unsigned long file_length)
{
FILE *data_file; /* File to create */
unsigned long bytes_left = file_length; /* Bytes left to receive */
unsigned long bytes_received_total = 0; /* Total bytes received */
unsigned long bytes_to_receive; /* Number of bytes to receive */
unsigned long bytes_received; /* Number of bytes receive */
char buffer[]; /* Buffer to store data */
/* Open the file */
data_file = fopen(file_name, "wb");
/* Quit if file couldn't be opened */
if (data_file == NULL)
{
fprintf(stderr, "Could not create file %s\n", file_name);
CloseHandle(h);
exit(0);
}
while (1)
{
/* Determine how many bytes to read */
if (bytes_left == 0)
{
break;
}
else if (bytes_left < )
{
bytes_to_receive = bytes_left;
}
else
{
bytes_to_receive = ;
}
/* Receive data over serial cable */
ReadFile(h, (void *)buffer, bytes_to_receive, &bytes_received, NULL);
if (bytes_received != bytes_to_receive)
{
fprintf(stderr, "Error reading file.\n");
CloseHandle(h);
exit(0);
}
/* Save buffer to file */
fwrite((void *)buffer, 1, bytes_received, data_file);
/* Decrement number of bytes left */
bytes_left -= bytes_received;
/* Increment number of bytes received */
bytes_received_total += bytes_received;
/* Print out progress */
printf("\r%5lu bytes received.", bytes_received_total);
}
fclose(data_file);
return;
}
Cè¯è¨åæå®ç°ä¸²å£æ¶åæ°æ®#include
#include
int main(void)
{
FILE *fp;
char temp;
char buf[];
if((fp = fopen("3","r")) == NULL)
puts("this way doesn't work!\n");
else
puts("this way works!\n");
while(1)
{
temp = 0;
fscanf(fp,"%c",&temp);
if(temp != 0)
putchar(temp);
else
Sleep();
}
fclose(fp);
return 0;
}
以åå¼çï¼å¥½ä¹ 没çäºï¼ä¸ç¥å°å¯¹ä¸å¯¹ã
è¿æä¸é¢è¿æ®µï¼
#include
#include
HANDLE h;
int main(void)
{
h=CreateFile(TEXT("COM3"),//COM1å£
GENERIC_READ|GENERIC_WRITE, //å 许读åå
0, //ç¬æ¹å¼
NULL,
OPEN_EXISTING, //æå¼èä¸æ¯å建
0, //åæ¥æ¹å¼
NULL);
if(h==(HANDLE)-1)
{
printf("æå¼COM失败!\n");
return FALSE;
}
else
{
printf("COMæå¼æåï¼\n");
}
Setupm(h,,); //è¾å ¥ç¼å²åºåè¾åºç¼å²åºå¤§å°é½æ¯
COMMTIMEOUTS TimeOuts;
//è®¾è¯»è¶ æ¶
TimeOuts.ReadIntervalTimeout=;
TimeOuts.ReadTotalTimeoutMultiplier=;
TimeOuts.ReadTotalTimeoutConstant=;
//设å®åè¶ æ¶
TimeOuts.WriteTotalTimeoutMultiplier=;
TimeOuts.WriteTotalTimeoutConstant=;
SetmTimeouts(h,&TimeOuts); //è®¾ç½®è¶ æ¶
DCB dcb;
GetmState(h,&dcb);
dcb.BaudRate=; //æ³¢ç¹ç为
dcb.ByteSize=8; //æ¯ä¸ªåèæ8ä½
dcb.Parity=NOPARITY; //æ å¥å¶æ ¡éªä½
dcb.StopBits=ONE5STOPBITS; //两个åæ¢ä½
SetmState(h,&dcb);
DWORD wCount;//读åçèæ°
BOOL bReadStat;
while(1)
{
Purgem(h,PURGE_TXCLEAR|PURGE_RXCLEAR); //æ¸ ç¼å²åº
char str[9]={ 0};
printf("%s\n",str);
bReadStat=ReadFile(h,str,9,&wCount,NULL);
if(!bReadStat)
{
printf("
æä¹éè¿ä¸²å£è¯»ååçæºæ个å°åçæ°æ®ï¼è¯·ç¨Cè¯è¨ååºæ¥ã*
æ人以鱼,ä¸å¦æ人以æ¸
*
é¦å ï¼ä½ è¦æç¡®å¨Cè¯ä¸è¯»åå ååæ¯åºäºæéã
3.æ¯å¦è¯»åå åå°å0xä¸çæ°æ®
Cè¯è¨ä¸å¯¹äºå åç访æ¯åºäºæï¼è¿ä¸ªæ¯åº¸ç½®çï¼å ·ä½æå¦ä¸
unsigned int *p= ï¼unsigned int*ï¼0x ï¼//å®ä¹éï¼å¹¶ä¸ä½¿æéæåäº0xè¿ä¸ª å åå°åï¼
é£ä¹*på°±æ¯æç»ä½ è¦è¯»åçæ°æ®äºã
4.è³äºå¦ä½éè¿ä¸²å£æ¾ç¤ºå°çµèæå°±ä¸å¤äºï¼è¿ä¸æ¯é¾ç¹ï¼ï¼æ®ä½ é½ç¥éäºï¼åå°ä¸²å£ ç¼å²åºï¼å¨ä¸²å£è°è¯å©æä¸å°±å¯ä»¥çå°ã
5.è½ç¶æ²¡æè´´åºå ·ä½ä»£ç ï¼ä½è¿éé¢çææ³å¯ä»¥è®©ä½ 解å³
æ ç¾ï¼ä½æç»å ¸ ä¸ä¸ç¯ï¼æåæ¯æ¯è«çè¯è¯ æåæ¯æ¯è«è¡å¨çè¯è¯ ä¸ä¸ç¯ï¼æè¯è¯¯ç¨è¤è´¬çä¾å è¤è´¬è¯¯ç¨çæè¯Linuxä¸å¦ä½ä½¿ç¨c/c++å®ç°æ£æµæ°å¢ä¸²å£ï¼å¹¶è¯»å串å£å·
Linuxä¸é¢æ设æ件
串å£è£ 好驱å¨å ä¼æ¾ç¤ºå¨devä¸
ç¶å对è¿ä¸ª
Cè¯è¨ä¸å¦ä½å¯¹ä¸²å£è¿è¡æä½Cè¯è¨ä¼ææä½ä¸²å£çåºå½æ°çï¼æç §ä¸²å£åºæ°æ è¯å®ç°è°
çµèä¸ç串å£å·æ¯ä»ä¹ææ串å£å«å串è¡æ¥å£,ä¹ä¸²è¡éä¿¡æ¥å£,æçµæ°æ åååè®®æ¥åå æ¬RS--CãRS-ãRSãUSBçã RS--CãRS-ä¸RS-æ å对æ¥å£ççµæ°ç¹æ§ååºè§å®,ä¸æ¶åæ¥æ件ãçµç¼æåè®®ãUSBæ¯è¿å å¹´åå±èµ·æ¥çæ°åæ¥å£æ å,主è¦åºç¨äºéæ°æ®ä¼ è¾åã RS--C:ä¹ç§°æ å串å£,æ¯ç®åæ常ç¨çä¸ç§ä¸²è¡é讯æ¥å£ãå®æ¯å¨å¹´ç±ç¾å½çµåå·¥ä¸åä¼(EIA)èåè´å°ç³»ç»ã è°å¶è§£è°å¨å家å计ç®æºç»ç«¯ç产åå ±åå¶å®çç¨äºä¸²è¡é讯çæ åãå®çåæ¯âæ°æ®ç»ç«¯è®¾å¤(DTE)åæ°æ®é讯设å¤(DCE)ä¹é´ è¡äºè¿å¶æ°æ®äº¤æ¢æ¥å£ææ¯æ åâãä¼ ç»çRS--Cæ¥å£æ åææ ¹çº¿,éç¨æ åè¯Dåæ头座ãåæ¥çPCä¸ä½¿ç¨ç®åäºç9è¯Dæ座ãç°å¨åºç¨ä¸è¯æ头已å¾å°éç¨ãç°å¨ççµèè¬æ两个串è¡å£:COM1åCOM2,ä½ å°è®¡ç®æºåé¢è½çå°9éDå½¢æ¥å£å°±æ¯äºãç°å¨æå¾å¤ææ°æ®çº¿æè ç©æµæ¥æ¶å¨é½éç¨COM
å¦ä½ç¨Cè¯è¨åä¸ä¸ªè¯»ãå串å£çç¨åºï¼å¤§è´è¿ç¨å°±æ¯
é 置串å£éä¿¡ï¼å 串å£å·ãæ³¢ç¹ãéªä½ãåæ¢ä½è¿äºä¿¡æ¯ï¼
æå¼ä¸²å£ï¼åæå¼æ件ä¸æ ·ï¼å¨Linuxæ¯è¿æ ·ï¼Windowsä¸æ²¡è¯è¿ï¼ä¼°è®¡ä¹å·®ä¸å¤ï¼
åéæ°æ®ï¼å³å串å£ï¼å°±è·åæ件类似ï¼
读å
ç¼ååçæºä¸²å£æ¶åæ°æ®çå®æ´ç¨åºï¼Cè¯è¨ç¼åï¼æç¨çæ°åè¯çï¼å æ ¸ï¼è·å·®ä¸å¤ï¼æé纳
void UART_Initial (void)
{
P_Quasi_Mode; //Setting UART pin as Quasi mode for tran *** it
P_Quasi_Mode; //Setting UART pin as Quasi mode for tran *** it
SCON_1 = 0x; //UART1 Mode1,REN_1=1,TI_1=1
T3CON = 0x; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
clr_BRCK;
RH3 = HIBYTE( - (/uBaudrate)-1); /* MHz */
RL3 = LOBYTE( - (/uBaudrate)-1); /* MHz */
set_TR3; //Trigger Timer3
}
以ä¸æ¯åå§åç
void Send_Data_To_UART1(UINT8 c)
{
TI_1 = 0;
SBUF_1 = c;
while(TI_1==0);
}
è¿ä¸ªæ¯åé
void UART_isr (void) interrupt 4 //
ææ ·å¨WINDOWSä¸ç¨Cè¯è¨ç¼å串å£æ¥æ¶æ°æ®ç¨åº#include
#include
int main(void)
{
FILE *fp;
char temp;
char buf[];
if((fp = fopen("3","r")) == NULL)
puts("this way doesn't work!\n");
else
puts("this way works!\n");
while(1)
{
temp = 0;
fscanf(fp,"%c",&temp);
if(temp != 0)
putchar(temp);
else
Sleep();
}
fclose(fp);
return 0;
}
以åçï¼å¥½ä¹ çï¼ä¸ç¥å°å¯¹ä¸å¯¹ã
è¿ä¸é¢è¿æ®µï¼
1
2
3
4
5
6
7
8
9
#include
#include
HANDLE h;
int main(void)
{
h=CreateFile(TEXT("COM3"),//COM1å£
GENERIC_READ|GENERIC_WRITE, //å 许读åå
0, //ç¬å æ¹å¼
NULL,
OPEN_EXISTING, //æå¼èä¸æ¯å»º
0, //åæ¥å¼
NULL);
if(h==(HANDLE)-1)
{
printf("æå¼COM失败!\n");
return FALSE;
}
else
{
printf("COMæå¼æåï¼\n");
}
Setupm(h,,); //è¾å ¥ç¼å²åºåè¾åºç¼å²åºç大å°é½æ¯
COMMTIMEOUTS TimeOuts;
//å®è¯»è¶ æ¶
TimeOuts.ReadIntervalTimeout=;
TimeOuts.ReadTotalTimeoutMultiplier=;
TimeOuts.ReadTotalTimeoutConstant=;
//设å®åè¶ æ¶
TimeOuts.WriteTotalTimeoutMultiplier=;
TimeOuts.WriteTotalTimeoutConstant=;
SetmTimeouts(h,&TimeOuts); //è®¾ç½®è¶ æ¶
DCB dcb;
GetmState(h,&dcb);
dcb.BaudRate=; //æ³¢ç¹ç为
dcb.ByteSize=8; //æ¯ä¸ªåèæ8ä½
dcb.Parity=NOPARITY; //æ å¥å¶æ ¡éªä½
dcb.StopBits=ONE5STOPBITS; //两个åæ¢ä½
SetmState(h,&dcb);
DWORD wCount;//读åçåè
BOOL bReadStat;
while(1)
{
Purgem(h,PURGE_TXCLEAR|PURGE_RXCLEAR); //æ¸ ç©ºç¼å²åº
char str[9]={ 0};
printf("%s\n",str);
bReadStat=ReadFile(h,str,9,&wCount,NULL);
if(!bReadStat)
{
printf("读串å£
æ ç¾ï¼ä½æç»å ¸ ä¸ä¸ç¯ï¼æåæ¯æ¯è«çè¯è¯ æåæ¯æ¯è«è¡å¨çè¯è¯ ä¸ä¸ç¯ï¼æè¯è¯¯ç¨è¤è´¬çä¾å è¤è´¬è¯¯ç¨çæè¯Visual C++/Turbo C串口通信编程实践目录
轻松体验串口通信编程与调试
使用串口调试助手来体验串口通信
体验Windows环境下的Visual C++串口通信编程
体验DOS环境下Turbo C串口通信编程
多线程串口编程工具CSerialPort类功能及成员函数介绍
应用CSerialPort类编制基于对话框的应用程序
应用CSerialPort类编制基于单文档的应用程序
对CSerialPort类的改进
改进一:ASCII文本和二进制数据发送方式兼容
改进二:也许能解决内存泄漏
改进三:彻底关闭串口,释放串口资源
MSComm控件介绍
VC中应用MSComm控件编程步骤
MSComm控件串行通信处理方式
MSComm 控件的属性说明
MSComm控件错误信息
使用MSComm控件的几个疑难问题
使用VARIANT 和SAFEARRAY 数据类型从串口读写数据
MSComm控件能离开对话框独立存在吗
如何发送接收ASCII值为0和大于的字符
在同一程序中用MSComm控件控制多个串口的具体操作方法
解决使用控件编程时程序占用的内存会不断增大的问题
MSComm控件串口编程时遇到的其他问题
在基于单文档(SDI)程序中应用MSComm控件
应用MSComm控件控制多个串口实例
串口与MODEM拨号应用简例
创建工程
代码分析
应用
Windows API串口编程概述
API串口编程中用到的结构及相关概念说明
DCB(Device Control Block)结构
超时设置COMMTIMEOUTS结构
OVERLAPPED异步I/O重叠结构
通信错误与通信设备状态
串行通信事件
Windows API串行通信函数
Win API串口通信编程的一般流程和特殊实例
Win API串口通信编程的一般流程
用查询方式读串口
同步I/O读写数据
关于流控制的设置问题
CSerialPort类中的API函数编程应用剖析
Win API串口编程TTY(虚拟终端)实例
建立程序工程
建立串口设置对话框
编写CTermDoc类的相关代码
小结
在CTermView类中字添加符键入处理代码与串口接收处理代码
建立SCOMM程序工程实现界面功能
串口的初始化及关闭
串口数据的发送与接收及十六进制数据的处理
十六进数据发送处理
手动发送处理
自动发送处理
接收处理及十六进制显示
其他辅助功能的实现
接收数据的文件保存
实现小文件发送
图钉按钮功能使程序能浮在最上层
对话框动画图标的实现
超链接功能的实现
如何打开帮助网页文件
PC机异步通信适配器及其编程操作
INS内部寄存器及其选择方式
波特率设置
数据位、奇偶校验、停止位等数据格式设置
查询I/O方式相关设置
中断I/O通信方式相关设置
MODEM寄存器
COMRXTX程序实例
通用实例程序GSerial类
用GSerial类控制多串口
多串口编程PC机高号中断A可编程中断控制器的控制
通信协议的编制
为什么要编制用户通信协议
串口通信中用户层协议编制原则
在串口通信中几种常用的用户层协议
串口通信数据包处理方法编程实例
编程任务
编程步骤
程序测试
单片机串口硬件系统及C程序开发
较典型的单片机硬件系统实例
C语言及程序简介
开发C程序的利器Keil C uVision2及串口程序仿真
C单片机串口通信程序实例
实例一
实例二
串口与网络结合的解决方案及编程
串口与网络结合的硬件解决方案
典型串口与联网的设备
NPort系列产品的特点
NPort 系列产品的典型应用介绍
NPort系列产品的设置与编程测试
与Access数据库结合的串口通信实例
微机网络检测系统说明
创建ODBC数据源
创建工程
程序简介
与WinSock结合的串口通信实例
客户端应用程序
服务器应用程序
在已经编好的串口通信程序中加入网络通信功能
参照MFC AppWizard创建WinSockets程序
利用Windows Sockets API和第三方提供的类进行编程
串口通信用于遥控操作简例
通过串口收发短消息
SMS编码规范及编码与解码例程
AT命令收发短消息实例
“实时”接收短消息的方法
用串口收发SMS短信编程的一些讨论
计算机与Rabbit 嵌入式系统通信编程实例
Rabbit 微处理器介绍
动态C(Dynamic C)语言介绍
某车载无线调度系统实例介绍
计算机与PLC通信程序实例
MATLAB环境串口编程通信实例
MATLAB串口类Serial应用
通过串口使MATLAB Simulink与下位机通讯进行控制
xPC目标环境下串口通信实现
计算机串口与其他设备通信编程实例
通过串口收发短消息
SMS编码规范及编码与解码例程
AT命令收发短消息实例
“实时”接收短消息的方法
串口通信基本概念及标准
串口通信基本概念
单工、半双工和全双工的定义
同步传送与异步传送
串行通信协议
RS--C串口标准
RS--C标准
RS--C串行通信接线实例
RS-/串口标准
概述
RS-与RS-串行接口标准
RS-与RS-的网络安装注意要点
RS-、RS、RS电气参数对比
串口调试注意事项
常用数据校验法
奇偶校验
循环冗余码校验
串口连接和TCP/IP连接对比
现场总线与RS-、RS-的本质区别
MODEM通信技术
MODEM的基本工作原理
MODEM的功能
MODEM的分类
MODEM的安装
MODEM V.标准介绍
MODEM的速度
MODEM优化方法
MODEM命令/AT命令
不占用串口的串口数据捕捉
驱动程序的基本概念:VxD与WDM
虚拟设备驱动程序VxD
Win驱动程序模型WDM
在不同操作系统下选用哪种驱动程序模式
VxD示例程序介绍——VToolsD中的CommHook
串口数据捕捉实例程序
编程任务
编程步骤
虚拟串口简介
Turbo C说明
ASCII码表