用C语言编程操作计算机串口的问题
2014-04-06 11:51
197 查看
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #include <winnt.h> #define BAUD_RATE 9600 #define COM1_BASE ??? /* com1基地址 */ #define p printf int main() { /* 打开串口 */ Handle hCom; // int pos; unsigned char buff[128]; //要传输串口数据到缓冲区 /* 把串口作为文件打开 */ hCom=CreateFile("COM1", //打开串口1 GENERIC_READ|GENERIC_WRITE, //允许读写 0, //通讯设备必须以独占方式打开 NULL, //安全属性 OPEN_EXISTING, //通讯设备已存在 FILE_FLAG_OVERLAPPED, //异步I/O 0, //通讯设备不能用模板打开 NULL); if(hCom==(HANDLE)-1) //打开串口失败返回 { p("打开串口失败"); return 0; } /* 串口超时结构体设置 */ typedef COMMTIMEOUTS TimeOuts { TimeOuts.ReadIntervalTimeout=1000; //接收时两字符之间的最大时延 TimeOuts.ReadTotalTimeoutMultiplier=500; //指定以毫秒为单位的累积值,用于计算读操作时的超时总数 TimeOuts.ReadTotalTimeoutConstant=5000; //指定以毫秒为单位的常数,用于计算读操作时的超时总数 TimeOuts.WriteTotalTimeoutMultiplier=500; //计算写操作时的超时总数 TimeOuts.WriteTotalTimeoutConstant=2000 //计算写操作时的超时总数 }; if(!SetCommTimeouts(hCom,&TimeOuts)) //与串口绑定失败返回 { p("与串口绑定失败") return 0; } /* 设置串口各项参数 */ DCB dcb; { if(!GetCommState(hCom,&dcb)) p("获取串口属性失败"); return 0; } dcb.BaudRate=BAUD_RATE; //波特率为9600 dcb.ByteSize=8; //设置数据位 dcb.Parity=EVENPARITY; //偶校验 dcb.StopBits=2; //两个停止位 dcb.fBinary=TRUE; dcb.fParity=TRUE; if(!SetCommState(hCom,&dcb)) //DCB绑定失败返回 { p("串口设置出错!"); return 0; } if(!SetupComm(hCom,1024,1024)) //设置串口的输入/输出缓冲区大小 { p("设置串口读写缓冲区失败"); return 0; } PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); //终止所有的后台读写操作并清空缓冲区 /* 发送数据操作 */ if(WriteFile(hCom, //文件句柄 outputData, //数据缓冲区指针 sizeBuffer, //字节数 &length, //接收成功发送数据长度的指针 NULL)==0) //重叠I/O结构体 { p("写入串口数据失败"); return FALSE; } /* 接收数据 */ if(ReadFile(hCom, //文件句柄 inputData, //数据缓冲区指针 sizeBuffer, //字节数 &length, //指向已经读入的字节数 NULL)==0) //重叠I/O结构体 { p("读取串口数据失败"); return FALSE; } /* 关闭串口 */ bool CloseHandle ( hCom ); //关闭设备句柄
相关文章推荐
- iOS中——iOS网络通信中的同步请求和异步请求
- NetHogs——Linux下按进程实时统计网络带宽利用率
- Linux学习笔记:sudo、tcp_wrapper、pam
- HTTP协议摘要
- [转] AFNetworking、MKNetworkKit和ASIHTTPRequest对比
- 微软网络公开课 《揭秘云计算与移动互联网时代下的Web API》4月6号晚9点!
- 微软COM技术大会网络公开课 《揭秘云计算与移动互联网时代下的Web API》4月6号晚9点!
- RedHat 学习笔记 基于ssl的httpd服务配置 (openssl创建CA)
- 关于各种流量控制
- (转)Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
- 从杂乱到有序并不简单--排序算法 http://blog.csdn.net/yixueming/article/details/22901349
- TCP_WARPPER的简单使用
- 单链表的操作
- 计算机基础_01
- 网络规划与设计
- linux CentOS 6.4 NFS网络文件系统
- 计算机中浮点数的存储方式 —— IEEE 754-1985 标准
- HttpClient Get和post基本操作
- 75个最佳网络安全工具
- HttpClient获取重定向地址的代码