


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、自己动手编写串口动态库(超详细) 自己动手编写串口动态库 手把手教你编写串口调试助手,单片机串口程序 一、串口库源码: 自行在vc6中建立动态库工程 #include #include #include #include #include #include /*导出函数*/ /函数参数:串口名:波特率:9600 用于显示接收数据的文本框的句柄 extern _declspec(dllexport) void entry(char *comname, int baudrate, hwnd rhbox); extern _declspec(dllexport) bool openport(char
2、 *portname); extern _declspec(dllexport) bool setupdcb(int rate_arg); extern _declspec(dllexport) void settimeout(int a, int b, int c, int d, int e); /发送字符或16进制数 extern _declspec(dllexport) void sendchar(unsigned char ch); /显示方式:1:hex 0:char extern _declspec(dllexport) void displayhex(int flag); ext
3、ern _declspec(dllexport) void close(); /只使用上面有注释的三个函数即可 handle hcomm;/串口的句柄 overlapped m_ov;/是一个包含了用于异步输入输出的信息的结构体 comstat comstat;/包含串口结构信息 handle hthread1; /读线程句柄 handle hthread2; /写线程句柄 hwnd hrbox; bool sendflag = false; unsigned char sendchar, receivechar; bool displayhex = false; processerrorme
4、ssage(char* errortext)/打印进程错误信息 /*打开串口*/ bool openport(char *portname) char *temp = new char200; lpvoid lpmsgbuf; formatmessage( format_message_allocate_buffer | format_message_from_system, null, getlasterror(), makelangid(lang_neutral, sublang_default), / default language (lptstr) sprintf(temp, , m
5、essagebox(null, temp, , mb_iconstop); localfree(lpmsgbuf); delete temp; return true; (char*)errortext, lpmsgbuf, ); hcomm = createfile(portname, generic_read | generic_write, 0, 0, open_existing, file_flag_overlapped, 0); return false; return true; if (hcomm = invalid_handle_value) else /*设备控制块的设置*/
6、 /参数 波特率rate_arg: 9600 bool setupdcb(int rate_arg) dcb dcb; int rate = rate_arg; memset( /申请一个dcb结构体空间 if (!getcommstate(hcomm, /* -串口的配置 - */ dcb.baudrate = rate; dcb.parity = noparity; dcb.fparity = 0; dcb.stopbits = onestopbit; dcb.bytesize = 8; dcb.foutxctsflow = 0; dcb.foutxdsrflow = 0; dcb.fdt
7、rcontrol = dtr_control_disable; dcb.fdsrsensitivity = 0; dcb.frtscontrol = rts_control_disable; dcb.foutx = 0; dcb.finx = 0; /* -其他参数的设置 - */ dcb.ferrorchar = 0; dcb.fbinary = 1; dcb.fnull = 0; processerrormessage();/打印错误信息 return false; dcb.fabortonerror = 0; dcb.wreserved = 0; dcb.xonlim = 2; dcb.
8、xofflim = 4; dcb.xonchar = 0x13; dcb.xoffchar = 0x19; dcb.evtchar = 0; /* - */ / 用上面的设备控制块来设置当前串口 if (!setcommstate(hcomm, /设置成功 processerrormessage(); return false; /*超时的设置*/ bool setuptimeout(int readinterval, int readtotalmultiplier, int readtotalconstant, int writetotalmultiplier, int writetotal
9、constant) void receivechar() bool bread = true; bool bresult = true; dword dwerror = 0; dword bytesread = 0; char rxbuff;/接收数据缓冲器 char str10; commtimeouts timeouts; timeouts.readintervaltimeout = readinterval; / 读间隔超时 timeouts.readtotaltimeoutconstant = readtotalconstant;/ 读时间常量 timeouts.readtotalti
10、meoutmultiplier = readtotalmultiplier;/ 读时间系数 timeouts.writetotaltimeoutconstant = writetotalconstant;/ 写时间常量 timeouts.writetotaltimeoutmultiplier = writetotalmultiplier;/ 写时间系数 if (!setcommtimeouts(hcomm, processerrormessage(); return false; /设置当前串口的超时设置 for (;)/死循环等待 sleep(100); bresult = clearcommerror(hcomm, /清除硬件的通讯错误以及if (comstat.cbinque = 0) bresult = readfile(hcomm, / handle to comm port else / printf(打印接收到的数据 sprintf(str, , rxbuff); setwindowtext(hrbox, str); if (bread) 获取通讯设备的当前状态 / pointer to the m_ov structure if (displayhex) / printf(打印接收到的数据 sprintf(st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 经皮肺穿刺患者介入术后护理
- 高血压年轻化护理
- 海运公司年终总结
- 《给矛树》课件教学课件
- 电动机的结构讲解
- 公司法学课件
- 项目财务尽调工作总结
- 政教处月度工作总结
- 2025标准苗木购销合同范本
- 公司招投标业务安全培训课件
- 《儿童铁缺乏和缺铁性贫血防治专家共识2023》解读
- 中国子宫内膜增生管理指南(2022)解读
- 2007-2000央美考研题库
- TB 10012-2019 铁路工程地质勘察规范
- 弱电维护方案
- 国开2023春《言语交际》形考任务1-6参考答案
- 抽油机井示功图分析判断1
- 机电一体化说专业比赛
- GB/T 39141.3-2022无机和蓝宝石手表玻璃第3部分:定性标准和试验方法
- GB/T 1142-2004套式扩孔钻
- 2022年天津市河东区生态环境系统事业单位招聘笔试试题及答案
评论
0/150
提交评论